
CheckSpellFatigue()
*******************


FUNKTION
========

   public varargs int CheckSpellFatigue(string key)


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

   /std/living/skills.c
   /std/player/skills.c
   /sys/living/skills.h


ARGUMENTE
=========

   string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
                 oder 0 fuer die globale Spruchermuedung.


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

   Diese Funktion dient zum Pruefen von individuellen Spruchermuedungen
   (Spellfatigue, Spruchsperren).
   Hiermit lassen sich unabhaengige Ermuedungen/Sperren fuer einzelne
   Sprueche oder Gruppen von Spruechen gestalten.

   Wird <key> nicht angegeben oder ist 0, wird die globale Spruchsperre
   geprueft (identisch zu der Property P_NEXT_SPELL_TIME), anderenfalls
   die unter <key> gespeicherte Spruchermuedung.
   Prueft man einen Eintrag ohne Angabe von <key> ist das Ergebnis dieser
   Funktion identisch zur Abfrage von P_NEXT_SPELL_TIME.


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

   0    Spruchermuedung existiert nicht oder ist abgelaufen.

   >0   Spruchermuedung ist noch nicht abgelaufen, Rueckgabewert ist die
        Zeit, bei der dieser Eintrag ablaeuft. Der Spruch darf _nicht_
        ausgefuehrt werden.


BEISPIELE
=========

   Ein Spell gehoert zu einer Gruppe von Spells mit dem Namen 'extrasuess'.
   Er darf nur ausgefuehrt werden, wenn seit 5s kein anderer Spruch aus der
   Gruppe ausgefuehrt wurde.
   if (ob->CheckSpellFatigue("extrasuess") {
     // alte Sperre noch nicht abgelaufen.
     tell_object(ob, "Deine unendliche Schokotorte ist noch nicht wieder "
       "nachgewachsen.\n");
     return ... ;
   }


BEMERKUNGEN
===========

   Die genauen Zeitdauern koennen von Spielern beeinflusst werden, sie
   unterliegen der jeweiligen Einstellung von 'spruchermuedung', d.h. koennen
   auf volle 2s aufgerundet werden.
   Auch wenn diese Funktion zum Verwalten von beliebigen Zeitsperren genutzt
   werden koennen, beschraenkt euch bitte auf Spruchermuedungen und benutzt
   ansonsten check_and_update_timed_key(). Falls ihr diesbzgl. weitere/andere
   Wuensche habt, sprecht den/die Mudlib-EM an.


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

   SetSpellFatigue(L), DeleteSpellFatigue(L)
   P_NEXT_SPELL_TIME
   spruchermuedung

27.03.2010, Zesstra
