Skip to content

Commit 640004b

Browse files
authored
fix(Core/Unit): Allow Spellsteal to handle Proc Auras and HoTs (azerothcore#24536)
1 parent fa3734c commit 640004b

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

src/server/game/Entities/Unit/Unit.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5177,7 +5177,7 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, ObjectGuid casterGUID, U
51775177
// Xinef: if stealer has same aura
51785178
Aura* curAura = stealer->GetAura(aura->GetId());
51795179
if (!curAura || (!curAura->IsPermanent() && curAura->GetDuration() < (int32)dur))
5180-
if (Aura* newAura = Aura::TryRefreshStackOrCreate(aura->GetSpellInfo(), effMask, stealer, nullptr, &baseDamage[0], nullptr, aura->GetCasterGUID()))
5180+
if (Aura* newAura = Aura::TryRefreshStackOrCreate(aura->GetSpellInfo(), effMask, stealer, nullptr, &baseDamage[0], nullptr, stealer->GetGUID()))
51815181
{
51825182
// created aura must not be single target aura,, so stealer won't loose it on recast
51835183
if (newAura->IsSingleTarget())
@@ -5189,6 +5189,13 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, ObjectGuid casterGUID, U
51895189
}
51905190
// FIXME: using aura->GetMaxDuration() maybe not blizzlike but it fixes stealing of spells like Innervate
51915191
newAura->SetLoadedState(aura->GetMaxDuration(), int32(dur), stealCharge ? 1 : aura->GetCharges(), 1, recalculateMask, &damage[0]);
5192+
5193+
// Reset periodic timers so stolen HoTs tick properly
5194+
// For stolen auras we need fresh tick counters since no ticks have occurred yet
5195+
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
5196+
if (AuraEffect* aurEff = newAura->GetEffect(i))
5197+
aurEff->ResetPeriodic(true);
5198+
51925199
newAura->ApplyForTargets();
51935200
}
51945201
}

0 commit comments

Comments
 (0)