#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "emlen.h"
void
undo_it (CHAR_DATA * ch, ROOM_DATA * rid, int strength, short came_from)
{
int i = 0;
if (strength < 1)
return;
if (rid->y == 0)
return;
rid->y = 0;
for (i = 0; i < 6; i ++)
{
if (rid->exit[i] && rid->exit[i]->to_room)
{
undo_it (ch, rid->exit[i]->to_room, strength--, i);
}
}
return;
}
void
do_it (CHAR_DATA * ch, ROOM_DATA * rid, int strength, short came_from)
{
CHAR_DATA *fch;
char buffr[1200];
int ctr = 0;
int i = 0;
if (strength < 1)
return;
if (IS_SET (rid->room_flags, ROOM_NOHEAR))
return;
if (rid->y == TRUE)
return;
rid->y = TRUE;
check_room_more(rid);
for (fch = rid->more->people; fch != NULL; fch = fch->next_in_room)
{
if (fch == ch) continue;
if (IS_MOB(fch)) continue;
if (ignore(ch,fch)) continue;
if (IS_SET (fch->pcdata->deaf, CHANNEL_YELL))
continue;
sprintf (buffr, "\x1b[1;31m%s yells, '%s'\x1b[0;37m\n\r", capitalize(rNAME (ch, fch)), yellbuff);
send_to_char (buffr, fch);
}
for (i = 0; i < 6; i++)
{
if (rid->exit[i] && rid->exit[i]->to_room && came_from != rev_dir[i])
{
if (IS_SET (rid->room_flags, ROOM_NOISY))
ctr = 1;
else
ctr = 0;
if (rid->exit[i]->d_info)
if(IS_SET (rid->exit[i]->d_info->exit_info, EX_HIDDEN))
ctr = 9999;
else if (IS_SET (rid->exit[i]->d_info->exit_info, EX_CLOSED))
ctr++;
do_it (ch, rid->exit[i]->to_room, (strength - ctr - 1), i);
}
}
return;
}
void
find_people_n (CHAR_DATA * ch, int n)
{
if (!ch->in_room)
{
return;
}
if (n > 25)
{
send_to_char ("Error in find_people_n: Max depth is 15.\n\r", ch);
return;
}
do_it (ch, ch->in_room, n, 9999);
undo_it (ch, ch->in_room, n, 9999);
return;
}