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
