diff options
author | Gildor <gildor55@gmail.com> | 2020-10-08 20:36:50 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-28 16:04:48 +0100 |
commit | 6cd16b0ca9ff43b025e286f336b6af03c49b37db (patch) | |
tree | 25dbab8a5e376c7848c9274afe528fc082c20e9b | |
parent | ad7ed08c07dec7f560a93032edfd24f82676dafc (diff) |
Core/Spells: Aura refresh improvements (#25511)
(cherry picked from commit c13ccaab5c70361d3a51005a1ce374291835b39c)
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 5 |
3 files changed, 9 insertions, 5 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index dc5b90355e4..c8ccd2ec454 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -334,7 +334,7 @@ uint32 Aura::BuildEffectMaskForOwner(SpellInfo const* spellProto, uint32 availab return effMask & availableEffectMask; } -Aura* Aura::TryRefreshStackOrCreate(AuraCreateInfo& createInfo) +Aura* Aura::TryRefreshStackOrCreate(AuraCreateInfo& createInfo, bool updateEffectMask) { ASSERT_NODEBUGINFO(createInfo.Caster || !createInfo.CasterGUID.IsEmpty()); @@ -365,8 +365,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 38bcac57d27..752712accd7 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -126,7 +126,7 @@ class TC_GAME_API Aura typedef std::unordered_map<ObjectGuid, AuraApplication*> ApplicationMap; static uint32 BuildEffectMaskForOwner(SpellInfo const* spellProto, uint32 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 f1203d70e3d..39a4e5502e6 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3006,7 +3006,7 @@ void Spell::DoSpellEffectHit(Unit* unit, SpellEffectInfo const& spellEffectInfo, .SetOwnerEffectMask(aura_effmask) .IsRefresh = &refresh; - if (Aura* aura = Aura::TryRefreshStackOrCreate(createInfo)) + if (Aura* aura = Aura::TryRefreshStackOrCreate(createInfo, false)) { hitInfo.HitAura = aura->ToUnitAura(); @@ -3055,6 +3055,9 @@ void Spell::DoSpellEffectHit(Unit* unit, SpellEffectInfo const& spellEffectInfo, hitInfo.HitAura->SetMaxDuration(hitInfo.AuraDuration); hitInfo.HitAura->SetDuration(hitInfo.AuraDuration); } + + if (refresh) + hitInfo.HitAura->AddStaticApplication(unit, aura_effmask); } } else |