blob: 698e3f61466a2e037e8d35de4853b21e26b945f9 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001FOOD, DRINK & ALCOHOL
2=====================
3
4 Es wird empfohlen, jede tragbare Heilung ueber "/std/food"
5 zu implementieren. Hier braucht man nur wenige Properties setzen, um
6 sicherzugehen, dass die Heilung korrekt verlaeuft.
7
8 Bitte bei der Realisierung von tragbaren Tanken IMMER mit der Balance
9 sprechen. Die Heilung unterliegt genauer Kontrolle. Ewig haltbare Speisen
10 sind sowieso genehmigungspflichtig und nur mit guter Begruendung und
11 strengen Auflagen erlaubt.
12
13FEATURES:
14 Unterstuetzt wird das Konsumieren von Speisen per Essen oder Trinken auch
15 in mehreren Portionen. Die Speisen verderben und werden vernichtet.
16 Es sind Lebensmittel mit Behaelter moeglich, so dass dieser leer
17 zurueckbleibt, wenn der Inhalt gegessen oder vernichtet wurde.
18 Die Wirkung von Speisen kann neben der Zufuehrung von Lebens- und Konzen-
19 trationspunkten erweitert werden. Die Wirkung verdorbener Speisen kann
20 getrennt definiert werden.
21 Wert und Gewicht der Speise werden in Abhaengigkeit der Restmengen immer
22 korrekt berechnet.
23
24REALISIERUNG:
25 Die Realisierung der Timer laeuft ueber die Resets der Speise. Callouts
26 werden lediglich verwendet, um den Aufruf des Resets zu garantieren.
27 Es wird auch geprueft, dass der Aufruf der Resets per Hand nichts
28 durcheinander bringt.
29
30 Des Weiteren ist sichergestellt, dass der Spieler nicht mit Futter in
31 Beruehrung kommt, dessen Timer zum Verderben initialisiert ist.
32
33 Das Konzept ist dem Heilungskonzept der Kneipen angepasst worden.
34 Dem entsprechend sind die Properties sehr aehnlich.
35
36PROPERTIES:
37
38 P_PORTIONS : Anzahl der Portionen (wie oft kann man abbeissen /
39 einen Schluck nehmen)
40
41 P_FOOD : Fuellgrad der Speise pro Portion, muss gesetzt sein, wenn
42 P_DRINK nicht gesetzt ist
43 P_DRINK : Fuellgrad der Fluessigkeit pro Portion, muss gesetzt sein,
44 wenn P_FOOD nicht gesetzt ist
45 P_ALCOHOL : Alkohollevel pro Portion
46
47 P_WEIGHT : Gewicht pro Portion (bei QueryProp(P_WEIGHT) wird das
48 komplette Gewicht aller Portionen + eventuell Behaelter
49 zurueckgegeben)
50 P_VALUE : Wert pro Portion (bei QueryProp(P_VALUE) wird der
51 komplette Wert aller Portionen + eventuell Behaelter
52 zurueckgegeben)
53
54 P_HP : Anzahl der LP, die prop Portion geheilt/geschwaecht werden
55 P_SP : Anzahl der KP, die prop Portion geheilt/geschwaecht werden
56 P_DISTRIBUTION : Verteilung der Heilung auf die Heartbeats
57 (siehe Hilfe zu H_DISTRIBUTION in consume)
58
59 P_LIFETIME : Zeit in Sekunden, bis die Speise verdirbt (>0)
60 Zaehlt ab der ersten Inbesitznahme durch einen Spieler
61P_RESET_LIFETIME : Zeit in Resets, bis die Speise verdirbt (>0)
62 Die Laenge der einzelnen Resets wird wie ueblich berechnet
63 und P_LIFETIME entsprechend auf durchschnittlich
64 P_RESET_LIFETIME * 45 * 60 gesetzt.
65 (existiert, da bisher meistens in Resets gerechnet wurde)
66 Sollte sinnvollerweise nur als SetProp(P_RESET_LIFETIME)
67 verwendet werden, kann aber auch abgefragt werden
68
69 P_EMPTY_PROPS : Mapping mit Werten des Behaelters
70 Alle hier angegebenen Werte (ausser P_PORTIONS) werden
71 in der Speise gesetzt, wenn die letzte Portion konsumiert
72 wurde. Wenn diese Prop leer ist, wird das Objekt zerstoert,
73 wenn keine Portionen mehr da sind.
74 Achtung: es werden keine closures unterstuetzt!
75 P_IDS : Wert in P_EMPTY_PROPS
76 Liste der IDs des leeren Behaelters
77 Achtung: es werden keine closures unterstuetzt!
78 P_ADJECTIVES : Wert in P_EMPTY_PROPS
79 Liste der Adjektive des leeren Behaelters
80 Achtung: es werden keine closures unterstuetzt!
81 P_VALUE : Wert in P_EMPTY_PROPS
82 Wert des leeren Behaelters
83 P_WEIGHT : Wert in P_EMPTY_PROPS
84 Gewicht des leeren Behaelters
85
86 P_NO_BAD : Flag, ob die Speise verderben kann
87 Darf nur in Absprache mit der Balance auf 1 gesetzt werden!
88
89 P_DESTROY_BAD : Wert, was beim Verderben mit dem Object passiert
90 DESTROY_BAD = Die Speise wird beim Verderben zerstoert
91 bzw. der Behaelter wird geleert (default)
92 DESTROY_NEVER = Die Speise wird beim Verderben nicht
93 zerstoert
94 pos. integer = Anzahl der Sekunden, die zwischen Verderben
95 und Zerstoeren der Speise liegen sollen
96
97MESSAGES: (durchlaufen replace_personal() und koennen somit Platzhalter
98 fuer Speise (1. Argument) und Konsument (2. Argument) enthalten)
99
100 P_CONSUME_MSG : fuer den Raum, wenn konsumiert wird
101 P_EATER_MSG : an den Konsumenten
102 P_EMPTY_MSG : wenn leere Behaelter konsumiert werden
103 P_NOFOOD_MSG : wenn Getraenke gegessen werden
104 P_NODRINK_MSG : wenn Futter getrunken wird
105 P_BAD_MSG : wenn Speisen verderben
106 P_REMOVE_MSG : wenn Speisen vernichtet werden
107 (nur wenn sie nicht beim Verderben vernichtet werden)
108 P_ENV_MSG : wenn im Raum liegende Speisen konsumiert werden
109 (ist diese Prop leer, geht das sogar!)
110 P_FOOD_FULL_MSG : wenn man nix mehr essen kann
111P_DRINK_FULL_MSG : wenn man nix mehr trinken kann
112 P_ALC_FULL_MSG : wenn man keinen Alkohol mehr vertraegt
113
114METHODEN:
115 consume : wird beim Konsumieren aufgerufen, wenn klar ist,
116 dass was zum Konsumieren da ist.
117 gibt das Ergebnis von try_consume() zurueck
118 try_consume : bereitet die Daten auf und fuehrt living->consume() aus
119 kann zur Pruefung mit testonly-Flag aufgerufen werden
120 gibt das Ergebnis von living->consume() zurueck
121 success_consume : wird von consume() aufgerufen, wenn Konsumieren klappt
122 gibt die Meldungen zum Konsumieren aus
123 failed_consume : wird aufgerufen, wenn Konsumieren nicht klappt
124 gibt den Grund fuer den Fehlschlag aus
125 (je nach Ergebnis von living->consume())
126
127 consume_bad : Aendert die Daten fuer living->consume(), wenn eine
128 verdorbene Speise konsumiert wird
129 Standard: Heilung wirkt nicht, Vergiftung +1
130 make_bad : wird aufgerufen, wenn die Speise gerade verdirbt
131 Gibt die Meldungen beim Verderben aus
132 Vernichtet das Objekt, wenn das gewollt ist
133 Die Methode wird auch aufgerufen, wenn nur noch der
134 Behaelter existiert! Also den Test is_not_empty() nicht
135 vergessen!
136 make_destroy : wird aufgerufen, wenn die Speise bereits verdorben ist
137 und die Zeit aus P_DESTROY_BAD abgelaufen ist.
138 Gibt die Meldung zum Zerstoeren aus und ruft
139 make_empty aus, um die Speise bzw. den Inhalt des
140 Behaelters zu zerstoeren. Ausserdem wird der Reset
141 abgeschaltet.
142 Die Methode wird auch aufgerufen, wenn nur noch der
143 Behaelter existiert! Also den Test is_not_empty() nicht
144 vergessen!
145
146 make_empty : wird aufgerufen, wenn die letzte Portion konsumiert wird
147 Macht aus einem vollen Behaelter einen leeren oder
148 vernichtet das Objekt. Der Behaelter verdirbt also im
149 Normalfall nicht!
150
151 init : Startet den Timer zum Verderben der Speise
152 (start_lifetime()), wenn sich das Objekt in einem
153 Spieler befindet.
154 Prueft, ob Laufzeiten fehlerhafterweise nicht beendet
155 wurden und holt es dann nach
156 NotifyMove : Startet den Timer zum Verderben der Speise
157 (start_lifetime()) auch, wenn die Speise in einen
158 Spieler bewegt wird, ohne dass init() aufgerufen
159 wurde.
160 reset : wird fuer 3 Situationen verwendet:
161 1: Das Futter wurde bewegt, der Timer aber noch nicht
162 initialisiert -> es wird geprueft, ob der Timer
163 gestartet werden muss.
164 2: Der Timer ist abgelaufen ->
165 laesst die Speise verderben und vernichtet sie
166 gegebenenfalls
167 3: Der Timer nach dem Verderben ist abgelaufen ->
168 vernichtet die Speise
169 Es wird immer geprueft, ob die Resets zeitgerecht
170 aufgerufen wurden und die Aktionen nicht zur falschen
171 Zeit passieren
172
173 is_not_empty : Flag, ob noch Portionen vorhanden sind
174 is_drinkable : Flag, ob Speise trinkbar ist
175 (nur wenn P_DRINK gesetzt und P_FOOD NICHT gesetzt ist)
176 is_eatable : Flag ob Speise essbar ist
177 (wenn P_FOOD gesetzt (P_DRINK ist egal))
178 is_bad : Flag, ob Speise verdorben ist
179
180get_current_lifetime : Zeit in Sekunden, wie lange der Timer zum Verderben
181 laeuft (ist immer 0, wenn P_NO_BAD gesetzt ist)
182 start_lifetime : startet den Timer zum Verderben der Speise falls keine
183 Gruende dagegen sprechen, wird intern aufgerufen, kann
184 aber in speziellen Situationen auch manuell aufgerufen
185 werden (siehe oben unter REALISIERUNG)
186 message : es werden Meldungen zu Statusaenderungen verarbeitet
187 und korrekt ausgegeben. Es wird der Name der auszu-
188 gebenen Property uebergeben.
189 Es werden alle notwendigen Ersetzungen per
190 replace_personal gemacht und geprueft, ob dem Besitzer
191 oder dem Raum die Meldung ausgegeben werden muss.
192 Hierueber sollten nur Meldungen ausgegeben werden, die
193 durch Aenderungen an der Speise im Reset ausgeloest
194 werden, also im reset selbst und in den make_*-Methoden.
195
196
197STANDARD:
198 Wenn man nichts in seinem Futter ueberschreibt, dann hat es
199 folgendes Standardverhalten.
200 Es muss immer P_FOOD oder P_DRINK explizit groesser 0 gesetzt werden,
201 sonst laesst sich das Lebensmittel nicht konsumieren!
202
203 - Haltbarkeit: 1 Reset (30 + random(30) Minuten)
204 - der Ablauf der Haltbarkeit startet, sobald ein Spieler die Speise nimmt
205 - Wenn die Speise schlecht wird, wird sie zerstoert
206 - Die Speise hat keinen Behaelter
207 - Es gibt nur einen Schluck/Bissen, dann ist die Speise weg
208 - Gewicht: 50 Gramm / Wert: 10 Muenzen
209 - Man heilt weder LP noch KP
210 - Man wuerde ansonsten 5 LP/KP pro Heartbeat heilen
211 - Man kann die Speise nur konsumieren, wenn man sie in der Hand haelt
212 - Wenn man die verdorbene Speise konsumieren koennte, wuerde man nicht
213 heilen sondern vergiftet werden (P_POISON+1)
214
215BEISPIELE:
216 Beispiele zu tragbaren Speisen und Getraenken kann man unter
217 doc/beispiele/food/ nachschauen
218
219SIEHE AUCH:
220 consume, wiz/heilung,
221
222LETZTE AeNDERUNG:
223 25.09.2010, Caldra