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