
heal_self()
***********


FUNKTION
========

   void heal_self(int points);


ARGUMENTE
=========

   points: Die dem Lebewesen zukommende Heilung.


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

   Dem Lebewesen werden points Lebens- und Konzentrationspunkte
   gutgeschrieben und auf die aktuellen addiert. Es werden aber nicht
   die maximalen Werte ueberschritten.


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

   Keiner


BEISPIELE
=========

   AddCmd("pflueck&beere","pfluecke_cmd","Was moechtest Du pfluecken?");

   int pfluecke_cmd(string str){
       write("Du pflueckst eine Beere, isst sie und fuehlst Dich gleich "
            +"viel besser.\n");
       this_player()->heal_self(30);
       return 1;
   }

   Der Spieler bekommt hier pro Beere die er pflueckt und isst je 30 LP/KP
   zu seinen momentanen.

BEMERKUNGEN:
   heal_self wird gerne fuer Heilstellen in Gebieten genommen, in
   denen ein Spieler diese Heilung auch wirklich braucht. Dennoch ist
   der Einsatz un- bedingt mit der Heilungsbalance abzusprechen und
   darauf zu achten, dass pro reset() nur eine bestimmte Anzahl an
   Heilungen ausgegeben werden.

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


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

   Verwandt:   restore_spell_points, restore_hit_points, buffer_hp
               buffer_sp, check_and_update_timed_key
   Gegenparts: do_damage, reduce_hit_points, reduce_spell_points
   Props:      P_HP, P_SP
   Konzept:    heilung

Last modified: 27.05.2007 by Ennox
