P_WATER
*******


NAME
====

   P_WATER                       "water"


DEFINIERT IN
============

   /sys/fishing.h


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

   Enthaelt den Gewaessertyp. Kann in Raeumen, Angeln und Wasserbehaeltern
   verwendet werden. Die verfuegbaren Optionen und Funktionsweisen sind in
   den nachfolgenden Abschnitten aufgefuehrt.

   Raum:
   *****
     Legt den Typ des Gewaessers fest, das es in diesem Raum gibt. Von
     diesem Typ haengt ab, welche Arten von Fischen es hier standardmaessig
     gibt und welche Arten von Angeln verwendet werden koennen.

     Beispiel:

     SetProp(P_WATER, W_HARBOR);

     Folgende Typen stehen zur Verfuegung, von denen in Raeumen nur einer
     gesetzt werden darf:

     Salzwasser:
       W_BEACH   Strand: Scholle, Flunder, Rochen, Seezunge, Katzenhai
       W_HARBOR  Hafen: Dorsch, Rochen, Seezunge, Hering, Katzenhai
       W_OCEAN   Ozean/Meer: Hai, Thunfisch, Kabeljau, Schwertfisch, Seehase,
                 Seeteufel, Seewolf

     Suesswasser:
       W_RIVER   Fluss: Piranha, Lachs, Forelle, Bachsaibling
       W_POOL    Teich: Stichling, Goldfisch, Schlei, Karpfen, Goldorfe
       W_LAKE    See: Karpfen, Barsch, Hecht, Seesaibling
       W_ROCK    Bergbach: Lachs, Forelle, Bachsaibling
       W_STREAM  Bach: Stichling, Bachforelle, Neuauge, Bachsaibling

     Sonstige:
       W_USER    wenn dieser Gewaessertyp gesetzt wird, MUSS der Raum
                 zusaetzlich die Funktion GetAquarium() definieren, die
                 eine Liste der hier fangbaren Fische zurueckgeben muss.
                 Beispiel:

                 string* GetAquarium(){
                   return ({"/d/ebene/fraggle/angel/fisch"});
                 }
       W_DEAD    Lebloses Wasser. Enthaelt keine Fische, man kann
                 aber die Standardflasche fuellen.

       W_OTHER   1024   // Flasche enthaelt Fluessigkeit!=Wasser


   Angel:
   ******
     Angeln sind ueblicherweise auf bestimmte Anwendungsbereiche ausgelegt.
     Ob eine Angel in einem Gewaesser benutzt werden kann, haengt davon ab,
     ob P_WATER in der Angel den Gewaessertyp des Raumes enthaelt. Von den
     oben genannten Typen koennen mehrere ver-ODER-t gesetzt werden.
     Verwendung einer fuer das oertliche Gewaesser ungeeigneten Angel fuehrt
     zu einer um 60+random(60) Sekunden verlaengerten Wartezeit beim Angeln.

     Beispiel: Setzt man den Gewaessertyp mit

       SetProp(P_WATER, W_HARBOR|W_OCEAN);

     schaltet das die Angel sowohl fuer Haefen, als auch fuer offene Meere
     (Ozeane) frei.

     Folgende kombinierte Gewaessertypen sind fuer einfache Angeln
     vordefiniert:

     Kurze Standardangeln:
       W_SHORT W_HARBOR|W_RIVER|W_POOL|W_LAKE|W_ROCK|W_USER|W_OCEAN|W_STREAM
     Spezielle Strandruten:
       W_LONG  W_BEACH|W_USER
     funktioniert in allen Salzgewaessern:
       W_SALT  W_HARBOR|W_OCEAN|W_BEACH
     funktioniert in allen Suessgewaessern:
       W_SWEET W_RIVER|W_POOL|W_LAKE|W_ROCK|W_STREAM

     Hinweis: W_DEAD ist in diesen Kombinationen nicht enthalten, da es
     in solchen Gewaessern ohnehin keine Fische gibt.
     Die Kombi-Typen enthalten W_USER, um bei entsprechenden Gewaessern
     zu vermeiden, dass es dort standardmaessig einen Malus auf die
     Wartezeit gibt. Standardwert fuer P_WATER in Angeln ist ebenfalls
     W_USER.

   Koeder:
   *******
     Auch Koeder koennen fuer die Verwendung in bestimmten Gewaessern besser
     geeignet sein als in anderen, z.B. eine Seeschnecke fuer Salzwasser,
     ein Mehlwurm hingegen fuer Suesswasser. Gesetzt wird P_WATER hierfuer
     auf die oben aufgefuehrten Werte.
     Verwendung eines ungeeigneten Koeders fuehrt zu einer um 60+random(60)
     Sekunden laengeren Wartezeit beim Angeln. Angeln in Gewaessern des
     Typs W_USER fuehrt nie zu einer verlaengerten Wartezeit.

   Wasserbehaelter:
   ****************
     Die Property gibt an, ob der Behaelter Wasser enthaelt oder nicht.
     Der Wert sollte immer auf den Typ jenes Gewaessers gesetzt sein, aus
     dem der Behaelter aufgefuellt wurde.


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

   Properties: P_FISH
   Methoden:   GetAquarium(L)

Zuletzt geaendert: 2020-Mar-08, Arathorn
