I did not implement any general system for the task you described but
several similar things, like coaches etc. There are 2 methods of doing
so: 1) Through ticks and 2) Through ticks but in a trickier way :-)
1) Set up a new tick in comm.c where mobile_activity is called in a
similar manner. You would implement a function which is called and
goes e.g. through every playing character in the MUD, checking a
field called maybe delay_mode if it has a value which yields activity.
The code should then look like this:
switch(ch->specials.delayed_mode) {
case DELAYED_MODE_WARN_EXPLODE:
warn_explode(ch);
ch->specials.delayed_mode = DELAYED_MODE_ABOUT_TO_EXPLODE;
break;
case DELAYED_MODE_ABOUT_TO_EXPLODE:
explode(ch);
ch->specials.delayed_mode = DELAYED_MODE_NONE;
break;
(other funny things here)
}
This is the straight-forward solution suitable for maybe two or three
different delayed commands, but not suitable for a large amount of
delays, since this would lead to coarse code and it suffers from various
problems like: How to deal with characters going away ? How to handle
object's activity which is delayed (a bomb which is about to explode is
a delay in the object, not in the char) etc. etc. Now, let's switch to
2) the trickier way to do this is to set up a resizable array of
timer-functions+delays and to hanlde them in a tick. You need functions to
add a timerfunction like add_timer(function*, delay) and sureley a
function like the above in comm.c, say timer_activity(). What you do there
is to decrease every delay variable in the mentioned array function+delay
and to call the timer-function via the function-pointer in the array if
it becomes 0. Afterwards you remove the entry in the array, indeed.
Additionally, a set of void* should be in the array for parameter passing
to the timer-function.
This is the general way to handle delays and activity based on ticks,
but has several flaws as well: 1) the timerfunction will have to know
what it is dealing with, and if it still exist etc. etc. and 2) the
stuff is not that easy to implement.
Well, good luck, and report if you found or have been told a better way,
Wolfram Schroeder
Karl@Realm of Magic (p106.informatik.uni-bremen.de 4000)
-------------------------------------------------------------------------------
|| | //"" Send your flames, opinions,
|| || \\_. ideas and deepest thoughts
|| /\\ || `"\\ to the address besides.
`_// \_'' \..// @informatik.uni-bremen.de
This archive was generated by hypermail 2b30 : 12/07/00 PST