
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
