
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";
   }


HINWEISE
========

   Zaubertraenke duerfen nicht in Raeumen eingetragen werden, die in der
   Parawelt liegen oder nur ueber Paraweltraeume zugaenglich sind.

   Der Auswahldialog fuer die Attribute wird an this_interactive()
   ausgegeben, d.h. das Kommando, das zum Aufruf von FindPotion() fuehrt,
   muss von dem Spielerobjekt eingegeben werden, an dem FindPotion()
   gerufen wird. Das bedeutet konkreter: Bei einem ZT, bei dem ein zweiter
   Spieler ein Kommando eingibt, damit ein anderer Spieler einen ZT findet,
   funktioniert nicht.


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)

19 Nov 2020 Arathorn
