#include "h/mud.h" /* Run command taken from DOTD codebase - Samson 2-25-99 */ /* Added argument to let players specify how far to run. * Fixed an infinite loop bug where somehow a closed door would cause problems. * Added Overland support to the command. Samson 4-4-01 */ /* Supressed display of rooms/terrain until you stop to prevent buffer overflows - Samson 4-16-01 */ void do_run(CHAR_DATA *ch, char *argument) { char arg[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *from_room; EXIT_DATA *pexit; int amount = 0, x; bool limited = FALSE; argument = one_argument(argument, arg); if(IS_NPC(ch)) return; if(arg[0] == '\0') { send_to_char("Syntax Run <dir> <number>\r\n", ch); return; } if(ch->position != POS_STANDING && ch->position != POS_MOUNTED) { send_to_char("You are not in the correct position for that.\r\n", ch); return; } if(argument) { if(is_number(argument)) { limited = TRUE; amount = atoi(argument); } } from_room = ch->in_room; if(!amount) { limited = TRUE; amount = 50; } if(limited) { for(x = 1; x <= amount; x++) { if((pexit = find_door(ch, arg, TRUE)) != NULL) { if(ch->move < 1) { send_to_char("You are too exhausted to run anymore.\r\n", ch); ch->move = 0; break; } if(move_char(ch, pexit, 0, TRUE) == rSTOP) break; if(ch->position != POS_STANDING && ch->position != POS_MOUNTED) { send_to_char("Your run has been interrupted!\r\n", ch); break; } } } } else { while((pexit = find_door(ch, arg, TRUE)) != NULL) { if(ch->move < 1) { send_to_char("You are too exhausted to run anymore.\r\n", ch); ch->move = 0; break; } if(move_char(ch, pexit, 0, TRUE) == rSTOP) break; if(ch->position != POS_STANDING && ch->position != POS_MOUNTED) { send_to_char("Your run has been interrupted!\r\n", ch); break; } } } { if(ch->in_room == from_room) { send_to_char("You try to run but don't get anywhere.\r\n", ch); act(AT_ACTION, "$n tries to run but doesn't get anywhere.", ch, NULL, NULL, TO_ROOM); return; } } if(xIS_SET(ch->act, PLR_ENHANCED)) send_to_char("!!SOUND(sound/run.wav)\r\n", ch); send_to_char("You slow down after your run.\r\n", ch); act(AT_ACTION, "$n slows down after $s run.", ch, NULL, NULL, TO_ROOM); return; }