
FindPotion()
************


FUNKTION
========

   varargs int FindPotion(string s);


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

   /std/player/potion.c


ARGUMENTE
=========

   string s
     Ausgabetext. Wenn 0/Leerstring, wird Default verwendet.


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

   Diese Funktion gibt einem aufrufenden Spieler eventuell diesen ZT.



   Das aufrufende Spielerobjekt muss dafuer:
   * diesen ZT im Potionmaster in seiner Liste eingetragen haben
   * diesen ZT in der Liste der bekannten Traenke haben (durch
     Orakel also fuer ihn auch freigeschaltet)
   * darf keine Playerkills haben (P_KILLS)
   * darf nicht im Editiermodus sein
   * darf kein Geist sein (Ausnahme: Geisterschloss)

   Wenn alle Kriterien erfolgreich erfuellt sind, wird 's' oder
   "Du findest einen Zaubertrank, den Du sofort trinkst." ausgegeben
   und dem Spieler ggf die Wahl der Attribute gegeben.


RUeCKGABEWERT
=============

   0 bei Nichtvergabe, 1 bei erfolgreicher Vergabe.


BEISPIELE
=========

   string detail_papiere() {
     if (this_player()->FindPotion(
       break_string("Beim Rumwuehlen in den Papieren entdeckst Du einen "
                    "kleinen Zaubertrank, den Du sofort trinkst.", 78)))
       return "";
       // Es muss ein String zurueckgegeben werden, da man sonst
       // die Fehlermeldung "Sowas siehst du hier nicht." bekommt
     else
       return "Die Papiere sind alle unbeschriftet.\n";
   }


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

   Sonstiges: zaubertraenke, /secure/potionmaster.c, /room/orakel.c
   Verwandt:  AddKnownPotion(), RemoveKnownPotion(), InList()
   Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
   Befehl:    traenke (fuer Magier zum Einschalten des Findens von ZTs)

6.Feb 2016 Gloinson
