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
