@@ -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