Example #1
0
        public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply)
        {
            base.HandleEffect(auraApplication, mode, apply);

            if (mode != AuraEffectHandleMode.Normal)
            {
                return;
            }

            SpellMechanicsFlags immuneMechanics = 0;

            for (int i = 0; i < EffectInfo.ImmuneMechanics.Count; i++)
            {
                auraApplication.Target.Spells.ModifyMechanicsImmunity(Aura.SpellInfo, EffectInfo.ImmuneMechanics[i], apply);
                immuneMechanics |= EffectInfo.ImmuneMechanics[i].AsFlag();
            }

            if (apply && Aura.SpellInfo.HasAttribute(SpellAttributes.DispelAurasOnImmunity))
            {
                var applicaionsToRemove = new List <AuraApplication>();
                for (var index = 0; index < auraApplication.Target.AuraApplications.Count; index++)
                {
                    AuraApplication otherApplication = auraApplication.Target.AuraApplications[index];
                    if (!otherApplication.Aura.AuraInfo.HasAnyMechanics(immuneMechanics))
                    {
                        continue;
                    }

                    if (!Aura.CanDispel(otherApplication.Aura))
                    {
                        continue;
                    }

                    applicaionsToRemove.Add(otherApplication);
                }

                foreach (AuraApplication applicationToRemove in applicaionsToRemove)
                {
                    if (applicationToRemove.RemoveMode == AuraRemoveMode.None)
                    {
                        auraApplication.Target.Auras.RemoveAuraWithApplication(applicationToRemove, AuraRemoveMode.Immunity);
                    }
                }
            }
        }