create_default_npc()
====================

FUNKTION
--------
::

     varargs void create_default_npc( int level, int maxhp );

BENUTZUNG
---------
::

     inherit "std/npc";

FUNKTION
--------
::

     Setze die Daten eines Monsters auf einen gewissen Level.

     Der Level sollte zwischen 1 und 20 liegen. Die Stats werden auf diesen
     Level gesetzt und mehrere andere Werte, so dass das Monster von der
     Staerke her einem Spieler gleichen Levels entspricht.

     Wird der (optionale) Parameter maxhp weggelassen, wird dieser berechnet
     nach:
          maxhp = 42 + 8 * level

     Die genauen Werte sind:
          P_LEVEL : level
          P_MAX_HP: maxhp
          P_MAX_SP: maxhp
          P_HANDS : 10 * level
          P_BODY  : (20/3) * level
          P_XP    : 50 * level * maxhp (== 5 * P_HANDS * max_hp)

          A_STR, A_INT, A_DEX, A_CON : level

BEMERKUNG
---------
::

     Diese Funktion sollte nur im create() eines Monsters benutzt werden.
     Oben beschriebene Werte, die vor dem Aufruf der Funktion gesetzt
     wurden, werden durch die neuen Werte ersetzt.

     Ab einem Aufruf mit Level 20 werden P_XP = 202000 gesetzt, also ein
     Kill-Stups vergeben (siehe P_XP).

     P_HP und P_SP werden auf dieselben Werte wie P_MAX_HP bzw. P_MAX_SP 
     eingestellt.

BEISPIEL
--------
::

     create_default_npc(17) ergibt:

          P_LEVEL : 17
          P_MAX_HP: 178
          P_MAX_SP: 178
          P_HANDS : 170
          P_BODY  : 113
          P_XP    : 151300

          A_STR, A_INT, A_DEX, A_CON : 17

SIEHE AUCH
----------
::

     Funktionen:  AddExp(), GiveKillScore()
     Properties:  P_XP
                  P_LEVEL, P_MAX_HP, P_MAX_SP, P_HANDS, P_BODY
     Sonstiges:   npcs

14.Feb 2007 Gloinson

