blob: 82407f49d2a9849f6aa85a65cd158980a0f112c1 [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
130 Fuer das Testen der Kneipe gibt es in jeder Kneipe den Befehl
131 'pubinit'. Hiermit lassen sich die Speisen und Getraenke durch-
132 checken. Steht in der Ausgabe bei einem Getraenk/Essen ein FAIL,
133 so wird die entsprechende Speise (oder Getraenk) NICHT an Spieler
134 verkauft. Ausnahmen fuer Speisen/Getraenke mit hoeheren maximalen
135 Werten sind durch Balance-EM zu genehmigen.
136
137BEISPIEL:
138
139 include <pub.h>
140
141 create()
142 {
143 AddToMenu("'Opa's Drachenkeule'",({"drachenkeule","keule"}),
144 ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 5,
145 ({"Du isst die Keule mit einem schlechten Gewissen.",
146 "&& isst die Keule mit einem schlechten Gewissen."}),
147 ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), 9,
148 ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
149 "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
150 "wohl ein Tippfehler auf der Karte gewesen sein.",
151 "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
152 "Stueck aus dessen Keule und braet diese fuer &&."}) );
153 }
154
155 1) Name der Speise (des Getraenks) auf der Karte (bei menue).
156
157 AddToMenu("'Opa's Drachenkeule'",
158
159 2) ids mit denen sich bestellen laesst (z.B. "kaufe keule").
160
161 ({"drachen","drachenkeule","keule"}),
162
163 3) Heilung fuer LP und KP, Saettigung (P_FOOD oder P_DRINK,
164 P_ALCOHOL nach Belieben setzen), Preis (P_VALUE).
165 HP und SP muessen nicht gleich sein. Speisen und Getraenke,
166 die nur eines von beiden heilen, sind auch moeglich.
167
168 ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]),
169
170 4) Heilung pro Heartbeat (in diesem Beispiel je 5 KP/LP).
171
172 5,
173
174 5) Meldungen fuer Spieler und Umstehende die bei Genuss ausgege-
175 ben werden (also NICHT der Bestell-Text).
176
177 ({"Du isst die Keule mit einem schlechten Gewissen.",
178 "&& isst die Keule mit einem schlechten Gewissen."}),
179
180 Verfuegbare Platzhalter sind (pl = this_player()):
181
182 && - pl->name(WER,2)
183 &1& - pl->name(WER,2)
184 &2& - pl->name(WESSEN,2)
185 &3& - pl->name(WEM,2)
186 &4& - pl->name(WEN,2)
187 &1# - capitalize(pl->name(WER,2))
188 &2# - capitalize(pl->name(WESSEN,2))
189 &3# - capitalize(pl->name(WEM,2))
190 &4# - capitalize(pl->name(WEN,2))
191 &! - pl->QueryPronoun(WER)
192 &5& - pl->QueryPronoun(WE);
193 &6& - pl->QueryPronoun(WESSEN)
194 &7& - pl->QueryPronoun(WEM)
195 &8& - pl->QueryPronoun(WEN)
196 &5# - capitalize(pl->QueryPronoun(WER))
197 &6# - capitalize(pl->QueryPronoun(WESSEN))
198 &7# - capitalize(pl->QueryPronoun(WEM))
199 &8# - capitalize(pl->QueryPronoun(WEN))
200
201 6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler
202 sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen
203 "Notvorrat" von 20 Keulen, der alle 3 reset()s aufgefuellt
204 wird. Aus diesem (so noch vorhanden) werden die Spieler
205 versorgt, wenn ihr "persoenlicher Vorrat" aufgebraucht ist.
206
207 ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]),
208
209 HINWEIS: bei Benutzung des Mappings muss <pub.h> inkludiert
210 werden!
211
212 Wenn man keine reset-abhaengigen Speisen haben moechte, traegt
213 man hier eine 0 ein.
214
215 7) Die Zahl ist die Wartezeit in Sekunden, die der Wirt z.B. fuer
216 die Zubereitung und Auslieferung an den Spieler braucht.
217
218 9,
219
220 8) Letztendlich die Meldungen an Spieler und Umstehende, die bei Be-
221 stellung (hier 'kaufe keule') ausgegeben werden.
222
223 ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
224 "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
225 "wohl ein Tippfehler auf der Karte gewesen sein.",
226 "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
227 "Stueck aus dessen Keule und braet diese fuer &&."}));
228
229SIEHE AUCH:
230 AddFood(), AddDrink(), /sys/pub.h
231 RemoveFromMenu()
232----------------------------------------------------------------------------
233Last modified: Sam, 01. Okt 2011, 23:40 by Arathorn