blob: 0f48d7c11d37bf36615dc4b4db9f05ed01c7931a [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001AddToMenu()
Zesstra953f9972017-02-18 15:37:36 +01002***********
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 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);
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018DEFINIERT IN
19============
MG Mud User88f12472016-06-24 23:31:02 +020020
Zesstra953f9972017-02-18 15:37:36 +010021 /std/pub.c
MG Mud User88f12472016-06-24 23:31:02 +020022
MG Mud User88f12472016-06-24 23:31:02 +020023
Zesstra953f9972017-02-18 15:37:36 +010024ARGUMENTE
25=========
MG Mud User88f12472016-06-24 23:31:02 +020026
Zesstra953f9972017-02-18 15:37:36 +010027 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.
MG Mud User88f12472016-06-24 23:31:02 +020031
Zesstra953f9972017-02-18 15:37:36 +010032 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.
MG Mud User88f12472016-06-24 23:31:02 +020068
MG Mud User88f12472016-06-24 23:31:02 +020069
MG Mud User88f12472016-06-24 23:31:02 +020070
Zesstra953f9972017-02-18 15:37:36 +010071 [*] Dieser Parameter kann statt eines festen Zahlenwerts mit
72 folgenden Werten gefuellt werden:
MG Mud User88f12472016-06-24 23:31:02 +020073
Zesstra953f9972017-02-18 15:37:36 +010074 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.
MG Mud User88f12472016-06-24 23:31:02 +020094
Zesstra953f9972017-02-18 15:37:36 +010095 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.
MG Mud User88f12472016-06-24 23:31:02 +0200101
Zesstra953f9972017-02-18 15:37:36 +0100102 [**] Zur Erzeugung variabler Meldungen koennen folgende Werte
103 eingetragen werden:
MG Mud User88f12472016-06-24 23:31:02 +0200104
Zesstra953f9972017-02-18 15:37:36 +0100105 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.
MG Mud User88f12472016-06-24 23:31:02 +0200123
MG Mud User88f12472016-06-24 23:31:02 +0200124
Zesstra953f9972017-02-18 15:37:36 +0100125BESCHREIBUNG
126============
MG Mud User88f12472016-06-24 23:31:02 +0200127
Zesstra953f9972017-02-18 15:37:36 +0100128 Mit dieser Funktion werden Speisen oder Getraenke in die Karte
129 von Kneipen und Restaurants eingefuegt.
MG Mud User88f12472016-06-24 23:31:02 +0200130
MG Mud User88f12472016-06-24 23:31:02 +0200131
Zesstra953f9972017-02-18 15:37:36 +0100132RUECKGABEWERT
133=============
MG Mud User88f12472016-06-24 23:31:02 +0200134
Zesstra953f9972017-02-18 15:37:36 +0100135 Rueckgabewert ist ein String "menuentry%d", wobei %d eine Nummer
136 ist, die darueber Auskunft gibt, den wievielten Eintrag in die
137 interne Karte der Kneipe diese Speise bzw. dieses Getraenk
138 darstellt. Im Prinzip handelt es sich bei dem String um einen Key
139 fuer ein Mapping, in dem die Speisen bzw. Getraenke gespeichert
140 sind.
MG Mud User88f12472016-06-24 23:31:02 +0200141
MG Mud User88f12472016-06-24 23:31:02 +0200142
Zesstra953f9972017-02-18 15:37:36 +0100143BEMERKUNGEN
144===========
MG Mud User88f12472016-06-24 23:31:02 +0200145
Zesstra953f9972017-02-18 15:37:36 +0100146 Die aelteren Funktionen 'AddDrink' bzw. 'AddFood' werden zwar mithilfe
147 dieser maechtigeren Funktion aus Gruenden der Abwaertskompatibilitaet
148 simuliert, sollen aber nicht mehr eingesetzt werden.
MG Mud User88f12472016-06-24 23:31:02 +0200149
MG Mud User88f12472016-06-24 23:31:02 +0200150
Zesstra953f9972017-02-18 15:37:36 +0100151
152 Die alten Platzhalter && etc. (s.u.) werden weiterhin unterstuetzt,
153 sollten aber fuer bessere Wartbarkeit nicht mehr verwendet werden.
154
155
156
157 Fuer das Testen der Kneipe gibt es in jeder Kneipe den Befehl
158 'pubinit'. Hiermit lassen sich die Speisen und Getraenke durch-
159 checken. Steht in der Ausgabe bei einem Getraenk/Essen ein FAIL,
160 so wird die entsprechende Speise (oder Getraenk) NICHT an Spieler
161 verkauft. Ausnahmen fuer Speisen/Getraenke mit hoeheren maximalen
162 Werten sind durch Balance-EM zu genehmigen.
163
164
165BEISPIEL
166========
167
168 include <pub.h>
169
170 create()
171 {
172 AddToMenu("'Opa's Drachenkeule'",({"drachenkeule","keule"}),
173 ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 5,
174 ({"Du isst die Keule mit einem schlechten Gewissen.",
175 "@WER1 isst die Keule mit einem schlechten Gewissen."}),
176 ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), 9,
177 ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
178 "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
179 "wohl ein Tippfehler auf der Karte gewesen sein.",
180 "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
181 "Stueck aus dessen Keule und braet diese fuer @WEN1."}) );
182 }
183
184 1) Name der Speise (des Getraenks) auf der Karte (bei menue).
185
186 AddToMenu("'Opa's Drachenkeule'",
187
188 2) ids mit denen sich bestellen laesst (z.B. "kaufe keule").
189
190 ({"drachen","drachenkeule","keule"}),
191
192 3) Heilung fuer LP und KP, Saettigung (P_FOOD oder P_DRINK,
193 P_ALCOHOL nach Belieben setzen), Preis (P_VALUE).
194 HP und SP muessen nicht gleich sein. Speisen und Getraenke,
195 die nur eines von beiden heilen, sind auch moeglich.
196
197 ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]),
198
199 4) Heilung pro Heartbeat (in diesem Beispiel je 5 KP/LP).
200
Zesstra953f9972017-02-18 15:37:36 +0100201 5,
202
203 5) Meldungen fuer Spieler und Umstehende die bei Genuss ausgege-
204 ben werden (also NICHT der Bestell-Text).
205
206 ({"Du isst die Keule mit einem schlechten Gewissen.",
207 "@WER1 isst die Keule mit einem schlechten Gewissen."}),
208
209 Die Ausgabe-Strings werden vor der Ausgabe mit dem Empfaenger
210 als Objekt an replace_personal() uebergeben. Fuer die
211 moeglichen Platzhalter siehe dort.
212
Zesstra953f9972017-02-18 15:37:36 +0100213 6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler
214 sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen
215 "Notvorrat" von 20 Keulen, der alle 3 reset()s aufgefuellt
216 wird. Aus diesem (so noch vorhanden) werden die Spieler
217 versorgt, wenn ihr "persoenlicher Vorrat" aufgebraucht ist.
218
219 ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]),
220
Zesstra953f9972017-02-18 15:37:36 +0100221 HINWEIS: bei Benutzung des Mappings muss <pub.h> inkludiert
222 werden!
223
Zesstra953f9972017-02-18 15:37:36 +0100224 Wenn man keine reset-abhaengigen Speisen haben moechte, traegt
225 man hier eine 0 ein.
226
Arathornff47dd02020-08-17 18:05:04 +0200227
Zesstra953f9972017-02-18 15:37:36 +0100228 7) Die Zahl ist die Wartezeit in Sekunden, die der Wirt z.B. fuer
229 die Zubereitung und Auslieferung an den Spieler braucht.
230
231 9,
232
Zesstra953f9972017-02-18 15:37:36 +0100233 8) Letztendlich die Meldungen an Spieler und Umstehende, die bei Be-
234 stellung (hier 'kaufe keule') ausgegeben werden.
235
236 ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
237 "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
238 "wohl ein Tippfehler auf der Karte gewesen sein.",
239 "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
240 "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
Bugfix80948172016-12-15 20:23:58 +0100241
Arathorn99af0d22019-11-26 19:19:51 +0100242
Bugfix80948172016-12-15 20:23:58 +0100243LISTE DER ALTEN PLATZHALTER (DEPRECATED):
Arathorn99af0d22019-11-26 19:19:51 +0100244=========================================
245
Arathornff47dd02020-08-17 18:05:04 +0200246 && - pl->name(WER,2)
247 &1& - pl->name(WER,2)
248 &2& - pl->name(WESSEN,2)
249 &3& - pl->name(WEM,2)
250 &4& - pl->name(WEN,2)
251 &1# - capitalize(pl->name(WER,2))
252 &2# - capitalize(pl->name(WESSEN,2))
253 &3# - capitalize(pl->name(WEM,2))
254 &4# - capitalize(pl->name(WEN,2))
255 &! - pl->QueryPronoun(WER)
256 &5& - pl->QueryPronoun(WE);
257 &6& - pl->QueryPronoun(WESSEN)
258 &7& - pl->QueryPronoun(WEM)
259 &8& - pl->QueryPronoun(WEN)
260 &5# - capitalize(pl->QueryPronoun(WER))
261 &6# - capitalize(pl->QueryPronoun(WESSEN))
262 &7# - capitalize(pl->QueryPronoun(WEM))
263 &8# - capitalize(pl->QueryPronoun(WEN))
Bugfix80948172016-12-15 20:23:58 +0100264
MG Mud User88f12472016-06-24 23:31:02 +0200265
Zesstra953f9972017-02-18 15:37:36 +0100266SIEHE AUCH
267==========
268
269 AddFood(), AddDrink(), /sys/pub.h
270 RemoveFromMenu(), replace_personal()
271
MG Mud User88f12472016-06-24 23:31:02 +0200272Last modified: Sam, 01. Okt 2011, 23:40 by Arathorn