eat_food()
**********


FUNKTION
========

   public varargs int eat_food(int food, int testonly, string mytext)


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

   /std/living/life.c


ARGUMENTE
=========

   food: Wird zu dem augenblicklichen Saettigungsgrad (P_FOOD) addiert.
   testonly: Ist das Flag gesetzt, wird dem Spieler kein FOOD zugefuehrt.
             Darf nur zum Testen der Heilstelle verwendet werden und muss
             im normalen Betrieb auf '0' stehen!
   mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
           darf sich hier was nettes ausdenken.
           Achtung: Das unterdrueckt nicht die "Hunger"-Meldung, die bei
           negativem food auftreten kann, wenn P_FOOD wieder 0 ist.


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

   Es wird geprueft, ob dem Spieler der angebene Wert "strength" auf seine
   aktuelle P_FOOD addiert werden kann oder nicht. Ist dies moeglich, wird
   wird es gemacht, es sei denn das testonly != 0.

   Sollen neben P_FOOD noch weitere Props manipuliert werden - bspw. zur
   Heilung eines Lebewesens - bietet sich die Funktion consume() an.


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

    0, wenn strength + P_FOOD > P_MAX_FOOD.
   >0, wenn Erfolg.


BEMERKUNG
=========

   eat_food() bitte anstatt eigener Manipulationen von P_FOOD und
   P_MAX_FOOD verwenden.

   Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.

   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
   dafuer eingerichteten Funktion check_and_update_timed_key realisiert
   werden.


BEISPIEL
========

   int heilstelle() {
     // Wenn auf das P_FOOD des Spielers die angegebenen 10 nicht mehr addiert
     // addiert werden koennen (weil sonst P_MAX_FOOD ueberschritten wird),
     // wird die Fehlermeldung ausgegeben, dass der Spieler nichts mehr
     // essen/trinken kann.
     // Bei gesetztem 'mytext' wird 'mytext' an den Spieler ausgegeben.
     // Ansonsten wird die Standardmeldung ausgegeben.
     if (!this_player()->eat_food(10, 0, "Der Keks ist einfach "
                                         "zuviel fuer Dich.\n") )
       return 1;

     // Spieler hatte noch ausreichend Spielraum bei P_FOOD. Die 10 sind
     // schon addiert worden. Jetzt Nachricht ausgeben:
     tell_object(this_player(), break_string("Du knabberst ein bisschen an "
                 "dem Keks herum und fuehlst Dich gleich viel besser.", 78));

     // alle Lebewesen im Raum bekommen das auch mit
     tell_room(environment(this_player()),
         this_player()->Name()+" knuspert einen Keks weg.\n",
         ({this_player()}));

     // Rassenabhaengige Heilung: Sofort oder in Schritten
     // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
     if(this_player()->QueryProp(P_REAL_RACE)=="Kruemelmonster")
       this_player()->heal_self(30);
     else {
       this_player()->buffer_hp(30,5);
       this_player()->buffer_sp(30,5);
     }

     return 1;
   }


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

   Aehnlich:  consume, drink_alcohol, 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

9. August 2015 Gloinson
