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