Login
User Name:

Password:



Register

Forgot your password?
Bug in will_fall( )
Oct 12, 2019 4:46 pm
By Matteo2303
Dusting off the old code...
Jul 15, 2019 10:53 pm
By InfiniteAxis
Forum Search/User Post History
May 13, 2019 12:43 pm
By Keirath
AFKMud 2.2.2
Mar 3, 2019 5:35 pm
By Samson
Development
Nov 28, 2018 12:10 pm
By Keirath
SmaugFUSS 1.9.3
Author: Various
Submitted by: Samson
AFKMud 2.2.2
Author: AFKMud Team
Submitted by: Samson
tintin++ ogg sound player script for linux
Author: Robert Smith
Submitted by: Vladaar
6Dragons ogg Soundpack
Author: Vladaar
Submitted by: Vladaar
6Dragons 4.4
Author: Vladaar
Submitted by: Vladaar
Users Online
CommonCrawl

Members: 0
Guests: 0
Stats
Files
Topics
Posts
Members
Newest Member
482
3,748
19,411
588
Stainless

Today's Birthdays
There are no member birthdays today.
» SmaugMuds » Bugfix Lists » SWFOTE FUSS Bugfix List » [Bug] Auto-Exits don't check ...
Forum Rules | Mark all | Recent Posts

[Bug] Auto-Exits don't check position before moving character.
< Newer Topic :: Older Topic >

Pages:<< prev 1 next >>
Post is unread #1 Aug 14, 2010 12:38 pm   
Go to the top of the page
Go to the bottom of the page

InfiniteAxis
Off the Edge of the Map
GroupAdministrators
Posts1,197
JoinedMar 21, 2006

 
Bug: Auto-Exits don't check position before moving character.
Danger: Medium - Players can move through auto-exits regardless of their position
Found by: Banner
Fixed by: Sharmair/Kayle

---

Interp.c, interpret
Find:
      {
         EXIT_DATA *pexit;

         /*
          * check for an auto-matic exit command 
          */
         if( ( pexit = find_door( ch, command, TRUE ) ) != NULL && IS_SET( pexit->exit_info, EX_xAUTO ) )
         {
            if( IS_SET( pexit->exit_info, EX_CLOSED )
                && ( !IS_AFFECTED( ch, AFF_PASS_DOOR ) || IS_SET( pexit->exit_info, EX_NOPASSDOOR ) ) )
            {
               if( !IS_SET( pexit->exit_info, EX_SECRET ) )
                  act( AT_PLAIN, "The $d is closed.", ch, NULL, pexit->keyword, TO_CHAR );
               else
                  send_to_char( "You cannot do that here.\r\n", ch );
               return;
            }
            move_char( ch, pexit, 0 );
            return;
         }
         if( rprog_custom_trigger( command, argument, ch ) )
            return;
         if( mprog_custom_trigger( command, argument, ch ) )
            return;
         if( oprog_custom_trigger( command, argument, ch ) )
            return;
         send_to_char( "Huh?\r\n", ch );
      }


Change to:
{
         EXIT_DATA *pexit;

         /*
          * check for an auto-matic exit command 
          */
         if( ( pexit = find_door( ch, command, TRUE ) ) != NULL && IS_SET( pexit->exit_info, EX_xAUTO ) )
         {
            if( IS_SET( pexit->exit_info, EX_CLOSED )
                && ( !IS_AFFECTED( ch, AFF_PASS_DOOR ) || IS_SET( pexit->exit_info, EX_NOPASSDOOR ) ) )
            {
               if( !IS_SET( pexit->exit_info, EX_SECRET ) )
                  act( AT_PLAIN, "The $d is closed.", ch, NULL, pexit->keyword, TO_CHAR );
               else
                  send_to_char( "You cannot do that here.\r\n", ch );
               return;
            }
            if( check_pos( ch, POS_STANDING ) )
               move_char( ch, pexit, 0 );
            return;
         }
         if( rprog_custom_trigger( command, argument, ch ) )
            return;
         if( mprog_custom_trigger( command, argument, ch ) )
            return;
         if( oprog_custom_trigger( command, argument, ch ) )
            return;
         send_to_char( "Huh?\r\n", ch );
      }


Auto-Exits were not taking position into account before moving characters, so they could get around while asleep using autoexits if they wanted.

Pages:<< prev 1 next >>