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