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