Morgengrauner Dokumentation
Dateipfad: /home/mud/mudlib/doc//wiz/foodFOOD, DRINK & ALCOHOL
=====================
Es wird empfohlen, jede tragbare Heilung ueber "/std/food"
zu implementieren. Hier braucht man nur wenige Properties setzen, um
sicherzugehen, dass die Heilung korrekt verlaeuft.
Bitte bei der Realisierung von tragbaren Tanken IMMER mit der Balance
sprechen. Die Heilung unterliegt genauer Kontrolle. Ewig haltbare Speisen
sind sowieso genehmigungspflichtig und nur mit guter Begruendung und
strengen Auflagen erlaubt.
FEATURES:
Unterstuetzt wird das Konsumieren von Speisen per Essen oder Trinken auch
in mehreren Portionen. Die Speisen verderben und werden vernichtet.
Es sind Lebensmittel mit Behaelter moeglich, so dass dieser leer
zurueckbleibt, wenn der Inhalt gegessen oder vernichtet wurde.
Die Wirkung von Speisen kann neben der Zufuehrung von Lebens- und Konzen-
trationspunkten erweitert werden. Die Wirkung verdorbener Speisen kann
getrennt definiert werden.
Wert und Gewicht der Speise werden in Abhaengigkeit der Restmengen immer
korrekt berechnet.
REALISIERUNG:
Die Realisierung der Timer laeuft ueber die Resets der Speise. Callouts
werden lediglich verwendet, um den Aufruf des Resets zu garantieren.
Es wird auch geprueft, dass der Aufruf der Resets per Hand nichts
durcheinander bringt.
Des Weiteren ist sichergestellt, dass der Spieler nicht mit Futter in
Beruehrung kommt, dessen Timer zum Verderben initialisiert ist.
Das Konzept ist dem Heilungskonzept der Kneipen angepasst worden.
Dem entsprechend sind die Properties sehr aehnlich.
PROPERTIES:
P_PORTIONS : Anzahl der Portionen (wie oft kann man abbeissen /
einen Schluck nehmen)
P_FOOD : Fuellgrad der Speise pro Portion, muss gesetzt sein, wenn
P_DRINK nicht gesetzt ist
P_DRINK : Fuellgrad der Fluessigkeit pro Portion, muss gesetzt sein,
wenn P_FOOD nicht gesetzt ist
P_ALCOHOL : Alkohollevel pro Portion
P_WEIGHT : Gewicht pro Portion (bei QueryProp(P_WEIGHT) wird das
komplette Gewicht aller Portionen + eventuell Behaelter
zurueckgegeben)
P_VALUE : Wert pro Portion (bei QueryProp(P_VALUE) wird der
komplette Wert aller Portionen + eventuell Behaelter
zurueckgegeben)
P_HP : Anzahl der LP, die prop Portion geheilt/geschwaecht werden
P_SP : Anzahl der KP, die prop Portion geheilt/geschwaecht werden
P_DISTRIBUTION : Verteilung der Heilung auf die Heartbeats
(siehe Hilfe zu H_DISTRIBUTION in consume)
P_LIFETIME : Zeit in Sekunden, bis die Speise verdirbt (>0)
Zaehlt ab der ersten Inbesitznahme durch einen Spieler
P_RESET_LIFETIME : Zeit in Resets, bis die Speise verdirbt (>0)
Die Laenge der einzelnen Resets wird wie ueblich berechnet
und P_LIFETIME entsprechend auf durchschnittlich
P_RESET_LIFETIME * 45 * 60 gesetzt.
(existiert, da bisher meistens in Resets gerechnet wurde)
Sollte sinnvollerweise nur als SetProp(P_RESET_LIFETIME)
verwendet werden, kann aber auch abgefragt werden
P_EMPTY_PROPS : Mapping mit Werten des Behaelters
Alle hier angegebenen Werte (ausser P_PORTIONS) werden
in der Speise gesetzt, wenn die letzte Portion konsumiert
wurde. Wenn diese Prop leer ist, wird das Objekt zerstoert,
wenn keine Portionen mehr da sind.
Achtung: es werden keine closures unterstuetzt!
P_IDS : Wert in P_EMPTY_PROPS
Liste der IDs des leeren Behaelters
Achtung: es werden keine closures unterstuetzt!
P_ADJECTIVES : Wert in P_EMPTY_PROPS
Liste der Adjektive des leeren Behaelters
Achtung: es werden keine closures unterstuetzt!
P_VALUE : Wert in P_EMPTY_PROPS
Wert des leeren Behaelters
P_WEIGHT : Wert in P_EMPTY_PROPS
Gewicht des leeren Behaelters
P_NO_BAD : Flag, ob die Speise verderben kann
Darf nur in Absprache mit der Balance auf 1 gesetzt werden!
P_DESTROY_BAD : Wert, was beim Verderben mit dem Object passiert
DESTROY_BAD = Die Speise wird beim Verderben zerstoert
bzw. der Behaelter wird geleert (default)
DESTROY_NEVER = Die Speise wird beim Verderben nicht
zerstoert
pos. integer = Anzahl der Sekunden, die zwischen Verderben
und Zerstoeren der Speise liegen sollen
MESSAGES: (durchlaufen replace_personal() und koennen somit Platzhalter
fuer Speise (1. Argument) und Konsument (2. Argument) enthalten)
P_CONSUME_MSG : fuer den Raum, wenn konsumiert wird
P_EATER_MSG : an den Konsumenten
P_EMPTY_MSG : wenn leere Behaelter konsumiert werden
P_NOFOOD_MSG : wenn Getraenke gegessen werden
P_NODRINK_MSG : wenn Futter getrunken wird
P_BAD_MSG : wenn Speisen verderben
P_REMOVE_MSG : wenn Speisen vernichtet werden
(nur wenn sie nicht beim Verderben vernichtet werden)
P_ENV_MSG : wenn im Raum liegende Speisen konsumiert werden
(ist diese Prop leer, geht das sogar!)
P_FOOD_FULL_MSG : wenn man nix mehr essen kann
P_DRINK_FULL_MSG : wenn man nix mehr trinken kann
P_ALC_FULL_MSG : wenn man keinen Alkohol mehr vertraegt
METHODEN:
consume : wird beim Konsumieren aufgerufen, wenn klar ist,
dass was zum Konsumieren da ist.
gibt das Ergebnis von try_consume() zurueck
try_consume : bereitet die Daten auf und fuehrt living->consume() aus
kann zur Pruefung mit testonly-Flag aufgerufen werden
gibt das Ergebnis von living->consume() zurueck
success_consume : wird von consume() aufgerufen, wenn Konsumieren klappt
gibt die Meldungen zum Konsumieren aus
failed_consume : wird aufgerufen, wenn Konsumieren nicht klappt
gibt den Grund fuer den Fehlschlag aus
(je nach Ergebnis von living->consume())
consume_bad : Aendert die Daten fuer living->consume(), wenn eine
verdorbene Speise konsumiert wird
Standard: Heilung wirkt nicht, Vergiftung +1
make_bad : wird aufgerufen, wenn die Speise gerade verdirbt
Gibt die Meldungen beim Verderben aus
Vernichtet das Objekt, wenn das gewollt ist
Die Methode wird auch aufgerufen, wenn nur noch der
Behaelter existiert! Also den Test is_not_empty() nicht
vergessen!
make_destroy : wird aufgerufen, wenn die Speise bereits verdorben ist
und die Zeit aus P_DESTROY_BAD abgelaufen ist.
Gibt die Meldung zum Zerstoeren aus und ruft
make_empty aus, um die Speise bzw. den Inhalt des
Behaelters zu zerstoeren. Ausserdem wird der Reset
abgeschaltet.
Die Methode wird auch aufgerufen, wenn nur noch der
Behaelter existiert! Also den Test is_not_empty() nicht
vergessen!
make_empty : wird aufgerufen, wenn die letzte Portion konsumiert wird
Macht aus einem vollen Behaelter einen leeren oder
vernichtet das Objekt. Der Behaelter verdirbt also im
Normalfall nicht!
init : Startet den Timer zum Verderben der Speise
(start_lifetime()), wenn sich das Objekt in einem
Spieler befindet.
Prueft, ob Laufzeiten fehlerhafterweise nicht beendet
wurden und holt es dann nach
NotifyMove : Startet den Timer zum Verderben der Speise
(start_lifetime()) auch, wenn die Speise in einen
Spieler bewegt wird, ohne dass init() aufgerufen
wurde.
reset : wird fuer 3 Situationen verwendet:
1: Das Futter wurde bewegt, der Timer aber noch nicht
initialisiert -> es wird geprueft, ob der Timer
gestartet werden muss.
2: Der Timer ist abgelaufen ->
laesst die Speise verderben und vernichtet sie
gegebenenfalls
3: Der Timer nach dem Verderben ist abgelaufen ->
vernichtet die Speise
Es wird immer geprueft, ob die Resets zeitgerecht
aufgerufen wurden und die Aktionen nicht zur falschen
Zeit passieren
is_not_empty : Flag, ob noch Portionen vorhanden sind
is_drinkable : Flag, ob Speise trinkbar ist
(nur wenn P_DRINK gesetzt und P_FOOD NICHT gesetzt ist)
is_eatable : Flag ob Speise essbar ist
(wenn P_FOOD gesetzt (P_DRINK ist egal))
is_bad : Flag, ob Speise verdorben ist
get_current_lifetime : Zeit in Sekunden, wie lange der Timer zum Verderben
laeuft (ist immer 0, wenn P_NO_BAD gesetzt ist)
start_lifetime : startet den Timer zum Verderben der Speise falls keine
Gruende dagegen sprechen, wird intern aufgerufen, kann
aber in speziellen Situationen auch manuell aufgerufen
werden (siehe oben unter REALISIERUNG)
message : es werden Meldungen zu Statusaenderungen verarbeitet
und korrekt ausgegeben. Es wird der Name der auszu-
gebenen Property uebergeben.
Es werden alle notwendigen Ersetzungen per
replace_personal gemacht und geprueft, ob dem Besitzer
oder dem Raum die Meldung ausgegeben werden muss.
Hierueber sollten nur Meldungen ausgegeben werden, die
durch Aenderungen an der Speise im Reset ausgeloest
werden, also im reset selbst und in den make_*-Methoden.
STANDARD:
Wenn man nichts in seinem Futter ueberschreibt, dann hat es
folgendes Standardverhalten.
Es muss immer P_FOOD oder P_DRINK explizit groesser 0 gesetzt werden,
sonst laesst sich das Lebensmittel nicht konsumieren!
- Haltbarkeit: 1 Reset (30 + random(30) Minuten)
- der Ablauf der Haltbarkeit startet, sobald ein Spieler die Speise nimmt
- Wenn die Speise schlecht wird, wird sie zerstoert
- Die Speise hat keinen Behaelter
- Es gibt nur einen Schluck/Bissen, dann ist die Speise weg
- Gewicht: 50 Gramm / Wert: 10 Muenzen
- Man heilt weder LP noch KP
- Man wuerde ansonsten 5 LP/KP pro Heartbeat heilen
- Man kann die Speise nur konsumieren, wenn man sie in der Hand haelt
- Wenn man die verdorbene Speise konsumieren koennte, wuerde man nicht
heilen sondern vergiftet werden (P_POISON+1)
BEISPIELE:
Beispiele zu tragbaren Speisen und Getraenken kann man unter
doc/beispiele/food/ nachschauen
SIEHE AUCH:
consume, wiz/heilung
LETZTE AeNDERUNG:
25.09.2010, Caldra
zurück zur Übersicht