From 86121e9996189c3dbe9e3938cc7353bdf062bd19 Mon Sep 17 00:00:00 2001 From: Gildor Date: Sat, 3 Sep 2022 13:49:18 +0200 Subject: [PATCH] Core/Spells: Aura refresh improvements --- src/server/game/Spells/Auras/SpellAuras.cpp | 7 ++++--- src/server/game/Spells/Auras/SpellAuras.h | 2 +- src/server/game/Spells/Spell.cpp | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index f9b61aab92..d9f352dcf2 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -306,7 +306,7 @@ uint8 Aura::BuildEffectMaskForOwner(SpellInfo const* spellProto, uint8 available return effMask & availableEffectMask; } -Aura* Aura::TryRefreshStackOrCreate(AuraCreateInfo& createInfo) +Aura* Aura::TryRefreshStackOrCreate(AuraCreateInfo& createInfo, bool updateEffectMask) { ASSERT(createInfo.Caster || createInfo.CasterGUID); @@ -337,8 +337,9 @@ Aura* Aura::TryRefreshStackOrCreate(AuraCreateInfo& createInfo) Unit* unit = createInfo._owner->ToUnit(); // check effmask on owner application (if existing) - if (AuraApplication* aurApp = foundAura->GetApplicationOfTarget(unit->GetGUID())) - aurApp->UpdateApplyEffectMask(effMask); + if (updateEffectMask) + if (AuraApplication* aurApp = foundAura->GetApplicationOfTarget(unit->GetGUID())) + aurApp->UpdateApplyEffectMask(effMask); return foundAura; } else diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index 00a72de3fa..0ca6d1a5b1 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -110,7 +110,7 @@ class TC_GAME_API Aura typedef std::unordered_map ApplicationMap; static uint8 BuildEffectMaskForOwner(SpellInfo const* spellProto, uint8 availableEffectMask, WorldObject* owner); - static Aura* TryRefreshStackOrCreate(AuraCreateInfo& createInfo); + static Aura* TryRefreshStackOrCreate(AuraCreateInfo& createInfo, bool updateEffectMask = true); static Aura* TryCreate(AuraCreateInfo& createInfo); static Aura* Create(AuraCreateInfo& createInfo); explicit Aura(AuraCreateInfo const& createInfo); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 299e595e93..e554d8a4b1 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2979,7 +2979,7 @@ void Spell::DoSpellEffectHit(Unit* unit, uint8 effIndex, TargetInfo& hitInfo) .SetOwnerEffectMask(aura_effmask) .IsRefresh = &refresh; - if (Aura* aura = Aura::TryRefreshStackOrCreate(createInfo)) + if (Aura* aura = Aura::TryRefreshStackOrCreate(createInfo, false)) { hitInfo.HitAura = aura->ToUnitAura(); @@ -3009,9 +3009,6 @@ void Spell::DoSpellEffectHit(Unit* unit, uint8 effIndex, TargetInfo& hitInfo) hitInfo.HitAura->SetDuration(hitInfo.AuraDuration); } - if (refresh) - hitInfo.HitAura->AddStaticApplication(unit, aura_effmask); - if (DynamicObject* dynObj = m_originalCaster->GetDynObject(m_spellInfo->Id)) dynObj->SetDuration(hitInfo.AuraDuration); @@ -3025,6 +3022,9 @@ void Spell::DoSpellEffectHit(Unit* unit, uint8 effIndex, TargetInfo& hitInfo) // So we need to re-update timer with a proper value. m_timer = hitInfo.HitAura->GetMaxDuration(); } + + if (refresh) + hitInfo.HitAura->AddStaticApplication(unit, aura_effmask); } } else