Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc/lfun/AddToMenu

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


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.