aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp2
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp32
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.h1
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();