GetAquarium()
*************


FUNKTION
========

   varargs public string* GetAquarium(object angel)


ARGUMENTE
=========

   Das optionale Argument <angel> ist die Angel selbst.


BESCHREIBUNG
============

   Die Funktion wird beim Angeln in Raeumen gerufen, wenn diese als
   Gewaessertyp W_USER gesetzt haben (siehe Manpage zu P_WATER).
   Aus der zurueckgegebenen Liste der Pfade wird einer zufaellig aus-
   gewaehlt und das Objekt geclont.


RUECKGABEWERT
=============

   String-Array mit Pfadnamen zu den in diesem Raum fangbaren Fischen.


BEMERKUNG
=========

   Man kann die Fangchancen durch Mehrfachnennung einzelner Eintraege
   modifizieren. Es muss sich bei den Eintraegen um lad- und clonebare
   Objekte handeln.
   Fuer selbstprogrammierte Fische ist das Basisobjekt
   /std/items/fishing/fish zu verwenden. Einige vorgefertigte Fische
   finden sich darueber hinaus in /items/fishing/aquarium/


BEISPIEL
========

   varargs string* GetAquarium(object angel) {
     return ({"/d/dschungel/rikus/q4e/obj/stichling",
              "/d/dschungel/rikus/q4e/obj/karpfen",
              "/p/seher/partymonster/obj/fisch"});
   }


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

   Properties: P_WATER, P_FISH

zuletzt geaendert: 2014-Sep-02, Arathorn
