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.

     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:
     move_object(), remove(), setmin, setmmin, setmout, setmmout, review,
     PreventInsert(), PreventLeave(), PreventInsertLiving(),
     PreventLeaveLiving(), PreventMove(), NotifyInsert(), NotifyLeave(),
     NotifyMove(), NotifyRemove(), init(), exit(),
     P_NO_PLAYERS, P_PARA, /std/thing/moving.c, /std/living/moving.c
     -----------------------------------------------------------------------
2015-Jan-19, Arathorn
