BecomesNetDead()

FUNKTION:
    void BecomesNetDead(object pl);

GERUFEN VON:
    /std/player/base.c

ARGUMENTE:
    object pl
      Spieler, der Verbindung zum MUD verliert.

BESCHREIBUNG:
    Spieler, welche die Verbindung zum MUD freiwillig
    (z.B. per 'schlafe ein') oder unfreiwillig verlieren, gehen in den
    Netztotenstatus ueber. Sie verbleiben noch eine definierte Zeit in
    der zuletzt betretenen Umgebung und werden schliesslich automatisch
    in den Netztotenraum ueberfuehrt.
    Um nun einen Ueberblick darueber zu erhalten, wann ein Spieler die
    Verbindung zum MUD verliert, gibt es die Funktion BecomesNetDead().
    Sie wird automatisch in der Umgebung des Spielers, in allen Objekten
    in der Umgebung des Spielers (nicht rekursiv) und in allen Objekten
    im Spieler (rekursiv) aufgerufen. Uebergeben wird hierbei das
    Spielerobjekt.

    Es gibt auch noch die Funktion BecomesNetAlive(), mit der man
    auf aehnliche Weise erwachende Spieler registrieren kann.

BEISPIELE:
    Es gibt Gebiete, in denen netztote Spieler unerwuenscht sind.
    Folgendermassen kann man sich ihrer wirkungsvoll entledigen:
    
    void BecomesNetDead(object pl) {
      pl->move("eingangsraum zu gebiet", M_TPORT|M_NOCHECK);
    }
    Man schickt diese Spieler wieder zum Eingang des Gebietes.
    Da der letzte Aufenthaltsort eines Spielers, der in den
    Netztotenstatus uebergeht, erst nach Aufruf der Funktion
    BecomesNetDead() abgespeichert wird, wacht der Spieler dann an dem
    Ort auf, wo man Ihn innerhalb dieser Funktion hinteleportiert hat.

SIEHE AUCH:
    BecomesNetAlive(), PlayerQuit(), /std/player/base.c, /room/netztot.c

24. Aug 2011, Gloinson