UnregisterEvent()
=================

FUNKTION
--------
::

     int UnregisterEvent(string eid, object listener);

DEFINIERT IN
------------
::

     /p/daemon/eventd.c

DEKLARIERT IN
-------------
::

     /sys/events.h

ARGUMENTE
---------
::

     string eid,
       Die ID des Events, vom dem man sich abmelden will.
     object listener,
       Das Objekt, das als Lauscher ausgetragen werden soll.

BESCHREIBUNG
------------
::

     Das Objekt 'listener' wird als Lauscher dieses Events ausgetragen. Ab
     diesem Moment wird es bei Events vom Typ 'eid' nicht mehr informiert.     

     Hat der Event 'eid' im Anschluss keine Lauscher mehr, wird er implizit
     geloescht.

RUeCKGABEWERT
-------------
::

     1 fuer Erfolg, <=0 fuer Misserfolg.
     1   - Erfolg, 'listener' wurde eingetragen.
     -1  - falsche Argumente uebergeben
     -2  - 'listener' ist nicht fuer 'eid' registriert.

    

BEMERKUNGEN
-----------
::

     Wenn sich ein Objekt vor Zerstoerung nicht abmeldet, wird es ggf. beim
     naechsten Auftreten von 'eid' automatisch ausgetragen.
     Falls Blueprints nach Neuladen nicht automatisch angemeldet sein sollen,
     sollten sie sich im remove() explizit abmelden.

BEISPIELE
---------
::

     1. Ein Objekt moechte nicht mehr ueber Spielertode informiert werden:
          EVENTD->UnregisterEvent(EVT_LIB_PLAYER_DEATH, this_object());

     2. Ein Objekt moechte sich bei Zerstoerung abmelden:
       varargs int remove(int silent) {
           ...
           EVENTD->UnregisterEvent("zesstra_vulkanausbruch",this_object());
       }

SIEHE AUCH
----------
::

     events, eventd, UnregisterEvent(), RegisterEvent()


Last modified: 15.08.2007, Zesstra

