
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
