
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
