FindGroupP()
************


FUNKTION
========

   object*FindGroupP(object pl,int who,int pr);


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
   pr
     Wahrscheinlichkeit, mit der ein Lebewesen ausgesucht werden soll.
     Hierbei geht vorher noch das Skillattribute SA_EXTENSION ein!


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

   Array mit gefundenen Lebewesen


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

   Ausgesucht werden die Lebewesen genauso wie bei FindGroup(), nur
   dass zum Schluss die einzelnen Lebewesen per Zufall ausgewaehlt
   werden. Es ist also nicht gesichert, dass ueberhaupt ein Lebewesen
   zurueckgeliefert wird, trotzdem welche gefunden wurden.


BEISPIELE
=========

   Man moechte im Schnitt 50% der Feinde finden, die man gleichzeitig
   mit einem Spell belegt:
     enemyList=FindGroupP(caster,FG_ENEMIES,50);
   Dies gilt jedoch nur bei SA_EXTENSION==100, sonst wird mit
   dementsprechend mehr oder weniger Wahrscheinlichkeit zurueckgegeben.
    (also bei SA_EXTENSION==200 doppelt so viele -> 100%, also alle)
   Das Skillattribute SA_EXTENSION kann auch durch SA_QUALITY
   veraendert worden sein; das sollte beachtet werden.


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

   FindGroup(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK

Last modified: Mon Jan 25 15:04:31 1999 by Patryn
