From 0020ea9f92ec2242d143114dfc34140adf62127b Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 27 Apr 2019 13:57:46 +0200 Subject: [PATCH] Core/Maps: Fix crash caused by setActive(false) called after DespawnOrUnsummon() Fix crash caused by WorldObject::setActive(false) called after WorldObject::DespawnOrUnsummon() happening because the WorldObject would be set as not active but then Map::RemoveFromActiveHelper() would not be called because of not being in world anymore. Whenever setActive() gets desync'd with what Map actually contains a rare crash would happen since Map only reads a few values of the active WorldObject, making it hard to reproduce. If this happens again some ASSERT calls should be added (or a check in Map::RemoveFromMap() could be added about if the WorldObject is in Map::m_activeNonPlayers container). --- src/server/game/Entities/Object/Object.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index c903ad73d7..54bccc11ab 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1235,7 +1235,7 @@ void WorldObject::setActive(bool on) m_isActive = on; - if (!IsInWorld()) + if (on && !IsInWorld()) return; Map* map = FindMap();