#include "include.h"
char *const distance[4] =
{
"right here.", "nearby to the %s.", "not far %s.", "off in the distance %s."
};
void scan_list args((ROOM_INDEX_DATA *scan_room, CHAR_DATA *ch, sh_int depth, sh_int door));
void scan_char args((CHAR_DATA *victim, CHAR_DATA *ch, sh_int depth, sh_int door));
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)
{
if(can_see(ch,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[MSL];
int dir;
int distance;
if(ch->fighting != NULL)
return;
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++)
{
room = ch->in_room;
for(distance = 1; distance < 4; distance++)
{
pexit = room->exit[dir];
if((pexit == NULL) || (pexit->u1.to_room == NULL) || (IS_SET(pexit->exit_info, EX_CLOSED)))
break;
sprintf(buf,"%d %s from here you see:\n\r",distance,dir_name[dir]);
if(scan_room(ch,pexit->u1.to_room,buf))
send_to_char(buf,ch);
room = pexit->u1.to_room;
}
}
}
void scan_list(ROOM_INDEX_DATA *scan_room, CHAR_DATA *ch, sh_int depth, sh_int door)
{
CHAR_DATA *rch;
if(scan_room == NULL)
return;
for(rch = scan_room->people; rch != NULL; rch = rch->next_in_room)
{
if(rch == ch) continue;
if(!IS_NPC(rch) && rch->invis_level > get_trust(ch)) continue;
if(can_see(ch,rch)) scan_char(rch,ch,depth,door);
}
return;
}
void scan_char(CHAR_DATA *victim, CHAR_DATA *ch, sh_int depth, sh_int door)
{
extern char *const dir_name[];
extern char *const distance[];
char buf[MIL], buf2[MIL];
buf[0] = '\0';
strcat(buf, PERS(victim,ch));
strcat(buf, ", ");
sprintf(buf2, distance[depth], dir_name[door]);
strcat(buf, buf2);
strcat(buf, "\n\r");
send_to_char(buf,ch);
return;
}