blob: 085c6cb4f126abddd64198de9e767fdf27b0ac15 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// /sys/food.sys - Defines und Prototypen fuer Lebensmittel
4//
5// $Id: food.h 7702 2010-10-26 21:22:37Z Zesstra $
6
7#ifndef _FOOD_H_
8#define _FOOD_H_
9
10#include <properties.h>
11
12// Fuellgrad pro Portion Essen (defined in life.h)
13// #define P_FOOD
14
15// Fuellgrad pro Schluck des Getraenkes (defined in life.h)
16// #define P_DRINK
17
18// Menge an Alkohol, die die Speise pro Portion hat (defined in life.h)
19// #define P_ALCOHOL
20
21// Heilwirkung der Speise (defined in life.h)
22// #define P_SP
23// #define P_HP
24
25// Gewicht pro Portion (defined in restrictions.h)
26// in P_EMPTY_PROPS ist es das Gewicht des Behaelters
27// mit beiden Angaben wird das Gewicht immer korrekt berechnet
28// #define P_WEIGHT
29
30// Wert pro Portion (defined in properties.h)
31// in P_EMPTY_PROPS ist es der Wert des Behaelters
32// mit beiden Angaben wird der Wert immer korrekt berechnet
33// #define P_VALUE
34
35// Die Meldung, die die Umstehenden erhalten, wenn gegessen/getrunken wird.
36#define P_CONSUME_MSG "std_food_consume_msg"
37
38// Die Meldung, die derjenige kriegt, der das Ding isst/trinkt.
39#define P_EATER_MSG "std_food_eater_msg"
40
41// Message, wenn man die Speise beim Konsumieren gar nicht in der Hand hat
42// Wenn man die Prop loescht, kann die Speise immer vertilgt werden
43#define P_ENV_MSG "std_food_env_msg"
44
45// Die Meldung, wenn die Speise leer ist
46#define P_EMPTY_MSG "std_food_empty_msg"
47
48// Die Meldung, wenn Getraenke gegessen werden
49#define P_NOFOOD_MSG "std_food_nofood_msg"
50
51// Die Meldung, wenn Speisen getrunken werden
52#define P_NODRINK_MSG "std_food_nodrink_msg"
53
54// Die Meldung, wenn die Speise gerade verdirbt
55#define P_BAD_MSG "std_food_bad_msg"
56
57// Die Meldung, wenn nichts mehr gegessen werden kann
58#define P_FOOD_FULL_MSG "std_food_full_msg"
59// Die Meldung, wenn nichts mehr getrunken werden kann
60#define P_DRINK_FULL_MSG "std_food_drink_full_msg"
61// Die Meldung, wenn nichts mehr alkoholisches geht
62#define P_ALC_FULL_MSG "std_food_alc_full_msg"
63// Die Meldung, wenn eine verdorbene Speise zerstoert wird
64// wird nur verwendet, wenn P_DESTROY_BAD > 0 ist
65#define P_REMOVE_MSG "std_food_remove_message"
66
67// Mapping mit Properties fuer den leeren Behaelter.
68// Alle enthaltenen Properties werden gesetzt, wenn
69// keine Portionen mehr vorhanden sind, bereits in diesen Properties
70// eingetragene Werte werden ueberschrieben!
71// Wenn diese Property nicht gesetzt ist, wird die Speise zerstoert,
72// wenn alle Portionen aufgebraucht ist.
73// Achtung: es werden keine closures unterstuetzt!
74#define P_EMPTY_PROPS "std_food_empty_props"
75
76// Wieviele Portionen hat die Speise
77#define P_PORTIONS "std_food_portions"
78
79// Verteilung der Heilungsrate pro Portion (siehe H_DISTRIBUTION)
80#define P_DISTRIBUTION "std_food_distribution"
81
82// Anzahl der Sekunden, bis die Speise verdorben ist.
83// Es muss ein Wert groesser 0 eingetragen werden.
84// Wenn kein Wert gesetzt wird, verdirbt die Speise beim naechsten Reset
85// Der Timer startet immer erst, wenn ein Spieler die Speise das erste Mal
86// in die Hand bekommt
87#define P_LIFETIME "std_food_lifetime"
88// Anzahl der Resets, bis die Speise verdorben ist.
89// P_RESET_LIFETIME und P_LIFETIME sind komplementaer, das heisst, dass
90// beim Setzen der einen die andere automatisch berechnet wird. Man braucht
91// daher nicht beide zu setzen, bzw. sollte dies gar nicht erst tun.
92#define P_RESET_LIFETIME "std_food_lifetime_reset"
93
94// Flag, ob die Speise verdirbt
95// Standard: 0 -> Darf nur mit Balancegenehmigung geaendert werden!
96#define P_NO_BAD "std_food_no_bad"
97
98// Zeit in Sekunden, wann die Speise nach dem Schlechtwerden zerstoert wird.
99// wenn P_EMPTY_PROPS gesetzt ist, wird der Behaelter geleert.
100// Standard: -1 = sofort beim Schlechtwerden
101// 0 = wird nicht zerstoert
102// >0 = Anzahl der Sekunden
103#define P_DESTROY_BAD "std_food_destroy_bad"
104#define DESTROY_NEVER 0
105#define DESTROY_BAD -1
106
107//============================================================================
108// Kompatibilitaetscode
109#define F_IS_FOOD "old_is_food"
110#define F_IS_DRINK "old_is_drink"
111#define F_IS_FULL "old_is_full"
112#define F_MESSAGE "old_mess"
113#define F_EATER "old_eater"
114#define F_EMPTY_CONTAINER "old_empty_con"
115#define F_EMPTY_GENDER "old_empty_gender"
116#define F_EMPTY_ID "old_empty_id"
117#define F_EMPTY_LONG "old_empty_long"
118#define F_ALC "old_alc"
119#define F_LIQUID "old_water"
120#define F_FOOD_SIZE "old_food_size"
121#define F_POTION "old_potion"
122#define F_HEAL_SP "old_heal_sp"
123#define F_HEAL_HP "old_heal_hp"
124#define F_NO_CONTAINER "old_no_con"
125#define F_BAD "old_bad"
126#define F_POISON "old_poison"
127
128#endif // _FOOD_H_
129
130#ifdef NEED_PROTOTYPES
131#ifndef _FOOD_H_PROTOTYPES_
132#define _FOOD_H_PROTOTYPES_
133
134public int cmd_eat(string str);
135public int cmd_drink(string str);
136public int is_eatable();
137public int is_drinkable();
138public int is_not_empty();
139public int is_bad();
140
141// Anzahl der Sekunden, die das Lebensmittel bereits hinter sich hat,
142// seit es mit einem Spieler in Beruehrung kam
143// wenn 0 zurueckgegeben wird, ist der Timer zum Schlechtwerden noch nicht
144// gestartet worden
145public int get_current_lifetime();
146
147// Startet den Timer zum Verderben der Speise, falls keine Gruende dagegen
148// sprechen, wird von init() und NotifyMove aufgerufen, kann in speziellen
149// Situationen aber auch manuell aufgerufen werden (siehe man food)
150public void start_lifetime();
151
152// wird aufgerufen, wenn die Speise verdorben ist und die Zeit aus
153// P_DESTROY_BAD abgelaufen ist
154// return 1, falls Objekt zerstoert wird, sonst 0
155public int make_destroy();
156
157// wird aufgerufen, wenn die Speise gerade verdirbt
158// return 1, falls Objekt dabei zerstoert wird, sonst 0
159public int make_bad();
160
161// wird aufgerufen, sobald die letzte Portion gegessen/getrunken wurde
162// Falls P_EMPTY_PROPS 0 ist, wird das Objekt zerstoert
163// return 1, falls Objekt dabei zerstoert wird, sonst 0
164public int make_empty();
165
166// wird jedesmal aufgerufen, wenn eine verdorbene Speise konsumiert wird.
167// Als Argument wird das Mapping uebergeben, das consume() im Lebewesen
168// uebergeben werden soll. Dieses Mapping kann veraendert werden.
169// Standard: Die Heilwirkung wird entfernt und stattdessen wird das Lebewesen
170// vergiftet.
171protected void consume_bad(mapping entry_info);
172
173// wird aus cmd_eat und cmd_drink aufgerufen und fuehrt das Konsumieren durch
174protected int consume();
175// wird aus consume() aufgerufen und fuehrt das Konsumieren durch
176// ist ausgelagert, damit man das testflag bei Bedarf nutzen kann
177protected varargs int try_consume(int testonly);
178
179// Futtern hat geklappt
180protected void success_consume();
181// Futtern hat nicht geklappt (leerer Behaelter ist hier kein Grund!)
182// Wird aus try_consume() gerufen.
183// reason entspricht dem Rueckgabewert von consume() im Lebewesen.
184protected void failed_consume(int reason);
185
186// Methode, die Meldungen zu Statusaenderungen verarbeitet und korrekt ausgibt.
187// Es wird der Name der auszugebenen Property uebergeben.
188// Es werden alle notwendigen Ersetzungen per replace_personal gemacht und
189// geprueft, ob dem Besitzer oder dem Raum die Meldung ausgegeben werden
190// muss.
191// Hierueber sollten nur Meldungen ausgegeben werden, die durch Aenderungen
192// an der Speise im Reset ausgeloest werden, also im reset selbst und in den
193// make_*-Methoden.
194protected void message(string prop);
195
196#endif // _FOOD_H_PROTOTYPES_
197#endif // NEED_PROTOTYPES
198