/
mudtem/
mudtem/area/scripts/
mudtem/bin/
mudtem/log/
mudtem/player/
mudtem/slang/autoconf/
mudtem/slang/doc/
mudtem/slang/doc/OLD/help/
mudtem/slang/doc/internal/
mudtem/slang/doc/text/
mudtem/slang/doc/tm/tools/
mudtem/slang/examples/
mudtem/slang/modules/
mudtem/slang/slsh/
mudtem/slang/slsh/lib/
mudtem/slang/slsh/scripts/
mudtem/slang/src/mkfiles/
mudtem/slang/src/util/
mudtem/src/CVS/
mudtem/src/include/
mudtem/src/include/CVS/
mudtem/src/var/CVS/
/***************************************************************************
*	ROM 2.4 is copyright 1993-1996 Russ Taylor			   *
*	ROM has been brought to you by the ROM consortium		   *
*	    Russ Taylor (rtaylor@efn.org)				   *
*	    Gabrielle Taylor						   *
*	    Brian Moore (zump@rom.org)					   *
*	By using this code, you have agreed to follow the terms of the	   *
*	ROM license, in the file Rom24/doc/rom.license			   *
***************************************************************************/

#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "lookup.h"

char *const distance[4] =
{
   "justo aqui.", "cerca hacia %s.", "no muy lejos hacia %s.", "lejos a la distancia hacia %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)
{
	char arg1[MAX_INPUT_LENGTH], buf[MAX_INPUT_LENGTH];
	ROOM_INDEX_DATA *scan_room;
	EXIT_DATA *pExit;
	sh_int door, depth;

	if (IS_AFFECTED(ch,AFF_BLIND))
	{
		send_to_char("Maybe it would help if you could see?\n\r",ch);
		return;
	}

	argument = one_argument (argument, arg1);

	if (arg1[0] == '\0')
	{
		act ("$n mira alrededor.", ch, NULL, NULL, TO_ROOM);
		send_to_char ("Mirando alrededor ves:\n\r", ch);
		scan_list (ch->in_room, ch, 0, -1);

		for (door = 0; door < MAX_DIR; door++)
		{
			if ((pExit = exit_lookup(ch->in_room, door)) != NULL)
			{
				if (IS_CLOSED (pExit))
					act ("Hay una puerta cerrada hacia $T.", ch, NULL, strToEnt(dir_nombre[door],ch->in_room), TO_CHAR);
				else
					scan_list (pExit->u1.to_room, ch, 2, door);
			}
		}
		return;
	}
	else
		door = find_exit (ch, arg1);

	if (door == -1)
	{
		send_to_char ("Hacia que direccion quieres buscar?\n\r", ch);
		return;
	}

	act ("Buscas algo hacia $T.", ch, NULL, strToEnt(dir_nombre[door],ch->in_room), TO_CHAR);
	act ("$n busca algo hacia $T.", ch, NULL, strToEnt(dir_nombre[door],ch->in_room), TO_ROOM);
	sprintf (buf, "Mirando hacia %s ves:\n\r", dir_nombre[door]);

	scan_room = ch->in_room;

	for (depth = 1; depth < 4; depth++)
	{
		if ((pExit = exit_lookup(scan_room, door)) != NULL)
		{
			if (IS_CLOSED (pExit))
			{
				act ("Hay una puerta cerrada hacia $T.", ch, NULL, strToEnt(dir_nombre[door],ch->in_room), TO_CHAR);
				break;
			}
			scan_room = pExit->u1.to_room;
			if ( !scan_room || !can_see_room( ch, scan_room ) || room_is_dark(scan_room) )
				break;
			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)
{
	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)
{
	char buf[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH];

	buf[0] = '\0';

	strcat (buf, PERS (victim, ch));
	strcat (buf, ", ");
	sprintf (buf2, distance[depth], dir_nombre[door]);
	strcat (buf, buf2);
	strcat (buf, "\n\r");

	send_to_char (buf, ch);
	return;
}