SetTimedAttrModifier() ====================== FUNKTION -------- :: int SetTimedAttrModifier(string key, mapping modifier, int outdated, object dependent, mixed notify) DEFINIERT IN ------------ :: /std/living/attributes.c ARGUMENTE --------- :: key - in P_TIMED_ATTR_MOD vorzunehmender oder zu aendernder Eintrag modifier - Mapping mit den Attributveraenderungen outdated - Zeitpunkt zu dem die Attributveraenderungen ablaufen sollen in Sekunden seit dem 1. Jan 1970, 0.0:0 GMT oder 0 dependent - Objekt dessen Existenz eine Bedingung fuer die Attributveraenderung sein soll oder 0 notify - Objekt oder File das mittels NotifyTimedAttrModExpired ueber den Attributablauf informiert werden soll BESCHREIBUNG ------------ :: Der zu key gehoerende Eintrag wird in P_TIMED_ATTR_MOD angelegt oder modifiziert und update_max_sp_and_hp aufgerufen. Es empfiehlt sich auf die Eindeutigkeit des string-Parameters key besonderes Augenmerk zu legen. Unter dem Key key wird in P_TIMED_ATTR_MOD ein Eintrag vorgenommen, welcher die Attribute des Livings um die in modifier stehenden Offsets veraendert. Diese Veraenderung ist solange aktiv bis entweder die in outdated stehende Zeit ueberschritten ist oder das in dependent uebergebene Objekt nicht mehr existiert. Sind beide Argumente 0 so laeuft die Attributveraenderung nicht ab und kann durch DeleteTimedAttrModifier geloescht werden. Laeuft die Attributveraenderung ab, so wird der in notify angegebene Empfaenger mittels Aufruf NotifyTimedAttrModExpired davon benachrichtigt. Der Funktion NotifyTimedAttrModExpired wird als Argument der key der abgelaufenen Attributveraenderung uebergeben. BEISPIELE --------- :: Ein NPC kann einen Spieler auf die folgende Weise solange die Attribute um eins herabsetzen bis entweder eine Stunde verstrichen ist oder der NPC nicht mehr existiert zum Beispiel weil er getoetet wurde. player->SetTimedAttrModifier( player->query_real_name(), ([A_STR:-1,A_INT:-1,A_DEX:-1,A_CON:-1]), time()+3600, this_object(), this_object() ); Will der NPC nun noch darauf reagieren, dass die Attributmodifikation durch Timeout abgelaufen ist, so koennte dies folgendermassen geschehen. void NotifyTimedAttrModExpired(string str) { // Die Funktion wird aus dem Lebewesen gerufen, in welchem der Mod // gerade abgelaufen ist. Also Meldungsausgabe an // previous_object(). tell_object(previous_object() ,"Da hast Du aber nochmal Glueck gehabt.\n"); } RUeCKGABEWERT ------------- :: TATTR_INVALID_ARGS - Im Falle eines fehlenden key-Arguments, eines fehlenden modifier-Arguments oder eines bereits abgelaufenen outdatet-Arguments TATTR_OK - Im Erfolgsfall Die Rueckgabewerte sind in /sys/living/attributes.h definiert. SIEHE AUCH ---------- :: Attribute: QueryAttribute(), SetAttribute() SetRealAttribute(), QueryRealAttribute(), QueryAttributeOffset(), UpdateAttributes() Methoden: QueryTimedAttrModifier(), DeleteTimedAttrModifier() Callback: NotifyTimedAttrModExpired() Properties: P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS P_X_ATTR_MOD, P_M_ATTR_MOD P_TIMED_ATTR_MOD Sonstiges: /std/living/attributes.c LETZTE Aenderung: 15.02.2009, Zesstra