Пример #1
0
 public void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
 {
     foreach (SecondarySkill skill in SecondarySkills)
     {
         skill.ApplySpell(data, damageModifier);
     }
 }
Пример #2
0
 public void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
 {
     if (data.Spell.IsAffectedBySecondarySkillType(MagicType))
     {
         damageModifier.DamageMultipliers.Add(1.5);
     }
 }
Пример #3
0
 public void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
 {
     if (data.Spell.IsAffectedBySecondarySkillType(MagicType))
     {
         damageModifier.DamageMultipliers.Add(1.5);
     }
 }
Пример #4
0
        public void CalculateDamage(SpellDamageCalculatorData data, out int damage)
        {
            int baseDamage = data.Spell.BaseDamage(data.Target);

            SpellDamageModifier damageModifier = data.Spell.BaseModifier(data.Target);

            UnitUniqueTraitManager.Instance.ApplySpell(data, damageModifier);
            data.CasterHeroStats.ApplySpell(data, damageModifier);

            if (data.TargetProtectionSpells != null)
            {
                foreach (ProtectionSpell protectionSpell in data.TargetProtectionSpells)
                {
                    protectionSpell.ApplySpell(data, damageModifier);
                }
            }

            if (data.CasterMagicOrbs != null)
            {
                foreach (MagicOrb magicOrb in data.CasterMagicOrbs)
                {
                    magicOrb.ApplySpell(data, damageModifier);
                }
            }

            // TODO: orb of vulnerability

            damage = PerformCalculation(baseDamage, damageModifier);
        }
Пример #5
0
        public override void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
        {
            if (SkillLevel == SecondarySkillLevel.None)
            {
                return;
            }

            double multiplier;

            if (SkillLevel == SecondarySkillLevel.Basic)
            {
                multiplier = 1.05;
            }
            else if (SkillLevel == SecondarySkillLevel.Advanced)
            {
                multiplier = 1.1;
            }
            else
            {
                multiplier = 1.15;
            }

            if (IsSpecialized)
            {
                multiplier *= (1.0 + 0.05 * HeroStats.Level);
            }

            damageModifier.DamageMultipliers.Add(multiplier);
        }
Пример #6
0
        public virtual SpellDamageModifier BaseModifier(Unit unit)
        {
            SpellDamageModifier damageModifier = new SpellDamageModifier();

            if (CasterStats.IsSpecialized)
            {
                damageModifier.DamageMultipliers.Add(SpecializationMultiplier(unit));
            }

            return(damageModifier);
        }
Пример #7
0
        private int PerformCalculation(int baseDamage, SpellDamageModifier damageModifier)
        {
            double result = baseDamage;

            foreach (double damageMultiplier in damageModifier.DamageMultipliers)
            {
                result *= damageMultiplier;
            }

            result = Math.Floor(result);

            int intResult = (int)result;
            return intResult;
        }
Пример #8
0
 public void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
 {
     if (data.Spell.IsAffectedBySecondarySkillType(SecondarySkillType))
     {
         if (CasterStats.SkillLevel <= SecondarySkillLevel.Basic)
         {
             damageModifier.DamageMultipliers.Add(0.7);
         }
         else
         {
             damageModifier.DamageMultipliers.Add(0.5);
         }
     }
 }
Пример #9
0
 public void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
 {
     if (data.Spell.IsAffectedBySecondarySkillType(SecondarySkillType))
     {
         if (CasterStats.SkillLevel <= SecondarySkillLevel.Basic)
         {
             damageModifier.DamageMultipliers.Add(0.7);
         }
         else
         {
             damageModifier.DamageMultipliers.Add(0.5);
         }
     }
 }
Пример #10
0
        private int PerformCalculation(int baseDamage, SpellDamageModifier damageModifier)
        {
            double result = baseDamage;

            foreach (double damageMultiplier in damageModifier.DamageMultipliers)
            {
                result *= damageMultiplier;
            }

            result = Math.Floor(result);

            int intResult = (int)result;

            return(intResult);
        }
Пример #11
0
        public void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
        {
            Unit  unit  = data.Target;
            Spell spell = data.Spell;

            // TODO: orb of vulnerability
            bool isImmune = false;

            isImmune |= (spell.IsAffectedBySecondarySkillType(unit.ImmuneMagic));
            isImmune |= (unit.ImmuneSpells != null && unit.ImmuneSpells.Contains(spell.GetType()));
            isImmune |= (unit.ImmuneSpellLevel >= spell.Level);

            if (isImmune)
            {
                damageModifier.DamageMultipliers.Add(0);
                return;
            }

            if (unit.VulnerableSpells != null && unit.VulnerableSpells.Contains(spell.GetType()))
            {
                damageModifier.DamageMultipliers.Add(2);
            }

            if (unit.Id == 32) // Stone Golem
            {
                damageModifier.DamageMultipliers.Add(0.5);
            }
            else if (unit.Id == 33) // Iron Golem
            {
                damageModifier.DamageMultipliers.Add(0.25);
            }
            else if (unit.Id == 134) // Gold Golem
            {
                damageModifier.DamageMultipliers.Add(0.15);
            }
            else if (unit.Id == 135) // Diamond Golem
            {
                damageModifier.DamageMultipliers.Add(0.05);
            }
        }
Пример #12
0
        public override void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
        {
            if (SkillLevel == SecondarySkillLevel.None)
            {
                return;
            }

            double multiplier;

            if (SkillLevel == SecondarySkillLevel.Basic)
            {
                multiplier = 1.05;
            }
            else if (SkillLevel == SecondarySkillLevel.Advanced)
            {
                multiplier = 1.1;
            }
            else
            {
                multiplier = 1.15;
            }

            if (IsSpecialized)
            {
                multiplier *= (1.0 + 0.05 * HeroStats.Level);
            }

            damageModifier.DamageMultipliers.Add(multiplier);
        }
Пример #13
0
 public virtual void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
 {
 }
Пример #14
0
 public virtual void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
 {
 }
Пример #15
0
        public void ApplySpell(SpellDamageCalculatorData data, SpellDamageModifier damageModifier)
        {
            Unit unit = data.Target;
            Spell spell = data.Spell;

            // TODO: orb of vulnerability
            bool isImmune = false;
            isImmune |= (spell.IsAffectedBySecondarySkillType(unit.ImmuneMagic));
            isImmune |= (unit.ImmuneSpells != null && unit.ImmuneSpells.Contains(spell.GetType()));
            isImmune |= (unit.ImmuneSpellLevel >= spell.Level);

            if (isImmune)
            {
                damageModifier.DamageMultipliers.Add(0);
                return;
            }

            if (unit.VulnerableSpells != null && unit.VulnerableSpells.Contains(spell.GetType()))
            {
                damageModifier.DamageMultipliers.Add(2);
            }

            if (unit.Id == 32) // Stone Golem
            {
                damageModifier.DamageMultipliers.Add(0.5);
            }
            else if (unit.Id == 33) // Iron Golem
            {
                damageModifier.DamageMultipliers.Add(0.25);
            }
            else if (unit.Id == 134) // Gold Golem
            {
                damageModifier.DamageMultipliers.Add(0.15);
            }
            else if (unit.Id == 135) // Diamond Golem
            {
                damageModifier.DamageMultipliers.Add(0.05);
            }
        }
Пример #16
0
        public virtual SpellDamageModifier BaseModifier(Unit unit)
        {
            SpellDamageModifier damageModifier = new SpellDamageModifier();

            if (CasterStats.IsSpecialized)
            {
                damageModifier.DamageMultipliers.Add(SpecializationMultiplier(unit));
            }

            return damageModifier;
        }