MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | // 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 | |
| 134 | public int cmd_eat(string str); |
| 135 | public int cmd_drink(string str); |
| 136 | public int is_eatable(); |
| 137 | public int is_drinkable(); |
| 138 | public int is_not_empty(); |
| 139 | public 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 |
| 145 | public 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) |
| 150 | public 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 |
| 155 | public int make_destroy(); |
| 156 | |
| 157 | // wird aufgerufen, wenn die Speise gerade verdirbt |
| 158 | // return 1, falls Objekt dabei zerstoert wird, sonst 0 |
| 159 | public 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 |
| 164 | public 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. |
| 171 | protected void consume_bad(mapping entry_info); |
| 172 | |
| 173 | // wird aus cmd_eat und cmd_drink aufgerufen und fuehrt das Konsumieren durch |
| 174 | protected int consume(); |
| 175 | // wird aus consume() aufgerufen und fuehrt das Konsumieren durch |
| 176 | // ist ausgelagert, damit man das testflag bei Bedarf nutzen kann |
| 177 | protected varargs int try_consume(int testonly); |
| 178 | |
| 179 | // Futtern hat geklappt |
| 180 | protected 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. |
| 184 | protected 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. |
| 194 | protected void message(string prop); |
| 195 | |
| 196 | #endif // _FOOD_H_PROTOTYPES_ |
| 197 | #endif // NEED_PROTOTYPES |
| 198 | |