blob: d2ae21f0e050a35e7fb9d7e4f7a029d1063ad4b9 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001AddToMenu()
2===========
3
4FUNKTION
5--------
6::
7
8 varargs string AddToMenu(string menuetext,
9 mixed ids,
10 mapping minfo,
11 mixed rate,
12 mixed msg,
13 mixed refresh,
14 mixed delay,
15 mixed d_msg);
16
17DEFINIERT IN
18------------
19::
20
21 /std/pub.c
22
23ARGUMENTE
24---------
25::
26
27 Die Erlaeuterung der Parameter beschraenkt sich im Folgenden
28 zunaechst auf die Grundfunktionalitaet bei Verwendung fester
29 Werte. Die Moeglichkeiten zur Realisierung dynamischen Verhaltens
30 sind in den Fussnoten zu den einzelnen Parametern beschrieben.
31
32 menuetext
33 Der Text steht als kurze Beschreibung im Menue.
34 ids
35 String oder Array von Strings, mit denen sich die Speise bzw. das
36 Getraenk beim Bestellen ansprechen laesst.
37 minfo
38 Mapping mit Eintraegen fuer:
39 P_HP LP-Heilung in Punkten [*]
40 P_SP KP-Heilung in Punkten [*]
41 P_FOOD Saettigungswirkung der Speise [*]
42 P_DRINK Saettigungswirkung des Getraenks [*]
43 P_ALCOHOL Alkoholgehalt des Getraenks [*]
44 P_VALUE Preis der Speise bzw. des Getraenks [*]
45 rate [*]
46 Heilrate in Punkten pro HeartBeat.
47 msg [**]
48 Meldung beim Essen:
49 Array mit 2 Strings: (1) fuer Empfaenger, (2) fuer Andere.
50 Verfuegbare Platzhalter sind weiter unten im Abschnitt "Beispiel"
51 dokumentiert.
52 refresh
53 Mapping mit Eintraegen fuer:
54 PR_USER (Kontingent fuer einzelnen Spieler) [*]
55 PR_ALL (Zusatzkontingent fuer alle) [*]
56 Alternativ: 0 fuer unbegrenzte Verfuegbarkeit
57 Einem Key muessen dabei zwei Werte zugeordnet werden:
58 Der Erste gibt die Hoehe des Kontingents an, der Zweite legt
59 fest, alle wieviel reset()s das Kontingent wieder aufgefuellt
60 wird.
61 Verwendung des Mappings erfordert Inkludieren von pub.h.
62 delay [*]
63 Zahl der Sekunden, um die verzoegert die Heilung eintritt,
64 z.B. weil das Essen erst zubereitet werden muss.
65 d_msg [**]
66 Meldung beim Bestellen, falls die Heilung verzoegert wird
67 Array mit 2 Strings: (1) fuer Empfaenger, (2) fuer Andere.
68
69
70
71 [*] Dieser Parameter kann statt eines festen Zahlenwerts mit
72 folgenden Werten gefuellt werden:
73
74 1) Mapping <racemodifier> der Form:
75 ([ 0 : <standardwert> ,
76 <rasse_1> : <wert_1>,
77 ... ,
78 <rasse_n> : <wert_n> ]).
79 Die Eintraege in diesem Mapping werden gegen die Rasse des
80 bestellenden Spielers geprueft und entsprechend die
81 zugehoerigen Werte verwendet.
82 2) string <func>: Aufruf erfolgt mittels
83 call_other(this_object(), func, empfaenger);
84 gerufen (aber: siehe Hinweise).
85 3) closure <func>: Aufruf erfolgt mittels
86 funcall(func, empfaenger);
87 4) Array der Form ({string <obj>, string <func>}) oder
88 ({object <obj>, string <func>})
89 Aufruf erfolgt mittels
90 call_other(obj, func, empfaenger);
91 (aber: siehe Hinweise). <obj> ist folglich als Objektpointer
92 oder dessen object_name() anzugeben. <func> wird mittels
93 function_exists() auf Existenz ueberprueft.
94
95 HINWEISE: im Falle von Lieferverzoegerung ("delay") und
96 Preis (P_VALUE) wird bei allen Funktionsaufrufen NICHT der
97 Empfaenger, sondern der Zahler uebergeben.
98 Im Falle der Kontingent-Liste ("refresh") kann nur die
99 verfuegbare Menge modifiziert werden, nicht die Zeit
100 bis zum Wieder-Auffuellen.
101
102 [**] Zur Erzeugung variabler Meldungen koennen folgende Werte
103 eingetragen werden:
104
105 1) closure <func>: Aufruf erfolgt mittels
106 funcall(func, zahler, empfaenger, ident, minfo);
107 2) string <func>: Aufruf erfolgt mittels
108 call_other(this_object(), func, zahler, empfaenger,
109 ident, minfo);
110 <func> bekommt Zahler und Empfaenger als Objektpointer,
111 ident als String und minfo als Mapping mit den
112 jeweiligen Heilwerten uebergeben. minfo entspricht hierbei
113 den Daten, die als dritter Parameter an AddToMenu()
114 uebergeben wurden.
115 HINWEIS: wenn in das minfo-Mapping keine int-Festwerte
116 eingetragen wurden, werden diese gemaess den Regeln unter [*]
117 geprueft; Funktionen/Closures werden ggf. ausgewertet und
118 deren Rueckgabewerte an die Funktion <func> uebergeben.
119 WICHTIG: Die Rueckgabewerte der Funktion werden nicht
120 ausgewertet. Jeder, der anstatt einer Meldung einen
121 Funktionsaufruf programmiert, muss fuer die Ausgabe der
122 Meldungen selbst sorgen.
123
124
125
126BESCHREIBUNG
127------------
128::
129
130 Mit dieser Funktion werden Speisen oder Getraenke in die Karte
131 von Kneipen und Restaurants eingefuegt.
132
133RUECKGABEWERT
134-------------
135::
136
137 Rueckgabewert ist ein String "menuentry%d", wobei %d eine Nummer
138 ist, die darueber Auskunft gibt, den wievielten Eintrag in die
139 interne Karte der Kneipe diese Speise bzw. dieses Getraenk
140 darstellt. Im Prinzip handelt es sich bei dem String um einen Key
141 fuer ein Mapping, in dem die Speisen bzw. Getraenke gespeichert
142 sind.
143
144BEMERKUNGEN
145-----------
146::
147
148 Die aelteren Funktionen 'AddDrink' bzw. 'AddFood' werden zwar mithilfe
149 dieser maechtigeren Funktion aus Gruenden der Abwaertskompatibilitaet
150 simuliert, sollen aber nicht mehr eingesetzt werden.
151
152
153
154 Die alten Platzhalter && etc. (s.u.) werden weiterhin unterstuetzt,
155 sollten aber fuer bessere Wartbarkeit nicht mehr verwendet werden.
156
157
158
159 Fuer das Testen der Kneipe gibt es in jeder Kneipe den Befehl
160 'pubinit'. Hiermit lassen sich die Speisen und Getraenke durch-
161 checken. Steht in der Ausgabe bei einem Getraenk/Essen ein FAIL,
162 so wird die entsprechende Speise (oder Getraenk) NICHT an Spieler
163 verkauft. Ausnahmen fuer Speisen/Getraenke mit hoeheren maximalen
164 Werten sind durch Balance-EM zu genehmigen.
165
166BEISPIEL
167--------
168::
169
170 include <pub.h>
171
172 create()
173 {
174 AddToMenu("'Opa's Drachenkeule'",({"drachenkeule","keule"}),
175 ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 5,
176 ({"Du isst die Keule mit einem schlechten Gewissen.",
177 "@WER1 isst die Keule mit einem schlechten Gewissen."}),
178 ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), 9,
179 ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
180 "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
181 "wohl ein Tippfehler auf der Karte gewesen sein.",
182 "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
183 "Stueck aus dessen Keule und braet diese fuer @WEN1."}) );
184 }
185
186 1) Name der Speise (des Getraenks) auf der Karte (bei menue).
187
188 AddToMenu("'Opa's Drachenkeule'",
189
190 2) ids mit denen sich bestellen laesst (z.B. "kaufe keule").
191
192 ({"drachen","drachenkeule","keule"}),
193
194 3) Heilung fuer LP und KP, Saettigung (P_FOOD oder P_DRINK,
195 P_ALCOHOL nach Belieben setzen), Preis (P_VALUE).
196 HP und SP muessen nicht gleich sein. Speisen und Getraenke,
197 die nur eines von beiden heilen, sind auch moeglich.
198
199 ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]),
200
201 4) Heilung pro Heartbeat (in diesem Beispiel je 5 KP/LP).
202
203
204
205 5,
206
207 5) Meldungen fuer Spieler und Umstehende die bei Genuss ausgege-
208 ben werden (also NICHT der Bestell-Text).
209
210 ({"Du isst die Keule mit einem schlechten Gewissen.",
211 "@WER1 isst die Keule mit einem schlechten Gewissen."}),
212
213 Die Ausgabe-Strings werden vor der Ausgabe mit dem Empfaenger
214 als Objekt an replace_personal() uebergeben. Fuer die
215 moeglichen Platzhalter siehe dort.
216
217
218
219 6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler
220 sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen
221 "Notvorrat" von 20 Keulen, der alle 3 reset()s aufgefuellt
222 wird. Aus diesem (so noch vorhanden) werden die Spieler
223 versorgt, wenn ihr "persoenlicher Vorrat" aufgebraucht ist.
224
225 ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]),
226
227
228
229 HINWEIS: bei Benutzung des Mappings muss <pub.h> inkludiert
230 werden!
231
232
233
234 Wenn man keine reset-abhaengigen Speisen haben moechte, traegt
235 man hier eine 0 ein.
236
237 7) Die Zahl ist die Wartezeit in Sekunden, die der Wirt z.B. fuer
238 die Zubereitung und Auslieferung an den Spieler braucht.
239
240 9,
241
242
243
244 8) Letztendlich die Meldungen an Spieler und Umstehende, die bei Be-
245 stellung (hier 'kaufe keule') ausgegeben werden.
246
247 ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
248 "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
249 "wohl ein Tippfehler auf der Karte gewesen sein.",
250 "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
251 "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
252
253LISTE DER ALTEN PLATZHALTER (DEPRECATED):
Arathorn99af0d22019-11-26 19:19:51 +0100254-----------------------------------------
255::
Zesstra18626972017-01-31 10:38:27 +0100256 && - pl->name(WER,2)
257 &1& - pl->name(WER,2)
258 &2& - pl->name(WESSEN,2)
259 &3& - pl->name(WEM,2)
260 &4& - pl->name(WEN,2)
261 &1# - capitalize(pl->name(WER,2))
262 &2# - capitalize(pl->name(WESSEN,2))
263 &3# - capitalize(pl->name(WEM,2))
264 &4# - capitalize(pl->name(WEN,2))
265 &! - pl->QueryPronoun(WER)
266 &5& - pl->QueryPronoun(WE);
267 &6& - pl->QueryPronoun(WESSEN)
268 &7& - pl->QueryPronoun(WEM)
269 &8& - pl->QueryPronoun(WEN)
270 &5# - capitalize(pl->QueryPronoun(WER))
271 &6# - capitalize(pl->QueryPronoun(WESSEN))
272 &7# - capitalize(pl->QueryPronoun(WEM))
273 &8# - capitalize(pl->QueryPronoun(WEN))
274
275SIEHE AUCH
276----------
277::
278
279 AddFood(), AddDrink(), /sys/pub.h
280 RemoveFromMenu(), replace_personal()
281
282Last modified: Sam, 01. Okt 2011, 23:40 by Arathorn
283