P_AERIAL_HELPERS
================

NAME
----
::

     P_AERIAL_HELPERS "lib_p_aerial_helpers"

DEFINIERT IN
------------
::

     <living/helpers.h>

BESCHREIBUNG
------------
::

     Diese Property kann in allen Lebewesen abgefragt werden, um die Objekte
     zu ermitteln, die fuer die Unterstuetzung beim Fliegen/Segeln bei diesem 
     Lebewesen registriert haben. Die Daten werden als Mapping der folgenden
     Form zurueckgeliefert:
     ([ Objekt : Rueckgabewert von dessen Callback-Methode ])
     Eine Erlaeuterung dazu findet sich in der Dokumentation zu 
     RegisterHelperObject().

BEMERKUNGEN
-----------
::

     Diese Property kann nur abgefragt werden.
     Es ist erwuenscht, dass entsprechende, neu geschaffene Stellen jegliche 
     Helfer akzeptieren, deren Callback-Methode >0 zurueckgibt.

BEISPIEL
--------
::

     Um zu ermitteln, ob der Spieler mindestens ein Objekt bei sich hat, das 
     beim Fliegen hilft, sucht man alle Objekte aus dem Mapping heraus, die
     einen Wert >0 eingetragen haben und prueft deren Anzahl:

     mapping aerial = this_player()->QueryProp(P_AERIAL_HELPERS);
     object* helpers = filter( aerial, function int (object h) {
                         return (aerial[h]>0); });
     if ( sizeof(helpers) ) {
       tell_object(this_player(), "Du erhebst Dich mit Hilfe "+
         helpers[0]->name(WESSEN,1)+" elegant in die Luefte.\n");
     }
     else {
       tell_object(this_player(), "Du hast nichts zum Fliegen bei Dir.\n");
     }

SIEHE AUCH
----------
::

     Methoden:    RegisterHelperObject(L), UnregisterHelperObject(L)
     Properties:  P_HELPER_OBJECTS, P_AQUATIC_HELPERS


12.03.2016, Arathorn

