internal void EffectSchoolDamage(EffectSchoolDamage effect, int effectIndex, Unit target, SpellEffectHandleMode mode)
        {
            if (mode != SpellEffectHandleMode.HitStart || target == null || !target.IsAlive)
            {
                return;
            }

            float spellDamage = effect.CalculateSpellDamage(SpellInfo, effectIndex, Caster, target);

            if (SpellInfo.HasAttribute(SpellCustomAttributes.ShareDamage))
            {
                spellDamage /= Mathf.Min(1, ImplicitTargets.TargetCountForEffect(effectIndex));
            }

            for (var i = 0; i < effect.ConditionalModifiers.Count; i++)
            {
                ConditionalModifier modifier = effect.ConditionalModifiers[i];
                if (modifier.Condition.With(Caster, target, this).IsApplicableAndValid)
                {
                    modifier.Modify(ref spellDamage);
                }
            }

            EffectDamage += (int)spellDamage;
        }
        internal void EffectHeal(EffectHeal effect, int effectIndex, Unit target, SpellEffectHandleMode mode)
        {
            if (mode != SpellEffectHandleMode.HitStart || !target.IsAlive)
            {
                return;
            }

            float spellHealAmount = effect.CalculateSpellHeal(SpellInfo, effectIndex, Caster, target);

            for (var i = 0; i < effect.ConditionalModifiers.Count; i++)
            {
                ConditionalModifier modifier = effect.ConditionalModifiers[i];
                if (modifier.Condition.With(Caster, target, this).IsApplicableAndValid)
                {
                    modifier.Modify(ref spellHealAmount);
                }
            }

            EffectHealing += (int)spellHealAmount;
        }