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