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.

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 :doc:`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
---------

.. code-block:: pike

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

.. code-block:: pike

  // 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;
        }
        );

.. code-block:: pike

  // 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
----------

  :doc:`RegisterHelperObject`, :doc:ÙnregisterHelperObject`
  :doc:`../props/P_AERIAL_HELPERS`, :doc:`../props/P_AQUATIC_HELPERS`, :doc:`../props/P_HELPER_OBJECTS`

Letzte Aenderung: 9.3.2018, Zesstra
