blob: d8f6aa9554316f38023628f4ed22629fe9178875 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001move()
2======
3
4move()
5
6FUNKTION:
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
14DEFINIERT IN
15------------
16::
17
18 /std/thing/moving.c
19 /std/living/moving.c
20
21ARGUMENTE
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
47BESCHREIBUNG
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
112ANMERKUNG
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
138RUeCKGABEWERT
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
202BEISPIELE
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
230SIEHE AUCH
231----------
232::
233
Arathorn074665c2019-08-30 21:53:00 +0200234 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
2472019-Aug-20, Arathorn
Zesstra18626972017-01-31 10:38:27 +0100248