blob: 085c6cb4f126abddd64198de9e767fdf27b0ac15 [file] [log] [blame]
// MorgenGrauen MUDlib
//
// /sys/food.sys - Defines und Prototypen fuer Lebensmittel
//
// $Id: food.h 7702 2010-10-26 21:22:37Z Zesstra $
#ifndef _FOOD_H_
#define _FOOD_H_
#include <properties.h>
// Fuellgrad pro Portion Essen (defined in life.h)
// #define P_FOOD
// Fuellgrad pro Schluck des Getraenkes (defined in life.h)
// #define P_DRINK
// Menge an Alkohol, die die Speise pro Portion hat (defined in life.h)
// #define P_ALCOHOL
// Heilwirkung der Speise (defined in life.h)
// #define P_SP
// #define P_HP
// Gewicht pro Portion (defined in restrictions.h)
// in P_EMPTY_PROPS ist es das Gewicht des Behaelters
// mit beiden Angaben wird das Gewicht immer korrekt berechnet
// #define P_WEIGHT
// Wert pro Portion (defined in properties.h)
// in P_EMPTY_PROPS ist es der Wert des Behaelters
// mit beiden Angaben wird der Wert immer korrekt berechnet
// #define P_VALUE
// Die Meldung, die die Umstehenden erhalten, wenn gegessen/getrunken wird.
#define P_CONSUME_MSG "std_food_consume_msg"
// Die Meldung, die derjenige kriegt, der das Ding isst/trinkt.
#define P_EATER_MSG "std_food_eater_msg"
// Message, wenn man die Speise beim Konsumieren gar nicht in der Hand hat
// Wenn man die Prop loescht, kann die Speise immer vertilgt werden
#define P_ENV_MSG "std_food_env_msg"
// Die Meldung, wenn die Speise leer ist
#define P_EMPTY_MSG "std_food_empty_msg"
// Die Meldung, wenn Getraenke gegessen werden
#define P_NOFOOD_MSG "std_food_nofood_msg"
// Die Meldung, wenn Speisen getrunken werden
#define P_NODRINK_MSG "std_food_nodrink_msg"
// Die Meldung, wenn die Speise gerade verdirbt
#define P_BAD_MSG "std_food_bad_msg"
// Die Meldung, wenn nichts mehr gegessen werden kann
#define P_FOOD_FULL_MSG "std_food_full_msg"
// Die Meldung, wenn nichts mehr getrunken werden kann
#define P_DRINK_FULL_MSG "std_food_drink_full_msg"
// Die Meldung, wenn nichts mehr alkoholisches geht
#define P_ALC_FULL_MSG "std_food_alc_full_msg"
// Die Meldung, wenn eine verdorbene Speise zerstoert wird
// wird nur verwendet, wenn P_DESTROY_BAD > 0 ist
#define P_REMOVE_MSG "std_food_remove_message"
// Mapping mit Properties fuer den leeren Behaelter.
// Alle enthaltenen Properties werden gesetzt, wenn
// keine Portionen mehr vorhanden sind, bereits in diesen Properties
// eingetragene Werte werden ueberschrieben!
// Wenn diese Property nicht gesetzt ist, wird die Speise zerstoert,
// wenn alle Portionen aufgebraucht ist.
// Achtung: es werden keine closures unterstuetzt!
#define P_EMPTY_PROPS "std_food_empty_props"
// Wieviele Portionen hat die Speise
#define P_PORTIONS "std_food_portions"
// Verteilung der Heilungsrate pro Portion (siehe H_DISTRIBUTION)
#define P_DISTRIBUTION "std_food_distribution"
// Anzahl der Sekunden, bis die Speise verdorben ist.
// Es muss ein Wert groesser 0 eingetragen werden.
// Wenn kein Wert gesetzt wird, verdirbt die Speise beim naechsten Reset
// Der Timer startet immer erst, wenn ein Spieler die Speise das erste Mal
// in die Hand bekommt
#define P_LIFETIME "std_food_lifetime"
// Anzahl der Resets, bis die Speise verdorben ist.
// P_RESET_LIFETIME und P_LIFETIME sind komplementaer, das heisst, dass
// beim Setzen der einen die andere automatisch berechnet wird. Man braucht
// daher nicht beide zu setzen, bzw. sollte dies gar nicht erst tun.
#define P_RESET_LIFETIME "std_food_lifetime_reset"
// Flag, ob die Speise verdirbt
// Standard: 0 -> Darf nur mit Balancegenehmigung geaendert werden!
#define P_NO_BAD "std_food_no_bad"
// Zeit in Sekunden, wann die Speise nach dem Schlechtwerden zerstoert wird.
// wenn P_EMPTY_PROPS gesetzt ist, wird der Behaelter geleert.
// Standard: -1 = sofort beim Schlechtwerden
// 0 = wird nicht zerstoert
// >0 = Anzahl der Sekunden
#define P_DESTROY_BAD "std_food_destroy_bad"
#define DESTROY_NEVER 0
#define DESTROY_BAD -1
//============================================================================
// Kompatibilitaetscode
#define F_IS_FOOD "old_is_food"
#define F_IS_DRINK "old_is_drink"
#define F_IS_FULL "old_is_full"
#define F_MESSAGE "old_mess"
#define F_EATER "old_eater"
#define F_EMPTY_CONTAINER "old_empty_con"
#define F_EMPTY_GENDER "old_empty_gender"
#define F_EMPTY_ID "old_empty_id"
#define F_EMPTY_LONG "old_empty_long"
#define F_ALC "old_alc"
#define F_LIQUID "old_water"
#define F_FOOD_SIZE "old_food_size"
#define F_POTION "old_potion"
#define F_HEAL_SP "old_heal_sp"
#define F_HEAL_HP "old_heal_hp"
#define F_NO_CONTAINER "old_no_con"
#define F_BAD "old_bad"
#define F_POISON "old_poison"
#endif // _FOOD_H_
#ifdef NEED_PROTOTYPES
#ifndef _FOOD_H_PROTOTYPES_
#define _FOOD_H_PROTOTYPES_
public int cmd_eat(string str);
public int cmd_drink(string str);
public int is_eatable();
public int is_drinkable();
public int is_not_empty();
public int is_bad();
// Anzahl der Sekunden, die das Lebensmittel bereits hinter sich hat,
// seit es mit einem Spieler in Beruehrung kam
// wenn 0 zurueckgegeben wird, ist der Timer zum Schlechtwerden noch nicht
// gestartet worden
public int get_current_lifetime();
// Startet den Timer zum Verderben der Speise, falls keine Gruende dagegen
// sprechen, wird von init() und NotifyMove aufgerufen, kann in speziellen
// Situationen aber auch manuell aufgerufen werden (siehe man food)
public void start_lifetime();
// wird aufgerufen, wenn die Speise verdorben ist und die Zeit aus
// P_DESTROY_BAD abgelaufen ist
// return 1, falls Objekt zerstoert wird, sonst 0
public int make_destroy();
// wird aufgerufen, wenn die Speise gerade verdirbt
// return 1, falls Objekt dabei zerstoert wird, sonst 0
public int make_bad();
// wird aufgerufen, sobald die letzte Portion gegessen/getrunken wurde
// Falls P_EMPTY_PROPS 0 ist, wird das Objekt zerstoert
// return 1, falls Objekt dabei zerstoert wird, sonst 0
public int make_empty();
// wird jedesmal aufgerufen, wenn eine verdorbene Speise konsumiert wird.
// Als Argument wird das Mapping uebergeben, das consume() im Lebewesen
// uebergeben werden soll. Dieses Mapping kann veraendert werden.
// Standard: Die Heilwirkung wird entfernt und stattdessen wird das Lebewesen
// vergiftet.
protected void consume_bad(mapping entry_info);
// wird aus cmd_eat und cmd_drink aufgerufen und fuehrt das Konsumieren durch
protected int consume();
// wird aus consume() aufgerufen und fuehrt das Konsumieren durch
// ist ausgelagert, damit man das testflag bei Bedarf nutzen kann
protected varargs int try_consume(int testonly);
// Futtern hat geklappt
protected void success_consume();
// Futtern hat nicht geklappt (leerer Behaelter ist hier kein Grund!)
// Wird aus try_consume() gerufen.
// reason entspricht dem Rueckgabewert von consume() im Lebewesen.
protected void failed_consume(int reason);
// Methode, die Meldungen zu Statusaenderungen verarbeitet und korrekt ausgibt.
// Es wird der Name der auszugebenen 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.
protected void message(string prop);
#endif // _FOOD_H_PROTOTYPES_
#endif // NEED_PROTOTYPES