
AutoAttack()
************


FUNKTION
========

   int AutoAttack(object ob)


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

   /std/npc/combat


ARGUMENTE
=========

   object ob
      Das ggf. annzugreifende Object. (Achtung, nicht nur Livings)


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

   Diese Funktion wird aus heart_beat() heraus aufgerufen. Sie
   bestimmt, ob ein Living automatisch angegriffen werden soll oder
   nicht.


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

   1 fuer Angriff, sonst 0.


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

   Da diese Funktion aus heart_beat() heraus aufgerufen wird, und zwar
   einmal pro anwesendem Objekt (nicht nur fuer Livings), sollte man
   hier moeglichst wenig Dinge tun. Verzichtet am besten ganz auf die
   Nutzung, falls irgendwie moeglich.

   Da auch NPCs uebergeben werden, kann man hier auch diese
   automatisch angreifen lassen, was normalerweise nicht der Fall ist.
   Dies funktioniert jedoch nur, wenn der heart_beat() eingeschaltet
   ist, also normalerweise nicht in Abwesenheit von Spielern.


BEISPIELE
=========

   inherit "/std/npc";

   #include <npc.h>

   protected void create()
   {
     ...
     SetProp(P_AGGRESSIVE,1);
     ...
   }

   // Keine Leute angreifen, die auf der Freundesliste stehen.
   // Bei dieser Variante wir das P_AGGRESSIVE in ob nicht ausgewertet, falls
   // ob als Freund erkannt wird.
   int AutoAttack(object ob)
   {
     if(member(freunde,ob)!=-1) return 0;
     else return ::AutoAttack(ob);
   }


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

   heart_beat(), P_AGGRESSIVE

Letzte Aenderung: 28.08.2019, Bugfix
