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
