Re: [CODE] Events system

From: Stephen Wolfe (siv@CYBERENET.NET)
Date: 10/30/98


> My events will be set up like ACMDs, in the format of 'EVENT(FireBall2)' etc.
> and I call the events by 'set_event(ch, FireBall2)'. However, all the arguments
> in the ACMD where I call set_event() are not parsed onto the EVENT(FireBall2)
> function. I was thinking of making another argument to set_event() in which
> you parse the ACMD's argument, but then I'll have to apply two_arguments() etc.
> to the argument in every single EVENT().

well..the way dg events does this is by creating an event_object struct,
then attach that to the event struct in the queue..as an example..this
would be your event struct

struct event_info {
  EVENT(*func);
  void *event_object;
...

then when you parse the event you have a custom struct like:

struct fireball2_event_obj {
  struct char_data *target;
  bool succeed;
..etc..

then when you parse the arguments in the ACMD, you would create a new
event object and put in the information..liek:

ACMD(do_whatever)
{
  struct fireball2_event_obj *ev_o;
...
  CREATE(ev_o, struct fireball2_event_obj, 1);
  ev_o->target = vict;
  ev_o->succeed =(GET_SKILL(ch, FIREBALL) > number(1, 101)) ? TRUE : FALSE;

then pass this struct as an argument to your set_event func, or if you
have a pointer to the event attached to the char_data struct (or if
set_event returns a pointer to the event) you could attach the information
directly..like:

  ch->current_action->event_object = ev_o;

in the event itself, you will have to typecast the event object back to
your custom struct (frmo a void *) like:

EVENT(fireball2) {
 struct fireball2_event_obj *ev_o = (struct fireball2_event_obj *)
        event_object;
 struct char_data *vict = ev_o->target;
...

this assumes that your event macro looks something like:

#define EVENT(func) void *(func) (void *event_object)

notice how it passes the info to the event as an argument..if anything
was unclear, email me private, and i'll clarify..

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