blob: 5ab39dd5855d7edec63626988f078f1beacd1662 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
2SetTimedAttrModifier()
3**********************
4
5
6FUNKTION
7========
8
9 int SetTimedAttrModifier(string key, mapping modifier,
10 int outdated, object dependent, mixed notify)
11
12
13DEFINIERT IN
14============
15
16 /std/living/attributes.c
17
18
19ARGUMENTE
20=========
21
22 key - in P_TIMED_ATTR_MOD vorzunehmender oder zu
23 aendernder Eintrag
24 modifier - Mapping mit den Attributveraenderungen
25 outdated - Zeitpunkt zu dem die Attributveraenderungen
26 ablaufen sollen in Sekunden seit dem
27 1. Jan 1970, 0.0:0 GMT oder 0
28 dependent - Objekt dessen Existenz eine Bedingung fuer die
29 Attributveraenderung sein soll oder 0
30 notify - Objekt oder File das mittels
31 NotifyTimedAttrModExpired ueber
32 den Attributablauf informiert werden soll
33
34
35BESCHREIBUNG
36============
37
38 Der zu key gehoerende Eintrag wird in P_TIMED_ATTR_MOD angelegt oder
39 modifiziert und update_max_sp_and_hp aufgerufen.
40 Es empfiehlt sich auf die Eindeutigkeit des string-Parameters key
41 besonderes Augenmerk zu legen.
42
43 Unter dem Key key wird in P_TIMED_ATTR_MOD ein Eintrag vorgenommen,
44 welcher die Attribute des Livings um die in modifier stehenden Offsets
45 veraendert.
46
47 Diese Veraenderung ist solange aktiv bis entweder die in outdated
48 stehende Zeit ueberschritten ist oder das in dependent uebergebene
49 Objekt nicht mehr existiert.
50 Sind beide Argumente 0 so laeuft die Attributveraenderung nicht ab
51 und kann durch DeleteTimedAttrModifier geloescht werden.
52 Laeuft die Attributveraenderung ab, so wird der in notify angegebene
53 Empfaenger mittels Aufruf NotifyTimedAttrModExpired davon
54 benachrichtigt.
55 Der Funktion NotifyTimedAttrModExpired wird als Argument der key
56 der abgelaufenen Attributveraenderung uebergeben.
57
58
59BEISPIELE
60=========
61
62 Ein NPC kann einen Spieler auf die folgende Weise solange die
63 Attribute um eins herabsetzen bis entweder eine Stunde verstrichen
64 ist oder der NPC nicht mehr existiert zum Beispiel weil er getoetet
65 wurde.
66
67 player->SetTimedAttrModifier( player->query_real_name(),
68 ([A_STR:-1,A_INT:-1,A_DEX:-1,A_CON:-1]),
69 time()+3600,
70 this_object(),
71 this_object()
72 );
73
74 Will der NPC nun noch darauf reagieren, dass die Attributmodifikation
75 durch Timeout abgelaufen ist, so koennte dies folgendermassen geschehen.
76
77 void NotifyTimedAttrModExpired(string str)
78 {
79 // Die Funktion wird aus dem Lebewesen gerufen, in welchem der Mod
80 // gerade abgelaufen ist. Also Meldungsausgabe an
81 // previous_object().
82 tell_object(previous_object()
83 ,"Da hast Du aber nochmal Glueck gehabt.\n");
84 }
85
86
87RUeCKGABEWERT
88=============
89
90 TATTR_INVALID_ARGS - Im Falle eines fehlenden key-Arguments,
91 eines fehlenden modifier-Arguments oder
92 eines bereits abgelaufenen
93 outdatet-Arguments
94 TATTR_OK - Im Erfolgsfall
95
96 Die Rueckgabewerte sind in /sys/living/attributes.h definiert.
97
98
99SIEHE AUCH
100==========
101
102 Attribute: QueryAttribute(), SetAttribute()
103 SetRealAttribute(), QueryRealAttribute(),
104 QueryAttributeOffset(),
105 UpdateAttributes()
106 Methoden: QueryTimedAttrModifier(), DeleteTimedAttrModifier()
107 Callback: NotifyTimedAttrModExpired()
108 Properties: P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS
109 P_X_ATTR_MOD, P_M_ATTR_MOD
110 P_TIMED_ATTR_MOD
111 Sonstiges: /std/living/attributes.c
112
113LETZTE Aenderung: 15.02.2009, Zesstra