
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
