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
