Core/Spells: Aura refresh improvements

This commit is contained in:
Gildor authored and Ovahlord committed 2022-09-12 09:15:29 +02:00
1 parent 02b79f42a0
commit 86121e9996
3 files changed
+9 -8

No files matched your search

+4 -3
View File
@@ -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
+1 -1
View File
@@ -110,7 +110,7 @@ class TC_GAME_API Aura
typedef std::unordered_map<ObjectGuid, AuraApplication*> 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);
+4 -4
View File
@@ -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