blob: 30a7f8b2b7ea48a5c953734bab8a8e167a0659a8 [file] [log] [blame]
zesstra7c14de02016-06-26 22:04:45 +02001Allgemein:
2----------
3
4ExplorationPoints (FP) koennen von beliebigen Objekten vergeben werden.
5Es stehen sechs verschiedene FP-Typen zur Auswahl (definiert in
6/secure/exploration.h):
7- EP_DETAIL: Diese FP werden fuer Details und SpecialDetails vergeben. Dies
8 ist die wohl am meisten genutzte Moeglichkeit.
9- EP_RDET: Wie EP_DETAIL, aber speziell fuer ReadDetails.
10- EP_EXIT: Diese FP gelten fuer Ausgaenge. Man kann sie benutzen, wenn der
11 Spieler einen FP fuer das Betreten eines bestimmten Gebietes bekommen
12 soll.
13- EP_CMD: Fuer Kommandos, die einen FP wert sind. Der FP wird nur bei
14 erfolgreich ausgefuehrtem Kommando vergeben. Das gilt nur bei
15 AddCmd()-Kommandos!
16- EP_INFO: Ein FP fuer Infos eines NPCs.
17- EP_PUB: Ein FP fuer das Verzehren eines bestimmten Getraenks oder einer
18 bestimmten Speise in einer Kneipe. Vergeben wird nur nach erfolgreichem
19 Verzehr, und nur, wenn Zahler und Empfaenger die gleiche Person sind.
20 Man kann also keine FP spendieren.
21- EP_MISC: Dies ist ein Sonderfall. Wenn ein FP vergeben werden soll, der
22 sich nicht in die obigen Kategorien einordnen laesst, oder es
23 noch Besonderheiten zu beruecksichtigen gibt, sollte man diesen Typ
24 waehlen.
25
26Die Vergabe der FP erfolgt, wenn er erst einmal eingetragen ist, vollkommen
27automatisch.
28Ausnahme: EP_MISC. Hier muss das Objekt, das den FP vergibt, "von Hand"
29GiveExplorationPoint() aufrufen.
30
31Die Vergabe richtet sich nach bestimmten Schluesselwoertern, die beim
32Eintragen der FP festgelegt werden. Diese Schluessel sollten sein bei
33- EP_DETAIL: Der Name des Details. Man sollte daran denken, alle Schluessel
34 fuer ein Detail anzugeben!
35- EP_RDET: dito.
36- EP_EXIT: Die Richtung, in die der Ausgang fuehrt.
37- EP_CMD: Das Verb/die Verben.
38- EP_INFO: Die entsprechende Frage.
39- EP_PUB: Die IDs des Menueeintrags.
40- EP_MISC: Ein beliebiger Schluessel.
41
42Ein Objekt kann nur einen FP vergeben, und nicht mehrere (auch nicht mehrere
43von verschiedenen Typen).
44
45Im Spieler dienen zwei Properties zur Verwaltung:
46- P_EP enthaelt einen Bitstring, in dem die schon gefundenen FP vermerkt sind.
47- P_EP_NUM enthaelt die Anzahl der schon gefundenen FP. Allerdings ist diese
48 Zahl mit einer gewissen Ungenauigkeit behaftet, um es dem Spieler nicht zu
49 leicht zu machen, FP-Stellen zu entdecken.
50
51Funktionen:
52-----------
53
54Zur Manipulation stehen in /secure/explorationmaster.c folgende Funktionen
55zur Verfuegung:
56
57FUNKTION:
58 int AddEPObject(object ob, mixed keys, int type);
59
60PARAMETER:
61 ob
62 Das Objekt, das den FP vergeben soll.
63
64 keys
65 String oder Array von Strings mit den Schluesselwoertern.
66
67 type
68 Einer der oben erwaehnten Typen.
69
70BESCHREIBUNG:
71 Falls ob ein gueltiges Objekt ist, wird ihm ein FP zum Schluessel keys
72 vom Typ type zugeordnet. Sollte fuer ob schon ein FP definiert gewesen
73 sein, so wird dieser ueberschrieben.
74
75 Gueltige Objekte sind prinzipiell alle ausser Spielern sowie Raeume, die
76 von einem virtual_compiler erzeugt wurden.
77
78RUECKGABEWERT:
79 <0, falls ein Fehler aufgetreten ist, ansonsten wird die Anzahl der momentan
80 erreichbaren FP zurueckgegeben.
81
82SIEHE AUCH:
83 RemoveEPObject(), ChangeEPObject(), ShowEPObjects(), QueryEPObject(),
84 /secure/ARCH/eprooms
85
86------------------------------
87
88FUNKTION:
89 int RemoveEPObject(object ob);
90
91PARAMETER:
92 ob
93 Das zu entfernende Objekt.
94
95BESCHREIBUNG:
96 Entfernt ein Objekt aus der Liste der FP-Spender.
97
98RUECKGABEWERT:
99 <0, falls ein Fehler aufgetreten ist, ansonsten die Zahl der verbliebenen
100 FP.
101
102BEMERKUNGEN:
103 Spielern, die diesen FP schon erhalten haben, wird dieser nicht aberkannt.
104 Der freigewordene Platz wird bei einem der naechsten AddEPObject()-Aufrufe
105 wiederverwendet. Spieler, die den FP am "alten" Ort gefunden haben,
106 bekommen ihn am "neuen" Ort jedoch nicht noch einmal zuerkannt.
107
108SIEHE AUCH:
109 AddEPObject(), ChangeEPObject(), ShowEPObjects(), QueryEPObject(),
110 /secure/ARCH/eprooms
111
112------------------------------
113
114FUNKTION:
115 int ChangeEPObject(object ob, int what, mixed new);
116
117PARAMETER:
118 ob
119 Das zu aendernde Objekt.
120
121 what
122 Die zu aendernde Eigenschaft.
123
124 new
125 Der neue Wert.
126
127BESCHREIBUNG:
128 Aendert eine Eigenschaft des Objektes ob (soweit dieses schon eingetragen
129 ist). Die neue Eigenschaft new haengt von der geforderten Aenderung what ab:
130 what = CHANGE_OB => new ist das neue Objekt.
131 what = CHANGE_KEY => new ist ein String oder Array von Strings mit den
132 neuen Schluesseln.
133 what = CHANGE_TYPE => new enthaelt den neuen Typ
134
135 Der Vorteil von CHANGE_OB gegenueber RemoveEPObject - AddEPObject ist der,
136 dass die Nummer des FP sich hierbei garantiert nicht aendert.
137
138RUECKGABEWERT:
139 <0, wenn ein Fehler auftrat, sonst 1.
140
141SIEHE AUCH:
142 AddEPObject(), RemoveEPObject(), ShowEPObjects(), QueryEPObject(),
143 /secure/ARCH/eprooms
144
145------------------------------
146
147FUNKTION:
148 mixed QueryEPObject(object ob);
149
150PARAMETER:
151 ob
152 Das Objekt, dessen Informationen gewuenscht sind.
153
154BESCHREIBUNG:
155 Falls das Objekt in der FP-Liste existiert, werden seine Werte als Array
156 zurueckgegeben.
157
158RUECKGABEWERT:
159 Falls ein Fehler auftritt, wird eine Zahl <0 zurueckgegeben.
160 Ansonsten wird ein Array mit den Objektinformationen zurueckgegeben. Das
161 Array hat folgenden Aufbau: ({ string *keys, int Nummer, int Typ }).
162
163SIEHE AUCH:
164 AddEPObject(), RemoveEPObject(), ChangeEPObject(), ShowEPObjects(),
165 /secure/ARCH/eprooms
166
167------------------------------
168
169FUNKTION:
170 void ShowEPObjects();
171
172PARAMETER:
173 keine
174
175BESCHREIBUNG:
176 Die Liste der vorhandenen Objekte wird in lesbarer Form nach
177 /secure/ARCH/eprooms geschrieben und kann dort eingesehen werden.
178
179RUECKGABEWERT:
180 keiner
181
182BEMERKUNGEN:
183 Hier ist noch ein wenig Arbeit noetig... Magier < IS_LORD sollten
184 zumindest ihre eigenen FP abfragen koennen, Regionsmagier auch die
185 ihrere Region.
186
187SIEHE AUCH:
188 AddEPObject(), RemoveEPObject(), ChangeEPObject(), QueryEPObject(),
189 /secure/ARCH/eprooms
190
191------------------------------
192
193FUNKTION:
194 mixed QueryExplore(int type);
195
196PARAMETER:
197 type
198 Typ des gewuenschten FP.
199
200BESCHREIBUNG:
201 Diese Funktion wird von den Standardobjekten aufgerufen, wenn sie
202 FP-Informationen einholen (im create()).
203
204 Man braucht sich in eigenen Objekten nicht um diese Funktion zu
205 kuemmern (auch nicht bei EP_MISC-FPs).
206
207RUECKGABEWERT:
208 Ein Array von Strings, wenn fuer das aufrufende Objekt FP zum Typ type
209 vorhanden sind (die Strings entsprechen den Schluesseln),
210 0, wenn fuer das Objekt kein FP definiert ist oder nicht der richtige
211 Typ verlang wurde.
212
213SIEHE AUCH:
214 GiveExplorationPoint(), QueryMaxEP(), QueryExplorationPoints()
215
216------------------------------
217
218FUNKTION:
219 int QueryMaxEP();
220
221PARAMETER:
222 keine
223
224BESCHREIBUNG:
225 Liefert die maximal erreichbare FP-Zahl.
226
227RUECKGABEWERT:
228 Die Zahl der maximal erreichbaren FP.
229
230SIEHE AUCH:
231 GiveExplorationPoint(), QueryExplorationPoints()
232
233------------------------------
234
235FUNKTION:
236 void GiveExplorationPoint(string key);
237
238PARAMETER:
239 key
240 Schluessel, der die Vergabe ausloeste.
241
242BESCHREIBUNG:
243 Es wird versucht, einen FP des aufrufenden Objekts an this_interactive() zu
244 vergeben. Die Vergabe wird anhand von key entschieden.
245
246RUECKGABEWERT:
247 keiner
248
249BEMERKUNGEN:
250 Bei den meisten FP-Typen wird die Vergabe automatisch durchgefuehrt.
251 Nur bei EP_MISC-FPs muss man diese Funktion von Hand aufrufen. Als
252 key ist dabei der der Schluessel zu waehlen, der beim Eintragen des FP
253 verwendet wurde.
254
255SIEHE AUCH:
256 QueryExplore(), QueryExplorationPoints()
257
258------------------------------
259
260FUNKTION:
261 int QueryExplorationPoints(object pl)
262
263PARAMETER:
264 pl
265 Ein Spieler
266
267BESCHREIBUNG:
268 Die Zahl der vom Spieler pl schon gefundenen FP wird ermittelt.
269
270RUECKGABEWERT:
271 Zahl der schon gefundenen FP.
272
273BEMERKUNGEN:
274 Im Spieler sind zwei Properties definiert: P_EP enthaelt einen Bitstring
275 mit den schon gefundenen FP, P_EP_NUM enthaelt die ungefaehre Anzahl der
276 Traenke. QueryExplorationPoints() ermittelt aus P_EP die genaue Anzahl.
277
278SIEHE AUCH:
279 GiveExplorationPoint()
280
281------------------------------
282
283Tools:
284------
285
286Man kann die FP zwar auch mit dem MGtool eintragen, dummerweise werden aber
287xcall- und xeval-Aufrufe geloggt, und man koennte aus diesem Log eine FP-Liste
288erstellen...
289~wargon/obj/explorer stellt zumindest fuer die Manipulationsbefehle Kommandos
290zur Verfuegung, die diesen Umstand umgehen.
291Die Langbeschreibung sollte die Befehle wohl genuegend erklaeren... ;)
292
293Letzte Aenderung: 06 Mar 1997 Wargon