
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. Folgende
     Schluessel koennen verwendet werden:
     H_EFFECTS - Mapping der zu aendernden Properties mit dem Umfang der
                 Aenderung, erlaubte Properties siehe H_ALLOWED_EFFECTS
                 (P_HP, P_SP, P_POISON).
     H_CONDITIONS - Mapping der zu pruefenden Properties mit dem Umfang der
                    Aenderung, erlaubte Properties siehe
                    H_ALLOWED_CONDITIONS (P_FOOD, P_DRINK, P_ALCOHOL)
     H_DISTRIBUTION - Verteilung der Aenderung fuer P_HP, P_SP
                      HD_INSTANT:  sofortige Heilung
                      HD_STANDARD: 5 pro Heartbeat
                      1 - 50:      angebene Zahl pro Heartbeat
     Aenderungen koennen sowohl positiv als auch negativ sein.

   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.
      Der Rueckgabewert ist dann ein 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_CANCELLATION   - durch H_HOOK_CONSUME abgebrochen

    Hinweis: Wenn eine der Bedingungen nicht erfuellt ist, wird gar keine
    Heilung ausgefuehrt, aber es sind stets alle Fehlercodes im
    Rueckgabewert eingetragen.


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.

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


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

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

   Historischer Code enthaelt u.U. auch eine einfache Angabe der
   betroffenen Properties als Argument enthalten. Dies in neuem Code
   nicht mehr machen, dort ein Mapping wie oben beschrieben nutzen.

   H_ALLOWED_CONDITIONS und H_ALLOWED_EFFECTS sind in /sys/living/life.h
   definiert.


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
