BecomesNetAlive()

FUNKTION:
    void BecomesNetAlive(object pl);

GERUFEN VON:
    /std/player/base.c

ARGUMENTE:
    pl
      Spieler, der Verbindung zum MUD wiedererlangt.

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.
    Wird die Verbindung wieder aufgebaut, so wird der Spielercharakter
    wieder zum Leben erweckt und gegebenenfalls zuvor aus dem
    Netztotenraum zurueck zu seiner letzten Umgebung teleportiert.
    Um nun einen Ueberblick darueber zu erhalten, wann ein Spieler die
    Verbindung zum MUD wiederherstellt, gibt es die Funktion
    BecomesNetAlive(). 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 BecomesNetDead(), mit der man
    auf aehnliche Weise einschlafende Spieler registrieren kann.

BEISPIELE:
    In einem NPC waere folgendes denkbar:
    
    void BecomesNetAlive(object pl) {
      tell_room(environment(),break_string(
        "Guten Morgen "+pl->name(WER)+", auch schon ausgeschlafen?!", 77,
        Name(WER)+" sagt grinsend: "));
    }
    Steht der NPC in einem Raum, wo ein Spieler aufwacht, so wird der
    Spieler gebuehrend begruesst.

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

24. Aug 2011 Gloinson