blob: b323c34cca16a70393ee561abac1bc511e240545 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001move()
2
3FUNKTION:
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
11DEFINIERT IN:
12 /std/thing/moving.c
13 /std/living/moving.c
14
15ARGUMENTE:
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
38BESCHREIBUNG:
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
100ANMERKUNG:
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
121RUeCKGABEWERT:
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
180BEISPIELE:
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
205SIEHE 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 -----------------------------------------------------------------------
2122015-Jan-19, Arathorn