| 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 |