NotifyMove()
************


FUNKTION
========

   protected void NotifyMove(object dest, object oldenv, int method);


DEFINIERT IN
============

   /std/thing/moving.c
   /std/living/moving.c
   /std/player/moving.c


ARGUMENTE
=========

   dest
        Das Ziel des Moves bzw. das jetzt aktuelle Environment
   oldenv
        Das alte Environment des Objekts
   method
        Die Move-Methode(n), mit der/denen bewegt wurde.


BESCHREIBUNG
============

   Diese Funktion wird vom move() im Objekt gerufen, sobald die Bewegung im
   wesentlichen abgeschlossen ist. Sie soll einerseits das Objekt ueber eine
   stattgefundene Bewegung informieren, aber auch einige Dinge erledigen,
   die bei der Bewegung stattfinden muessen (bei Livings z.B. das Team
   nachholen).


RUeCKGABEWERT
=============

   keiner


BEMERKUNGEN
===========

   Diese Funktion kann ueberschrieben werden, damit das Objekt Bewegungen
   mitgekommt, ohne das move() selber zu ueberschreiben oder einen Move-Hook
   zu setzen. Dabei aber bitte unbedingt beachten:
   Das geerbte NotifyMove() _MUSS IN JEDEM FALL_ mit aufgerufen werden!
   Solltet ihr das vergessen, werden eure Objekte buggen. ;-)
   Die Funktion darf nur objektintern verwendet werden. Beim Ueberschreiben
   das 'protected' nicht vergessen!


BEISPIELE
=========

   Eine Bombe, die in Seherhaustruhen explodiert:

   protected void NotifyMove(object dest, object oldenv, int method) {
       ::NotifyMove(dest, oldenv, method); // WICHTIG!
       if (objectp(dest) &&
           load_name(dest) == "/d/seher/haeuser/truhe") {
           if (find_call_out("explodiere")==-1)
               call_out("explodiere",900);
       }
       else
           remove_call_out("explodiere");
   }


SIEHE AUCH
==========

   PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
   PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
   PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c

Last modified: 04.08.2007, Zesstra
