
FindGroup()
***********


FUNKTION
========

   object*FindGroup(object pl,int who);


DEFINIERT IN
============

   /std/spellbook.c


ARGUMENTE
=========

   pl
     Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
     gefunden werden sollen.
   who
     Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
     sollen (Konstanten definiert in '/sys/new_skills.h'):
       FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
       FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
       FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden


RUeCKGABEWERT
=============

   Array mit gefundenen Lebewesen


BESCHREIBUNG
============

   Bei Spells, die sich auf mehrere Gegner auswirken oder bei denen man
   per Hand ein Opfer auswaehlen moechte, laesst sich mittels der
   Funktion FindGroup() eine Liste von Lebewesen ermitteln, welche in
   der Umgebung von <pl> zu finden sind.
   Je nachdem, was man denn genau vorhat, kann man sich von der
   Funktion freundlich oder feindlich gesinnte Lebewesen heraussuchen
   lassen.
   Will man die freundlich gesinnten Lebewesen ermitteln, so uebergibt
   man in <who> die Konstante FG_FRIENDS, bei feindlich gesinnten die
   Konstante FG_ENEMIES, und wenn man alle Lebewesen bekommen moechte
   schliesslich FG_ALL.
   Bei der Auswahl gelten folgende Regeln:
     (1) Lebewesen, mit denen <pl> im Kampf ist, sind grundsaetzlich
         feindlich gesinnt.
     (2) Teammitglieder von <pl> sind grundsaetzlich freundlich
         gesinnt.
     (3) Spieler sind gegenueber Spielern freundlich gesinnt, NPCs
         gegenueber NPCs. NPCs kann man hierbei mit Hilfe der Property
         P_FRIEND den Spielern zuordnen.
     (4) Daraus folgt natuerlich, dass Spieler und NPCs grundsaetzlich
         eine feindliche Einstellung gegenueber haben, sofern die NPCs
         nicht die Property P_FRIEND gesetzt haben
          (was standardmaessig natuerlich nicht der Fall ist).
     (5) Netztote werden nicht erkannt.
     (6) Magier werden nicht erkannt, wenn sie unsichtbar sind.
     (7) Ein Magier wird als feindlich gesinnt nur dann erkannt, wenn
         <pl> mit ihm im Kampf ist.
     (6) Sucht man feindlich gesinnte Lebewesen, so werden die, welche
         eine von den Properties P_NO_ATTACK oder P_NO_GLOBAL_ATTACK
         gesetzt haben, nicht erkannt.
   Die Property P_FRIEND sollte man in NPCs setzen, die dem Spieler
   hilfreich beiseite stehen, z.B. vom Spieler beschworene HilfsNPCs.


BEISPIELE
=========

   Wenn man einen Feuerball nach jemandem wirft, so trifft dieser unter
   Umstaenden auch andere, wenn er gross genug ist. Man nimmt hierbei
   an, dass sich die freundlich gesinnten Lebewesen des Gegners auch
   naeher bei ihm befinden als die feindlich gesinnten:
     victim->Defend(500,DT_FIRE,([SP_SHOW_DAMAGE:1]),caster);
     victimList=FindGroup(victim,FG_FRIENDS);
     map_objects(victimList,
                     "Defend",
                     100,
                     DT_FIRE,
                     ([SP_SHOW_DAMAGE:1]),
                     caster);
   Hiermit trifft man also auch die Freunde von <victim>.


SIEHE AUCH
==========

   FindGroupN(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK

Last modified: Mon Jan 28 21:45:00 2002 by Tiamak
