move()
******

move()

FUNKTION:
   Fuer unbelebte Gegenstaende (/std/thing):
      varargs int move(object|string dest, int method);

   Fuer Lebewesen (/std/living, /std/npc, usw.):
      varargs int move(object|string dest, int method, string dir,
         string textout, string textin);


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

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


ARGUMENTE
=========

   dest
        Das Zielobjekt (entweder der Dateiname oder das Objekt selbst).

   method
        Die Art der Bewegung (eine der unten aufgefuehrten Arten; es
        koennen auch mehrere zusammenge-ODER-t werden).

   dir
        Die Richtung, in die ein Lebewesen geht. Normalerweise ist das die
        eingeschlagene Laufrichtung (zB. "nach Norden").

   textout
        Verlaesst ein Lebewesen einen Raum, so wird diese Meldung in den
        Raum geschickt. Ist bei dir ein String angegeben, so wird dieser
        noch an textout angehaengt. Der Name des Lebewesens wird der
        Meldung in jedem Fall vorangestellt.

   textin
        Dieser Text wird im Zielraum ausgegeben, wenn ein Lebewesen ihn
        betritt. Bei normaler Fortbewegung ist das "kommt an". Dem Text
        wird noch der Name des Spielers vorangestellt.


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

   Es wird versucht, das Objekt in das Zielobjekt dest zu bewegen.
   Abhaengig vom momentanen Aufenthaltsort und dem Zielobjekt ist die
   Bewegungsmethode method zu waehlen.

   In <moving.h> sind folgende Konstanten fuer die Art der Bewegung
   definiert:
   M_NOCHECK
        Es werden keine Abfragen durchgefuehrt, ob das Objekt ueberhaupt
        in das Zielobjekt hineinpasst (was zB. aus Gewichtsgruenden der
        Fall sein koennte).

   M_GO
        Ein Lebewesen bewegt sich gehend von einem Raum in den naechsten.
        Bei normalem Gehen wird diese Methode benutzt; man sollte sie auch
        benutzen, wenn man Spieler ueber einen SpecialExit in einen
        benachbarten Raum bewegt.

   M_TPORT
        Ein Lebewesen wird von einem Raum in einen anderen teleportiert.
        Im Gegensatz zu M_GO kann ein Raum verhindern, dass man ihn
        mittels M_TPORT verlaesst oder betritt.

   M_NO_SHOW
        Beim Bewegen von Lebewesen bekommen diese die Beschreibung des
        Zielraumes nicht ausgegeben.

   M_NO_ATTACK
        Beim Bewegen von Lebewesen bekommen diese keinen
        Begruessungsschlag, wenn ein Feind im Zielraum steht.

   M_SILENT
        Es werden beim Bewegen keine Meldungen ausgegeben. Dieser
        Parameter wirkt sich nur auf das Bewegen von Lebenwesen aus.
        (Magier mit 'mschau an' sehen die Bewegungen dennoch, es wird
         eine Standardmeldung ausgegeben.)

   M_GET
        Das Objekt wird von einem unbelebten Objekt (zB. einem Raum, einer
        Leiche, einem Beutel) in ein lebendes Objekt (Spieler oder NPC)
        bewegt.

   M_PUT
        Das Objekt wird von einem lebenden Objekt in ein unbelebtes Objekt
        bewegt.

   M_GIVE
        Das Objekt wird von einem Lebewesen an ein anderes Lebewesen
        weitergereicht.

   M_MOVE_ALL (Nur fuer Objekte, die /std/unit.c erben)
        Es wird die gesamte Menge bewegt, nicht nur ein Teil.

   Soll das Objekt auf jeden Fall und ohne jede Abfrage bewegt werden, so
   reicht es, als method M_NOCHECK zu uebergeben.

   Waffen und Ruestungen werden, soweit sie gezueckt bzw. angezogen sind,
   beim Bewegen auf jeden Fall weggesteckt bzw. ausgezogen. Ist in method
   M_SILENT enthalten, so geschieht dies ohne Meldungen.

   Die erste Art des Funktionsaufrufs ist sowohl beim Bewegen von
   Lebewesen als auch von unbelebten Objekten moeglich. Die zweite Art
   laesst sich nur bei Lebewesen anwenden.


ANMERKUNG
=========

   Diese Funktion sollte nicht (mehr) ueberschrieben werden. Stattdessen
   greift bitte auf PreventMove() und NotifyMove() zurueck. RMs sind
   aufgerufen, Objekt mit ueberschriebenen move() nur noch dann
   anzuschliessen, wenn der Zweck sonst nicht erreicht werden kann. Solltet
   ihr move() ueberschreiben: Seid euch sehr genau im klaren, was move()
   genau macht. ;-)



   Wenn Livings bewegt werden, sorgt move() automatisch in Abhaengigkeit
   von P_PARA dafuer, dass das Lebewesen in der korrekten (Parallel-)Welt
   landet.

   Bei Gegenstaenden wird ebenfalls versucht, die richtige Zielwelt
   auszuwaehlen (damit z.B. in der Parallelwelt geworfene Bumerangs auch nur
   innerhalb der Parallelwelt fliegen). Um Rechenzeit zu sparen, wird das
   allerdings nur versucht, wenn 'dest' ein Filename ist und kein Objekt.

   Grund: bei Zielobjekten handelt es sich meist um Bewegungen in das Inv
   oder Env eines Spielers - und die sind uninteressant. Raumwechsel dagegen
   erfolgen fast immer unter Angabe eines Filenamens anstatt eines Objektes.


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

   Alle Rueckgabewerte sind als symbolische Konstanten in <moving.h>
   definiert. (MOVE_OK ist 1, alle anderen sind <0 und symbolisieren Fehler.
   Traditionell erfolgt die Pruefung auf erfolgreiches Move mit == 1, in
   Zukunft wird == MOVE_OK empfohlen.)



   MOVE_OK
        Die Bewegung wurde erfolgreich abgeschlossen.

   ME_PLAYER
        Lebewesen lassen sich nicht ohne weiteres bewegen. Es muss
        mindestens eine der Methoden M_NOCHECK, M_GO oder M_TPORT
        angegeben werden.

   ME_TOO_HEAVY
        Das Zielobjekt kann dieses Objekt aus Gewichtsgruenden nicht mehr
        aufnehmen.

   ME_CANT_TPORT_IN
        Das Zielobjekt verbietet das Teleportieren in sich hinein (nur bei
        M_TPORT ohne M_NOCHECK).

   ME_CANT_TPORT_OUT
        Der Raum, in dem sich das Lebewesen befindet, verbietet das
        Teleportieren aus sich hinaus (nur bei M_TPORT ohne M_NOCHECK).

   ME_CANT_BE_DROPPED
        Das Objekt kann nicht fallen gelassen werden (zB. weil P_NODROP
        gesetzt ist).

   ME_CANT_BE_TAKEN
        Das Objekt kann nicht genommen werden (zB. weil P_NOGET gesetzt
        ist).

   ME_CANT_BE_INSERTED
        Das Zielobjekt verhindert das Einfuegen aus bestimmten Gruenden.

   ME_CANT_LEAVE_ENV
        Der Container verhindert ein verlassen des Objektes

   ME_TOO_HEAVY_FOR_ENV
        Ein Objekt kann einen Behaelter nicht verlassen, da es dem
        Lebewesen sonst zu schwer wuerde.

   TOO_MANY_OBJECTS
        Das Zielobjekt kann soviele Objekte nicht mehr aufnehmen.

   ME_NOT_ALLOWED
        Raeume mit gesetzter Property P_NO_PLAYERS koennen nur von
        Testspielern und Magiern betreten werden. Bei Spielern oder
        Gildentesties gibt es diese Fehlermeldung.
   ME_WAS_DESTRUCTED
        Das Objekt hat sich entweder im Verlaufe der Bewegung selbst
        zerstoert oder wurde zerstoert, sodass move() nicht erfolgreich
        beendet werden konnte. (Bsp: sensitive Objekte)

   ME_DONT_WANT_TO_BE_MOVED
        Das Objekt moechte nicht bewegt werden.


BEISPIELE
=========

   o Ein Objekt "gibt sich" dem Spieler:

     move(this_player(), M_GET);

   o Ein Lebewesen wird in die Abenteurergilde teleportiert:

     lv->move("/gilden/abenteurer", M_TPORT);

   o Ein Spieler "wird in die Gilde gegangen":

     this_player()->move("/gilden/abenteurer", M_GO, "in die Gilde");

     Spieler, die mit ihm im gleichen Raum stehen, sehen folgende
     Meldung:
     "<name> geht in die Gilde."

   o Ein Spieler schwimmt durchs Meer:

     this_player()->move("meer_xy", M_GO, "nach Norden", "schwimmt",
                         "schwimmt herein");

     Spieler in seinem Startraum sehen "<name> schwimmt nach Norden.",
     Spieler in seinem Zielraum sehen "<name> schwimmt herein."


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

   Seherkommandos
       setmin, setmmin, setmout, setmmout, review
   Verwandt:
       move_object(), remove(), PreventInsert(), PreventLeave(),
       PreventInsertLiving(), PreventLeaveLiving(), PreventMove(),
       NotifyInsert(), NotifyLeave(), NotifyMove(), NotifyRemove(),
       init(), exit()
   Properties:
       P_MSGIN, P_MSGOUT, P_MMSGIN, P_MMSGOUT, P_NO_PLAYERS, P_PARA,
       P_NO_TPORT
   Objekte:
       /std/thing/moving.c, /std/living/moving.c

2019-Aug-20, Arathorn
