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

