
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
