blob: 05edc06855126a19dd8b54f244cebdbcced0afd7 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001QuerySkillAttributeModifier()
Zesstra953f9972017-02-18 15:37:36 +01002*****************************
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 public varargs mapping QuerySkillAttributeModifier(object caster,
9 string *atrnames)
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 /std/living/skill_attributes.c
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018ARGUMENTE
19=========
20
21 <caster> object
22 Objekt, welches die gesuchten Mods gesetzt hat
23
24 <atrnames> string*
25 Array von Skill-Attributen, welche durchsucht werden sollen.
26
27
28BESCHREIBUNG
29============
30
31 Diese Funktion liefert alle Mods von <caster> auf den Skill-
32 Attributen <atrnames> in einem Mapping zurueck.
33 Wird <atrnames> nicht angegeben oder ist ein leeres Array, werden alle
34 Skill-Attribute nach Mods abgesucht.
35 Wird <caster> nicht angeben oder ist 0, so werden alle Mods der
36 gewuenschten Skill-Attribute geliefert.
37 Dementsprechend bekommt man alle Mods aller Skill-Attribute, wenn keins
38 von beidem angegeben wird.
39
40
41RUECKGABEWERT
42=============
43
44 ([]), falls keine Modifikatoren gefunden wurden.
45 In anderen Faellen ist die Datenstruktur des Mappings wie folgt:
46 ([ atrname1: ([ <caster>: <value>; <duration> ]),
47 atrname2: ([ <caster>: <value>; <duration> ]) ])
48 Die Schluessel im Mapping sind die jeweiligen Skill-Attribute, die Werte
49 des Mappings sind erneut Mappings, welche als Schluessel die Objekte
50 haben, welche die Mods gesetzt haben. In diesem Mapping gehoeren zu jedem
51 Schluessel zwei Werte, den Wert des Modifikators und die Ablaufzeit.
52 <value> kann hierbei ein int oder eine closure sein, <duration> ist ein
53 int, <caster> ist ein Objekt.
54 Ggf. kann das innere Mapping natuerlich auch mehrere Modifikatoren
55 enthalten (also caster1, caster2, usw.).
56
57
58BEMERKUNGEN
59===========
60
61
62BEISPIELE
63=========
64
65 Ein Objekt moechte seinen bestehenden Modifikator um 20 und die
66 Gueltigkeit um 13 erhoehen.
67 mapping res = ob->QuerySkillAttributeModifier(this_object(),
68 ({SA_DAMAGE}) );
69 if (member(res, SA_DAMAGE) && member(res[SA_DAMAGE], this_object())) {
70 // alten Mod ueberschreiben und Werte dabei anheben.
71 ob->ModifySkillAttributeModifier(SA_DAMAGE,
72 res[SA_DAMAGE][this_object(),0] + 20,
73 res[SA_DAMAGE][this_object(),1] + 13 );
74 }
75 else
76 // neuen Mod setzen.
77 ob->ModifySkilAttributeModifier(SA_DAMAGE, 20, 13);
78
79
80
81 Ein Objekt hat den Fluch der unpraezisen Schnelligkeit, welcher SA_DAMAGE
82 reduziert, sofern das Lebewesen einen positiven Modifikator auf SA_SPEED
83 hat:
84 mapping res = ob->QuerySkillAttributeModifier(0, ({SA_SPEED}) );
85 if (member(res, SA_SPEED) {
86 int val, int dur;
87 foreach(object caster, int v, int d: res[SA_SPEED]) {
88 // groessten Mod rausfinden, dabei keine closures
89 // beruecksichtigen.
90 if (intp(v) && v>val) {
91 val=v;
92 dur=d;
93 }
94 }
95 if (val > 0) {
96 // pos. Mod auf SA_SPEED gefunden, entsprechenden neg. Mod auf
97 // SA_DAMAGE setzen, der zum gleichen Zeitpunkt ungueltig wird
98 // wie der Mod auf SA_SPEED.
99 if (ob->ModifySkillAttribute(SA_DAMAGE, -val, dur) == SA_MOD_OK)
100 tell_object(ob, "tolle Fluchmeldung.");
101 }
102 }
103
104
105SIEHE AUCH
106==========
107
108 Skills Lernen: LearnSkill, ModifySkill, LimitAbility
109 * Nutzung: UseSpell, UseSkill
110 * Abfragen: QuerySkill, QuerySkillAbility
111 * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
112 RemoveSkillAttributeModifier
113 * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
114 * sonstig: spruchermuedung, skill_info_liste
115 * Properties: P_NEWSKILLS
MG Mud User88f12472016-06-24 23:31:02 +0200116
11714.08.2008, Zesstra