コード例 #1
0
ファイル: ClientItemsFile.cs プロジェクト: shanecode/aion_ext
        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);
        }
コード例 #2
0
ファイル: ClientItemsFile.cs プロジェクト: shanecode/aion_ext
        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);
        }