From 0d411ec2c374b12d1018f346c9e7b4eebfb59e99 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Wed, 6 Oct 2021 06:26:03 +0200 Subject: [PATCH] fix(Core/Crash): Evade after cleaning threat references. (#8160) --- src/server/game/Combat/HostileRefMgr.cpp | 9 ++++++++- src/server/game/Entities/Unit/Unit.cpp | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/game/Combat/HostileRefMgr.cpp b/src/server/game/Combat/HostileRefMgr.cpp index e7fade6ca..94a51e6e2 100644 --- a/src/server/game/Combat/HostileRefMgr.cpp +++ b/src/server/game/Combat/HostileRefMgr.cpp @@ -113,6 +113,8 @@ void HostileRefMgr::updateThreatTables() void HostileRefMgr::deleteReferences(bool removeFromMap /*= false*/) { + std::vector creaturesToEvade; + HostileReference* ref = getFirst(); while (ref) { @@ -127,7 +129,7 @@ void HostileRefMgr::deleteReferences(bool removeFromMap /*= false*/) { if (Creature* creature = threatMgr->GetOwner()->ToCreature()) { - creature->AI()->EnterEvadeMode(); + creaturesToEvade.push_back(creature); } } } @@ -136,6 +138,11 @@ void HostileRefMgr::deleteReferences(bool removeFromMap /*= false*/) delete ref; ref = nextRef; } + + for (Creature* creature : creaturesToEvade) + { + creature->AI()->EnterEvadeMode(); + } } //================================================= diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2df8d0e00..20043a623 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14812,7 +14812,7 @@ void Unit::CleanupBeforeRemoveFromMap(bool finalCleanup) CombatStop(); ClearComboPointHolders(); DeleteThreatList(); - getHostileRefMgr().deleteReferences(true); + getHostileRefMgr().deleteReferences(); GetMotionMaster()->Clear(false); // remove different non-standard movement generators. }