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 <racemodifier> der Form:
           ([ 0 : <standardwert> ,
            <rasse_1> : <wert_1>,
            ... ,
            <rasse_n> : <wert_n> ]).
       Die Eintraege in diesem Mapping werden gegen die Rasse des
       bestellenden Spielers geprueft und entsprechend die
       zugehoerigen Werte verwendet.
    2) string <func>: Aufruf erfolgt mittels
         call_other(this_object(), func, empfaenger);
       gerufen (aber: siehe Hinweise).
    3) closure <func>: Aufruf erfolgt mittels
         funcall(func, empfaenger);
    4) Array der Form  ({string <obj>, string <func>}) oder
                       ({object <obj>, string <func>})
       Aufruf erfolgt mittels
         call_other(obj, func, empfaenger);
       (aber: siehe Hinweise). <obj> ist folglich als Objektpointer
       oder dessen object_name() anzugeben. <func> 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 <func>: Aufruf erfolgt mittels
          funcall(func, zahler, empfaenger, ident, minfo);
     2) string <func>: Aufruf erfolgt mittels
          call_other(this_object(), func, zahler, empfaenger,
                     ident, minfo);
     <func> 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 <func> 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 <pub.h>

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 <pub.h> 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