Пример #1
0
        public int CalcEffectValue(Unit caster, int value)
        {
            if (EffectValueOverrideEffect != null &&
                caster.Spells.Contains(EffectValueOverrideEffect.Spell))
            {
                return(EffectValueOverrideEffect.CalcEffectValue(caster, value));
            }
            if (caster == null)
            {
                return(value);
            }
            if (APValueFactor != 0.0 || APPerComboPointValueFactor != 0.0)
            {
                float num1 = APValueFactor + APPerComboPointValueFactor * caster.ComboPoints;
                int   num2 = Spell.IsRanged ? caster.TotalRangedAP : caster.TotalMeleeAP;
                value += (int)(num2 * (double)num1 + 0.5);
            }

            if (caster is Character && SpellPowerValuePct != 0)
            {
                value += (SpellPowerValuePct * caster.GetDamageDoneMod(Spell.Schools[0]) + 50) / 100;
            }
            SpellModifierType type;

            switch (EffectIndex)
            {
            case EffectIndex.Zero:
                type = SpellModifierType.EffectValue1;
                break;

            case EffectIndex.One:
                type = SpellModifierType.EffectValue2;
                break;

            case EffectIndex.Two:
                type = SpellModifierType.EffectValue3;
                break;

            default:
                type = SpellModifierType.EffectValue4AndBeyond;
                break;
            }

            value = caster.Auras.GetModifiedInt(type, Spell, value);
            value = caster.Auras.GetModifiedInt(SpellModifierType.AllEffectValues, Spell, value);
            return(value);
        }
Пример #2
0
 public int CalcEffectValue()
 {
     if (m_cast.TriggerEffect != null && m_cast.TriggerEffect.OverrideEffectValue)
     {
         return(m_cast.TriggerEffect.CalcEffectValue(m_cast.CasterReference));
     }
     return(Effect.CalcEffectValue(m_cast.CasterReference));
 }
Пример #3
0
        /// <summary>
        /// Trigger all spells that might be triggered by the given Spell
        /// </summary>
        /// <param name="spell"></param>
        internal void TriggerSpellsFor(SpellCast cast)
        {
            if (this.m_TargetTriggers == null)
            {
                return;
            }
            Spell spell = cast.Spell;

            for (int index = 0; index < this.m_TargetTriggers.Count; ++index)
            {
                AddTargetTriggerHandler targetTrigger = this.m_TargetTriggers[index];
                SpellEffect             spellEffect   = targetTrigger.SpellEffect;
                int num;
                if (spellEffect.EffectType != SpellEffectType.TriggerSpellFromTargetWithCasterAsTarget &&
                    spell.SpellClassSet == spellEffect.Spell.SpellClassSet && spellEffect.MatchesSpell(spell) &&
                    (((num = spellEffect.CalcEffectValue(this.Owner)) >= 100 || Utility.Random(0, 101) <= num) &&
                     (spell != spellEffect.TriggerSpell && targetTrigger.Aura.CasterUnit != null)))
                {
                    cast.Trigger(spellEffect.TriggerSpell, new WorldObject[0]);
                }
            }
        }