MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | move() |
| 2 | |
| 3 | FUNKTION: |
| 4 | Fuer unbelebte Gegenstaende (/std/thing): |
| 5 | varargs int move(object|string dest, int method); |
| 6 | |
| 7 | Fuer Lebewesen (/std/living, /std/npc, usw.): |
| 8 | varargs int move(object|string dest, int method, string dir, |
| 9 | string textout, string textin); |
| 10 | |
| 11 | DEFINIERT IN: |
| 12 | /std/thing/moving.c |
| 13 | /std/living/moving.c |
| 14 | |
| 15 | ARGUMENTE: |
| 16 | dest |
| 17 | Das Zielobjekt (entweder der Dateiname oder das Objekt selbst). |
| 18 | |
| 19 | method |
| 20 | Die Art der Bewegung (eine der unten aufgefuehrten Arten; es |
| 21 | koennen auch mehrere zusammenge-ODER-t werden). |
| 22 | |
| 23 | dir |
| 24 | Die Richtung, in die ein Lebewesen geht. Normalerweise ist das die |
| 25 | eingeschlagene Laufrichtung (zB. "nach Norden"). |
| 26 | |
| 27 | textout |
| 28 | Verlaesst ein Lebewesen einen Raum, so wird diese Meldung in den |
| 29 | Raum geschickt. Ist bei dir ein String angegeben, so wird dieser |
| 30 | noch an textout angehaengt. Der Name des Lebewesens wird der |
| 31 | Meldung in jedem Fall vorangestellt. |
| 32 | |
| 33 | textin |
| 34 | Dieser Text wird im Zielraum ausgegeben, wenn ein Lebewesen ihn |
| 35 | betritt. Bei normaler Fortbewegung ist das "kommt an". Dem Text |
| 36 | wird noch der Name des Spielers vorangestellt. |
| 37 | |
| 38 | BESCHREIBUNG: |
| 39 | Es wird versucht, das Objekt in das Zielobjekt dest zu bewegen. |
| 40 | Abhaengig vom momentanen Aufenthaltsort und dem Zielobjekt ist die |
| 41 | Bewegungsmethode method zu waehlen. |
| 42 | |
| 43 | In <moving.h> sind folgende Konstanten fuer die Art der Bewegung |
| 44 | definiert: |
| 45 | M_NOCHECK |
| 46 | Es werden keine Abfragen durchgefuehrt, ob das Objekt ueberhaupt |
| 47 | in das Zielobjekt hineinpasst (was zB. aus Gewichtsgruenden der |
| 48 | Fall sein koennte). |
| 49 | |
| 50 | M_GO |
| 51 | Ein Lebewesen bewegt sich gehend von einem Raum in den naechsten. |
| 52 | Bei normalem Gehen wird diese Methode benutzt; man sollte sie auch |
| 53 | benutzen, wenn man Spieler ueber einen SpecialExit in einen |
| 54 | benachbarten Raum bewegt. |
| 55 | |
| 56 | M_TPORT |
| 57 | Ein Lebewesen wird von einem Raum in einen anderen teleportiert. |
| 58 | Im Gegensatz zu M_GO kann ein Raum verhindern, dass man ihn |
| 59 | mittels M_TPORT verlaesst oder betritt. |
| 60 | |
| 61 | M_NO_SHOW |
| 62 | Beim Bewegen von Lebewesen bekommen diese die Beschreibung des |
| 63 | Zielraumes nicht ausgegeben. |
| 64 | |
| 65 | M_NO_ATTACK |
| 66 | Beim Bewegen von Lebewesen bekommen diese keinen |
| 67 | Begruessungsschlag, wenn ein Feind im Zielraum steht. |
| 68 | |
| 69 | M_SILENT |
| 70 | Es werden beim Bewegen keine Meldungen ausgegeben. Dieser |
| 71 | Parameter wirkt sich nur auf das Bewegen von Lebenwesen aus. |
| 72 | |
| 73 | M_GET |
| 74 | Das Objekt wird von einem unbelebten Objekt (zB. einem Raum, einer |
| 75 | Leiche, einem Beutel) in ein lebendes Objekt (Spieler oder NPC) |
| 76 | bewegt. |
| 77 | |
| 78 | M_PUT |
| 79 | Das Objekt wird von einem lebenden Objekt in ein unbelebtes Objekt |
| 80 | bewegt. |
| 81 | |
| 82 | M_GIVE |
| 83 | Das Objekt wird von einem Lebewesen an ein anderes Lebewesen |
| 84 | weitergereicht. |
| 85 | |
| 86 | M_MOVE_ALL (Nur fuer Objekte, die /std/unit.c erben) |
| 87 | Es wird die gesamte Menge bewegt, nicht nur ein Teil. |
| 88 | |
| 89 | Soll das Objekt auf jeden Fall und ohne jede Abfrage bewegt werden, so |
| 90 | reicht es, als method M_NOCHECK zu uebergeben. |
| 91 | |
| 92 | Waffen und Ruestungen werden, soweit sie gezueckt bzw. angezogen sind, |
| 93 | beim Bewegen auf jeden Fall weggesteckt bzw. ausgezogen. Ist in method |
| 94 | M_SILENT enthalten, so geschieht dies ohne Meldungen. |
| 95 | |
| 96 | Die erste Art des Funktionsaufrufs ist sowohl beim Bewegen von |
| 97 | Lebewesen als auch von unbelebten Objekten moeglich. Die zweite Art |
| 98 | laesst sich nur bei Lebewesen anwenden. |
| 99 | |
| 100 | ANMERKUNG: |
| 101 | Diese Funktion sollte nicht (mehr) ueberschrieben werden. Stattdessen |
| 102 | greift bitte auf PreventMove() und NotifyMove() zurueck. RMs sind |
| 103 | aufgerufen, Objekt mit ueberschriebenen move() nur noch dann |
| 104 | anzuschliessen, wenn der Zweck sonst nicht erreicht werden kann. Solltet |
| 105 | ihr move() ueberschreiben: Seid euch sehr genau im klaren, was move() |
| 106 | genau macht. ;-) |
| 107 | |
| 108 | Wenn Livings bewegt werden, sorgt move() automatisch in Abhaengigkeit |
| 109 | von P_PARA dafuer, dass das Lebewesen in der korrekten (Parallel-)Welt |
| 110 | landet. |
| 111 | |
| 112 | Bei Gegenstaenden wird ebenfalls versucht, die richtige Zielwelt |
| 113 | auszuwaehlen (damit z.B. in der Parallelwelt geworfene Bumerangs auch nur |
| 114 | innerhalb der Parallelwelt fliegen). Um Rechenzeit zu sparen, wird das |
| 115 | allerdings nur versucht, wenn 'dest' ein Filename ist und kein Objekt. |
| 116 | |
| 117 | Grund: bei Zielobjekten handelt es sich meist um Bewegungen in das Inv |
| 118 | oder Env eines Spielers - und die sind uninteressant. Raumwechsel dagegen |
| 119 | erfolgen fast immer unter Angabe eines Filenamens anstatt eines Objektes. |
| 120 | |
| 121 | RUeCKGABEWERT: |
| 122 | Alle Rueckgabewerte sind als symbolische Konstanten in <moving.h> |
| 123 | definiert. (MOVE_OK ist 1, alle anderen sind <0 und symbolisieren Fehler. |
| 124 | Traditionell erfolgt die Pruefung auf erfolgreiches Move mit == 1, in |
| 125 | Zukunft wird == MOVE_OK empfohlen.) |
| 126 | |
| 127 | MOVE_OK |
| 128 | Die Bewegung wurde erfolgreich abgeschlossen. |
| 129 | |
| 130 | ME_PLAYER |
| 131 | Lebewesen lassen sich nicht ohne weiteres bewegen. Es muss |
| 132 | mindestens eine der Methoden M_NOCHECK, M_GO oder M_TPORT |
| 133 | angegeben werden. |
| 134 | |
| 135 | ME_TOO_HEAVY |
| 136 | Das Zielobjekt kann dieses Objekt aus Gewichtsgruenden nicht mehr |
| 137 | aufnehmen. |
| 138 | |
| 139 | ME_CANT_TPORT_IN |
| 140 | Das Zielobjekt verbietet das Teleportieren in sich hinein (nur bei |
| 141 | M_TPORT ohne M_NOCHECK). |
| 142 | |
| 143 | ME_CANT_TPORT_OUT |
| 144 | Der Raum, in dem sich das Lebewesen befindet, verbietet das |
| 145 | Teleportieren aus sich hinaus (nur bei M_TPORT ohne M_NOCHECK). |
| 146 | |
| 147 | ME_CANT_BE_DROPPED |
| 148 | Das Objekt kann nicht fallen gelassen werden (zB. weil P_NODROP |
| 149 | gesetzt ist). |
| 150 | |
| 151 | ME_CANT_BE_TAKEN |
| 152 | Das Objekt kann nicht genommen werden (zB. weil P_NOGET gesetzt |
| 153 | ist). |
| 154 | |
| 155 | ME_CANT_BE_INSERTED |
| 156 | Das Zielobjekt verhindert das Einfuegen aus bestimmten Gruenden. |
| 157 | |
| 158 | ME_CANT_LEAVE_ENV |
| 159 | Der Container verhindert ein verlassen des Objektes |
| 160 | |
| 161 | ME_TOO_HEAVY_FOR_ENV |
| 162 | Ein Objekt kann einen Behaelter nicht verlassen, da es dem |
| 163 | Lebewesen sonst zu schwer wuerde. |
| 164 | |
| 165 | TOO_MANY_OBJECTS |
| 166 | Das Zielobjekt kann soviele Objekte nicht mehr aufnehmen. |
| 167 | |
| 168 | ME_NOT_ALLOWED |
| 169 | Raeume mit gesetzter Property P_NO_PLAYERS koennen nur von |
| 170 | Testspielern und Magiern betreten werden. Bei Spielern oder |
| 171 | Gildentesties gibt es diese Fehlermeldung. |
| 172 | ME_WAS_DESTRUCTED |
| 173 | Das Objekt hat sich entweder im Verlaufe der Bewegung selbst |
| 174 | zerstoert oder wurde zerstoert, sodass move() nicht erfolgreich |
| 175 | beendet werden konnte. (Bsp: sensitive Objekte) |
| 176 | |
| 177 | ME_DONT_WANT_TO_BE_MOVED |
| 178 | Das Objekt moechte nicht bewegt werden. |
| 179 | |
| 180 | BEISPIELE: |
| 181 | o Ein Objekt "gibt sich" dem Spieler: |
| 182 | |
| 183 | move(this_player(), M_GET); |
| 184 | |
| 185 | o Ein Lebewesen wird in die Abenteurergilde teleportiert: |
| 186 | |
| 187 | lv->move("/gilden/abenteurer", M_TPORT); |
| 188 | |
| 189 | o Ein Spieler "wird in die Gilde gegangen": |
| 190 | |
| 191 | this_player()->move("/gilden/abenteurer", M_GO, "in die Gilde"); |
| 192 | |
| 193 | Spieler, die mit ihm im gleichen Raum stehen, sehen folgende |
| 194 | Meldung: |
| 195 | "<name> geht in die Gilde." |
| 196 | |
| 197 | o Ein Spieler schwimmt durchs Meer: |
| 198 | |
| 199 | this_player()->move("meer_xy", M_GO, "nach Norden", "schwimmt", |
| 200 | "schwimmt herein"); |
| 201 | |
| 202 | Spieler in seinem Startraum sehen "<name> schwimmt nach Norden.", |
| 203 | Spieler in seinem Zielraum sehen "<name> schwimmt herein." |
| 204 | |
| 205 | SIEHE AUCH: |
| 206 | move_object(), remove(), setmin, setmmin, setmout, setmmout, review, |
| 207 | PreventInsert(), PreventLeave(), PreventInsertLiving(), |
| 208 | PreventLeaveLiving(), PreventMove(), NotifyInsert(), NotifyLeave(), |
| 209 | NotifyMove(), NotifyRemove(), init(), exit(), |
| 210 | P_NO_PLAYERS, P_PARA, /std/thing/moving.c, /std/living/moving.c |
| 211 | ----------------------------------------------------------------------- |
| 212 | 2015-Jan-19, Arathorn |