exodus2/
exodus2/area/mobscr/
exodus2/area/mobvoc/
exodus2/bin/
exodus2/clans/
exodus2/gods/
exodus2/player/A/
exodus2/player/B/
exodus2/player/D/
exodus2/player/E/
exodus2/player/L/
exodus2/player/M/
exodus2/player/O/
exodus2/player/R/
exodus2/src/obj/clans/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#include "merc.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));
void do_scan (CHAR_DATA * ch, char *argument)
{
  extern char *const dir_name[];
  char arg1[MAX_INPUT_LENGTH], buf[MAX_INPUT_LENGTH];
  ROOM_INDEX_DATA *scan_room;
  EXIT_DATA *pExit;
  sh_int door, depth;
  argument = one_argument (argument, arg1);
  if (arg1[0] == '\0')
    {
      act ("$n looks all around.", ch, NULL, NULL, TO_ROOM);
      send_to_char ("Looking around you see:\n\r", ch);
      scan_list (ch->in_room, ch, 0, -1);
      for (door = 0; door < 6; door++)
	{
	  if ((pExit = ch->in_room->exit[door]) != NULL)
	    scan_list (pExit->u1.to_room, ch, 1, door);
	}
      return;
    }

  else if (!str_cmp (arg1, "n") || !str_cmp (arg1, "north"))
    door = 0;

  else if (!str_cmp (arg1, "e") || !str_cmp (arg1, "east"))
    door = 1;

  else if (!str_cmp (arg1, "s") || !str_cmp (arg1, "south"))
    door = 2;

  else if (!str_cmp (arg1, "w") || !str_cmp (arg1, "west"))
    door = 3;

  else if (!str_cmp (arg1, "u") || !str_cmp (arg1, "up"))
    door = 4;

  else if (!str_cmp (arg1, "d") || !str_cmp (arg1, "down"))
    door = 5;

  else
    {
      send_to_char ("Which way do you want to scan?\n\r", ch);
      return;
    }
  act ("You peer intently $T.", ch, NULL, dir_name[door], TO_CHAR);
  act ("$n peers intently $T.", ch, NULL, dir_name[door], TO_ROOM);
  sprintf (buf, "Looking %s you see:\n\r", dir_name[door]);
  scan_room = ch->in_room;
  for (depth = 1; depth < 4; depth++)
    {
      if ((pExit = scan_room->exit[door]) != NULL)
	{
	  scan_room = pExit->u1.to_room;
	  scan_list (pExit->u1.to_room, ch, depth, door);
	}
    }
  return;
}

void
scan_list (ROOM_INDEX_DATA * scan_room, CHAR_DATA * ch, sh_int depth,
	   sh_int door)
{
  extern char *const dir_name[];
  extern char *const distance[];
  CHAR_DATA *rch;
  char buf[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH];;
  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_hack (ch, rch))
	scan_char (rch, ch, depth, door);
    }
  if (detect_room_trap(ch,scan_room))
  {
	  sprintf(buf,"`bA trap ");
	  sprintf(buf2,distance[depth],dir_name[door]);
	  strcat(buf,buf2);
	  strcat(buf,"``\n\r");
  	  send_to_char(buf,ch);
  }
  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[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH];
  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;
}