mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Spells: Fix assert triggered
Fix assert triggered when a spell would trigger another spell in OnEffectHitTarget that would kill the aura owner, then processing the main spell effects. The triggered spell can kill the aura owner, changing its death state to CORPSE and removing auras created. Fix #21856 Ref518e6299ca(cherry picked from commit46c7446bd4)
This commit is contained in:
@@ -3184,9 +3184,14 @@ AuraApplication* Unit::_CreateAuraApplication(Aura* aura, uint32 effMask)
|
||||
{
|
||||
// can't apply aura on unit which is going to be deleted - to not create a memory leak
|
||||
ASSERT(!m_cleanupDone);
|
||||
// aura musn't be removed (but it could have been removed by OnEffectHitTarget script handler
|
||||
// casting a spell that killed the target and set deathState to CORPSE)
|
||||
ASSERT(!aura->IsRemoved() || !IsAlive());
|
||||
|
||||
// just return if the aura has been already removed
|
||||
// this can happen if OnEffectHitTarget() script hook killed the unit or the aura owner (which can be different)
|
||||
if (aura->IsRemoved())
|
||||
{
|
||||
TC_LOG_ERROR("spells", "Unit::_CreateAuraApplication() called with a removed aura. Check if OnEffectHitTarget() is triggering any spell with apply aura effect (that's not allowed!)\nUnit: %s\nAura: %s", GetDebugInfo().c_str(), aura->GetDebugInfo().c_str());
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// aura mustn't be already applied on target
|
||||
ASSERT (!aura->IsAppliedOnTarget(GetGUID()) && "Unit::_CreateAuraApplication: aura musn't be applied on target");
|
||||
|
||||
Reference in New Issue
Block a user