Zugriffsfunktionen fuer P_DEFENDERS

P_DEFENDERS sollte nicht von Hand verwaltet werden, daher gibt es jetzt
auch Funktionen fuer die Abfrage.

- QueryDefenders() liefert alle eingetragenen Defender.
- QueryPresentDefenders() alle anwesenden.
- QueryNearDefenders() alle anwesenden in Reihe 1 fuer physikalische
  Angriffe.

Change-Id: I90d49ac8a65b05178f5cfeb9e91fb694e5b7ac12
diff --git a/doc/sphinx/lfun/AddDefender.rst b/doc/sphinx/lfun/AddDefender.rst
index ae5b28b..dc55267 100644
--- a/doc/sphinx/lfun/AddDefender.rst
+++ b/doc/sphinx/lfun/AddDefender.rst
@@ -3,49 +3,38 @@
 
 FUNKTION
 --------
-::
 
-	void AddDefender(object friend);
+  void AddDefender(object friend);
 
 DEFINIERT IN
 ------------
-::
 
-	/std/living/combat.c
+  /std/living/combat.c
 
 ARGUMENTE
 ---------
-::
 
-	friend
-	  Objekt (normal Lebewesen), welches zukuenftig ueber Angriffe
-	  informiert werden soll oder diese sogar abwehrt.
+  friend
+    Objekt (normal Lebewesen), welches zukuenftig ueber Angriffe
+    informiert werden soll oder diese sogar abwehrt.
 
 BESCHREIBUNG
 ------------
-::
 
-	Ein Lebewesen, welches angegriffen wird, kann andere Objekte ueber
-	einen solchen Angriff per InformDefend() informieren oder ihnen
-	sogar die Moeglichkeit geben, per DefendOther() direkt in den
-	laufenden Angriff einzugreifen (Schaeden abwehren oder umwandeln).
-	Im Normalfall handelt es sich hierbei um andere Lebewesen, welche
-	als Verteidiger des angegriffenen Lebewesens auftreten: Daher der
-	Name der Funktion.
-	Die Objekte sind in Form eines Arrays in der Property P_DEFENDERS
-	abgespeichert und koennen dort abgerufen werden. Natuerlich kann
-	man weitere Objekte direkt dort eintragen, jedoch sollte man die
-	hierfuer bereitgestellte Funktionen AddDefender() verwenden.
-	Zum Loeschen von Eintraegen im Array steht ebenfalls eine Funktion
-	bereit: RemoveDefender().
+  Ein Lebewesen, welches angegriffen wird, kann andere Objekte ueber
+  einen solchen Angriff per InformDefend() informieren oder ihnen
+  sogar die Moeglichkeit geben, per DefendOther() direkt in den
+  laufenden Angriff einzugreifen (Schaeden abwehren oder umwandeln).
+  Im Normalfall handelt es sich hierbei um andere Lebewesen, welche
+  als Verteidiger des angegriffenen Lebewesens auftreten: Daher der
+  Name der Funktion.
 
 SIEHE AUCH
 ----------
-::
 
-	RemoveDefender(), InformDefend(), DefendOther(),
-	P_DEFENDERS, /std/living/combat.c
+  :doc:`RemoveDefender`, :doc:`QueryDefenders`, 
+  :doc:`QueryPresentDefenders`, :doc:`QueryNearDefenders`, 
+  :doc:`InformDefend`, :doc:`DefendOther`,
+  :doc:`../props/P_DEFENDER`, /std/living/combat.c
 
-
-Last modified: Thu Jul 29 18:48:45 1999 by Patryn
-
+Letzte Aenderung: 28.10.2022, Bugfix
diff --git a/doc/sphinx/lfun/DefendOther.rst b/doc/sphinx/lfun/DefendOther.rst
index 96c5b08..ba24a05 100644
--- a/doc/sphinx/lfun/DefendOther.rst
+++ b/doc/sphinx/lfun/DefendOther.rst
@@ -3,20 +3,17 @@
 
 FUNKTION
 --------
-::
 
     public <int|string*|mapping|object>* DefendOther(int dam,
                        string* dam_type, int|mapping si_spell, object enemy)
 
 DEFINIERT IN
 ------------
-::
 
     /std/living/combat.c
 
 ARGUMENTE
 ---------
-::
 
     int dam
       Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen
@@ -46,7 +43,6 @@
 
 BESCHREIBUNG
 ------------
-::
 
     Es ist moeglich, dass Objekte Angriffe auf Lebewesen abwehren oder
     umwandeln, sofern diese Objekte bei dem angegriffenen Lebewesen
@@ -116,7 +112,9 @@
 ----------
 
   Funktionen:
-    :doc:`../lfun/AddDefender`, :doc:`../lfun/RemoveDefender`, :doc:`../lfun/InformDefend`, :doc:`../lfun/Kill`, :doc:`../lfun/IsEnemy`, :doc:`../lfun/Defend`
+    :doc:`AddDefender`, :doc:`RemoveDefender`, :doc:`InformDefend`, :doc:`DefendOther`,
+    :doc:`Kill`, :doc:`IsEnemy`, :doc:`Defend`, :doc:`QueryDefenders`, 
+    :doc:`QueryPresentDefenders`, :doc:`QueryNearDefenders`, 
   Properties
     :doc:`../props/P_DEFENDERS`
   Objekte:
diff --git a/doc/sphinx/lfun/InformDefend.rst b/doc/sphinx/lfun/InformDefend.rst
index fbc0b12..df3fa9c 100644
--- a/doc/sphinx/lfun/InformDefend.rst
+++ b/doc/sphinx/lfun/InformDefend.rst
@@ -3,80 +3,88 @@
 
 FUNKTION
 --------
-::
 
-	void InformDefend(object enemy);
+  void InformDefend(object enemy);
 
 DEFINIERT IN
 ------------
-::
 
-	/std/living/combat.c
+  /std/living/combat.c
 
 ARGUMENTE
 ---------
-::
 
-	enemy
-	  Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+  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.
+  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;
-	  void create()
-	  { ::create();
-	    SetProp(P_NAME,"Daemon");
-	    ...
-	  }
-	// nach Clonen des Daemons folgende Funktion mit Beschwoerer als
-	// Parameter aufrufen
-	  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
-	  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.
+  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
 ----------
-::
 
-	AddDefender(), RemoveDefender(), DefendOther(), Kill(), IsEnemy(),
-	P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+  :doc:`AddDefender`, :doc:`RemoveDefender`, :doc:`QueryDefenders`, 
+  :doc:`QueryPresentDefenders`, :doc:`QueryNearDefenders`, 
+  :doc:`DefendOther`,
+  :doc:`../props/P_DEFENDER`, /std/living/combat.c
 
-
-Last modified: Thu Jul 29 18:48:45 1999 by Patryn
-
+Letzte Aenderung: 28.10.2022, Bugfix
diff --git a/doc/sphinx/lfun/QueryDefenders.rst b/doc/sphinx/lfun/QueryDefenders.rst
new file mode 100644
index 0000000..1269acc
--- /dev/null
+++ b/doc/sphinx/lfun/QueryDefenders.rst
@@ -0,0 +1,32 @@
+QueryDefenders()
+================
+
+FUNKTION
+--------
+
+  public object* QueryDefenders()
+
+DEFINIERT IN
+------------
+
+  /std/living/combat.c
+
+RUECKGABEWERT
+-------------
+
+  Object-Array mit den eingetragenen Defendern.
+
+BESCHREIBUNG
+------------
+
+  Gibt eine um zerstoerte Objekte bereinigte Kopie von P_DEFENDERS zurueck.
+
+SIEHE AUCH
+----------
+
+  :doc:`AddDefender`, :doc:`RemoveDefender`,
+  :doc:`QueryPresentDefenders`, :doc:`QueryNearDefenders`, 
+  :doc:`InformDefend`, :doc:`DefendOther`,
+  :doc:`../props/P_DEFENDER`, /std/living/combat.c
+
+Letzte Aenderung: 29.10.2022, Bugfix
diff --git a/doc/sphinx/lfun/QueryNearDefenders.rst b/doc/sphinx/lfun/QueryNearDefenders.rst
new file mode 100644
index 0000000..7b26903
--- /dev/null
+++ b/doc/sphinx/lfun/QueryNearDefenders.rst
@@ -0,0 +1,42 @@
+QueryNearDefenders()
+====================
+
+FUNKTION
+--------
+
+  public object* QueryNearDefenders(object* defenders)
+
+DEFINIERT IN
+------------
+
+  /std/living/combat.c
+
+ARGUMENTE
+---------
+
+  object* defenders: Ein Object-Array mit Defendern, aus denen ausgewaehlt 
+                     werden soll.
+
+RUeCKGABEWERT
+-------------
+
+  Object-Array mit den nahen Verteidigern (s.u.).
+
+BESCHREIBUNG
+------------
+
+  Gibt ein Object-Array mit den Defendern im Environment von this_object()
+  oder in this_object() zurueck, die in Reihe 1 stehen oder in keinem Team
+  sind.
+  Wird <defenders> nicht uebergeben, wird das Ergebnis von QueryDefenders()
+  benutzt.
+  
+SIEHE AUCH
+----------
+
+  :doc:`AddDefender`, :doc:`RemoveDefender`, :doc:`QueryDefenders`, 
+  :doc:`QueryPresentDefenders`,
+  :doc:`InformDefend`, :doc:`DefendOther`,
+  :doc:`../props/P_DEFENDER`, /std/living/combat.c
+
+Letzte Aenderung: 28.10.2022, Bugfix
\ No newline at end of file
diff --git a/doc/sphinx/lfun/QueryPresentDefenders.rst b/doc/sphinx/lfun/QueryPresentDefenders.rst
new file mode 100644
index 0000000..2eabd69
--- /dev/null
+++ b/doc/sphinx/lfun/QueryPresentDefenders.rst
@@ -0,0 +1,42 @@
+QueryPresentDefenders()
+=======================
+
+FUNKTION
+--------
+
+  public object* QueryPresentDefenders(object* defenders)
+
+DEFINIERT IN
+------------
+
+  /std/living/combat.c
+
+ARGUMENTE
+---------
+
+  object* defenders: Ein Object-Array mit Defendern, aus denen ausgewaehlt 
+                     werden soll.
+
+RUeCKGABEWERT
+-------------
+
+  Object-Array mit den eingetragenen Defendern im gleichen Environment oder
+  in this_object().
+
+BESCHREIBUNG
+------------
+
+  Gibt ein Object-Array mit den Defendern im Environment von this_object()
+  oder in this_object() zurueck.
+  Wird <defenders> nicht uebergeben, wird das Ergebnis von QueryDefenders()
+  benutzt.
+  
+SIEHE AUCH
+----------
+
+  :doc:`AddDefender`, :doc:`RemoveDefender`, :doc:`QueryDefenders`, 
+  :doc:`QueryNearDefenders`, 
+  :doc:`InformDefend`, :doc:`DefendOther`,
+  :doc:`../props/P_DEFENDER`, /std/living/combat.c
+
+Letzte Aenderung: 28.10.2022, Bugfix
\ No newline at end of file
diff --git a/doc/sphinx/lfun/RemoveDefender.rst b/doc/sphinx/lfun/RemoveDefender.rst
index 911e0c5..3e62b58 100644
--- a/doc/sphinx/lfun/RemoveDefender.rst
+++ b/doc/sphinx/lfun/RemoveDefender.rst
@@ -3,51 +3,40 @@
 
 FUNKTION
 --------
-::
 
-	void RemoveDefender(object friend);
+  void RemoveDefender(object friend);
 
 DEFINIERT IN
 ------------
-::
 
-	/std/living/combat.c
+  /std/living/combat.c
 
 ARGUMENTE
 ---------
-::
 
-	friend
-	  Objekt (normal Lebewesen), welches zukuenftig nicht mehr ueber
-	  Angriffe informiert werden soll und diese auch nicht mehr abwehrt.
+  friend
+    Objekt (normal Lebewesen), welches zukuenftig nicht mehr ueber
+    Angriffe informiert werden soll und diese auch nicht mehr abwehrt.
 
 BESCHREIBUNG
 ------------
-::
 
-	Ein Lebewesen, welches angegriffen wird, kann andere Objekte ueber
-	einen solchen Angriff per InformDefend() informieren oder ihnen
-	sogar die Moeglichkeit geben, per DefendOther() direkt in den
-	laufenden Angriff einzugreifen (Schaeden abwehren oder umwandeln).
-	Im Normalfall handelt es sich hierbei um andere Lebewesen, welche
-	als Verteidiger des angegriffenen Lebewesens auftreten: Daher der
-	Name der Funktion. Ausserdem besteht die Einschraenkung, dass diese
-	Objekte in der gleichen Umgebung sein muessen, wie das zu
-	verteidigende Lebewesen.
-	Die Objekte sind in Form eines Arrays in der Property P_DEFENDERS
-	abgespeichert und koennen dort abgerufen werden. Natuerlich kann
-	man alte Objekte direkt dort loeschen, jedoch sollte man die
-	hierfuer bereitgestellte Funktionen RemoveDefender() verwenden.
-	Zum Hinzufuegen von Eintraegen im Array steht ebenfalls eine
-	Funktion bereit: AddDefender().
+  Ein Lebewesen, welches angegriffen wird, kann andere Objekte ueber
+  einen solchen Angriff per InformDefend() informieren oder ihnen
+  sogar die Moeglichkeit geben, per DefendOther() direkt in den
+  laufenden Angriff einzugreifen (Schaeden abwehren oder umwandeln).
+  Im Normalfall handelt es sich hierbei um andere Lebewesen, welche
+  als Verteidiger des angegriffenen Lebewesens auftreten: Daher der
+  Name der Funktion. Ausserdem besteht die Einschraenkung, dass diese
+  Objekte in der gleichen Umgebung sein muessen, wie das zu
+  verteidigende Lebewesen.
 
 SIEHE AUCH
 ----------
-::
 
-	AddDefender(), InformDefend(), DefendOther(),
-	P_DEFENDERS, /std/living/combat.c
+  :doc:`AddDefender`, :doc:`QueryDefenders`, 
+  :doc:`QueryPresentDefenders`, :doc:`QueryNearDefenders`, 
+  :doc:`InformDefend`, :doc:`DefendOther`,
+  :doc:`../props/P_DEFENDER`, /std/living/combat.c
 
-
-Last modified: Thu Jul 29 18:48:45 1999 by Patryn
-
+Letzte Aenderung: 28.10.2022, Bugfix
diff --git a/doc/sphinx/props/P_DEFENDERS.rst b/doc/sphinx/props/P_DEFENDERS.rst
index bc83fe5..862b372 100644
--- a/doc/sphinx/props/P_DEFENDERS.rst
+++ b/doc/sphinx/props/P_DEFENDERS.rst
@@ -3,44 +3,41 @@
 
 NAME
 ----
-::
 
-	P_DEFENDERS			"defenders"
+  P_DEFENDERS      "defenders"
 
 DEFINIERT IN
 ------------
-::
 
-	/sys/new_skills.h
+  /sys/new_skills.h
 
 BESCHREIBUNG
 ------------
-::
 
-	Diese Property wird in Lebewesen gesetzt, welche zum Beispiel durch
-	andere Lebewesen verteidigt werden. Die Verteidiger muessen
-	natuerlich bekannt sein, damit sie per InformDefend() ueber Angriffe
-	informiert werden und per DefendOther() in den laufenden Angriff
-	eingreifen koennen (zum Beispiel Schaeden abwehren oder umwandeln).
-	Es muessen jedoch nicht unbedingt Lebewesen oder echte Verteidiger
-	sein, auch beliebige Objekte koennen ueber Angriffe informiert
-	werden und in diese eingreifen. Allerdings besteht die
-	Einschraenkung, dass diese Objekte in der gleichen Umgebung sein
-	muessen, wie das zu verteidigende Lebewesen oder im zu verteidigenden
-	Lebewesen selbst.
-	Die Objekte, welche dies betrifft, sind in Form eines Arrays in
-	der Property P_DEFENDERS abgelegt.
-	Gesetzt und geloescht werden sollten die Eintraege dieses Arrays
-	jedoch nur mittels der dafuer bereitgestellten Funktionen
-	AddDefender() und RemoveDefender().
+  Diese Property wird in Lebewesen gesetzt, welche zum Beispiel durch
+  andere Lebewesen verteidigt werden. Die Verteidiger muessen
+  natuerlich bekannt sein, damit sie per InformDefend() ueber Angriffe
+  informiert werden und per DefendOther() in den laufenden Angriff
+  eingreifen koennen (zum Beispiel Schaeden abwehren oder umwandeln).
+  Es muessen jedoch nicht unbedingt Lebewesen oder echte Verteidiger
+  sein, auch beliebige Objekte koennen ueber Angriffe informiert
+  werden und in diese eingreifen. Allerdings besteht die
+  Einschraenkung, dass diese Objekte in der gleichen Umgebung sein
+  muessen, wie das zu verteidigende Lebewesen oder im zu verteidigenden
+  Lebewesen selbst.
+  Die Objekte, welche dies betrifft, sind in Form eines Arrays in
+  der Property P_DEFENDERS abgelegt.
+  
+  ACHTUNG:
+  Auf diese Property nicht von Hand zugreifen, sondern bitte die
+  entsprechende Zugriffsfunktion verwenden.
 
 SIEHE AUCH
 ----------
-::
 
-	AddDefender(), RemoveDefender(), InformDefend(), DefendOther(),
-	/std/living/combat.c
+  :doc:`AddDefender`, :doc:`RemoveDefender`, :doc:`QueryDefenders`, 
+  :doc:`QueryPresentDefenders`, :doc:`QueryNearDefenders`, 
+  :doc:`InformDefend`, :doc:`DefendOther`,
+  /std/living/combat.c
 
-
-Last modified: 21.09.2007, Zesstra
-
+Letzte Aenderung: 28.10.2022, Bugfix