Events/
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;