HitFunc()
*********


FUNKTION
========

   int HitFunc(object enemy);


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

   eigenen Objekten, fuer /std/weapon/combat.c


ARGUMENTE
=========

   enemy
        Der Gegner, gegen den die Waffe eingesetzt wird.


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

   Die Waffe kann anhand des Gegners enemy entscheiden, ob ein
   Schadensbonus oder auch ein Schadensmalus wirksam wird. Dieser Bonus
   wird zu dem normalen Schaden der Waffe hinzuaddiert.


RUeCKGABEWERT
=============

   Der Schadensbonus bzw. der Abschlag.


BEMERKUNGEN
===========

   Wenn durch den Bonus die Genehmigungsgrenzen der Balance
   ueberschritten werden koennen, muss man seinen Regionsmagier und
   die Objekt-Balance konsultieren!

   Werte der HitFunc sollten immer ueber ein random() zurueckgegeben
   werden!

   Diese Funktion sollte die Waffe nicht zerstoeren! Falls ihr im Kampf eine
   Waffe (ggf. in Abhaengigkeit vom Gegner) zerstoeren wollt, nutzt dazu
   bitte TakeFlaw().


BEISPIELE
=========

   Eine Waffe, die gegen Orks besonders gut wirkt:

   inherit "std/weapon";

   #include <properties.h>
   #include <combat.h>
   #include <class.h>

   create(){
     if(!clonep(this_object())) {
         set_next_reset(-1);
         return;
     }
     ::create();
     /*
     zig SetProp's, um die Waffe zu konfigurieren
     HitFunc() ist in der Waffe selbst definiert
     */
     SetProp(P_HIT_FUNC, this_object());
   }

   int HitFunc(object enemy)
   {
     /* laesst sich der Gegner als Ork ansprechen? */
     if (enemy->is_class_member(CL_ORC))
       return random(10+random(50)); /* Ja => Schaden erhoehen */

     return 0;   /* ansonsten keinen zusaetzlichen Schaden anrichten */
   }


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

   QueryDefend(), /std/weapon.c
   TakeFlaw()

11.08.2007, Zesstra
