P_AQUATIC_HELPERS
*****************


NAME
====

   P_AQUATIC_HELPERS "lib_p_aquatic_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 Tauchen 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 Tauchen hilft, sucht man alle Objekte aus dem Mapping
   heraus, die einen Wert >0 eingetragen haben und prueft deren
   Anzahl:

   mapping aquatic = this_player()->QueryProp(P_AQUATIC_HELPERS);
   object* helpers = filter( m_indices(aquatic), function int (object h) {
                       return (aquatic[h]>0); });
   if ( sizeof(helpers) ) {
     tell_object(this_player(), "Du stuerzt Dich in die Fluten und "
       "stellst ueberrascht fest, dass Du mit Hilfe "+
       helpers[0]->name(WESSEN,1)+" sogar unter Wasser atmen kannst!\n");
   }
   else {
     tell_object(this_player(), "Du hast nichts zum Tauchen bei Dir.\n");
   }


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

   Methoden:    RegisterHelperObject(), UnregisterHelperObject()
   Properties:  P_HELPER_OBJECTS, P_AERIAL_HELPERS

04.02.2018, Arathorn
