diff -ur src/act_info.c srce/act_info.c --- src/act_info.c 2005-10-10 18:35:48.000000000 -0700 +++ srce/act_info.c 2006-05-18 12:31:07.000000000 -0700 @@ -2755,3 +2755,10 @@ send_to_char( "Ok.\n\r", ch ); return; } + +void do_test(CHAR_DATA *ch, char *argument) +{ eprintf_to_char(ch, SECONDS(10), "It's been 10 seconds! Run %s.\n\r", ch->name); + send_to_char("Text should appear in 10 seconds. Take it's advice.\n\r",ch); + return; +} + Only in srce: event.c diff -ur src/interp.c srce/interp.c --- src/interp.c 2006-03-20 14:42:17.000000000 -0800 +++ srce/interp.c 2006-05-18 12:33:02.000000000 -0700 @@ -351,6 +351,7 @@ { "smote", do_smote, POS_DEAD, IM, LOG_NORMAL, 1 }, { "prefi", do_prefi, POS_DEAD, IM, LOG_NORMAL, 0 }, { "prefix", do_prefix, POS_DEAD, IM, LOG_NORMAL, 1 }, + { "test", do_test, POS_DEAD, 0, LOG_NORMAL, 1 }, /* * End of list. @@ -429,7 +430,12 @@ break; } } - + if( HAS_EVENT(ch) ) + { if(!check_eventcmd(ch, cmd_table[cmd].name) ) + { send_to_char("You're a bit busy at the moment.\n\r",ch); + return; + } + } /* * Log and snoop. */ diff -ur src/interp.h srce/interp.h --- src/interp.h 2005-10-10 18:35:48.000000000 -0700 +++ srce/interp.h 2006-05-18 12:33:14.000000000 -0700 @@ -296,3 +296,4 @@ DECLARE_DO_FUN( do_yell ); DECLARE_DO_FUN( do_zap ); DECLARE_DO_FUN( do_zecho ); +DECLARE_DO_FUN( do_test ); diff -ur src/Makefile srce/Makefile --- src/Makefile 2006-03-20 14:42:57.000000000 -0800 +++ srce/Makefile 2006-05-18 12:29:57.000000000 -0700 @@ -6,7 +6,7 @@ L_FLAGS = $(MACHINE) -lcrypt $(PROF) O_FILES = act_comm.o act_enter.o act_info.o act_move.o act_obj.o act_wiz.o \ - alias.o ban.o comm.o const.o db.o db2.o effects.o fight.o flags.o \ + alias.o ban.o comm.o const.o db.o db2.o effects.o event.o fight.o flags.o \ handler.o healer.o interp.o note.o lookup.o magic.o magic2.o md5.o \ music.o recycle.o save.o scan.o skills.o special.o tables.o \ update.o diff -ur src/merc.h srce/merc.h --- src/merc.h 2006-03-20 14:42:27.000000000 -0800 +++ srce/merc.h 2006-05-18 12:29:08.000000000 -0700 @@ -99,7 +99,7 @@ typedef struct shop_data SHOP_DATA; typedef struct time_info_data TIME_INFO_DATA; typedef struct weather_data WEATHER_DATA; - +typedef struct event_data EVENT_DATA; /* @@ -496,6 +496,39 @@ sh_int killed; }; +#define EVENT_PRINT 0 +#define SECONDS(s) (s * PULSE_PER_SECOND) +#define HALFSEC(s) (s * (PULSE_PER_SECOND/2)) +#define TYPE_CHAR 0 +#define TYPE_OBJ 1 +#define HAS_EVENT(ch) ( (ch)->event_list ) +#ifndef MSL +#define MSL MAX_STRING_LENGTH +#endif +/****************************************** + * One Event * + ******************************************/ +struct event_data +{ CHAR_DATA * ch; + OBJ_DATA * obj; + int type; + EVENT_DATA * next; //The globle linked list. + EVENT_DATA * next_event; //The list on a the character/object. + EVENT_DATA * prev; + EVENT_DATA * prev_event; + char * string; + int value; + void * arg; + int delay; + int event; + DO_FUN * do_fun; +}; +struct event_type +{ char *name; + int event; + char **cmdlist; +}; +extern const struct event_type event_table[]; /*************************************************************************** @@ -1441,6 +1474,8 @@ sh_int dam_type; sh_int start_pos; sh_int default_pos; + EVENT_DATA * event_list; + EVENT_DATA * event_last; }; @@ -1576,6 +1611,8 @@ char * material; sh_int timer; int value [5]; + EVENT_DATA * event_list; + EVENT_DATA * event_last; }; @@ -1926,6 +1963,8 @@ extern char log_buf []; extern TIME_INFO_DATA time_info; extern WEATHER_DATA weather_info; +extern EVENT_DATA * event_list; +extern EVENT_DATA * event_last; /* * OS-dependent declarations. @@ -2169,6 +2208,22 @@ void poison_effect args( (void *vo, int level, int dam, int target) ); void shock_effect args( (void *vo, int level, int dam, int target) ); +/* event.c */ +#define ED EVENT_DATA +void event_update args(()); +void purge_all_events args((CHAR_DATA *ch)); +void event_to_char args((CHAR_DATA *ch, char *string, void *arg, int value, int type, int delay )); +void execute_char_event args((CHAR_DATA * ch, EVENT_DATA * event)); +void execute_obj_event args((OBJ_DATA *pObj, EVENT_DATA *event)); +void event_movement args((CHAR_DATA *ch )); +ED * get_specific_event args(( CHAR_DATA *ch, int type )); +bool check_eventcmd args((CHAR_DATA *ch, char *cmd )); +void free_event args((CHAR_DATA *ch, OBJ_DATA *pObj, EVENT_DATA *event )); +ED * event_new args(()); +void event_to_obj args((OBJ_DATA *obj, CHAR_DATA *ch, char *string, void *arg, int value, int type, int delay )); +void purge_obj_event args((OBJ_DATA *)); +void eprintf_to_char args(( CHAR_DATA *ch, int delay, char *fmt, ... )); +#undef ED /* fight.c */ bool is_safe args( (CHAR_DATA *ch, CHAR_DATA *victim ) ); diff -ur src/recycle.c srce/recycle.c --- src/recycle.c 2006-03-20 14:42:35.000000000 -0800 +++ srce/recycle.c 2006-05-18 12:40:23.000000000 -0700 @@ -329,6 +329,7 @@ ch->max_mana = 100; ch->move = 100; ch->max_move = 100; + ch->event_list = ch->event_last = NULL; for (i = 0; i < MAX_STATS; i ++) { ch->perm_stat[i] = 13; @@ -372,7 +373,7 @@ free_string(ch->prefix); free_note (ch->pnote); free_pcdata(ch->pcdata); - + purge_all_events(ch); ch->next = char_free; char_free = ch; diff -ur src/update.c srce/update.c --- src/update.c 2005-10-10 18:35:48.000000000 -0700 +++ srce/update.c 2006-05-18 12:29:19.000000000 -0700 @@ -1085,7 +1085,7 @@ static int pulse_violence; static int pulse_point; static int pulse_music; - + event_update(); if ( --pulse_area <= 0 ) { pulse_area = PULSE_AREA;