
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 sich 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( m_indices(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()*, *UnregisterHelperObject()*
   Properties:  *P_HELPER_OBJECTS*, *P_AQUATIC_HELPERS*

04.02.2018, Arathorn
