GetHelperObject()
*****************


FUNKTION
========

   public varargs object GetHelperObject(int type, int|closure
   strength
      varargs mixed* extra)


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

   /std/living/helpers.c


ARGUMENTE
=========

   type:
      Eine der in helpers.h definierten Konstanten

   strength:
      minimal geforderte Staerke des Helfers oder Closure zum Filtern
      der Helferobjekte.

   extra:
      Beliebige und beliebig viele Argumente, welche an die Closure
      <strength> weitergegeben werden.


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

   Gibt das zuerst gefundene als Helfer registrierte Objekt zurueck,
   welches die Anforderungen erfuellt.

   Ist <strength> ein int, muss die Staerke/Guete des Helfers
   (Rueckgabewert der Callback-Methode, siehe RegisterHelperObject())
   mindestens so gross sein wie der als <strength> uebergebene Wert.

   Ist <strength> eine Closure, wird diese fuer jeden Helfer
   ausgewertet und entscheidet, ob der Helfer akzeptiert wird. Die
   Closure bekommt hierbei das Helferobjekt, die vom Helfer angegebene
   Staerke/Guete und etwaige hier als <extra> uebergebene Argument
   uebergeben. Ist der Rueckgabewert von <strength> != 0, wird der
   Helfer akzeptiert und von GetHelperObject zurueckgegeben (ohne
   weitere Helfer zu pruefen).


RUECKGABEWERT
=============

   Objekt welches den uebergebenen Anforderungen entspricht.


BEISPIELE
=========

   // Es wird ein Helfer zum Tauchen mit der Staerke 4 gesucht
   PL->GetHelperObject(HELPER_TYPE_AQUATIC, 4);

   // Es wird ein Helfer zum Fliegen mit der Staerke 4 gesucht, welcher aber
   // mindestens 60 cm gross und maximal 900 g schwer ist.
   PL->GetHelperObject(HELPER_TYPE_AERIAL, function int (object h, int s)
         { return s >= 4
           && h->QueryProp(P_SIZE) >= 60 && h->QueryProp(P_WEIGHT) <= 900;
         }
         );

   // Es wird ein Helfer zum Fliegen mit der Staerke 4 gesucht, welcher aber
   // mindestens 60 cm gross und maximal 900 g schwer ist, aber diese Grenzen
   // werden nicht in der Funktion festgelegt, sondern als <extra> uebergeben.
   PL->GetHelperObject(HELPER_TYPE_AERIAL,
         function int (object h, int s, int min_s, int minsize, int maxweight)
           { return s >= min_s
                  && h->QueryProp(P_SIZE) >= minsize
                  && h->QueryProp(P_WEIGHT) <= maxweight;
           },
         4, 60, 900);


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

   RegisterHelperObject(), UnregisterHelperObject(), P_AERIAL_HELPERS,
   P_AQUATIC_HELPERS, P_HELPER_OBJECTS

Letzte Aenderung: 9.3.2018, Zesstra
