> Has anyone implemented Object timers? If so can you give me a some info
> on how to go about it. Also, will Oasis automatically be able to use
> timers (I know its in there) or will more code be needed for that?
i implemented object timers using an event system..basically, i added this
struct to the obj_data struct (or obj_flag_data..whatever) in place of the
timer var..
struct obj_timer_data
{
struct event_info *event; /* pointer to timer event */
int type; /* bitvector for type of timer */
struct obj_timer_data *next; /* link to next timer on obj */
};
the type variable is used to differentiate between object affections, and
other types of timers (extract obj..like corpses)..to save the timers, i
made another struct 'timer_data_save'
struct timer_data_save
{
long delay; /* this would be in pulses */
int type;
}
then just changed timer in obj_file_elem to be like:
struct timer_data_save[MAX_OBJ_TIMER];
then i just modified the saving and loading to start events when there are
timers..
> How easy it is to incorporate casting times into spells using events?
easy..change the spell_info struct to include a 'delay' element (i also
put in a 'lag' element for wait_states)..then:
declare this struct:
struct delayed_spell_info {
struct char_data *ch;
struct char_data *tch;
struct obj_data *tobj;
int spell;
};
int cast_spell(struct char_data * ch, struct char_data * tch,
struct obj_data * tobj, int spellnum)
{
struct delayed_spell_info *event_obj;
.
.
.
}
if (IS_SET(SINFO.routines, MAG_GROUPS) && !AFF_FLAGGED(ch, AFF_GROUP)) {
send_to_char("You can't cast this spell if you're not in a group!\r\n",ch);
return 0;
}
send_to_char(OK, ch);
say_spell(ch, spellnum, tch, tobj);
if (spell_info[spellnum].delay)
{
CREATE(event_obj, struct delayed_spell_info, 1);
event_obj->ch = ch;
event_obj->tch = tch;
event_obj->tobj = tobj;
event_obj->spell = spellnum;
add_event(spell_info[spellnum].delay, delayed_spell, ch)
return 1; /* note that this is always shown as success upon casting */
}
return (call_magic(ch, tch, tobj, spellnum, GET_LEVEL(ch), CAST_SPELL));
}
EVENT(delayed_spell)
{
struct delayed_spell_info *ev_o = (struct delayed_spell_info *)event_object;
call_magic(ev_o->ch, ev_o->tch, ev_o->tobj, ev_o->spell,
GET_LEVEL(ev_o->ch), CAST_SPELL);
FREE(ev_o);
}
of course you'll have to change the add_event call to whatever you use,
and add in delays to all of the spello's on spell_parser.c
siv
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST