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