typedef struct single_trigger SINGLE_TRIGGER; /* Holds triggers */ typedef struct code_segment CODE; /* Holds trigger code */ typedef struct script_info SCRIPT_INFO; /* Holds info of a single trigger running */ /* M = Mob, R = Room, O = Object */ #define TENTERS 1 /* MR */ #define TLEAVES 2 /* MR */ #define TCREATED 3 /* M */ #define TCOMMAND 4 /* MRO */ #define TMOVES 5 /* MO */ #define TDESTROYED 6 /* MO */ #define TSAYS 7 /* MOR */ #define TTELLS 8 /* M */ #define TEVERY_HOUR 9 /* MOR */ #define TEVERY_QUICKTICK 10 /* MOR */ #define TEVERY_REGENTICK 11 /* MR */ #define TAT_HOUR 12 /* MOR */ #define TGIVEN 13 /* MOR */ #define TDROPPED 14 /* RO */ /* New below */ #define TEQUIPPED 15 /* O */ #define TATTACKED 16 /* M */ #define TOBJ_SACCED 17 /* OR */ #define TGIVEN_MONEY 18 /* M */ #define TMAX_TRIGGERS 19 /* Script_info are running scripts.. we need to update these often */ struct script_info { SCRIPT_INFO *next; SINGLE_TRIGGER *called_by; /* Trigger it was called by */ CHAR_DATA *current; /* Person currently being looked at by the script */ CHAR_DATA *mob; /* If a mob is executing this is the mob */ ROOM_DATA *room; /* If a room is executing this is the room */ SINGLE_OBJECT *obj; /* If an obj is executing this is the obj */ short delay_ticks; char tick_type; /* 1=quick, 2=heartbeat, 3=hour, 4=superquick */ short current_line; /* Line of code it will execute next */ char code_seg[10]; /* Current label of code we're in */ int accumulator; /* Single register process */ }; /*Hashed by first letter of label */ struct code_segment { CODE *next; char label[10]; char *code; }; struct single_trigger { SINGLE_TRIGGER *next; char trigger_id[20]; int trigger_type; /* Trigger type */ char *keywords; /* General keywords */ int attached_to_room; int attached_to_mob; int attached_to_obj; char interrupted; /* Will the trigger reset if it is interrupted? */ char leaves_room; /* Will the script stop if the player leaves the room? */ char players_only; /* Will this script trigger on players only? */ char code_label[10]; /* Label of code to execute */ char handle_leave[10]; /* Code label to jump to if char leaves (for ROOM AND MOB only) */ SCRIPT_INFO *running_info; }; extern CHAR_DATA *debugger; extern CODE *code_list[256]; /* hashed by starting letter */ extern SCRIPT_INFO *info_list; /* vnum % 256 for hash table */ extern SINGLE_TRIGGER *trigger_list[TMAX_TRIGGERS]; /* Hashed by trigger type */ void load_triggers(void); void load_code(void); void end_script(SCRIPT_INFO *); void execute_code(SCRIPT_INFO *);