blob: 01d0364b09680437e0d44afde0355c77102f1a3d [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002AddToMenu()
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 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);
MG Mud User88f12472016-06-24 23:31:02 +020017
MG Mud User88f12472016-06-24 23:31:02 +020018
Zesstra953f9972017-02-18 15:37:36 +010019DEFINIERT IN
20============
MG Mud User88f12472016-06-24 23:31:02 +020021
Zesstra953f9972017-02-18 15:37:36 +010022 /std/pub.c
MG Mud User88f12472016-06-24 23:31:02 +020023
MG Mud User88f12472016-06-24 23:31:02 +020024
Zesstra953f9972017-02-18 15:37:36 +010025ARGUMENTE
26=========
MG Mud User88f12472016-06-24 23:31:02 +020027
Zesstra953f9972017-02-18 15:37:36 +010028 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.
MG Mud User88f12472016-06-24 23:31:02 +020032
Zesstra953f9972017-02-18 15:37:36 +010033 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.
MG Mud User88f12472016-06-24 23:31:02 +020069
MG Mud User88f12472016-06-24 23:31:02 +020070
MG Mud User88f12472016-06-24 23:31:02 +020071
Zesstra953f9972017-02-18 15:37:36 +010072 [*] Dieser Parameter kann statt eines festen Zahlenwerts mit
73 folgenden Werten gefuellt werden:
MG Mud User88f12472016-06-24 23:31:02 +020074
Zesstra953f9972017-02-18 15:37:36 +010075 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.
MG Mud User88f12472016-06-24 23:31:02 +020095
Zesstra953f9972017-02-18 15:37:36 +010096 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.
MG Mud User88f12472016-06-24 23:31:02 +0200102
Zesstra953f9972017-02-18 15:37:36 +0100103 [**] Zur Erzeugung variabler Meldungen koennen folgende Werte
104 eingetragen werden:
MG Mud User88f12472016-06-24 23:31:02 +0200105
Zesstra953f9972017-02-18 15:37:36 +0100106 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.
MG Mud User88f12472016-06-24 23:31:02 +0200124
MG Mud User88f12472016-06-24 23:31:02 +0200125
Zesstra953f9972017-02-18 15:37:36 +0100126BESCHREIBUNG
127============
MG Mud User88f12472016-06-24 23:31:02 +0200128
Zesstra953f9972017-02-18 15:37:36 +0100129 Mit dieser Funktion werden Speisen oder Getraenke in die Karte
130 von Kneipen und Restaurants eingefuegt.
MG Mud User88f12472016-06-24 23:31:02 +0200131
MG Mud User88f12472016-06-24 23:31:02 +0200132
Zesstra953f9972017-02-18 15:37:36 +0100133RUECKGABEWERT
134=============
MG Mud User88f12472016-06-24 23:31:02 +0200135
Zesstra953f9972017-02-18 15:37:36 +0100136 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.
MG Mud User88f12472016-06-24 23:31:02 +0200142
MG Mud User88f12472016-06-24 23:31:02 +0200143
Zesstra953f9972017-02-18 15:37:36 +0100144BEMERKUNGEN
145===========
MG Mud User88f12472016-06-24 23:31:02 +0200146
Zesstra953f9972017-02-18 15:37:36 +0100147 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.
MG Mud User88f12472016-06-24 23:31:02 +0200150
MG Mud User88f12472016-06-24 23:31:02 +0200151
Zesstra953f9972017-02-18 15:37:36 +0100152
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
Zesstra953f9972017-02-18 15:37:36 +0100202 5,
203
204 5) Meldungen fuer Spieler und Umstehende die bei Genuss ausgege-
205 ben werden (also NICHT der Bestell-Text).
206
207 ({"Du isst die Keule mit einem schlechten Gewissen.",
208 "@WER1 isst die Keule mit einem schlechten Gewissen."}),
209
210 Die Ausgabe-Strings werden vor der Ausgabe mit dem Empfaenger
211 als Objekt an replace_personal() uebergeben. Fuer die
212 moeglichen Platzhalter siehe dort.
213
Zesstra953f9972017-02-18 15:37:36 +0100214 6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler
215 sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen
216 "Notvorrat" von 20 Keulen, der alle 3 reset()s aufgefuellt
217 wird. Aus diesem (so noch vorhanden) werden die Spieler
218 versorgt, wenn ihr "persoenlicher Vorrat" aufgebraucht ist.
219
220 ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]),
221
Zesstra953f9972017-02-18 15:37:36 +0100222 HINWEIS: bei Benutzung des Mappings muss <pub.h> inkludiert
223 werden!
224
Zesstra953f9972017-02-18 15:37:36 +0100225 Wenn man keine reset-abhaengigen Speisen haben moechte, traegt
226 man hier eine 0 ein.
227
Arathornff47dd02020-08-17 18:05:04 +0200228
Zesstra953f9972017-02-18 15:37:36 +0100229 7) Die Zahl ist die Wartezeit in Sekunden, die der Wirt z.B. fuer
230 die Zubereitung und Auslieferung an den Spieler braucht.
231
232 9,
233
Zesstra953f9972017-02-18 15:37:36 +0100234 8) Letztendlich die Meldungen an Spieler und Umstehende, die bei Be-
235 stellung (hier 'kaufe keule') ausgegeben werden.
236
237 ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
238 "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
239 "wohl ein Tippfehler auf der Karte gewesen sein.",
240 "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
241 "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
Bugfix80948172016-12-15 20:23:58 +0100242
Arathorn99af0d22019-11-26 19:19:51 +0100243
Bugfix80948172016-12-15 20:23:58 +0100244LISTE DER ALTEN PLATZHALTER (DEPRECATED):
Arathorn99af0d22019-11-26 19:19:51 +0100245=========================================
246
Arathornff47dd02020-08-17 18:05:04 +0200247 && - pl->name(WER,2)
248 &1& - pl->name(WER,2)
249 &2& - pl->name(WESSEN,2)
250 &3& - pl->name(WEM,2)
251 &4& - pl->name(WEN,2)
252 &1# - capitalize(pl->name(WER,2))
253 &2# - capitalize(pl->name(WESSEN,2))
254 &3# - capitalize(pl->name(WEM,2))
255 &4# - capitalize(pl->name(WEN,2))
256 &! - pl->QueryPronoun(WER)
257 &5& - pl->QueryPronoun(WE);
258 &6& - pl->QueryPronoun(WESSEN)
259 &7& - pl->QueryPronoun(WEM)
260 &8& - pl->QueryPronoun(WEN)
261 &5# - capitalize(pl->QueryPronoun(WER))
262 &6# - capitalize(pl->QueryPronoun(WESSEN))
263 &7# - capitalize(pl->QueryPronoun(WEM))
264 &8# - capitalize(pl->QueryPronoun(WEN))
Bugfix80948172016-12-15 20:23:58 +0100265
MG Mud User88f12472016-06-24 23:31:02 +0200266
Zesstra953f9972017-02-18 15:37:36 +0100267SIEHE AUCH
268==========
269
270 AddFood(), AddDrink(), /sys/pub.h
271 RemoveFromMenu(), replace_personal()
272
MG Mud User88f12472016-06-24 23:31:02 +0200273Last modified: Sam, 01. Okt 2011, 23:40 by Arathorn