Events
======
Introduction
------------
Events are probably one of the most important tools when you want to write a
plugin for a game. The game fires them in specific situations (e.g. when a
player was hurt, died or the round started) and Source.Python is able to
listen to them. An event might provide various event variables, which contain
more information about the event. E.g. the event "player_hurt" always provides
the user ID of the attacker and the user ID of the victim, which can be used
to interact with these players. A basic example could look like this:
.. code-block:: python
from events import Event
@Event('player_hurt')
def on_player_hurt(game_event):
# Retrieve the user ID of the victim
userid = game_event['userid']
# Retrieve the user ID of the attacker
attacker = game_event['attacker']
print('user ID "{}" was hurt by attacker ID "{}"'.format(userid, attacker))
In order to listen to an event, you have to import the :class:`events.Event`
decorator. The decorator requires a name, which is the name of the event you
want to listen to. All event callbacks require exactly one argument, which is
a :class:`events.GameEvent` object. This object can be used to access the
specific event variables.
.. note::
:meth:`events.GameEvent.__getitem__` will raise a :class:`KeyError` if you
are trying to access an event variable that doesn't exist.
.. note::
:meth:`events.GameEvent.__getitem__` will return the value in the type
that has been defined in the event resource files.
.. warning::
All games provide different events. Some events might exist on all games,
but they can still provide different event variables.
Printing event variables
------------------------
Sometimes you might want to print all event variables and their values.
Fortunately, there is a :attr:`events.GameEvent.variables` attribute, which
contains all event variables. You can use this little snippet to display them.
.. code-block:: python
from events import Event
from pprint import pprint
@Event('player_hurt')
def on_player_hurt(game_event):
pprint(game_event.variables.as_dict())
Available events
----------------
Below you can find a list of games and their supported events.
.. toctree::
:titlesonly:
:glob:
events/*