From c91ce7f7c2cb83985f90b2c3c06fb7461b37aa14 Mon Sep 17 00:00:00 2001 From: bashermens <31279994+hermensbas@users.noreply.github.com> Date: Wed, 24 Dec 2025 21:44:21 +0100 Subject: [PATCH 1/3] fix: crashlog player::RestoreSpellMods --- src/server/game/Entities/Unit/Unit.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e75a49358..0d3ed374b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15971,6 +15971,13 @@ void Unit::CleanupBeforeRemoveFromMap(bool finalCleanup) if (IsInWorld()) // not in world and not being removed atm RemoveFromWorld(); + // added for mod_playerbots crash fixes; m_Events.KillAllEvents(false) placed after RemoveFromWorld and + // interupt and before RemoveAllAuras. + // Cancel and remove pending events (including SpellEvent) before aura/spellmod cleanup. + // Without this, SpellEvent may be cancelled later during EventProcessor destruction after auras/spellmods are gone, + // leading to invalid access in Player::RestoreSpellMods on logout. + m_Events.KillAllEvents(false); + ASSERT(GetGUID()); // A unit may be in removelist and not in world, but it is still in grid From a3b2c7ad0e02d2ce3026df1f575596d2265b4419 Mon Sep 17 00:00:00 2001 From: bashermens <31279994+hermensbas@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:01:20 +0100 Subject: [PATCH 2/3] Update Unit.cpp --- src/server/game/Entities/Unit/Unit.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 0d3ed374b..f61a790c4 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15971,11 +15971,9 @@ void Unit::CleanupBeforeRemoveFromMap(bool finalCleanup) if (IsInWorld()) // not in world and not being removed atm RemoveFromWorld(); - // added for mod_playerbots crash fixes; m_Events.KillAllEvents(false) placed after RemoveFromWorld and - // interupt and before RemoveAllAuras. - // Cancel and remove pending events (including SpellEvent) before aura/spellmod cleanup. - // Without this, SpellEvent may be cancelled later during EventProcessor destruction after auras/spellmods are gone, - // leading to invalid access in Player::RestoreSpellMods on logout. + // added for mod_playerbots crash fixes; cancel and remove pending events before aura/spellmod cleanup. + // Without this SpellEvent may be cancelled later during EventProcessor destruction after auras/spellmods + // are already gone leading to invalid access in Player::RestoreSpellMods on logout. m_Events.KillAllEvents(false); ASSERT(GetGUID()); From 896e1d3f381464b9d23b60afbbd06b036d860cda Mon Sep 17 00:00:00 2001 From: bashermens <31279994+hermensbas@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:02:38 +0100 Subject: [PATCH 3/3] Update Unit.cpp --- src/server/game/Entities/Unit/Unit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f61a790c4..9c4740717 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15971,9 +15971,9 @@ void Unit::CleanupBeforeRemoveFromMap(bool finalCleanup) if (IsInWorld()) // not in world and not being removed atm RemoveFromWorld(); - // added for mod_playerbots crash fixes; cancel and remove pending events before aura/spellmod cleanup. + // Added for mod_playerbots crash fixes; cancel and remove pending events before aura/spellmod cleanup. // Without this SpellEvent may be cancelled later during EventProcessor destruction after auras/spellmods - // are already gone leading to invalid access in Player::RestoreSpellMods on logout. + // are already removed and leading to invalid access in Player::RestoreSpellMods on logout. m_Events.KillAllEvents(false); ASSERT(GetGUID());