Actions are specially packaged "event descriptions" that are passed to the
living object, usually through push_action or set_action. They are used to
handle actions that have to be "queued", meaning that you can't perform all
the actions immediately, but have to wait for your readiness meter to have
enough points in it.

The format of an action is:

({
   readiness,   // The readiness requirement; 1000 is typical
                // This amount is not subtracted from readiness.
                // You have to do that yourself in the action.
   handler,     // The object with the on_action() function. If
                // set to "me", then the living performing the action
                // is assumed. Usually this_object() in verbs.
                // Note that the "me" flag is not really used anymore.
   target,      // The target of the action. If it's a combat, action,
                // then -1 means "my current target." If the action
                // has no explicit target, use the actor. Actions
                // with invalid targets will be dropped/ignored.
   stance,      // ST_ALL if the action may be performed in any stance.
                // see /include/const/battconst.h
   parameters   // Any value at all; a value to be passed verbatim
                // to the on_action() function.
})

Here's an example pushing of an action:

this_player()->push_action(
   ({ 1000,
      this_object(),
      -1,
      ST_STANDING,
      0
   }) );

You may use this_player() to figure out who is performing the action.
The "target" parameter tells you who the target of the action is.
Here's an example of a handler for the action.

void on_action( object target, mixed param ) {
   msg( as_string(this_player()) + " acts on " + as_string(target)
        + " with parameter " + as_string(param) );
   this_player()->add_readiness( -10 );
}

The action is already popped off the queue when the handler is called, so
if you want the action back on the queue, you should push it back on.
To push it on the back of the queue, use push_action(act); use
set_action(-1, act) to push it on the front. The action handler must
be called on_action(), which means you can only have one handler per
file (although if you wish, you could have that one handler do several
different things by changing the parameter. Do what you like, but we
recommend splitting each action into its own file).

Actions are entirely responsible for all their messaging.
