| FOOD, 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 |