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