
consume()
*********

public varargs int consume(mapping cinfo, int testonly)


FUNKTION
========

   public varargs int consume(mapping cinfo, int testonly);

   Aenderung der Gesundheit eines Lebewesens durch etwas Konsumierbares.


DEFINIERT IN
============

   /std/living/life.c


ARGUMENTE
=========

   cinfo
       Mapping mit Informationen ueber die Gesundheitsaenderung
       Heilung.
   testonly
       Gibt an, ob nur die Bedingungen abgetestet werden sollen,
       oder auch die Wirkung eintreten soll.


RUECKGABEWERT
=============

    1 erfolgreich konsumiert
    0 keine oder falsche Aenderungsdaten in cinfo (nicht benutzbar)
   <0 Bedingung fuer konsumieren nicht erfuellt, Bitset aus:
      HC_MAX_FOOD_REACHED    - Kann nichts mehr essen
      HC_MAX_DRINK_REACHED   - Kann nichts mehr trinken
      HC_MAX_ALCOHOL_REACHED - Kann nichts mehr saufen
      HC_HOOK_CANCELLETION   - durch H_HOOK_CONSUME abgebrochen


BESCHREIBUNG
============

   Die Funktion stellt eine Moeglichkeit zur Verfuegung, die Aenderung
   der Gesundheit eines Lebewesens beim Konsumieren von irgendetwas (z.B in
   einer Kneipe, durch eine Heilstellte oder tragbare Tanke, ...) zentral zu
   erledigen. Sie vereint in sich die Pruefung auf Durchfuerbarkeit der
   Aenderung und Anwendung der Aenderung.

   Der erste Parameter gibt die Eigenschaften der Aenderung an, der zweite ob
   ausschliesslich die Pruefung auf Anwendbarkeit erfolgen soll.

   Das Mapping cinfo hat folgende Struktur:
   a) Einfache Angabe der betroffenen Properties. In neuem Code bitte nicht
      machen, dort ein Mapping wie unter b) beschrieben nutzen!

   b) Strukturiert in Effekte und Bedingungen mit folgenden Schluesseln:
     H_EFFECTS - Mapping der zu aendernden Properties mit dem Umfang der
                 Aenderung, erlaubte Properties siehe H_ALLOWED_EFFECTS

     H_CONDITIONS - Mapping der zu pruefenden Properties mit dem Umfang der
                    Aenderung, erlaubte Properties siehe H_ALLOWED_CONDITIONS

     H_DISTRIBUTION - Verteilung der Aenderung fuer P_SP, P_HP
                      HD_INSTANT bzw. 0: instante Heilung
                      1 - 50: angebene Zahl pro Heartbeat
                      HD_STANDARD: 5 pro Heartbeat

   Aenderungen koennen sowohl positiv als auch negativ sein.


BEMERKUNGEN
===========

   Hierbei aber bitte beachten, dass Tanken/Entanken sowie Heilungen ggf. von
   der (Heilungs-)Balance genehmigt werden muessen!


BEISPIELE
=========

   Heilung um 100 KP, 50 LP, aber nur wenn 30 P_FOOD gegessen werden kann:

   consume( ([H_EFFECTS: ([P_HP:50, P_SP:100]),
              H_CONDITIONS: ([P_FOOD:30]) ]) );

   Heilung um 100 KP und Vergiftung um 2, wenn 15 Alkohol getrunken werden
   koennen. Die SP werden zeitverzoegert mit 10 pro Heartbeat zugefuehrt.

   consume(([H_EFFECTS: ([P_SP: 100, P_POISON: 2]),
             H_CONDITIONS: ([P_ALCOHOL: 15]),
             H_DISTRIBUTION: 10]) )


SIEHE AUCH
==========

   Aehnlich:  drink_alcohol, eat_food, drink_soft
   Heilung:   heal_self, restore_spell_points, restore_hit_points,
              buffer_hp, buffer_sp
   Timing:    check_and_update_timed_key
   Enttanken: defuel_drink, defuel_food
   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
              P_DEFUEL_TIME_DRINK
   Konzepte:  heilung, enttanken, food


LETZTE AeNDERUNG
================

   29.05.2015, Boing
