blob: d6540277093f8f125306a7492477ca6fbf8a61f5 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002Set()
Zesstra953f9972017-02-18 15:37:36 +01003*****
MG Mud User88f12472016-06-24 23:31:02 +02004
MG Mud User88f12472016-06-24 23:31:02 +02005
Zesstra953f9972017-02-18 15:37:36 +01006FUNKTION
7========
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstra953f9972017-02-18 15:37:36 +01009 public varargs mixed Set(string name, mixed Value, int Type, int extern);
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 /std/thing/properties.c
16 /sys/thing/properties.h (Prototyp)
MG Mud User88f12472016-06-24 23:31:02 +020017
MG Mud User88f12472016-06-24 23:31:02 +020018
Zesstra953f9972017-02-18 15:37:36 +010019ARGUMENTE
20=========
MG Mud User88f12472016-06-24 23:31:02 +020021
Zesstra953f9972017-02-18 15:37:36 +010022 name - Property, die manipuliert werden soll
23 Value - der zu setzende/aendernde Wert
24 Type - die Eigenschaft der Property, die manipuliert werden soll
25 extern - Interne Verwendung:
26 Wurde Set ueber SetProp von aussen gerufen.
MG Mud User88f12472016-06-24 23:31:02 +020027
MG Mud User88f12472016-06-24 23:31:02 +020028
Zesstra953f9972017-02-18 15:37:36 +010029BESCHREIBUNG
30============
MG Mud User88f12472016-06-24 23:31:02 +020031
Zesstra953f9972017-02-18 15:37:36 +010032 Eine der inneren Eigenschaften der Property 'name' wird veraendert.
33 'Type' ist dabei einer der in /sys/thing/properties.h definierten
34 F_XXX - Werte:
MG Mud User88f12472016-06-24 23:31:02 +020035
Zesstra953f9972017-02-18 15:37:36 +010036 F_VALUE (==0, default)
37 Setzt den Inhalt der Property auf 'Value'. Aehnlich "SetProp",
38 umgeht jedoch eine etwaige F_SET_METHOD oder _set_'name'()-Methode.
39 F_MODE
40 F_MODE_AS
41 F_MODE_AD
42 Aendert eines der internen Flags der Property. F_MODE negiert den
43 vorherigen Wert vom Flag 'Value', F_MODE_AS setzt und F_MODE_AD
44 loescht ihn.
45 Verfuegbare interne Flags:
MG Mud User88f12472016-06-24 23:31:02 +020046
Zesstra953f9972017-02-18 15:37:36 +010047 SAVE
MG Mud User88f12472016-06-24 23:31:02 +020048
Zesstra953f9972017-02-18 15:37:36 +010049 Property wird bei save_object() gespeichert
MG Mud User88f12472016-06-24 23:31:02 +020050
Zesstra953f9972017-02-18 15:37:36 +010051 PROTECTED
MG Mud User88f12472016-06-24 23:31:02 +020052
Zesstra953f9972017-02-18 15:37:36 +010053 Flag setzbar durch: beliebiges Objekt
54 Flag loeschbar durch: this_object(), ROOT, EM+
55 Inhalt der Property veraendern sowie Set- und Query-Methoden
56 setzen oder loeschen duerfen nur noch this_object(), ROOT, EM+
57 WARNUNG: Dieses Flag nicht leichtfertig bei Spielern setzen!
58
59 SECURED
60
61 Flag setzbar durch: this_object(), ROOT, EM+
62 Flag loeschbar durch: Niemanden!
63 Inhalt der Property veraendern sowie Set- und Query-Methoden
64 setzen oder loeschen duerfen nur noch this_object(), ROOT, EM+
65
66 NOSETMETHOD
67
68 Property nicht mehr ueber SetProp() aenderbar
69 (damit entfallen auch SET_METHOD, _set_'name')
70 F_SET_METHOD
71 Aendert den Eintrag fuer eine SetMethod - eine Closure, die anstatt
72 des Setzens der Property beim Aufruf von SetProp mit 'Value'
73 aufgerufen wird.
74 F_QUERY_METHOD
75 Aendert den Eintrag fuer eine QueryMethod - eine Closure, die anstatt
76 des Lesens der Property beim Aufruf von QueryProp aufgerufen wird.
77
78
79RUeCKGABEWERT
80=============
81
82 Das Ergebnis der Manipulation bzw. einer der definierten
83 Fehlercodes.
84
85
86BEMERKUNGEN
87===========
88
89 - Set() sollte nicht zum regulaeren Manipulieren des Inhalts einer
90 Property verwendet werden, da sowohl F_SET_METHOD als auch libinterne
91 _set_'name'()-Methoden umgangen werden und das Ergebnis fuer so
92 veraenderte Properties undefiniert ist.
93 - eine gesetzte F_SET/F_QUERY_METHOD hat bei SetProp/QueryProp Vorrang
94 vor einer _set/_query_method
95 -> _set/_query wird nach erfolgreichem Ruf von F_XXX_METHOD ignoriert
96 - F_SET/F_QUERY_METHOD sollte normalerweise Vorzug vor einer
97 _set_/_query_* gegeben werden.
98
99 SetMethods/QueryMethods:
100 - falls ihr Query/SetMethods an oeffentlichen Properties setzen
101 wollt, prueft bitte vorher, ob dort nicht schon eine (fremde) gesetzt
102 ist und brecht ggf. euer Set() ab, um nicht die Arbeit anderer
103 Mitmagier zu sabotieren (z.B. P_HANDS)
104 - Properties sollten mit Query- oder SetMethoden nur so lange wie
105 noetig belegt werden
106 -> manche Properties sollte man als Wert setzen, _auch wenn_ die
107 Spieler sie zuruecksetzen koennten (zB P_MSGIN/P_MSGOUT)
108 - auf keinen Fall den Wert speichern, ueberschreiben, rueckschreiben,
109 das fuehrt fast immer zu Problemen.
110 - Set/QueryMethoden sollten nicht als Trigger/Listener fuer ein
111 Ereignis (z.B. P_DIE_MSG fuer das Ereignis "Tod des Spielers")
112 missbraucht werden
113 -> es gibt sichere und saubere Moeglichkeiten (NotifyPlayerDeath),
114 und wenn nicht, wendet euch an den EM eures Vertrauens
115 - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
116 sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
117 geht nur 'static' (in diesem Fall empfohlen).
118
119
120BEISPIELE
121=========
122
123 ### Aendern von Eigenschaften einer Property ###
124 // Setzen des SAVE-Flags (bei save_object() mitzuspeichern)
125 Set(P_XYZ, SAVE, F_MODE_AS);
126
127 // Loeschen des SAVE-Flags
128 Set(P_XYZ, SAVE, F_MODE_AD);
129
130
131
132 // Negieren des bisherigen SAVE-Flags
133 Set(P_XYZ, SAVE, F_MODE);
134 // Hinweis: das Setzen des Flags funktioniert mittels F_MODE nur dann,
135 // wenn sichergestellt ist, dass es vorher nicht gesetzt war. Die
136 // sichere Variante ist daher, F_MODE_AS zu verwenden.
137
138 // Sperren des SetProp/SET_METHOD-Zugriffs:
139 Set(P_XYZ, NOSETMETHOD, F_MODE_AS);
140
141 // Vorlaeufiger Zugriffsschutz fuer eine Property:
142 Set(P_XYZ, PROTECTED, F_MODE_AS);
143
144 // Permanenter Zugriffsschutz fuer eine Property:
145 Set(P_XYZ, SECURED, F_MODE_AS);
146
147 ### Setzen einer SetMethod/QueryMethod ###
148 // Setzen einer internen SetMethod
149 mixed foo(mixed val);
150 ...
151 Set(P_XYZ, #'foo, F_SET_METHOD);
152 ...
153
154 // Setzen einer QueryMethod bei einem anderen Objekt
155 mixed bar();
156 ...
157 other->Set(P_XYZ, #'bar, F_QUERY_METHOD);
158 ...
159
160 // Der Vollstaendigkeit halber sei das Aendern einer Property unter
161 // Umgehung von Set-Methoden angegeben. Es ist aber aus o.g. Gruenden
162 // zu empfehlen, diese Variante nicht zu verwenden.
163 Set(P_XYZ, "bla", F_VALUE);
164
165
166SIEHE AUCH
167==========
168
169 Aehnliches: SetProp(L), QueryProp(L), Query(L)
170 Generell: SetProperties(L), QueryProperties(L)
171 Konzept: properties, /std/thing/properties.c
172 Sonstiges: P_AUTOLOADOBJ
173
1746. Jan 2008 Arathorn