diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-03-10 00:34:23 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-03-10 00:34:23 +0100 |
commit | 62dc916184d5d32b26a2d331d84d3cae481040fb (patch) | |
tree | e16059b2bf2f47455e88e5b35f3babdd942df290 /src | |
parent | 291326381311e5626817e4e32ce285dbde3c359e (diff) |
Core/Auras: Update visible aura immediately during spell cast instead of waiting for next update tick
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 5 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index e00fb1a44c9..f5a0c91f780 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1547,10 +1547,11 @@ class TC_GAME_API Unit : public WorldObject uint32 m_lastSanctuaryTime; VisibleAuraContainer const& GetVisibleAuras() const { return m_visibleAuras; } - bool HasVisibleAura(AuraApplication* aurApp) const { return m_visibleAuras.count(aurApp) > 0; } + bool HasVisibleAura(AuraApplication* aurApp) const { return m_visibleAuras.contains(aurApp); } void SetVisibleAura(AuraApplication* aurApp); - void SetVisibleAuraUpdate(AuraApplication* aurApp) { m_visibleAurasToUpdate.insert(aurApp); } void RemoveVisibleAura(AuraApplication* aurApp); + void SetVisibleAuraUpdate(AuraApplication* aurApp) { m_visibleAurasToUpdate.insert(aurApp); } + void RemoveVisibleAuraUpdate(AuraApplication* aurApp) { m_visibleAurasToUpdate.erase(aurApp); } bool HasInterruptFlag(SpellAuraInterruptFlags flags) const { return m_interruptMask.HasFlag(flags); } bool HasInterruptFlag(SpellAuraInterruptFlags2 flags) const { return m_interruptMask2.HasFlag(flags); } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index a424e24a7bc..e825900a545 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3027,6 +3027,12 @@ void Spell::TargetInfo::DoDamageAndTriggers(Spell* spell) if (effMask) _spellHitTarget->_ApplyAura(aurApp, effMask); + + if (aurApp->IsNeedClientUpdate() && aurApp->GetRemoveMode() == AURA_REMOVE_NONE) + { + aurApp->ClientUpdate(false); + _spellHitTarget->RemoveVisibleAuraUpdate(aurApp); + } } } |