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

