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 wieder freigebeben, (z.B. wann kann der Spieler an dieser Stelle eine neue Heilung bekommen). string key : Eindeutiger Name, wird zusammen mit gespeichert. BESCHREIBUNG ------------ :: Diese Funktion hat die Aufgabe, Zeitsperren verschiedenster Art einfach zu ermoeglichen (z.B. die Realisierung charakter-abhaengiger Heilstellen u.ae.). 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 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