
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( 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(L), UnregisterHelperObject(L)
   Properties:  P_HELPER_OBJECTS, P_AERIAL_HELPERS

06.04.2016, Arathorn
