AddToMenu() =========== FUNKTION -------- :: varargs string AddToMenu(string menuetext, mixed ids, mapping minfo, mixed rate, mixed msg, mixed refresh, mixed delay, mixed d_msg); DEFINIERT IN ------------ :: /std/pub.c ARGUMENTE --------- :: Die Erlaeuterung der Parameter beschraenkt sich im Folgenden zunaechst auf die Grundfunktionalitaet bei Verwendung fester Werte. Die Moeglichkeiten zur Realisierung dynamischen Verhaltens sind in den Fussnoten zu den einzelnen Parametern beschrieben. menuetext Der Text steht als kurze Beschreibung im Menue. ids String oder Array von Strings, mit denen sich die Speise bzw. das Getraenk beim Bestellen ansprechen laesst. minfo Mapping mit Eintraegen fuer: P_HP LP-Heilung in Punkten [*] P_SP KP-Heilung in Punkten [*] P_FOOD Saettigungswirkung der Speise [*] P_DRINK Saettigungswirkung des Getraenks [*] P_ALCOHOL Alkoholgehalt des Getraenks [*] P_VALUE Preis der Speise bzw. des Getraenks [*] rate [*] Heilrate in Punkten pro HeartBeat. msg [**] Meldung beim Essen: Array mit 2 Strings: (1) fuer Empfaenger, (2) fuer Andere. Verfuegbare Platzhalter sind weiter unten im Abschnitt "Beispiel" dokumentiert. refresh Mapping mit Eintraegen fuer: PR_USER (Kontingent fuer einzelnen Spieler) [*] PR_ALL (Zusatzkontingent fuer alle) [*] Alternativ: 0 fuer unbegrenzte Verfuegbarkeit Einem Key muessen dabei zwei Werte zugeordnet werden: Der Erste gibt die Hoehe des Kontingents an, der Zweite legt fest, alle wieviel reset()s das Kontingent wieder aufgefuellt wird. Verwendung des Mappings erfordert Inkludieren von pub.h. delay [*] Zahl der Sekunden, um die verzoegert die Heilung eintritt, z.B. weil das Essen erst zubereitet werden muss. d_msg [**] Meldung beim Bestellen, falls die Heilung verzoegert wird Array mit 2 Strings: (1) fuer Empfaenger, (2) fuer Andere. [*] Dieser Parameter kann statt eines festen Zahlenwerts mit folgenden Werten gefuellt werden: 1) Mapping der Form: ([ 0 : , : , ... , : ]). Die Eintraege in diesem Mapping werden gegen die Rasse des bestellenden Spielers geprueft und entsprechend die zugehoerigen Werte verwendet. 2) string : Aufruf erfolgt mittels call_other(this_object(), func, empfaenger); gerufen (aber: siehe Hinweise). 3) closure : Aufruf erfolgt mittels funcall(func, empfaenger); 4) Array der Form ({string , string }) oder ({object , string }) Aufruf erfolgt mittels call_other(obj, func, empfaenger); (aber: siehe Hinweise). ist folglich als Objektpointer oder dessen object_name() anzugeben. wird mittels function_exists() auf Existenz ueberprueft. HINWEISE: im Falle von Lieferverzoegerung ("delay") und Preis (P_VALUE) wird bei allen Funktionsaufrufen NICHT der Empfaenger, sondern der Zahler uebergeben. Im Falle der Kontingent-Liste ("refresh") kann nur die verfuegbare Menge modifiziert werden, nicht die Zeit bis zum Wieder-Auffuellen. [**] Zur Erzeugung variabler Meldungen koennen folgende Werte eingetragen werden: 1) closure : Aufruf erfolgt mittels funcall(func, zahler, empfaenger, ident, minfo); 2) string : Aufruf erfolgt mittels call_other(this_object(), func, zahler, empfaenger, ident, minfo); bekommt Zahler und Empfaenger als Objektpointer, ident als String und minfo als Mapping mit den jeweiligen Heilwerten uebergeben. minfo entspricht hierbei den Daten, die als dritter Parameter an AddToMenu() uebergeben wurden. HINWEIS: wenn in das minfo-Mapping keine int-Festwerte eingetragen wurden, werden diese gemaess den Regeln unter [*] geprueft; Funktionen/Closures werden ggf. ausgewertet und deren Rueckgabewerte an die Funktion uebergeben. WICHTIG: Die Rueckgabewerte der Funktion werden nicht ausgewertet. Jeder, der anstatt einer Meldung einen Funktionsaufruf programmiert, muss fuer die Ausgabe der Meldungen selbst sorgen. BESCHREIBUNG ------------ :: Mit dieser Funktion werden Speisen oder Getraenke in die Karte von Kneipen und Restaurants eingefuegt. RUECKGABEWERT ------------- :: Rueckgabewert ist ein String "menuentry%d", wobei %d eine Nummer ist, die darueber Auskunft gibt, den wievielten Eintrag in die interne Karte der Kneipe diese Speise bzw. dieses Getraenk darstellt. Im Prinzip handelt es sich bei dem String um einen Key fuer ein Mapping, in dem die Speisen bzw. Getraenke gespeichert sind. BEMERKUNGEN ----------- :: Die aelteren Funktionen 'AddDrink' bzw. 'AddFood' werden zwar mithilfe dieser maechtigeren Funktion aus Gruenden der Abwaertskompatibilitaet simuliert, sollen aber nicht mehr eingesetzt werden. Die alten Platzhalter && etc. (s.u.) werden weiterhin unterstuetzt, sollten aber fuer bessere Wartbarkeit nicht mehr verwendet werden. Fuer das Testen der Kneipe gibt es in jeder Kneipe den Befehl 'pubinit'. Hiermit lassen sich die Speisen und Getraenke durch- checken. Steht in der Ausgabe bei einem Getraenk/Essen ein FAIL, so wird die entsprechende Speise (oder Getraenk) NICHT an Spieler verkauft. Ausnahmen fuer Speisen/Getraenke mit hoeheren maximalen Werten sind durch Balance-EM zu genehmigen. BEISPIEL -------- :: include create() { AddToMenu("'Opa's Drachenkeule'",({"drachenkeule","keule"}), ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 5, ({"Du isst die Keule mit einem schlechten Gewissen.", "@WER1 isst die Keule mit einem schlechten Gewissen."}), ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), 9, ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses " "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss " "wohl ein Tippfehler auf der Karte gewesen sein.", "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein " "Stueck aus dessen Keule und braet diese fuer @WEN1."}) ); } 1) Name der Speise (des Getraenks) auf der Karte (bei menue). AddToMenu("'Opa's Drachenkeule'", 2) ids mit denen sich bestellen laesst (z.B. "kaufe keule"). ({"drachen","drachenkeule","keule"}), 3) Heilung fuer LP und KP, Saettigung (P_FOOD oder P_DRINK, P_ALCOHOL nach Belieben setzen), Preis (P_VALUE). HP und SP muessen nicht gleich sein. Speisen und Getraenke, die nur eines von beiden heilen, sind auch moeglich. ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 4) Heilung pro Heartbeat (in diesem Beispiel je 5 KP/LP). 5, 5) Meldungen fuer Spieler und Umstehende die bei Genuss ausgege- ben werden (also NICHT der Bestell-Text). ({"Du isst die Keule mit einem schlechten Gewissen.", "@WER1 isst die Keule mit einem schlechten Gewissen."}), Die Ausgabe-Strings werden vor der Ausgabe mit dem Empfaenger als Objekt an replace_personal() uebergeben. Fuer die moeglichen Platzhalter siehe dort. 6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen "Notvorrat" von 20 Keulen, der alle 3 reset()s aufgefuellt wird. Aus diesem (so noch vorhanden) werden die Spieler versorgt, wenn ihr "persoenlicher Vorrat" aufgebraucht ist. ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), HINWEIS: bei Benutzung des Mappings muss inkludiert werden! Wenn man keine reset-abhaengigen Speisen haben moechte, traegt man hier eine 0 ein. 7) Die Zahl ist die Wartezeit in Sekunden, die der Wirt z.B. fuer die Zubereitung und Auslieferung an den Spieler braucht. 9, 8) Letztendlich die Meldungen an Spieler und Umstehende, die bei Be- stellung (hier 'kaufe keule') ausgegeben werden. ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses " "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss " "wohl ein Tippfehler auf der Karte gewesen sein.", "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein " "Stueck aus dessen Keule und braet diese fuer @WEN1."})); LISTE DER ALTEN PLATZHALTER (DEPRECATED): ----------------------------------------- :: && - pl->name(WER,2) &1& - pl->name(WER,2) &2& - pl->name(WESSEN,2) &3& - pl->name(WEM,2) &4& - pl->name(WEN,2) &1# - capitalize(pl->name(WER,2)) &2# - capitalize(pl->name(WESSEN,2)) &3# - capitalize(pl->name(WEM,2)) &4# - capitalize(pl->name(WEN,2)) &! - pl->QueryPronoun(WER) &5& - pl->QueryPronoun(WE); &6& - pl->QueryPronoun(WESSEN) &7& - pl->QueryPronoun(WEM) &8& - pl->QueryPronoun(WEN) &5# - capitalize(pl->QueryPronoun(WER)) &6# - capitalize(pl->QueryPronoun(WESSEN)) &7# - capitalize(pl->QueryPronoun(WEM)) &8# - capitalize(pl->QueryPronoun(WEN)) SIEHE AUCH ---------- :: AddFood(), AddDrink(), /sys/pub.h RemoveFromMenu(), replace_personal() Last modified: Sam, 01. Okt 2011, 23:40 by Arathorn