blob: ec8c1da142473c00c5d90421a0ed0d5a7225fcee [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
2PreventMove()
3*************
4
5
Zesstraef629dc2020-01-09 21:11:25 +01006PreventMove()
7=============
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
Zesstraef629dc2020-01-09 21:11:25 +010019 /std/thing/moving.c /std/living/moving.c /std/player/moving.c
MG Mud User88f12472016-06-24 23:31:02 +020020
MG Mud User88f12472016-06-24 23:31:02 +020021
Zesstra953f9972017-02-18 15:37:36 +010022ARGUMENTE
23=========
24
25 dest
Zesstraef629dc2020-01-09 21:11:25 +010026 Das Ziel des Moves
27
Zesstra953f9972017-02-18 15:37:36 +010028 oldenv
Zesstraef629dc2020-01-09 21:11:25 +010029 Das (Noch-)Environment des Objekts
30
Zesstra953f9972017-02-18 15:37:36 +010031 method
Zesstraef629dc2020-01-09 21:11:25 +010032 Die Move-Methode(n), mit der/denen bewegt werden soll
Zesstra953f9972017-02-18 15:37:36 +010033
34
35BESCHREIBUNG
36============
37
Zesstraef629dc2020-01-09 21:11:25 +010038 Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach
39 'dest' bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B.
40 schaltet M_NOCHECK die meisten Pruefungen ab). Bei Gegenstaenden
41 wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel das Objekt
42 aufnehmen will (MayAddWeight(), PreventInsert) oder auch
43 PreventLeave() geprueft. Bei Lebewesen wird z.B. P_NO_TPORT in
44 'dest' und 'oldenv' und PreventLeaveLiving/PreventInsertLiving()
45 ausgewertet. Bei Spielern wird auch noch getestet, ob method M_GO
46 oder M_TPORT enthaelt und ob das Ziel nur von Testspielern betreten
47 werden kann.
Zesstra953f9972017-02-18 15:37:36 +010048
49
50RUeCKGABEWERT
51=============
52
Zesstraef629dc2020-01-09 21:11:25 +010053 0, wenn das Objekt bewegt werden darf. Wenn es nicht bewegt werden
54 darf, sind als Rueckgabewerte die in /sys/moving.h definierten
55 Move-Fehlerwerte zulaessig (s. move()). Sollte hier ein ungueltiger
56 Fehlerwert zurueckgegeben werden, wird das move() ebenfalls
57 abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.
Zesstra953f9972017-02-18 15:37:36 +010058
59
60BEMERKUNGEN
61===========
62
63 Diese Funktion kann ueberschrieben, um feinere Kontrolle ueber die
Zesstraef629dc2020-01-09 21:11:25 +010064 Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge
65 beachten:
66
Zesstra953f9972017-02-18 15:37:36 +010067 1. Denkt daran, ggf. M_NOCHECK zu beruecksichtigen und und eure
68 Pruefungen nur zu machen, wenn es nicht in method vorkommt.
Zesstraef629dc2020-01-09 21:11:25 +010069
70 2. *GANZ WICHTIG*: Wenn ihr mit euren Pruefungen fertig sein und
71 das Objekt bewegt werden duerfte, die geerbten Pruefungen noch
72 testen, also *IMMER* das geerbte PreventMove() noch aufrufen und
73 dessen Wert zurueckgeben/beruecksichtigen, da sonst Pruefungen des
74 Gewichts etc. nicht funktionieren oder bei Lebewesen die Prevent*()
75 im Environment nicht gerufen werden!
76
77 3. Die Funktion ist nur objektintern zu verwenden, Call-Other von
78 aussen sind nicht moeglich, beim Ueberschreiben 'protected' nicht
79 vergessen.
80
81 4. Nochmal: Geerbtes PreventMove() *NICHT VERGESSEN*!
Zesstra953f9972017-02-18 15:37:36 +010082
83
84BEISPIELE
85=========
86
87 Ein Objekt, was nur im Sternenlicht aufgenommen werden kann (warum
88 auch immer):
89
90 protected int PreventMove(object dest, object oldenv, int method) {
91 if ( (method & M_NOCHECK) ) {
92 // wenn mit M_NOCHECK bewegt, ist das Sternenlicht egal, nur
93 // geerbtes PreventMove() beruecksichten:
94 return ::PreventMove(dest, oldenv, method);
MG Mud User88f12472016-06-24 23:31:02 +020095 }
Zesstra953f9972017-02-18 15:37:36 +010096 else if ( method & M_GET) {
97 // wenn es aufgenommen werden soll: nach Sternenlicht im Raum
98 // gucken:
99 if (objectp(dest) &&
100 (dest->QueryProp(P_LIGHT_TYPE) != LT_STARS))
101 return ME_CANT_BE_TAKEN;
102 }
103 // Fall-through:
104 return ::PreventMove(dest, oldenv, method);
105 }
MG Mud User88f12472016-06-24 23:31:02 +0200106
107
Zesstra953f9972017-02-18 15:37:36 +0100108SIEHE AUCH
109==========
MG Mud User88f12472016-06-24 23:31:02 +0200110
Zesstra953f9972017-02-18 15:37:36 +0100111 PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
112 PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
Zesstraef629dc2020-01-09 21:11:25 +0100113 PreventMove(), MayAddWeight(), move()
Zesstra953f9972017-02-18 15:37:36 +0100114
Zesstraef629dc2020-01-09 21:11:25 +0100115Last modified: 09.01.2020, Zesstra