Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//lfun/RegisterEvent

RegisterEvent()
***************


FUNKTION
========

   int RegisterEvent(string eid, string fun, object listener);


DEFINIERT IN
============

   /p/daemon/eventd.c


DEKLARIERT IN
=============

   /sys/events.h


ARGUMENTE
=========

   string eid,
     Die ID des Events, fuer den man sich registrieren will. Da dieser
     String fuer alle Events jeweils eindeutig sein muss, empfiehlt es sich,
     fuer eigene Events z.B. als Praefix den eigenen Magiernamen zu nehmen,
     z.B. "zesstra_vulkanausbruch".
     ACHTUNG: IDs, die mit '_evt_lib_' beginnen, sind AUSSCHLIESSLICH der
     Mudlib vorbehalten!
   string fun,
     Name der Funktion, die im Objekt listener bei Auftreten des Events
     gerufen werden soll.
   object listener,
     Das Objekt, das als Lauscher fuer diesen Event registriert werden soll.


BESCHREIBUNG
============

   Das Objekt 'listener' wird als Lauscher dieses Events registriert. Ab
   diesem Moment wird immer dann, wenn ein Event mit der ID 'eid' ausgeloest
   wird, in 'listener' die Funktion 'fun' aufgerufen (zeitverzoegert, meist
   0-2s).



   Die Funktion wird dabei immer mit 3 Argumenten aufgerufen:
   listener->fun(eid, triggerob, data);
   Hierbei ist 'eid' die jeweilige Event-ID und 'triggerob' ist das Objekt,
   welches den Event ausloeste.
   'data' kann jeder LPC-Datentyp sein und enthaelt die Daten, die das
   triggernde Objekt an alle Listener uebermitteln will (damit sind Datentyp
   und Inhalt komplett abhaengig vom Event!)

   Existiert bisher noch kein Event mit der ID 'eid', wird implizit ein
   neuer Event erstellt, der erstmal nur das sich gerade registrierende
   Objekt als Lauscher hat.


RUeCKGABEWERT
=============

   1 fuer Erfolg, <=0 fuer Misserfolg.
   1   - Erfolg, 'listener' wurde eingetragen.
   -1  - falsche Argumente wurden uebergeben
   -2  - nicht-oeffentlicher Event und 'listener' wurde nicht fuer diesen
         Event freigegeben (momentan gibt es noch keine nicht-oeffentlichen
         Events)
   -3  - 'fun' in 'listener' ist nicht vorhanden oder nicht von aussen
         aufrufbar (protected, static, private).


BEMERKUNGEN
===========

   Wenn 'listener' bereits fuer den Event registriert wird, wird die alte
   Registrierung ueberschrieben (als ggf. gilt dann der jetzt uebergebene
   Funktionsname).
   Die Funktion 'fun' sollte sparsam mit den Eval-Ticks umgehen. Momentan
   ist die max. Menge an Ticks auf 30000 beschraenkt. Dies kann bei
   Problemen auch jederzeit reduziert werden!
   Der EVENTD merkt sich Event-Lauscher nicht ueber Reboots hinaus.
   Sollte sich eine Blueprint anmelden, sich zerstoeren und neugeladen
   werden, ist die neue Blueprint noch angemeldet, weil das neue Objekt
   unter dem alten Namen wiedergefunden wird. Dies gilt _nicht_ fuer
   Clones!


BEISPIELE
=========

   1. Ein Objekt moechte ueber Spielertode informiert werden:
        EVENTD->RegisterEvent(EVT_LIB_PLAYER_DEATH, "spieler_ist_tot",
                              this_object());
      Ab jetzt wird im Objekt jedes Mal, wenn ein Spieler stirbt, die
      Funktion "spieler_ist_tot" aufgerufen.

   2. Ein Objekt will informiert werden, wenn der Event
      "boing_zwergenkoenig_angriff" ausgeloest wird:
         EVENTD->RegisterEvent("boing_zwergenkoenig_angriff","alarm",
                                this_object());


SIEHE AUCH
==========


events, eventd, UnregisterEvent(), TriggerEvent()

Last modified: 15.08.2007, Zesstra


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.