QuerySkillAttributeModifier() ============================= FUNKTION -------- :: public varargs mapping QuerySkillAttributeModifier(object caster, string *atrnames) DEFINIERT IN ------------ :: /std/living/skill_attributes.c ARGUMENTE --------- :: object Objekt, welches die gesuchten Mods gesetzt hat string* Array von Skill-Attributen, welche durchsucht werden sollen. BESCHREIBUNG ------------ :: Diese Funktion liefert alle Mods von auf den Skill- Attributen in einem Mapping zurueck. Wird nicht angegeben oder ist ein leeres Array, werden alle Skill-Attribute nach Mods abgesucht. Wird 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: ([ : ; ]), atrname2: ([ : ; ]) ]) 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. kann hierbei ein int oder eine closure sein, ist ein int, 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