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

