
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
