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

