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