/* =========================================================================== This snippet was written by Erwin S. Andreasen, erwin@pip.dknet.dk. You may use this code freely, as long as you retain my name in all of the files. You also have to mail me telling that you are using it. I am giving this, hopefully useful, piece of source code to you for free, and all I require from you is some feedback. Please mail me if you find any bugs or have any new ideas or just comments. All my snippets are publically available at: http://pip.dknet.dk/~pip1773/ If you do not have WWW access, try ftp'ing to pip.dknet.dk and examine the /pub/pip1773 directory. =========================================================================== Note that function prototypes are not included in this code - remember to add them to merc.h yourself. The classic SCAN command, shows the mobs surrounding the character. Last update: Sep 18, 1995 Should work on : MERC2.2 ROM2.3 Fixed since last update: ch/target were reversed in the call to can_see Know bugs and limitations yet to be fixed: Blind character should get another message Dark rooms can be scanned into? Comments: For ROM2.3, replace to_room with u1.to_room It's primitive, but also some of my first work! :) */ /* * returns everything the character can see at that location in buf * returns number of creatures seen */ int scan_room (CHAR_DATA *ch, const ROOM_INDEX_DATA *room,char *buf) { CHAR_DATA *target = room->people; int number_found = 0; while (target != NULL) /* repeat as long more peple in the room */ { if (can_see(ch,target)) /* show only if the character can see the target */ { strcat (buf, " - "); strcat (buf, IS_NPC(target) ? target->short_descr : target->name); strcat (buf, "\n\r"); number_found++; } target = target->next_in_room; } return number_found; } void do_scan (CHAR_DATA *ch, char *argument) { EXIT_DATA * pexit; ROOM_INDEX_DATA * room; extern char * const dir_name[]; char buf[MAX_STRING_LENGTH]; int dir; int distance; sprintf (buf, "Right here you see:\n\r"); if (scan_room(ch,ch->in_room,buf) == 0) strcat (buf, "Noone\n\r"); send_to_char (buf,ch); for (dir = 0; dir < 6; dir++) /* look in every direction */ { room = ch->in_room; /* starting point */ for (distance = 1 ; distance < 4; distance++) { pexit = room->exit[dir]; /* find the door to the next room */ if ((pexit == NULL) || (pexit->to_room == NULL) || (IS_SET(pexit->exit_info, EX_CLOSED))) break; /* exit not there OR points to nothing OR is closed */ /* char can see the room */ sprintf (buf, "%d %s from here you see:\n\r", distance, dir_name[dir]); if (scan_room(ch,pexit->to_room,buf)) /* if there is something there */ send_to_char (buf,ch); room = pexit->to_room; /* go to the next room */ } /* for distance */ } /* for dir */ }