From d2552107b6c6f1ae186f883059ad7c86a0b169b3 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 21 Feb 2021 21:49:50 -0500 Subject: [PATCH] Core/Auras: Refactor logic determining which spell aura type values need to be sent Port From (https://github.com/TrinityCore/TrinityCore/commit/512931646ada2fab3796d362bb1955d7494f06ff) --- Source/Game/Spells/Auras/Aura.cs | 28 +++++++++++++++++++------- Source/Game/Spells/Auras/AuraEffect.cs | 2 +- 2 files changed, 22 insertions(+), 8 deletions(-) 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(); }