Modifier GetModifier(SkillMapEntry entry, int value) { var modifier = (Modifier)Activator.CreateInstance(entry.ModifierType); if (modifier is AddModifier) { AddModifier addMod = (AddModifier)modifier; addMod.value = entry.IsNegative ? -value : value; addMod.name = (modifiersenum)Enum.Parse(typeof(modifiersenum), entry.to); addMod.nameSpecified = true; addMod.valueSpecified = true; } else if (modifier is SubModifier) { SubModifier subMod = (SubModifier)modifier; subMod.value = entry.IsNegative ? -value : value; subMod.name = (modifiersenum)Enum.Parse(typeof(modifiersenum), entry.to); subMod.nameSpecified = true; subMod.valueSpecified = true; } else if (modifier is RateModifier) { RateModifier rateMod = (RateModifier)modifier; rateMod.value = entry.IsNegative ? -value : value; rateMod.name = (modifiersenum)Enum.Parse(typeof(modifiersenum), entry.to); rateMod.nameSpecified = true; rateMod.valueSpecified = true; } else if (modifier is SetModifier) { SetModifier setMod = (SetModifier)modifier; setMod.value = entry.IsNegative ? -value : value; setMod.name = (modifiersenum)Enum.Parse(typeof(modifiersenum), entry.to); setMod.nameSpecified = true; setMod.valueSpecified = true; } return(modifier); }
public List <Modifier> GetModifiers(SkillMap map) { List <Modifier> list = new List <Modifier>(); SkillMapEntry entry = null; if (this.hit_accuracy > 0) { entry = map.AllMappings["hit_accuracy"]; list.Add(GetModifier(entry, this.hit_accuracy)); } if (this.magical_hit_accuracy > 0) { entry = map.AllMappings["magical_hit_accuracy"]; list.Add(GetModifier(entry, this.magical_hit_accuracy)); } if (this.magical_skill_boost > 0) { entry = map.AllMappings["magical_skill_boost"]; list.Add(GetModifier(entry, this.magical_skill_boost)); } if (this.parry > 0) { entry = map.AllMappings["parry"]; list.Add(GetModifier(entry, this.parry)); } if (this.dodge > 0) { entry = map.AllMappings["dodge"]; list.Add(GetModifier(entry, this.dodge)); } if (this.block > 0) { entry = map.AllMappings["block"]; list.Add(GetModifier(entry, this.block)); } if (this.critical > 0) { entry = map.AllMappings["critical"]; list.Add(GetModifier(entry, this.critical)); } if (this.min_damage > 0) { entry = map.AllMappings["min_damage"]; list.Add(GetModifier(entry, this.min_damage)); } if (this.max_damage > 0) { entry = map.AllMappings["max_damage"]; list.Add(GetModifier(entry, this.max_damage)); } if (this.damage_reduce > 0) { entry = map.AllMappings["damage_reduce"]; list.Add(GetModifier(entry, this.damage_reduce)); } if (this.magical_resist > 0) { entry = map.AllMappings["magical_resist"]; list.Add(GetModifier(entry, this.magical_resist)); } if (this.physical_defend > 0) { entry = map.AllMappings["physical_defend"]; list.Add(GetModifier(entry, this.physical_defend)); } if (!String.IsNullOrEmpty(this.stat_enchant_type) && this.stat_enchant_value > 0) { entry = map.AllMappings[this.stat_enchant_type]; Modifier modifier = GetModifier(entry, this.stat_enchant_value); modifier.bonus = true; list.Add(modifier); } var utility = Utility <Item> .Instance; List <string> bonusAttrs = new List <string>(); utility.Export(this, "bonus_attr", bonusAttrs); var clientBonuses = from bonus in bonusAttrs let name = Utility.GetAttributeName(bonus) let value = Utility.GetAttributeValue(bonus) select new { Name = name, Value = value }; foreach (var bonus in clientBonuses) { string name = bonus.Name.ToLower(); if (!map.AllMappings.ContainsKey(name)) { Debug.Print("Missing bonus attribute mapping: {0}", name); continue; } entry = map.AllMappings[name]; Modifier modifier = GetModifier(entry, bonus.Value); modifier.bonus = true; list.Add(modifier); } if (this.attack_delay > 0) { entry = map.AllMappings["attack_delay"]; list.Add(GetModifier(entry, this.attack_delay)); } if (this.attack_range > 0) { entry = map.AllMappings["attack_range"]; list.Add(GetModifier(entry, (int)(this.attack_range * 1000))); } if (this.hit_count > 0) { entry = map.AllMappings["hit_count"]; list.Add(GetModifier(entry, this.hit_count)); } if (this.min_damage > 0 || this.max_damage > 0) { var meanMod = new MeanModifier(this.min_damage, this.max_damage); meanMod.name = modifiersenum.POWER; list.Add(meanMod); } if (list.Count == 0) { return(null); } return(list); }