| 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 |