
SetSpellFatigue()
*****************


FUNKTION
========

   public varargs int SetSpellFatigue(int duration, string key)


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

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


ARGUMENTE
=========

   int duration: Wie lang soll die Spruchermuedung andauern?
   string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
                 oder 0 fuer die globale Spruchermuedung.


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

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

   <duration> ist die Zeit (in Sekunden), welche die Spruchermuedung
   anhalten soll (nicht die Endzeit).

   Wird <key> nicht angegeben oder ist 0, wird die globale Spruchsperre
   gesetzt (identisch zu der Property P_NEXT_SPELL_TIME), anderenfalls die
   unter <key> gespeicherte Spruchermuedung.
   Setzt man einen Eintrag ohne Angabe von <key> bedeutet dies damit auch,
   dass der Wert von P_NEXT_SPELL_TIME geaendert wird.


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

   -1    Der Eintrag <key> ist noch nicht abgelaufen, es wurde _keine_
         neue Spruchermuedung/-Sperre gespeichert.

   >0    Eintrag wurde gespeichert, Rueckgabewert ist die Zeit, zu der die
         Sperre ablaeuft.


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 (CalculateSpellSuccess(...) > x) {
     // Spellfatigue setzen (und Erfolg pruefen!)
     if (ob->SetSpellFatigue(5, "extrasuess") > -1) {
       tell_object(ob, "Du fuetterst " + enemy->Name(WEN) + " mit einem "
         "Stueck suesser Schokotorte.\n");
       ...
     }
     else {
       // Sauerei! Zu ermuedet fuer diesen Spruch. Fehlermdeldung ...
     }
   }
   Dieses setzt natuerlich voraus, dass alle anderen Sprueche der Gruppe
   "extrasuess" den gleichen <key> pruefen und setzen.
   (Will man vor CalculateSpellSuccess() wissen, ob der Spruch ueberhaupt
    gewirkt werden duerfte, sollte man hierzu dann CheckSpellFatigue()
    verwenden.)


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

   Die genauen Zeitdauern koennen von Spielern beeinflusst werden, sie
   unterliegen der jeweiligen Einstellung von 'spruchermuedung', d.h. koennen
   auf volle 2s aufgerundet werden. (Dies ist nicht der Fall bei NPC.)
   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
==========

   CheckSpellFatigue(L), DeleteSpellFatigue(L)
   P_NEXT_SPELL_TIME
   spruchermuedung

27.03.2010, Zesstra
