#include <stdio.h>
#include <string.h>
#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
#include "spells.h"
#include "trap.h"
/* extern variables */
extern struct obj_data *object_list;
extern struct char_data *character_list;
int RecGetObjRoom(struct obj_data *obj)
{
if (obj->in_room != NOWHERE) {
return(obj->in_room);
}
if (obj->carried_by) {
return(obj->carried_by->in_room);
}
if (obj->equipped_by) {
return(obj->equipped_by->in_room);
}
if (obj->in_obj) {
return(RecGetObjRoom(obj->in_obj));
}
}
void MakeNoise(int room, char *local_snd, char *distant_snd)
{
int door;
struct char_data *ch;
struct room_data *rp, *orp;
rp = real_roomp(room);
if (rp)
{
for (ch = rp->people; ch; ch = ch->next_in_room)
{
if (!IS_NPC(ch) &&
!IS_SET(ch->specials.act,PLR_DEAF) &&
(GET_POS(ch) != POSITION_SLEEPING))
send_to_char(local_snd, ch);
}
for (door = 0; door <= 5; door++)
{
if (rp->dir_option[door] && (orp = real_roomp(rp->dir_option[door]->to_room)) )
{
for (ch = orp->people; ch; ch = ch->next_in_room)
{
if (!IS_NPC(ch) &&
(!IS_SET(ch->specials.act, PLR_DEAF) &&
(GET_POS(ch)!=POSITION_SLEEPING)))
{
send_to_char(distant_snd, ch);
}
}
}
}
}
}
MakeSound(int pulse)
{
int room;
char buffer[128];
struct obj_data *obj;
struct char_data *ch;
for (obj = object_list; obj; obj = obj->next)
{
if (ITEM_TYPE(obj) == ITEM_AUDIO)
{
if (((obj->obj_flags.value[0]) &&
(pulse % obj->obj_flags.value[0])==0) ||
(!number(0,5)))
{
if (obj->carried_by)
{
room = obj->carried_by->in_room;
}
else
if (obj->equipped_by) {
room = obj->equipped_by->in_room;
} else if (obj->in_room != NOWHERE) {
room = obj->in_room;
} else {
room = RecGetObjRoom(obj);
} /*
* broadcast to room
*/
if (obj->action_description) {
MakeNoise(room, obj->action_description, obj->action_description);
}
}
}
}
/*
* rooms
*/
for(ch = character_list;ch;ch=ch->next)
{
if((IS_PC(ch)) &&
(number(0,8) == 0 ) &&
(IS_NOT_SET(ch->specials.act,PLR_DEAF)) &&
(GET_POS(ch) > POSITION_SLEEPING)
)
{
if(real_roomp(ch->in_room)->sound != 0)
{
if(number(0,1)==1)
send_to_char(real_roomp(ch->in_room)->sound, ch);
else
if(real_roomp(ch->in_room)->distant_sound != 0)
send_to_char(real_roomp(ch->in_room)->distant_sound,ch);
}
}
}
/*
* mobiles
*/
for (ch = character_list; ch; ch = ch->next)
{
if (IS_NPC(ch) && (ch->player.sounds) && (number(0,7)==0))
{
if (ch->specials.default_pos > POSITION_SLEEPING)
{
if (GET_POS(ch) > POSITION_SLEEPING)
{
MakeNoise(ch->in_room, ch->player.sounds, ch->player.distant_snds);
}
else
if (GET_POS(ch) == POSITION_SLEEPING)
{
sprintf(buffer, "%s snores loudly.\n\r", ch->player.short_descr);
MakeNoise(ch->in_room, buffer, "You hear a loud snore nearby.\n\r");
}
}
else
if (GET_POS(ch) == ch->specials.default_pos)
{
MakeNoise(ch->in_room, ch->player.sounds, ch->player.distant_snds);
}
}
}
}