check_and_update_timed_key()
****************************


FUNKTION
========

   public int check_and_update_timed_key(int duration, string key)


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

   /std/living/life.c


ARGUMENTE
=========

   int duration: In wieviel Sekunden wird <key> wieder freigebeben,
                 (z.B. wann kann der Spieler an dieser Stelle eine neue
                 Heilung bekommen).
   string key  : Eindeutiger Name, wird zusammen mit <duration>
                 gespeichert.


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

   Diese Funktion hat die Aufgabe, Zeitsperren verschiedenster Art
   einfach zu ermoeglichen (z.B. die Realisierung charakter-abhaengiger
   Heilstellen u.ae.).

   <key> muss eindeutig sein, am besten verwendet man den eigenen
   Magiernamen (und ggf. nen Gebietsnamen) als Teil des Strings.

   Die Funktion ist definiert in /std/living/life.c. Somit funktioniert
   sie auch bei NPCs. Die Daten werden in P_TIMING_MAP gespeichert, sind
   also gegen "ende" resistent. (werden allerdings nach Ablauf ggf.
   'aufgeraeumt')

   Das Mapping P_TIMING_MAP ist NICHT zur Abfrage und / oder Manipulation
   'per Hand' vorgesehen.


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

    0    Irgendein Fehler im Aufruf, evtl. existiert die Funktion (noch)
         nicht im jew. Objekt.

   -1    Alles okay. Neuer Zeitpunkt wird automatisch gespeichert. In
         diesem Fall darf der Spieler geheilt werden.

   >0    Key noch gesperrt, in dem Fall darf also nicht geheilt werden.
         Der Rueckgabewert ist der Zeitpunkt, ab dem <key> wieder frei ist,
         laesst sich daher dazu nutzen, um dem Spieler einen Anhaltspunkt
         zu geben, wann er die Stelle wieder nutzen kann, etwa:

         "Die Schale ist erst halb voll, Du musst noch etwas warten."


BEISPIELE
=========

   Eine Heilstelle soll jedem Spieler alle 5min zur Verfuegung stehen:

   AddCmd(({"trink","trinke"}),"trink_cmd");

   int trink_cmd(string str){
     ...
     ...
     /*
     Der key sollte natuerlich eine etwas eindeutigere Kennzeichnung
     wie etwa "tilly_trinken" bekommen, auch wenn er durch einen
     anderen (gleichnamigen) nicht ueberschrieben werden kann.

     Trifft diese Abfrage hier zu, kann dem Spieler Heilung o.ae. zu-
     gefuehrt werden. Die neue Zeit (duration) wird automatisch gesetzt.
     */
     if(this_player()->check_and_update_timed_key(300,"jof_trinken")==-1){
       if(this_player()->drink_soft(2)){
         this_player()->heal_self(50);
         write("Du fuehlst Dich sichtlich erfrischt.\n");
         return 1;
        }
       else{
         write("Du hast schon zuviel getrunken.\n");
         return 1;
        }
      }
     else {
       write("Du trinkst und denkst . o O (Hmm, nicht schlecht).\n");
       return 1;
      }
     return 0;
    }

BEMERKUNGEN:
   Auch bei dieser Funktion ist darauf zu achten, dass Properties wie
   P_FOOD, P_DRINK und P_ALCOHOL beruecksichtigt werden. Heilstellen
   sind dem zustaendigen Magier fuer Heilungs-Balance zu melden. Wer
   dies momentan ist, kann dem Mailalias heilungs_balance entnommen
   werden.


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

   check_timed_key, eat_food, drink_alcohol, drink_soft, heal_self,
   restore_spell_points, reduce_hit_point

08.01.2012, Zesstra
