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
