public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (apply) { if (IsReplacementValid(auraApplication.Target.TransformSpellInfo, Aura.SpellInfo)) { auraApplication.Target.UpdateTransformSpell(this); } } else { auraApplication.Target.ResetTransformSpell(); IReadOnlyList <AuraEffect> transformEffects = auraApplication.Target.Auras.GetAuraEffects(AuraEffectType.ChangeDisplayModel); if (transformEffects != null) { for (int i = 0; i < transformEffects.Count; i++) { if (IsReplacementValid(auraApplication.Target.TransformSpellInfo, transformEffects[i].Aura.SpellInfo)) { auraApplication.Target.UpdateTransformSpell((AuraEffectChangeDisplayModel)transformEffects[i]); } } } } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode != AuraEffectHandleMode.Normal) { return; } auraApplication.Target.Spells.ModifySchoolImmunity(Aura.SpellInfo, EffectInfo.SchoolMask, apply); 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.SpellInfo.SchoolMask.HasAnyFlag(EffectInfo.SchoolMask)) { continue; } // check for auras that ignore immunities and can't be dispelled if (!Aura.SpellInfo.CanDispelAura(otherApplication.Aura.SpellInfo)) { continue; } // don't dispel self if (Aura == otherApplication.Aura) { continue; } // don't dispel passives if (otherApplication.Aura.SpellInfo.IsPassive) { continue; } // don't dispel same positivity effects if (otherApplication.Aura.AuraInfo.IsPositive == Aura.AuraInfo.IsPositive) { continue; } applicaionsToRemove.Add(otherApplication); } foreach (AuraApplication applicationToRemove in applicaionsToRemove) { if (applicationToRemove.RemoveMode == AuraRemoveMode.None) { auraApplication.Target.Auras.RemoveAuraWithApplication(applicationToRemove, AuraRemoveMode.Immunity); } } } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode == AuraEffectHandleMode.Normal) { auraApplication.Target.Spells.HandleSpellTrigger(this, apply); } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode == AuraEffectHandleMode.Normal) { auraApplication.Target.Attributes.ModHaste.ModifyPercentage(Value, apply); } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (apply && mode == AuraEffectHandleMode.Refresh) { CalculateValue(); } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode == AuraEffectHandleMode.Normal) { auraApplication.Target.UpdateControlState(UnitControlState.Stunned, apply); } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode == AuraEffectHandleMode.Normal) { auraApplication.Target.Attributes.UpdateSpeed(UnitMoveType.Run); } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (apply) { PreparePeriodic(Aura.Caster, mode == AuraEffectHandleMode.Refresh); } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode == AuraEffectHandleMode.Normal) { auraApplication.Target.Attributes.HandleStatPercentModifier(modifierType, StatModifierType.BaseValue, Value, apply); } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode != AuraEffectHandleMode.Normal) { return; } auraApplication.Target.UpdateVisibility(true); }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode != AuraEffectHandleMode.Normal) { return; } int slowFallSpeed = (int)auraApplication.Target.Auras.MinPositiveAuraModifier(AuraEffectType.SlowFall); auraApplication.Target.SlowFallSpeed = slowFallSpeed; }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode == AuraEffectHandleMode.Normal) { auraApplication.Target.Spells.HandleSpellModifier(SpellModifier, apply); } if (apply && mode == AuraEffectHandleMode.Refresh) { CalculateValue(); } }
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); } } } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode != AuraEffectHandleMode.Normal) { return; } Vehicle vehicle = auraApplication.Target.Vehicle; if (vehicle == null) { return; } Unit passenger = auraApplication.Aura.Caster; if (passenger == null) { return; } if (passenger == vehicle.Unit) { return; } if (apply) { if (!passenger.IsAlive || passenger.Vehicle == vehicle || vehicle.Unit.IsOnVehicle(passenger)) { passenger.HandleVehicleApplicationEnter(vehicle, (int)Value, Aura); } } else { if (vehicle == passenger.Vehicle) { passenger.HandleVehicleApplicationExit(); } } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode != AuraEffectHandleMode.Normal) { return; } Unit target = auraApplication.Target; bool hasSilence = EffectInfo.PreventionType.HasTargetFlag(SpellPreventionType.Silence); bool hasPacify = EffectInfo.PreventionType.HasTargetFlag(SpellPreventionType.Pacify); if (apply) { if (hasSilence) { target.SetFlag(UnitFlags.Silenced); } if (hasPacify) { target.SetFlag(UnitFlags.Pacified); } if (target.SpellCast.IsCasting && target.SpellCast.Spell.SpellInfo.PreventionType.HasAnyFlag(EffectInfo.PreventionType)) { target.SpellCast.Cancel(); } } else { if (hasSilence && !target.HasAuraType(AuraEffectType.Silence) && !target.HasAuraType(AuraEffectType.SilencePacify)) { target.RemoveFlag(UnitFlags.Silenced); } if (hasPacify && !target.HasAuraType(AuraEffectType.Pacify) && !target.HasAuraType(AuraEffectType.SilencePacify)) { target.RemoveFlag(UnitFlags.Pacified); } } }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode != AuraEffectHandleMode.Normal) { return; } if (apply) { auraApplication.Target.InvisibilityDetection += (int)EffectInfo.Value; } else { auraApplication.Target.InvisibilityDetection -= (int)EffectInfo.Value; } auraApplication.Target.UpdateVisibility(true); }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode != AuraEffectHandleMode.Normal && mode != AuraEffectHandleMode.Refresh) { return; } if (apply) { auraApplication.Target.Auras.RemoveAurasWithEffect(AuraEffectType.ShapeShift, this); auraApplication.Target.UpdateShapeShiftForm(this); } else { auraApplication.Target.ResetShapeShiftForm(); } auraApplication.Target.Attributes.UpdateDisplayPower(); }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); if (mode != AuraEffectHandleMode.Normal) { return; } if (apply) { auraApplication.Target.StealthSubtlety += (int)EffectInfo.Value; } else { auraApplication.Target.StealthSubtlety -= (int)EffectInfo.Value; } bool hasStealthAura = auraApplication.Target.Auras.HasAuraType(AuraEffectType.Stealth); UnitVisualEffectFlags visualEffectFlags = auraApplication.Target.Attributes.VisualEffectFlags; auraApplication.Target.Attributes.VisualEffectFlags = visualEffectFlags.SetFlag(UnitVisualEffectFlags.StealthTransparency, hasStealthAura); auraApplication.Target.UpdateVisibility(true); }
public override void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { base.HandleEffect(auraApplication, mode, apply); auraApplication.Target.UpdateControlState(UnitControlState.Root, apply); }
public virtual void HandleEffect(AuraApplication auraApplication, AuraEffectHandleMode mode, bool apply) { Logging.LogAura($"Handle aura effect {EffectInfo.name} for target: {auraApplication.Target.Name} in mode {mode}, applying: {apply}"); }