diff --git a/Source/Game/Spells/Auras/Aura.cs b/Source/Game/Spells/Auras/Aura.cs index e6897502e..8c53dd5ea 100644 --- a/Source/Game/Spells/Auras/Aura.cs +++ b/Source/Game/Spells/Auras/Aura.cs @@ -154,13 +154,9 @@ namespace Game.Spells _flags |= positiveFound ? AuraFlags.Positive : AuraFlags.Negative; } - if (GetBase().GetSpellInfo().HasAttribute(SpellAttr8.AuraSendAmount) || - GetBase().HasEffectType(AuraType.OverrideActionbarSpells) || - GetBase().HasEffectType(AuraType.OverrideActionbarSpellsTriggered) || - GetBase().HasEffectType(AuraType.ModSpellCategoryCooldown) || - GetBase().HasEffectType(AuraType.ModMaxCharges) || - GetBase().HasEffectType(AuraType.ChargeRecoveryMod) || - GetBase().HasEffectType(AuraType.ChargeRecoveryMultiplier)) + bool effectNeedsAmount(AuraEffect effect) => effect != null && (GetEffectsToApply() & (1 << effect.GetEffIndex())) != 0 && Aura.EffectTypeNeedsSendingAmount(effect.GetAuraType()); + + if (GetBase().GetSpellInfo().HasAttribute(SpellAttr8.AuraSendAmount) || GetBase().GetAuraEffects().Any(effectNeedsAmount)) _flags |= AuraFlags.Scalable; } @@ -1096,6 +1092,24 @@ namespace Game.Spells return false; } + public static bool EffectTypeNeedsSendingAmount(AuraType type) + { + switch (type) + { + case AuraType.OverrideActionbarSpells: + case AuraType.OverrideActionbarSpellsTriggered: + case AuraType.ModSpellCategoryCooldown: + case AuraType.ModMaxCharges: + case AuraType.ChargeRecoveryMod: + case AuraType.ChargeRecoveryMultiplier: + return true; + default: + break; + } + + return false; + } + public void RecalculateAmountOfEffects() { Cypher.Assert(!IsRemoved()); diff --git a/Source/Game/Spells/Auras/AuraEffect.cs b/Source/Game/Spells/Auras/AuraEffect.cs index f3577a88c..328a3f6ae 100644 --- a/Source/Game/Spells/Auras/AuraEffect.cs +++ b/Source/Game/Spells/Auras/AuraEffect.cs @@ -262,7 +262,7 @@ namespace Game.Spells HandleEffect(aurApp, handleMask, true); } - if (GetSpellInfo().HasAttribute(SpellAttr8.AuraSendAmount)) + if (GetSpellInfo().HasAttribute(SpellAttr8.AuraSendAmount) || Aura.EffectTypeNeedsSendingAmount(GetAuraType())) GetBase().SetNeedClientUpdateForTargets(); }