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
