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); }