diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 32 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.h | 1 |
3 files changed, 27 insertions, 8 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 92a5de823f1..55bae41ebc0 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -812,7 +812,7 @@ void AuraEffect::ChangeAmount(int32 newAmount, bool mark, bool onStackOrReapply) HandleEffect(aurApp, handleMask, true); } - if (GetSpellInfo()->HasAttribute(SPELL_ATTR8_AURA_SEND_AMOUNT)) + if (GetSpellInfo()->HasAttribute(SPELL_ATTR8_AURA_SEND_AMOUNT) || Aura::EffectTypeNeedsSendingAmount(GetAuraType())) GetBase()->SetNeedClientUpdateForTargets(); } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 8c430050716..3a17779261d 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -115,13 +115,13 @@ void AuraApplication::_InitFlags(Unit* caster, uint32 effMask) _flags |= positiveFound ? AFLAG_POSITIVE : AFLAG_NEGATIVE; } - if (GetBase()->GetSpellInfo()->HasAttribute(SPELL_ATTR8_AURA_SEND_AMOUNT) || - GetBase()->HasEffectType(SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS) || - GetBase()->HasEffectType(SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_TRIGGERED) || - GetBase()->HasEffectType(SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN) || - GetBase()->HasEffectType(SPELL_AURA_MOD_MAX_CHARGES) || - GetBase()->HasEffectType(SPELL_AURA_CHARGE_RECOVERY_MOD) || - GetBase()->HasEffectType(SPELL_AURA_CHARGE_RECOVERY_MULTIPLIER)) + auto effectNeedsAmount = [this](AuraEffect const* effect) + { + return effect && (GetEffectsToApply() & (1 << effect->GetEffIndex())) && Aura::EffectTypeNeedsSendingAmount(effect->GetAuraType()); + }; + + if (GetBase()->GetSpellInfo()->HasAttribute(SPELL_ATTR8_AURA_SEND_AMOUNT) + || std::find_if(GetBase()->GetAuraEffects().begin(), GetBase()->GetAuraEffects().end(), std::cref(effectNeedsAmount)) != GetBase()->GetAuraEffects().end()) _flags |= AFLAG_SCALABLE; } @@ -1156,6 +1156,24 @@ bool Aura::HasEffectType(AuraType type) const return false; } +bool Aura::EffectTypeNeedsSendingAmount(AuraType type) +{ + switch (type) + { + case SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS: + case SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_TRIGGERED: + case SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN: + case SPELL_AURA_MOD_MAX_CHARGES: + case SPELL_AURA_CHARGE_RECOVERY_MOD: + case SPELL_AURA_CHARGE_RECOVERY_MULTIPLIER: + return true; + default: + break; + } + + return false; +} + void Aura::RecalculateAmountOfEffects() { ASSERT (!IsRemoved()); diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index fc71e6c4eed..9292db994d6 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -222,6 +222,7 @@ class TC_GAME_API Aura // helpers for aura effects bool HasEffect(uint8 effIndex) const { return GetEffect(effIndex) != nullptr; } bool HasEffectType(AuraType type) const; + static bool EffectTypeNeedsSendingAmount(AuraType type); AuraEffect* GetEffect(uint32 index) const; uint32 GetEffectMask() const; void RecalculateAmountOfEffects(); |