
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
