InformDefend()
**************


FUNKTION
========

   void InformDefend(object enemy);


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

   /std/living/combat.c


ARGUMENTE
=========

   enemy
      Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.


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

   Es ist moeglich, dass Objekte ueber Angriffe auf Lebewesen
   informiert werden, sofern diese Objekte bei dem angegriffenen
   Lebewesen mittels AddDefender() angemeldet wurden und sich der
   selben Umgebung befinden. Zumeist wird es sich bei den Objekten
   natuerlich ebenfalls um andere Lebewesen handeln, die das
   Lebewesen, bei dem sie angemeldet sind, verteidigen sollen. Bei
   einem Angriff auf das Lebewesen werden alle Objekte per Aufruf von
   InformDefend() darueber informiert, wobei der Angreifer als
   Parameter uebergeben wird. Standardmaessig ist diese Funktion in
   Lebewesen bereits definiert, wobei der Skill SK_INFORM_DEFEND,
   sofern vorhanden, aufgerufen wird.


BEISPIEL
========

   Sehr beliebt sind in Gilden NPCs, die den Beschwoerer begleiten und
   verteidigen, z.B. beschworene Daemonen:

   inherit "/std/npc";

   #include <properties.h>

   object owner;

   protected void create()
   {
     ::create();
     SetProp(P_NAME,"Daemon");
     ...
   }

   // nach Clonen des Daemons folgende Funktion mit Beschwoerer als
   // Parameter aufrufen

   void Identify(object caster)
   {
     if(!objectp(caster))
       call_out(#'remove,0);
     owner=caster;
     owner->AddDefender(this_object());
   }

   // folgende Funktion wird automatisch aufgerufen, wenn der
   // Beschwoerer angegriffen wird

   public void InformDefend(object enemy)
   {
     if(!IsEnemy(enemy)&&enemy!=owner)
       Kill(enemy);
   }

   Soll der Daemon sich auch in ein Team einordnen, in welchem sich der
   Beschwoerer eventuell befindet, so ist zusaetzlich AssocMember() in
   diesem Beschwoerer aufzurufen, wobei der Daemon als Parameter
   uebergeben wird.


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

   AddDefender(), RemoveDefender(), QueryDefenders(),
   QueryPresentDefenders(), QueryNearDefenders(), DefendOther(),
   P_DEFENDERS, /std/living/combat.c

Letzte Aenderung: 28.10.2022, Bugfix
