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

