Automatische Updates

Change-Id: I0ab7d35f550c775bba908b34bdc8fc002e01c2ba
diff --git a/doc/lfun/AddDefender b/doc/lfun/AddDefender
index 5b33e14..f0e2c22 100644
--- a/doc/lfun/AddDefender
+++ b/doc/lfun/AddDefender
@@ -19,8 +19,8 @@
 =========
 
    friend
-     Objekt (normal Lebewesen), welches zukuenftig ueber Angriffe
-     informiert werden soll oder diese sogar abwehrt.
+      Objekt (normal Lebewesen), welches zukuenftig ueber Angriffe
+      informiert werden soll oder diese sogar abwehrt.
 
 
 BESCHREIBUNG
@@ -33,18 +33,13 @@
    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().
 
 
 SIEHE AUCH
 ==========
 
-   RemoveDefender(), InformDefend(), DefendOther(),
-   P_DEFENDERS, /std/living/combat.c
+   RemoveDefender(), QueryDefenders(), QueryPresentDefenders(),
+   QueryNearDefenders(), InformDefend(), DefendOther(),
+   *../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/lfun/DefendOther b/doc/lfun/DefendOther
index ea9f8e5..feefcc1 100644
--- a/doc/lfun/DefendOther
+++ b/doc/lfun/DefendOther
@@ -7,7 +7,7 @@
 ========
 
    public <int|string*|mapping|object>* DefendOther(int dam,
-                      string* dam_type, int|mapping si_spell, object enemy)
+      string* dam_type, int|mapping si_spell, object enemy)
 
 
 DEFINIERT IN
@@ -20,20 +20,20 @@
 =========
 
    int dam
-     Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen
-     verursacht werden soll.
+      Der Schaden, der voraussichtlich beim zu verteidigenden
+      Lebewesen verursacht werden soll.
 
    string* dam_type
-     Der Schadenstyp (oder die Schadenstypen), der beim zu
-     verteidigenden Lebewesen verursacht werden sollen.
+      Der Schadenstyp (oder die Schadenstypen), der beim zu
+      verteidigenden Lebewesen verursacht werden sollen.
 
    mapping si_spell
-     Mapping mit zusaetzlichen Informationen zum Angriff
-     Alte Objekte uebergeben manchmal einen Integer (0 fuer
-     physikalischen Angriff, 1 fuer Zauber.
+      Mapping mit zusaetzlichen Informationen zum Angriff Alte Objekte
+      uebergeben manchmal einen Integer (0 fuer physikalischen
+      Angriff, 1 fuer Zauber.
 
    object enemy
-     Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+      Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
 
 
 RUeCKGABEWERT
@@ -51,11 +51,10 @@
 
    Es ist moeglich, dass Objekte Angriffe auf Lebewesen abwehren oder
    umwandeln, 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.
+   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 koennen alle Objekte per Aufruf
    von DefendOther() in einen Angriff eingreifen, wobei die
@@ -118,8 +117,9 @@
 ==========
 
    Funktionen:
-      AddDefender(), RemoveDefender(), InformDefend(), Kill(),
-      IsEnemy(), Defend()
+      AddDefender(), RemoveDefender(), InformDefend(), DefendOther(),
+      Kill(), IsEnemy(), Defend(), QueryDefenders(),
+      QueryPresentDefenders(), QueryNearDefenders(),
 
    Properties
       P_DEFENDERS
diff --git a/doc/lfun/HRegisterToHook b/doc/lfun/HRegisterToHook
index 3a26017..7864d62 100644
--- a/doc/lfun/HRegisterToHook
+++ b/doc/lfun/HRegisterToHook
@@ -46,41 +46,25 @@
 
    Registriert ein Objekt oder eine Closure als Hook-Konsument.
 
-   Die Callback-Methode wird mit folgenden Argumenten gerufen:
-
-   * object hooksource: das Objekt, in welchem das Ereignis
-     ausgeloest wurde
-
-   * int hookid: die ID des Hooks
-
-   * mixed hookdata: die Daten des Hooks (siehe Doku zum jeweiligen
-     Hook)
+   Die Callback-Methode wird mit folgenden Argumenten gerufen: -
+   object hooksource: das Objekt, in welchem das Ereignis ausgeloest
+   wurde - int hookid: die ID des Hooks - mixed hookdata: die Daten
+   des Hooks (siehe Doku zum jeweiligen Hook)
 
    Fuer hookprio sind folgende Werte vorgesehen (Konstanten aus
-   hook.h):
-
-   * H_HOOK_LIBPRIO(x)
-
-   * H_HOOK_GUILDPRIO(x) oder
-
-   * H_HOOK_OTHERPRIO(x).
-
-   x darf 0, 1 oder 2 sein (je niedriger, desto hoeher die
-   Prioritaet).
+   hook.h): - H_HOOK_LIBPRIO(x) - H_HOOK_GUILDPRIO(x) oder -
+   H_HOOK_OTHERPRIO(x). x darf 0, 1 oder 2 sein (je niedriger, desto
+   hoeher die Prioritaet).
 
    Fuer consumertype gibt es vier festgelegte Arten, die fuer alle
    Hooks existieren koennen, aber nicht muessen (Konstanten aus
-   hook.h):
+   hook.h): - H_LISTENER: Wird nur informiert - H_DATA_MODIFICATOR:
+   Kann Daten des Ereignisses aendern - H_HOOK_MODIFICATOR: Kann das
+   Ereignis zusaetzlich abbrechen - H_HOOK_SURVEYOR: Kann zusaetzlich
+   entscheiden, ob sich Objekte
 
-   * H_LISTENER: Wird nur informiert
-
-   * H_DATA_MODIFICATOR: Kann Daten des Ereignisses aendern
-
-   * H_HOOK_MODIFICATOR: Kann das Ereignis zusaetzlich abbrechen
-
-   * H_HOOK_SURVEYOR: Kann zusaetzlich entscheiden, ob sich Objekte
-     registrieren, Daten modifizieren oder Ereignisse abbrechen
-     koennen
+      registrieren, Daten modifizieren oder Ereignisse abbrechen
+      koennen
 
    Die Methode  *HConsumerTypeIsAllowed* gibt Aufschluss darueber,
    welche Consumer-Typen tatsaechlich freigegeben sind.
@@ -89,22 +73,15 @@
 RUECKGABEWERTE
 ==============
 
-   1  : Registrierung erfolgreich
+   1  : Registrierung erfolgreich -1 : Hook unbekannt -2 : consumer
+   ist keine closure und es konnte kein Callback auf
 
-   -1 : Hook unbekannt
-
-   -2 : consumer ist keine closure und es konnte kein Callback auf
       HookCallback im consumer erstellt werden.
 
-   -3 : Consumer ist bereits registriert
-
-   -4 : Consumer-Typ ist nicht erlaubt
-
-   -5 : hookprio ist nicht erlaubt
-
-   -6 : Surveyor hat Registrierung nicht erlaubt
-
-   -7 : zuviele Hooks registriert / kein Hookeintrag frei
+   -3 : Consumer ist bereits registriert -4 : Consumer-Typ ist nicht
+   erlaubt -5 : hookprio ist nicht erlaubt -6 : Surveyor hat
+   Registrierung nicht erlaubt -7 : zuviele Hooks registriert / kein
+   Hookeintrag frei
 
 
 SIEHE AUCH
diff --git a/doc/lfun/InformDefend b/doc/lfun/InformDefend
index d6a401e..7fa975d 100644
--- a/doc/lfun/InformDefend
+++ b/doc/lfun/InformDefend
@@ -19,7 +19,7 @@
 =========
 
    enemy
-     Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+      Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
 
 
 BESCHREIBUNG
@@ -28,15 +28,14 @@
    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.
+   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
@@ -44,28 +43,40 @@
 
    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");
-       ...
-     }
+
+   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
-     Identify(object caster)
-     { if(!objectp(caster))
-         call_out(#'remove,0);
-       owner=caster;
-       owner->AddDefender(this_object());
-     }
+
+   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
-     void InformDefend(object enemy)
-     { if(!IsEnemy(enemy)&&enemy!=owner)
-         Kill(enemy);
-     }
+
+   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
@@ -75,7 +86,8 @@
 SIEHE AUCH
 ==========
 
-   AddDefender(), RemoveDefender(), DefendOther(), Kill(), IsEnemy(),
-   P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+   AddDefender(), RemoveDefender(), QueryDefenders(),
+   QueryPresentDefenders(), QueryNearDefenders(), DefendOther(),
+   *../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/lfun/QueryDefenders b/doc/lfun/QueryDefenders
new file mode 100644
index 0000000..1c1bae8
--- /dev/null
+++ b/doc/lfun/QueryDefenders
@@ -0,0 +1,38 @@
+
+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
+==========
+
+   AddDefender(), RemoveDefender(), QueryPresentDefenders(),
+   QueryNearDefenders(), InformDefend(), DefendOther(),
+   *../props/P_DEFENDER*, /std/living/combat.c
+
+Letzte Aenderung: 29.10.2022, Bugfix
diff --git a/doc/lfun/QueryNearDefenders b/doc/lfun/QueryNearDefenders
new file mode 100644
index 0000000..2526ebd
--- /dev/null
+++ b/doc/lfun/QueryNearDefenders
@@ -0,0 +1,48 @@
+
+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
+==========
+
+   AddDefender(), RemoveDefender(), QueryDefenders(),
+   QueryPresentDefenders(), InformDefend(), DefendOther(),
+   *../props/P_DEFENDER*, /std/living/combat.c
+
+Letzte Aenderung: 28.10.2022, Bugfix
diff --git a/doc/lfun/QueryPresentDefenders b/doc/lfun/QueryPresentDefenders
new file mode 100644
index 0000000..37e0d6c
--- /dev/null
+++ b/doc/lfun/QueryPresentDefenders
@@ -0,0 +1,48 @@
+
+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
+==========
+
+   AddDefender(), RemoveDefender(), QueryDefenders(),
+   QueryNearDefenders(), InformDefend(), DefendOther(),
+   *../props/P_DEFENDER*, /std/living/combat.c
+
+Letzte Aenderung: 28.10.2022, Bugfix
diff --git a/doc/lfun/RemoveDefender b/doc/lfun/RemoveDefender
index 1dec97a..a8b6863 100644
--- a/doc/lfun/RemoveDefender
+++ b/doc/lfun/RemoveDefender
@@ -19,8 +19,9 @@
 =========
 
    friend
-     Objekt (normal Lebewesen), welches zukuenftig nicht mehr ueber
-     Angriffe informiert werden soll und diese auch nicht mehr abwehrt.
+      Objekt (normal Lebewesen), welches zukuenftig nicht mehr ueber
+      Angriffe informiert werden soll und diese auch nicht mehr
+      abwehrt.
 
 
 BESCHREIBUNG
@@ -35,18 +36,13 @@
    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().
 
 
 SIEHE AUCH
 ==========
 
-   AddDefender(), InformDefend(), DefendOther(),
-   P_DEFENDERS, /std/living/combat.c
+   AddDefender(), QueryDefenders(), QueryPresentDefenders(),
+   QueryNearDefenders(), InformDefend(), DefendOther(),
+   *../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/lfun/SetChats b/doc/lfun/SetChats
index a74e69f..c4fe633 100644
--- a/doc/lfun/SetChats
+++ b/doc/lfun/SetChats
@@ -21,8 +21,9 @@
    int chance
       Prozentuale Wahrscheinlichkeit einer Ausgabe
 
-   mixed strs
+   <string|closure|<string|closure|int>* >* strs
       Array mit den verschiedenen Moeglichkeiten der Monsterchats
+      (optional)
 
 
 BESCHREIBUNG
@@ -30,20 +31,24 @@
 
    Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat
    einen zufaellig gewaehlten Text aus dem Array <strs> in den Raum
-   aus. Dabei wird per Default send_room() ohne erneutes Umbrechen mit
-   den Messagetypen MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL verwendet.
+   aus. Wird kein <strs> uebergeben, wird nur die Chat-Chance
+   geaendert und die bisherigen Chats werden beibehalten.
 
-   Die einzelnen Arrayelemente koennen:
+   Per Default wird send_room() ohne erneutes Umbrechen mit den
+   Messagetypen MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL zur Ausgabe
+   verwendet.
 
-      * Strings sein
+   Die einzelnen Arrayelemente koennen sein:
 
-      * Closures sein, deren Rueckgabe ausgegeben wird und die
+      * Strings
+
+      * Closures, deren Rueckgabe ausgegeben wird und die
         zusaetzlich einen aenderbaren und in send_room() verwendeten
         'msg_typ' per Referenz uebergeben bekommen
 
       * Arrays mit der Struktur *({<string|closure msg >, <int
-        msg_typ>})* sein, fuer die obige Regeln auf 'msg' angewendet
-        werden und bei denen 'msg_typ' im send_room() verwendet wird
+        msg_typ>})*, fuer die obige Regeln auf 'msg' angewendet werden
+        und bei denen 'msg_typ' im send_room() verwendet wird
 
    Fuer keine Ausgabe muss man einen Leerstring "" zurueckgeben oder
    verwenden. In allen Funktionen ist this_player() das Monster