Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame^] | 1 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 2 | QuerySkillAttributeModifier() |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame^] | 3 | ***************************** |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 4 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 5 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame^] | 6 | FUNKTION |
| 7 | ======== |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 8 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame^] | 9 | public varargs mapping QuerySkillAttributeModifier(object caster, |
| 10 | string *atrnames) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 11 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 12 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame^] | 13 | DEFINIERT IN |
| 14 | ============ |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 15 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame^] | 16 | /std/living/skill_attributes.c |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 17 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 18 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame^] | 19 | ARGUMENTE |
| 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 | |
| 29 | BESCHREIBUNG |
| 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 | |
| 42 | RUECKGABEWERT |
| 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 | |
| 59 | BEMERKUNGEN |
| 60 | =========== |
| 61 | |
| 62 | |
| 63 | BEISPIELE |
| 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 | |
| 106 | SIEHE 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 117 | |
| 118 | 14.08.2008, Zesstra |