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