Where command handling is triggered by a player typing something, Events are triggered by the game itself in response to something happening. There are events for characters connecting and disconnecting, characters being created, the game starting, and more.
Table of Contents
When a code module triggers an event, several things happen:
on_eventin the handler. It then continues on to the next plugin and does the same.
Multiple plugins may handle a single event.
There are two things required to handle events:
All plugins have a
get_event_handler method. Just like
get_cmd_handler returns a command handler class when a plugin wants a command,
get_event_handler returns an event handler class when a plugin wants an event.
In this method, events are identified by a string corresponding to the event name (“CharConnectedEvent”, “CharCreatedEvent”, etc.) Again, this is similar to the way that commands are identified by their command root (“forum”, “connect”, etc.)
get_event_handler method can either return an event handler class or nil, depending on whether it wants the event. For example:
module AresMUSH module Channels def self.get_event_handler(event_name) case event_name when "CharCreatedEvent" return CharCreatedEventHandler end nil end end end
The second piece is to implement a class to actually handle the plugin (
CharCreatedEventHandler in the example above.) Event handling is much simpler than command handling. There’s no arg parsing, no error checks–you only need to implement a single method, named
on_event method is passed an event object. The contents of this object will vary depending on the event. You’ll need to look at the event class definition to find out what data is available. See “Standard Events” below for more information.
module AresMUSH module Channels class CharCreatedEventHandler def on_event(event) event.client.emit "Hello!" end end end end
Standard events in the stock Ares code include:
CharConnectedEvent- A character has disconnected.
CharDisconnectedEvent- A character has connected.
CharCreatedEvent- A new character was created.
CronEvent- Triggered periodically. See Cron Jobs.
ConfigUpdatedEvent- The game configuration has changed.
GameStartedEvent- Triggered on startup.
RoleDeletedEvent- A role has been deleted.
RoleChangedEvent- A character’s roles has changed.
You can find details about the data in these events by looking in the code file
/aresmush/engine/aresmush/commands/global_events. For example, character connected has the ID of the character and the client.
class CharConnectedEvent attr_accessor :client, :char_id end
Event objects always pass database **ids**, not actual database objects to avoid race conditions. You can look up the character in the handler using
Other events may be defined by individual plugins. You’ll typically find those in the
public directory of a plugin. For example: