Dokumentation zu: AddFoodOrDrink(L)

HR Image


FUNKTION:
	varargs void AddFoodOrDrink(string Name, mixed ids, int liquid,
	    int solid, int strength, float heal, float heal2, 
	    mixed prefun, mixed postfun, mixed price, mixed msgs, int type)

IMPLEMENTIERT:
	/std/pub.c

ARGUMENTE:
	Name:      Name der Speise auf der Speisekarte
	ids:       ID(s) der Speise zum Bestellen (String oder Array)
	liquid:    Fluessigkeitsmenge in der Speise (*)
	solid:     Feststoffmenge in der Speise (*)
	strength:  Alkoholgehalt in Prozent (*)
	heal:      Heilfaktor (Lebenspunkte) -2.0 bis 2.0 (*)
	heal2:     Heilfaktor (Magiepunkte) -2.0 bis 2.0 (*)
	prefun:    Funktionsname oder Closure oder Msg-Array vor Verzehr
	postfun:   Funktionsname oder Closure oder Msg-Array nach Verzehr
	price:     Preis in Grundwaehrung (int) oder Null oder Faktor (float)
	msgs:      Verzehrfehlschlagmeldungen (*)
        type:      Getraenk/Speise-Erkennung (fuer Menue)

	(*) Siehe auch eat_and_drink(L) fuer naehere Beschreibung. Die
	    Werte werden dorthin direkt weitergegeben

BESCHREIBUNG:
	Erzeugt eine Speise (oder ein Getraenk, hier wird alles 'Speise'
	genannt) auf der Speisekarte der Kneipe.

	Die Speise wird auf der Speisekarte unter 'Name' aufgelistet und
	kann mit einer der bei 'ids' angegebenen Woerter bestellt werden.
	Gibt es mehrere gleiche IDs fuer verschiedene Speisen, so wird
	stets ausschliesslich die zuerst angemeldete Speise beachtet.

	Die Argumente liquid, solid, strength, heal und msgs werden beim
	Verzehr direkt an eat_and_drink() des Spielers uebergeben. Fuer
	naehere Angaben siehe dort. Im einzelnen sind die Werte:
	  liquid   - Fluessigkeitsgehalt der Speise in Milliliter
	  solid    - Feststoffmenge der Speise in Gramm
	  strength - Alkoholgehalt des Fluessiganteils in Prozent. Kann
	             nur angegeben werden, wenn die Speise Alkohol enthaelt.
	  heal     - Heilfaktor
	  heal2    - Heilfaktor
	  msgs     - Meldungen beim Verzehrfehlschlag 

	Durch 'prefun' kann man etwas direkt vor dem Verzehr bewirken:
	- Ist prefun eine Closure, so wird diese aufgerufen.
	- Ist es ein String, so wird eine Funktion diesen Namens im Pub
	  aufgerufen. Sowohl Closure als auch Funktion erhalten als
	  erstes und einziges Argument den Namen der Speise.
	- Als dritte Moeglichkeit kann man ein Array aus zwei Strings
	  ablegen ({ Meldung an Spieler, Meldung an Raum }). Die Meldungen
	  werden von der Lib umgebrochen, die Meldung an den Raum kann
	  durch &&WER&& o.ae. angereichert werden, sie durchlaeuft
	  parse_mess(S).

	Werte in 'postfun' werden analog behandelt, jedoch direkt nach
	dem Verzehr. Unterschiede bestehen in:
	- Funktion bzw Closure erhaelt als erstes Argument den Namen der
	  Speise und einen Integer als zweites. Die Integerzahl ist 1, wenn
	  der Verzehr erfolgreich war, 0 wenn der Spieler die Speise nicht
	  verzehren konnte oder -1 wenn der Spieler beim Verzehren der
	  Speise starb.
	- Die Meldungen in einem Array werden _nur_ dann ausgegeben, wenn
	  der Verzehr erfolgreich war. Misserfolgsmeldungen sind ja bereits
	  in msgs anzugeben. Bei einem Tod erfolgt keine Ausgabe.

	Als price sollte *immer* Null angegeben werden. Dann errechnet
	die Kneipe einen Preis der sich nach den Regeln des Muds an der
	Heilwirkung der Speise orientiert.
	Durch Angabe eines Float-Wertes kann man den Preis etwas beeinflussen.
	Der automatisch errechnete Preis wird dann mit diesem Faktor multi-
	pliziert. Gibt man 1.12 an, so ist diese Kneipe 12% teurer als
	der Wunderlandstanderd, 0.88 hiesse 12% billiger.
	Wird ein Integerwert angegeben, so ist dies direkt der Preis in
	Grundwaehrung.

	Der type legt fest, wo das Produkt im Menue aufgelistet wird. Der
	Standardwert von Null steht fuer automatische Einsortierung.
	Produkte, welche Feststoffe enthalten werden damit automagisch
	Speisen. Fuer ausgefallene Getraenke (mit Feststoffen) kann man 1
	angeben. Fuer Speisen komplett ohne Feststoffe sollte man 2 angeben.

BEISPIEL:
	void create() {
	  [...]
	  AddFoodOrDrink("Orangenlimonade",              // Name
	                 ({"orangenlimonade", "limo"}),  // IDs
	                 200,        // ml Fluessigkeit
	                 0,          // g Feststoff
	                 0,          // % Alkohol
	                 1.0,        // Heilfaktor (1.0 = normal)
	                 1.0,        // Heilfaktor (1.0 = normal)
	                 "limo",     // Pre-Fun
                         0,          // Post-Fun
	                 0,          // Preis (0 = Auto)
	                 0);         // Msgs (0 = Auto)

	  AddFoodOrDrink("Saft","saft", 200, 0, 0, -2.0, 1.0,"limo",
	    "post_gift", 0, 0);
	    
	  oder:
	  AddFoodOrDrink("Brot", ({"brot"}), 0, 100, 0, 1.0, 1.0, 0, 
	    ({"Das Barfraeulein bringt Dir ein Brot\n",
              "Das Barfraeulein bringt && ein Brot.\n"}),0,0 );  
	  }

	void limo(string getraenk) {
	  write("Der Ober stellt ein Glas auf den Tisch und fuellt es "
	    "mit "+getraenk+".\n");
	}

	void post_gift(string Name, int ok) {
	  switch (ok) {
	    case  1: write("Genussvoll trinkst Du es aus.\n");
	             break;
	    case  0: write("Der Ober raeumt das Glas haendereibend weg.\n");
	             break;
	    case -1: if (this_player())
	               write("Du hoerst den Ober in der Ferne lachen.\n");
	             break;
	  }
	}

SIEHE AUCH:
	eat_and_drink(L), RemoveFoodOrDrink(L)


Start » Magierhandbuch » Docu » Lfun » AddFoodOrDrink Letzte Generierung: 25.04.2021, 01:58
Email an: mud@wl.mud.de
Valid HTML 4.01!