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:

.. code-block:: pike

  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
----------

  :doc:`AddDefender`, :doc:`RemoveDefender`, :doc:`QueryDefenders`, 
  :doc:`QueryPresentDefenders`, :doc:`QueryNearDefenders`, 
  :doc:`DefendOther`,
  :doc:`../props/P_DEFENDERS`, /std/living/combat.c

Letzte Aenderung: 28.10.2022, Bugfix
