/*
* CthulhuMud
*/
/* Defaults... */
#define WEV_TYPE_NOT_FOUND -1
#define WEV_SUBTYPE_NOT_FOUND -1
#define WEV_TYPE_NONE 0
#define WEV_SUBTYPE_NONE 0
#define WEV_SUBTYPE_MAX 14
#define WEV_SUBTYPE_MAX_PLUS 15
/* Gifts... */
#define WEV_GIVE 2
#define WEV_GIVE_GOLD 1
#define WEV_GIVE_ITEM 2
/* Getting... */
#define WEV_GET 3
#define WEV_GET_GOLD 1
#define WEV_GET_ITEM 2
/* Putting... */
#define WEV_PUT 4
#define WEV_PUT_ITEM 1
/* Dropping... */
#define WEV_DROP 5
#define WEV_DROP_GOLD 1
#define WEV_DROP_ITEM 2
#define WEV_DROP_PLANT 3
#define WEV_DROP_ITEM_MELT 4
/* Envenom... */
#define WEV_POISON 6
#define WEV_POISON_FOOD 1
#define WEV_POISON_WEAPON 2
#define WEV_POISON_FOUNTAIN 3
#define WEV_POISON_OTHER 9
/* FILL... */
#define WEV_FILL 7
#define WEV_FILL_FOUNTAIN 1
#define WEV_FILL_LIGHT 2
/* DRINK... */
#define WEV_DRINK 8
#define WEV_DRINK_FOUNTAIN_OK 1
#define WEV_DRINK_FOUNTAIN_BAD 2
#define WEV_DRINK_ITEM_OK 3
#define WEV_DRINK_ITEM_BAD 4
#define WEV_DRINK_FEED_OK 5
#define WEV_DRINK_FEED_BAD 6
/* EAT... */
#define WEV_EAT 9
#define WEV_EAT_FOOD_OK 1
#define WEV_EAT_FOOD_BAD 2
#define WEV_EAT_PILL 3
#define WEV_EAT_HERB 4
#define WEV_EAT_CORPSE 5
#define WEV_EAT_FEED_OK 6
#define WEV_EAT_FEED_BAD 7
/* SACRIFICE... */
#define WEV_SAC 10
#define WEV_SAC_PC_CORPSE 1
#define WEV_SAC_CORPSE 2
#define WEV_SAC_TRASH 3
#define WEV_SAC_TREASURE 4
#define WEV_SAC_ITEM 9
/* Gadgets... */
#define WEV_GADGET 11
#define WEV_GADGET_OK 1
#define WEV_GADGET_BAD 2
/* Searching */
#define WEV_SEARCH 12
#define WEV_SEARCH_ITEM 1
#define WEV_SEARCH_ROOM 2
#define WEV_FIND_ITEM 5
#define WEV_FIND_MOB 6
#define WEV_FIND_DOOR 7
#define WEV_FIND_HOUND 8
#define WEV_CONCEAL 9
/* Movement... */
#define WEV_DEPART 13
#define WEV_DEPART_WALK 1
#define WEV_DEPART_SNEAK 2
#define WEV_DEPART_FLY 3
#define WEV_DEPART_SWIM 4
#define WEV_DEPART_SAIL 5
#define WEV_DEPART_PORTAL 6
#define WEV_DEPART_MAGIC 7
#define WEV_DEPART_CURRENT 8
#define WEV_DEPART_FLEE 9
/* Movement... */
#define WEV_ARRIVE 14
#define WEV_ARRIVE_WALK 1
#define WEV_ARRIVE_SNEAK 2
#define WEV_ARRIVE_FLY 3
#define WEV_ARRIVE_SWIM 4
#define WEV_ARRIVE_SAIL 5
#define WEV_ARRIVE_PORTAL 6
#define WEV_ARRIVE_MAGIC 7
#define WEV_ARRIVE_CURRENT 8
#define WEV_ARRIVE_FLEE 9
/* Pulses... */
#define WEV_PULSE 15
#define WEV_PULSE_1 1
#define WEV_PULSE_3 2
#define WEV_PULSE_4 3
#define WEV_PULSE_5 4
#define WEV_PULSE_10 5
#define WEV_PULSE_30 6
#define WEV_PULSE_AREA 7
/* Time... */
#define WEV_TIME 16
#define WEV_TIME_HOUR 1
#define WEV_TIME_DAY 2
#define WEV_TIME_SUNRISE 3
#define WEV_TIME_SUNSET 4
#define WEV_TIME_DAWN 5
#define WEV_TIME_DUSK 6
#define WEV_CONTROL 17
#define WEV_CONTROL_LOGIN 1
#define WEV_CONTROL_LOGOUT 2
#define WEV_CONTROL_LINKDEAD 3
#define WEV_CONTROL_RECONNECT 4
#define WEV_MOB 18
#define WEV_MOB_STOP 1
#define WEV_MOB_SELECT 2
#define WEV_MOB_ECHO 3
#define WEV_DEATH 19
#define WEV_DEATH_SLAIN 1
#define WEV_DEATH_STUN 2
#define WEV_ATTACK 20
#define WEV_ATTACK_KILL 1
#define WEV_ATTACK_KICK 2
#define WEV_ATTACK_TRIP 3
#define WEV_ATTACK_BASH 4
#define WEV_ATTACK_DIRT 5
#define WEV_ATTACK_BACKSTAB 6
#define WEV_ATTACK_DISARM 7
#define WEV_ATTACK_CIRCLE 8
#define WEV_ATTACK_ROTATE 9
#define WEV_ATTACK_MURDER 10
#define WEV_ATTACK_TAIL 11
#define WEV_ATTACK_CRUSH 12
#define WEV_ATTACK_DISTRACT 13
#define WEV_ATTACK_SPRINKLE 14
#define WEV_COMBAT 21
#define WEV_COMBAT_MISS 1
#define WEV_COMBAT_HIT 2
#define WEV_COMBAT_BLOCK 3
#define WEV_COMBAT_PARRY 4
#define WEV_COMBAT_DODGE 5
#define WEV_COMBAT_ABSORB 6
#define WEV_COMBAT_IMMUNE 7
#define WEV_COMBAT_FADE 8
#define WEV_DAMAGE 22
#define WEV_DAMAGE_INJURED 1
#define WEV_DAMAGE_HURT 2
#define WEV_DAMAGE_DIRT 3
#define WEV_DAMAGE_TRIP 4
#define WEV_DAMAGE_BASH 5
#define WEV_DAMAGE_ENV 6
#define WEV_DAMAGE_TAIL 7
#define WEV_DAMAGE_CRUSH 8
/* Communications... */
#define WEV_OOCC 23
#define WEV_OOCC_BEEP 1
#define WEV_OOCC_GOSSIP 2
#define WEV_OOCC_MUSIC 3
#define WEV_OOCC_IMMTALK 4
#define WEV_OOCC_QUESTION 5
#define WEV_OOCC_ANSWER 6
#define WEV_OOCC_TELL 7
#define WEV_OOCC_GTELL 8
#define WEV_OOCC_HERO 9
#define WEV_OOCC_SOCIAL 10
#define WEV_OOCC_STELL 11
#define WEV_OOCC_MTELL 12
#define WEV_OOCC_INVESTIGATOR 13
#define WEV_OOCC_CHAT 14
#define WEV_ICC 24
#define WEV_ICC_TELL 1
#define WEV_ICC_SAY 2
#define WEV_ICC_SHOUT 3
#define WEV_ICC_SCREAM 4
#define WEV_ICC_YELL 5
#define WEV_ICC_MTELL 6
#define WEV_ICC_TELEPATHY 7
#define WEV_ICC_PRAY 8
#define WEV_SOCIAL 25
#define WEV_SOCIAL_EMOTE 1
#define WEV_SOCIAL_FRIENDLY 2
#define WEV_SOCIAL_NEUTRAL 3
#define WEV_SOCIAL_HOSTILE 4
#define WEV_SOCIAL_SOCIETY 5
#define WEV_IDOL 26
#define WEV_IDOL_HELD 1
#define WEV_IDOL_PRAY 2
#define WEV_IDOL_OFFER_ITEM 3
#define WEV_IDOL_OFFER_GOLD 4
#define WEV_LOCK 27
#define WEV_LOCK_OPEN_DOOR 1
#define WEV_LOCK_OPEN_ITEM 2
#define WEV_LOCK_CLOSE_DOOR 3
#define WEV_LOCK_CLOSE_ITEM 4
#define WEV_LOCK_LOCK_DOOR 5
#define WEV_LOCK_LOCK_ITEM 6
#define WEV_LOCK_UNLOCK_DOOR 7
#define WEV_LOCK_UNLOCK_ITEM 8
#define WEV_LOCK_PICK_DOOR 9
#define WEV_LOCK_PICK_ITEM 10
#define WEV_SOCIETY 28
#define WEV_SOCIETY_INVITE 1
#define WEV_SOCIETY_JOIN 2
#define WEV_SOCIETY_ADVANCE 3
#define WEV_SOCIETY_RESIGN 4
#define WEV_SOCIETY_EXPEL 5
#define WEV_SOCIETY_DEMOTE 6
#define WEV_SOCIETY_TEST 7
#define WEV_SOCIETY_FOE 8
#define WEV_SOCIETY_PARDON 9
#define WEV_DREAM 29
#define WEV_DREAM_WALK 1
#define WEV_DREAM_AWAKEN 2
#define WEV_DREAM_CAST 3
#define WEV_DREAM_PCAST 4
#define WEV_DREAM_SAY 5
#define WEV_DREAM_PSAY 6
#define WEV_DREAM_EMOTE 7
#define WEV_DREAM_PEMOTE 8
#define WEV_ACTIVITY 30
#define WEV_ACTIVITY_START 1
#define WEV_ACTIVITY_STOP 2
#define WEV_ACTIVITY_POSCHANGE 3
#define WEV_SPELL 31
#define WEV_SPELL_PREP 1
#define WEV_SPELL_START 2
#define WEV_SPELL_CHANT 3
#define WEV_SPELL_CAST 4
#define WEV_SPELL_RECOVER 5
#define WEV_SPELL_FAIL 6
#define WEV_SPELL_CONSUME 7
#define WEV_SPELL_ECHO 8
#define WEV_SPELL_POWER 9
#define WEV_SPELL_YELL 10
#define WEV_HEAL 32
#define WEV_HEAL_HITS 1
#define WEV_HEAL_MANA 2
#define WEV_HEAL_MOVE 3
#define WEV_HEAL_HEALER 4
#define WEV_HEAL_THERAPY 5
#define WEV_DEBATE 33
#define WEV_DEBATE_START 1
#define WEV_DEBATE_CONTINUE 2
#define WEV_DEBATE_FINISH 3
#define WEV_KNOCK 34
#define WEV_KNOCK_DOOR 1
#define WEV_INTERPRET 35
#define WEV_INTERPRET_STRANGE 1
#define WEV_OPROG 36
#define WEV_OPROG_USE 1
#define WEV_OPROG_WEAR 2
#define WEV_OPROG_REMOVE 3
#define WEV_OPROG_EXPLOSION 4
#define WEV_OPROG_PHOTO 5
#define WEV_OPROG_DESTROY 6
#define WEV_OPROG_REBUILD 7
#define WEV_OPROG_EFFECT 8
#define WEV_OPROG_COMBINE 9
#define WEV_LEARN 37
#define WEV_LEARN_PRACTICE 1
#define WEV_LEARN_LEARN 2
#define WEV_DUEL 38
#define WEV_DUEL_START 1
#define WEV_DUEL_CONTINUE 2
#define WEV_DUEL_FINISH 3
#define WEV_DUEL_OFFENSIVE 4
#define WEV_TRAP 39
#define WEV_TRAP_LAY 1
#define WEV_TRAP_DISARM 2
#define WEV_TRAP_INFO 3
#define WEV_TRAP_TRIGGER 4
#define WEV_SHOW 40
#define WEV_SHOW_ITEM 1
#define WEV_SHOW_PASSPORT 2
#define WEV_MUSIC 41
#define WEV_MUSIC_SING 1
#define WEV_MUSIC_PLAY 2
#define WEV_PEEK 42
#define WEV_PEEK_ITEM 1
#define MAX_WEV 43
/* See also ev_map in triggers.c */
/* Scopes of issuing WEVs by area... */
#define WEV_SCOPE_NONE 0
#define WEV_SCOPE_ROOM 1
#define WEV_SCOPE_ADJACENT 2
#define WEV_SCOPE_SUBAREA 3
#define WEV_SCOPE_SUBAREA_PLUS 4
#define WEV_SCOPE_AREA 5
#define WEV_SCOPE_AREA_PLUS 6
#define WEV_SCOPE_ZONE 7
#define WEV_SCOPE_UNIVERSE 8
#define WEV_SCOPE_GROUP 9
#define WEV_SCOPE_BAD -1
/* WEV management... */
WEV *get_wev(int type, int subtype, MOB_CMD_CONTEXT *context, char *msg_actor, char *msg_victim, char *msg_observer);
void free_wev(WEV *wev);
/* Wev distribution... */
void room_echo_wev(ROOM_INDEX_DATA *room, WEV *wev, char *source, bool dist_further);
void room_issue_wev(ROOM_INDEX_DATA *room, WEV *wev);
bool room_issue_wev_challange(ROOM_INDEX_DATA *room, WEV *wev);
void room_issue_door_wev(ROOM_INDEX_DATA *room, WEV *wev, char *msg);
void world_issue_wev(WEV *wev, char *source);
void idol_issue_wev(OBJ_DATA *idol, WEV *wev);
void ch_issue_idol_wev(CHAR_DATA *ch, WEV *wev);
void area_issue_wev(ROOM_INDEX_DATA *room, WEV *wev, int scope);
/* Wev processing... */
void mob_handle_wev(CHAR_DATA *ch, WEV *wev, char *source);
bool mob_handle_wev_challange(CHAR_DATA *ch, WEV *wev);
void mob_handle_chat(CHAR_DATA *mob, WEV *wev, char *source);
void photo_write_wev(OBJ_DATA *photo, WEV *wev);
/* Issue a wev to a specific mob... */
void issue_update_wev(CHAR_DATA *mob, int wev_type, int wev_sub_type, int value);
/* Issue a wev to interested mobs... */
void issue_time_wev(int sub_flag, int wev_type, int wev_sub_type, int value);
/* Triggers */
MOB_TRIGGER *get_trigger();
void free_trigger(MOB_TRIGGER *trigger);
void release_triggers(CHAR_DATA *ch);
MOB_TRIGGER *add_trigger(MOB_TRIGGER *base, MOB_TRIGGER *new_trigger);
MOB_TRIGGER *del_trigger(MOB_TRIGGER *base, MOB_TRIGGER *junk);
MOB_TRIGGER *find_trigger_chain(MOB_TRIGGER *base, int type);
MOB_TRIGGER *find_trigger(MOB_TRIGGER *chain, int seq);
MOB_TRIGGER *renum_triggers(MOB_TRIGGER *base);
bool check_trigger(MOB_TRIGGER *base, WEV *wev);
struct ev_mapping {
char *name;
char *events[WEV_SUBTYPE_MAX + 2];
};