From a43f01c3519cf940ee6d64caf5c9be766e6eaef2 Mon Sep 17 00:00:00 2001 From: Yehonal <147092+Yehonal@users.noreply.github.com> Date: Tue, 14 Jul 2026 23:22:27 +0200 Subject: [PATCH] fix(Core/Instances): snapshot minions before state updates (#26519) --- src/server/game/Instances/InstanceScript.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index f4dec4454..ab0813234 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -398,6 +398,8 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) if (id < bosses.size()) { BossInfo* bossInfo = &bosses[id]; + MinionSet minions = bossInfo->minion; + sScriptMgr->OnBeforeSetBossState(id, state, bossInfo->state, instance); if (bossInfo->state == TO_BE_DECIDED) // loading { @@ -410,8 +412,8 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) return false; if (state == DONE) - for (MinionSet::iterator i = bossInfo->minion.begin(); i != bossInfo->minion.end(); ++i) - if ((*i)->isWorldBoss() && (*i)->IsAlive()) + for (Creature* minion : minions) + if (minion && minion->isWorldBoss() && minion->IsAlive()) return false; bossInfo->state = state; @@ -422,8 +424,9 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) for (DoorSet::iterator i = bossInfo->door[type].begin(); i != bossInfo->door[type].end(); ++i) UpdateDoorState(*i); - for (MinionSet::iterator i = bossInfo->minion.begin(); i != bossInfo->minion.end(); ++i) - UpdateMinionState(*i, state); + for (Creature* minion : minions) + if (minion) + UpdateMinionState(minion, state); return true; }