blob: 47f6bf08a59a09d30138304ddce1331f1270e6fe [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001check_and_update_timed_key()
2============================
3
4FUNKTION
5--------
6::
7
8 public int check_and_update_timed_key(int duration, string key)
9
10
11
12DEFINIERT IN
13------------
14::
15
16 /std/living/life.c
17
18ARGUMENTE
19---------
20::
21
22 int duration: In wieviel Sekunden wird <key> wieder freigebeben,
23 (z.B. wann kann der Spieler an dieser Stelle eine neue
24 Heilung bekommen).
25 string key : Eindeutiger Name, wird zusammen mit <duration>
26 gespeichert.
27
28BESCHREIBUNG
29------------
30::
31
32 Diese Funktion hat die Aufgabe, Zeitsperren verschiedenster Art
33 einfach zu ermoeglichen (z.B. die Realisierung charakter-abhaengiger
34 Heilstellen u.ae.).
35
36 <key> muss eindeutig sein, am besten verwendet man den eigenen
37 Magiernamen (und ggf. nen Gebietsnamen) als Teil des Strings.
38
39 Die Funktion ist definiert in /std/living/life.c. Somit funktioniert
40 sie auch bei NPCs. Die Daten werden in P_TIMING_MAP gespeichert, sind
41 also gegen "ende" resistent. (werden allerdings nach Ablauf ggf.
42 'aufgeraeumt')
43
44 Das Mapping P_TIMING_MAP ist NICHT zur Abfrage und / oder Manipulation
45 'per Hand' vorgesehen.
46
47RUeCKGABEWERT
48-------------
49::
50
51 0 Irgendein Fehler im Aufruf, evtl. existiert die Funktion (noch)
52 nicht im jew. Objekt.
53
54 -1 Alles okay. Neuer Zeitpunkt wird automatisch gespeichert. In
55 diesem Fall darf der Spieler geheilt werden.
56
57 >0 Key noch gesperrt, in dem Fall darf also nicht geheilt werden.
58 Der Rueckgabewert ist der Zeitpunkt, ab dem <key> wieder frei ist,
59 laesst sich daher dazu nutzen, um dem Spieler einen Anhaltspunkt
60 zu geben, wann er die Stelle wieder nutzen kann, etwa:
61
62 "Die Schale ist erst halb voll, Du musst noch etwas warten."
63
64BEISPIELE
65---------
66::
67
68 Eine Heilstelle soll jedem Spieler alle 5min zur Verfuegung stehen:
69
70 AddCmd(({"trink","trinke"}),"trink_cmd");
71
72 int trink_cmd(string str){
73 ...
74 ...
75 /*
76 Der key sollte natuerlich eine etwas eindeutigere Kennzeichnung
77 wie etwa "tilly_trinken" bekommen, auch wenn er durch einen
78 anderen (gleichnamigen) nicht ueberschrieben werden kann.
79
80 Trifft diese Abfrage hier zu, kann dem Spieler Heilung o.ae. zu-
81 gefuehrt werden. Die neue Zeit (duration) wird automatisch gesetzt.
82 */
83 if(this_player()->check_and_update_timed_key(300,"jof_trinken")==-1){
84 if(this_player()->drink_soft(2)){
85 this_player()->heal_self(50);
86 write("Du fuehlst Dich sichtlich erfrischt.\n");
87 return 1;
88 }
89 else{
90 write("Du hast schon zuviel getrunken.\n");
91 return 1;
92 }
93 }
94 else {
95 write("Du trinkst und denkst . o O (Hmm, nicht schlecht).\n");
96 return 1;
97 }
98 return 0;
99 }
100
101BEMERKUNGEN:
102 Auch bei dieser Funktion ist darauf zu achten, dass Properties wie
103 P_FOOD, P_DRINK und P_ALCOHOL beruecksichtigt werden.
104 Heilstellen sind dem zustaendigen Magier fuer Heilungs-Balance zu
105 melden. Wer dies momentan ist, kann dem Mailalias heilungs_balance
106 entnommen werden.
107
108SIEHE AUCH
109----------
110::
111
112 check_timed_key, eat_food, drink_alcohol, drink_soft, heal_self,
113 restore_spell_points, reduce_hit_point
114
115
11608.01.2012, Zesstra
117