blob: 920372d2a4f06260efea98eb7adc7257eea6f218 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
2PreventMove()
3*************
4
5
MG Mud User88f12472016-06-24 23:31:02 +02006PreventInsert()
Zesstra953f9972017-02-18 15:37:36 +01007===============
MG Mud User88f12472016-06-24 23:31:02 +02008
MG Mud User88f12472016-06-24 23:31:02 +02009
Zesstra953f9972017-02-18 15:37:36 +010010FUNKTION
11========
MG Mud User88f12472016-06-24 23:31:02 +020012
Zesstra953f9972017-02-18 15:37:36 +010013 protected int PreventMove(object dest, object oldenv, int method);
MG Mud User88f12472016-06-24 23:31:02 +020014
MG Mud User88f12472016-06-24 23:31:02 +020015
Zesstra953f9972017-02-18 15:37:36 +010016DEFINIERT IN
17============
MG Mud User88f12472016-06-24 23:31:02 +020018
Zesstra953f9972017-02-18 15:37:36 +010019 /std/thing/moving.c
20 /std/living/moving.c
21 /std/player/moving.c
MG Mud User88f12472016-06-24 23:31:02 +020022
MG Mud User88f12472016-06-24 23:31:02 +020023
Zesstra953f9972017-02-18 15:37:36 +010024ARGUMENTE
25=========
26
27 dest
28 Das Ziel des Moves
29 oldenv
30 Das (Noch-)Environment des Objekts
31 method
32 Die Move-Methode(n), mit der/denen bewegt werden soll
33
34
35BESCHREIBUNG
36============
37
38 Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach 'dest'
39 bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B. schaltet
40 M_NOCHECK die meisten Pruefungen ab).
41 Bei Gegenstaenden wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel
42 das Objekt aufnehmen will (MayAddWeight(), PreventInsert) oder auch
43 PreventLeave() geprueft.
44 Bei Lebewesen wird z.B. P_NO_TPORT in 'dest' und 'oldenv' und
45 PreventLeaveLiving/PreventInsertLiving() ausgewertet.
46 Bei Spielern wird auch noch getestet, ob method M_GO oder M_TPORT
47 enthaelt und ob das Ziel nur von Testspielern betreten werden kann.
48
49
50RUeCKGABEWERT
51=============
52
53 0, wenn das Objekt bewegt werden darf.
54 Wenn es nicht bewegt werden darf, sind als Rueckgabewerte die in
55 /sys/moving.h definierten Move-Fehlerwerte zulaessig (s. move()). Sollte
56 hier ein ungueltiger Fehlerwert zurueckgegeben werden, wird das move()
57 ebenfalls abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.
58
59
60BEMERKUNGEN
61===========
62
63 Diese Funktion kann ueberschrieben, um feinere Kontrolle ueber die
64 Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge beachten:
65 1. Denkt daran, ggf. M_NOCHECK zu beruecksichtigen und und eure
66 Pruefungen nur zu machen, wenn es nicht in method vorkommt.
67 2. GANZ WICHTIG: Wenn ihr mit euren Pruefungen fertig sein und das Objekt
68 bewegt werden duerfte, die geerbten Pruefungen noch testen, also _IMMER_
69 das geerbte PreventMove() noch aufrufen und dessen Wert
70 zurueckgeben/beruecksichtigen, da sonst Pruefungen des Gewichts etc.
71 nicht funktionieren oder bei Lebewesen die Prevent*() im Environment
72 nicht gerufen werden!
73 3. Die Funktion ist nur objektintern zu verwenden, Call-Other von aussen
74 sind nicht moeglich, beim Ueberschreiben 'protected' nicht vergessen.
75 4. Nochmal: Geerbtes PreventMove() _NICHT VERGESSEN_!
76
77
78BEISPIELE
79=========
80
81 Ein Objekt, was nur im Sternenlicht aufgenommen werden kann (warum
82 auch immer):
83
84 protected int PreventMove(object dest, object oldenv, int method) {
85 if ( (method & M_NOCHECK) ) {
86 // wenn mit M_NOCHECK bewegt, ist das Sternenlicht egal, nur
87 // geerbtes PreventMove() beruecksichten:
88 return ::PreventMove(dest, oldenv, method);
MG Mud User88f12472016-06-24 23:31:02 +020089 }
Zesstra953f9972017-02-18 15:37:36 +010090 else if ( method & M_GET) {
91 // wenn es aufgenommen werden soll: nach Sternenlicht im Raum
92 // gucken:
93 if (objectp(dest) &&
94 (dest->QueryProp(P_LIGHT_TYPE) != LT_STARS))
95 return ME_CANT_BE_TAKEN;
96 }
97 // Fall-through:
98 return ::PreventMove(dest, oldenv, method);
99 }
MG Mud User88f12472016-06-24 23:31:02 +0200100
101
Zesstra953f9972017-02-18 15:37:36 +0100102SIEHE AUCH
103==========
MG Mud User88f12472016-06-24 23:31:02 +0200104
Zesstra953f9972017-02-18 15:37:36 +0100105 PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
106 PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
107 PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
108
MG Mud User88f12472016-06-24 23:31:02 +0200109Last modified: 04.08.2007, Zesstra