buffer_hp()
***********


FUNKTION
========

   int buffer_hp( int val, int rate );


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

   /std/living/life.c


ARGUMENTE
=========

   val:  Gesamte Heilung.
   rate: LP-Rate.


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

   Erhoeht die LP eines Spielers automatisch insgesamt um den Wert "val".
   Pro heart_beat() wird ihm dabei der Wert "rate" zugefuehrt.
   Sollen neben P_HP noch weitere Props manipuliert werden - bspw. zur
   P_FOOD - bietet sich die Funktion consume() an.


RUECKGABEWERTE
==============

   Der getankte Wert pro heart_beat().


BEMERKUNG
=========

   Sollte von jeder tragbaren Heilung genutzt werden, welche den Spieler
   darauf schliessen lassen kann, auf natuerlichem und nichtmagischem Weg
   (Essen, Trinken) geheilt worden zu sein.


BEISPIEL
========

   #define TP this_player()
   #define BS(x) break_string(x, 78)

   int heilung=1;

   protected void create()
   {
     ::create();
     SetProp(P_NAME,"Heilpflanze");
     ...

     AddCmd("iss&@ID", "eat", "WAS willst Du essen?");
   }

   int eat(string str)
   {
     if ( TP->eat_food(25) )
     {
       TP->buffer_hp(20,5);
       TP->buffer_sp(80,10);
       heilung--;
       tell_object(this_player(), BS("Du fuehlst langsam, wie Deine Kraefte "
           "zurueckkehren."));
     }
     // Wenn der Spieler nichts mehr essen kann, wird die Meldung von
     // eat_food() erzeugt.
     return 1;
   }

   void reset()
   {
     heilung=1;
     ::reset();
   }

   Es wird durch eat_food() getestet, ob der Spieler noch genuegend essen
   kann. Wenn ja, kriegt unser Held die 25 automatisch oben drauf und
   ausserdem 20 LP in 5-LP-Schritten und 80 KP in 10-KP-Schritten
   gutgeschrieben.


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

   Aehnlich:  heal_self, restore_spell_points, restore_hit_points,
              buffer_sp
   Tanken:    consume, drink_alcohol, drink_soft, eat_food
   Props:     P_SP, P_HP,
   Konzepte:  heilung

9. August 2015 Gloinson
