QuerySkillAttributeModifier()¶
FUNKTION¶
public varargs mapping QuerySkillAttributeModifier(object caster,
string *atrnames)
DEFINIERT IN¶
/std/living/skill_attributes.c
ARGUMENTE¶
<caster> object
Objekt, welches die gesuchten Mods gesetzt hat
<atrnames> string*
Array von Skill-Attributen, welche durchsucht werden sollen.
BESCHREIBUNG¶
Diese Funktion liefert alle Mods von <caster> auf den Skill-
Attributen <atrnames> in einem Mapping zurueck.
Wird <atrnames> nicht angegeben oder ist ein leeres Array, werden alle
Skill-Attribute nach Mods abgesucht.
Wird <caster> nicht angeben oder ist 0, so werden alle Mods der
gewuenschten Skill-Attribute geliefert.
Dementsprechend bekommt man alle Mods aller Skill-Attribute, wenn keins
von beidem angegeben wird.
RUECKGABEWERT¶
([]), falls keine Modifikatoren gefunden wurden.
In anderen Faellen ist die Datenstruktur des Mappings wie folgt:
([ atrname1: ([ <caster>: <value>; <duration> ]),
atrname2: ([ <caster>: <value>; <duration> ]) ])
Die Schluessel im Mapping sind die jeweiligen Skill-Attribute, die Werte
des Mappings sind erneut Mappings, welche als Schluessel die Objekte
haben, welche die Mods gesetzt haben. In diesem Mapping gehoeren zu jedem
Schluessel zwei Werte, den Wert des Modifikators und die Ablaufzeit.
<value> kann hierbei ein int oder eine closure sein, <duration> ist ein
int, <caster> ist ein Objekt.
Ggf. kann das innere Mapping natuerlich auch mehrere Modifikatoren
enthalten (also caster1, caster2, usw.).
BEMERKUNGEN¶
BEISPIELE¶
Ein Objekt moechte seinen bestehenden Modifikator um 20 und die
Gueltigkeit um 13 erhoehen.
mapping res = ob->QuerySkillAttributeModifier(this_object(),
({SA_DAMAGE}) );
if (member(res, SA_DAMAGE) && member(res[SA_DAMAGE], this_object())) {
// alten Mod ueberschreiben und Werte dabei anheben.
ob->ModifySkillAttributeModifier(SA_DAMAGE,
res[SA_DAMAGE][this_object(),0] + 20,
res[SA_DAMAGE][this_object(),1] + 13 );
}
else
// neuen Mod setzen.
ob->ModifySkilAttributeModifier(SA_DAMAGE, 20, 13);
Ein Objekt hat den Fluch der unpraezisen Schnelligkeit, welcher SA_DAMAGE
reduziert, sofern das Lebewesen einen positiven Modifikator auf SA_SPEED
hat:
mapping res = ob->QuerySkillAttributeModifier(0, ({SA_SPEED}) );
if (member(res, SA_SPEED) {
int val, int dur;
foreach(object caster, int v, int d: res[SA_SPEED]) {
// groessten Mod rausfinden, dabei keine closures
// beruecksichtigen.
if (intp(v) && v>val) {
val=v;
dur=d;
}
}
if (val > 0) {
// pos. Mod auf SA_SPEED gefunden, entsprechenden neg. Mod auf
// SA_DAMAGE setzen, der zum gleichen Zeitpunkt ungueltig wird
// wie der Mod auf SA_SPEED.
if (ob->ModifySkillAttribute(SA_DAMAGE, -val, dur) == SA_MOD_OK)
tell_object(ob, "tolle Fluchmeldung.");
}
}
SIEHE AUCH¶
Skills Lernen: LearnSkill, ModifySkill, LimitAbility
* Nutzung: UseSpell, UseSkill
* Abfragen: QuerySkill, QuerySkillAbility
* Modifikation: ModifySkillAttribute, QuerySkillAttribute,
RemoveSkillAttributeModifier
* Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
* sonstig: spruchermuedung, skill_info_liste
* Properties: P_NEWSKILLS
14.08.2008, Zesstra