1stMUD/corefiles/
1stMUD/gods/
1stMUD/notes/
1stMUD/player/
1stMUD/win32/
1stMUD/win32/ROM/
/**************************************************************************
*  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
*  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
*                                                                         *
*  Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael         *
*  Chastain, Michael Quan, and Mitchell Tse.                              *
*                                                                         *
*  In order to use any part of this Merc Diku Mud, you must comply with   *
*  both the original Diku license in 'license.doc' as well the Merc       *
*  license in 'license.txt'.  In particular, you may not remove either of *
*  these copyright notices.                                               *
*                                                                         *
*  Much time and thought has gone into this software and you are          *
*  benefiting.  We hope that you share your changes too.  What goes       *
*  around, comes around.                                                  *
***************************************************************************
*       ROM 2.4 is copyright 1993-1998 Russ Taylor                        *
*       ROM has been brought to you by the ROM consortium                 *
*           Russ Taylor (rtaylor@hypercube.org)                           *
*           Gabrielle Taylor (gtaylor@hypercube.org)                      *
*           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                    *
***************************************************************************
*       1stMUD ROM Derivative (c) 2001-2002 by Ryan Jennings              *
*            http://1stmud.dlmud.com/  <r-jenn@shaw.ca>                   *
***************************************************************************/

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "interp.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, int depth, int door));
void scan_char args((CHAR_DATA * victim, CHAR_DATA * ch, int depth, int door));
CH_CMD(do_scan)
{
	char arg1[MAX_INPUT_LENGTH], buf[MAX_INPUT_LENGTH];
	ROOM_INDEX_DATA *scan_room;
	EXIT_DATA *pExit;
	int door, depth;

	argument = one_argument(argument, arg1);

	if (arg1[0] == '\0')
	{
		act("$n looks all around.", ch, NULL, NULL, TO_ROOM);
		chprintln(ch, "Looking around you see:");
		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
	{
		chprintln(ch, "Which way do you want to scan?");
		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, int depth, int door)
{
	CHAR_DATA *rch;

	if (scan_room == NULL)
		return;
	for (rch = scan_room->first_person; 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, int depth, int door)
{
	char buf[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH];

	buf[0] = '\0';

	if (IS_QUESTOR(ch) && IS_NPC(victim)
		&& victim->pIndexData->vnum == ch->pcdata->questmob)
		strcat(buf, "{r[{RTARGET{r]{x ");
	if (ON_GQUEST(ch) && IS_NPC(victim) &&
		is_gqmob(ch, victim->pIndexData->vnum) != -1)
		strcat(buf, "(Gquest) ");
	strcat(buf, PERS(victim, ch));
	strcat(buf, ", ");
	sprintf(buf2, distance[depth], dir_name[door]);
	strcat(buf, buf2);

	chprintln(ch, buf);
	return;
}