fix(Core/Unit): Allow Spellsteal to handle Proc Auras and HoTs (#24536)

This commit is contained in:
Gultask
2026-01-29 20:04:01 -03:00
committed by GitHub
parent fa3734c71a
commit 640004b8f3

View File

@@ -5177,7 +5177,7 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, ObjectGuid casterGUID, U
// Xinef: if stealer has same aura
Aura* curAura = stealer->GetAura(aura->GetId());
if (!curAura || (!curAura->IsPermanent() && curAura->GetDuration() < (int32)dur))
if (Aura* newAura = Aura::TryRefreshStackOrCreate(aura->GetSpellInfo(), effMask, stealer, nullptr, &baseDamage[0], nullptr, aura->GetCasterGUID()))
if (Aura* newAura = Aura::TryRefreshStackOrCreate(aura->GetSpellInfo(), effMask, stealer, nullptr, &baseDamage[0], nullptr, stealer->GetGUID()))
{
// created aura must not be single target aura,, so stealer won't loose it on recast
if (newAura->IsSingleTarget())
@@ -5189,6 +5189,13 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, ObjectGuid casterGUID, U
}
// FIXME: using aura->GetMaxDuration() maybe not blizzlike but it fixes stealing of spells like Innervate
newAura->SetLoadedState(aura->GetMaxDuration(), int32(dur), stealCharge ? 1 : aura->GetCharges(), 1, recalculateMask, &damage[0]);
// Reset periodic timers so stolen HoTs tick properly
// For stolen auras we need fresh tick counters since no ticks have occurred yet
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
if (AuraEffect* aurEff = newAura->GetEffect(i))
aurEff->ResetPeriodic(true);
newAura->ApplyForTargets();
}
}