Пример #1
0
        public override void OnCasted(SpellCast cast)
        {
            Spell spell = cast.Spell;

            if (ModifierWithChargesCount <= 0)
            {
                return;
            }
            List <IAura> auraList = null;

            foreach (AddModifierEffectHandler modifierEffectHandler in SpellModifiersFlat)
            {
                SpellEffect spellEffect = modifierEffectHandler.SpellEffect;
                if (spellEffect.MatchesSpell(spell) && cast.Spell != spellEffect.Spell &&
                    (cast.TriggerEffect == null || cast.TriggerEffect.Spell != spellEffect.Spell) &&
                    modifierEffectHandler.Charges > 0)
                {
                    --modifierEffectHandler.Charges;
                    if (modifierEffectHandler.Charges < 1)
                    {
                        if (auraList == null)
                        {
                            auraList = SpellCast.AuraListPool.Obtain();
                        }
                        auraList.Add(modifierEffectHandler.Aura);
                    }
                }
            }

            foreach (AddModifierEffectHandler modifierEffectHandler in SpellModifiersPct)
            {
                SpellEffect spellEffect = modifierEffectHandler.SpellEffect;
                if (spellEffect.MatchesSpell(spell) && cast.Spell != spellEffect.Spell &&
                    (cast.TriggerEffect == null || cast.TriggerEffect.Spell != spellEffect.Spell) &&
                    modifierEffectHandler.Charges > 0)
                {
                    --modifierEffectHandler.Charges;
                    if (modifierEffectHandler.Charges < 1)
                    {
                        if (auraList == null)
                        {
                            auraList = SpellCast.AuraListPool.Obtain();
                        }
                        auraList.Add(modifierEffectHandler.Aura);
                    }
                }
            }

            if (auraList == null)
            {
                return;
            }
            foreach (IAura aura in auraList)
            {
                aura.Remove(false);
            }
            auraList.Clear();
            SpellCast.AuraListPool.Recycle(auraList);
        }