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/std/living/combat.c b/std/living/combat.c
index 2cab731..2a98e3e 100644
--- a/std/living/combat.c
+++ b/std/living/combat.c
@@ -888,6 +888,36 @@
SetProp(P_DEFENDERS,defs);
}
+public object* QueryDefenders()
+{
+ return filter(QueryProp(P_DEFENDERS) || ({}), #'objectp);
+}
+
+public object* QueryPresentDefenders(object* defenders =
+ QueryProp(P_DEFENDERS))
+{
+ // Alles selbst pruefen, um Durchlaeufe zu sparen.
+ return filter(defenders,
+ function int(object o)
+ {
+ return (objectp(o) &&
+ (environment(o) == environment(ME) || environment(o) == ME));
+ });
+}
+
+public object* QueryNearDefenders(object* defenders =
+ QueryProp(P_DEFENDERS))
+{
+ // alles selbst pruefen, um Durchlaeufe zu sparen.
+ return filter(defenders,
+ function int(object o)
+ {
+ return (objectp(o) &&
+ ((environment(o) == environment(ME) || environment(o) == ME) &&
+ o->PresentPosition() == 1;
+ });
+}
+
public void InformDefend(object enemy)
{
UseSkill(SK_INFORM_DEFEND,([ SI_ENEMY : enemy,