SpellAttack()
*************


FUNKTION
========

   void SpellAttack(object enemy)


ARGUMENTE
=========

   enemy: Der Feind.


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

   Diese Funktion wird in jedem Heartbeat eines NPCs ausgefuehrt,
   falls nicht P_DISABLE_ATTACK gesetzt ist (Paralyse).
   Standardmaessig tut diese Funktion nichts, aber man kann sie
   ueberschreiben, damit in jedem Heartbeat Angriffe mit Spells
   ausgefuehrt werden.

   Man sollte hierbei ein random() einbauen, damit der NPC nicht
   in jedem Heartbeat auch wirklich einen Angriff ausfuehrt.
   Ausserdem sollte man auch fuer eventuelle Ausgaben sorgen.


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

   Keiner.


BEMERKUNG
=========

   Die AttackChats, die mittels SetAttackChats gesetzt werden
   koennen, macht im Grunde nichts anderes, aber Chats sind halt
   keine Angriffe. :-)


BEISPIELE
=========

   Im Grunde ist dieses simple Beispiel eine Nachbildung von
   Attack-Chats und soll dementsprechend nur der Anschauung dienen.

   void SpellAttack(object enemy)
   {
     // mit 80% Wahrscheinlichkeit wird nichts gemacht.
     switch(random(5))
     {
       case 0:
         write("Der Ork tritt Dir in den Hintern.\n");
         return;
       case 1:
         write("Der Ork bruellt: Lebend kommst Du hier nicht raus!\n");
         return;
       case 2:
         write("Der Ork blutet schon aus mehreren Wunden.\n");
         return;
       case 3:
         write(knirsch(enemy));
         return;
       default:
         return;
     }
   }

   string knirsch(object enemy)
   {
      if (objectp(enemy))
        helm = enemy->QueryArmourByType(AT_HELMET);
      if (objectp(helm))
      {
        helm->Damage(1);
        return "Der Ork beschaedigt Deinen Helm!\n";
      }
      else
        return ""; // keine Meldung
   }


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

   "Attack", "SetAttackChats", /std/npc/combat.c


LETZTE AENDERUNG
================

   Don, 27.02.2003, 12:50:00 von Hirudo
