fix(Core/Instances): snapshot minions before state updates (#26519)

This commit is contained in:
Yehonal
2026-07-14 23:22:27 +02:00
committed by GitHub
parent e7823750f9
commit a43f01c351

View File

@@ -398,6 +398,8 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state)
if (id < bosses.size()) if (id < bosses.size())
{ {
BossInfo* bossInfo = &bosses[id]; BossInfo* bossInfo = &bosses[id];
MinionSet minions = bossInfo->minion;
sScriptMgr->OnBeforeSetBossState(id, state, bossInfo->state, instance); sScriptMgr->OnBeforeSetBossState(id, state, bossInfo->state, instance);
if (bossInfo->state == TO_BE_DECIDED) // loading if (bossInfo->state == TO_BE_DECIDED) // loading
{ {
@@ -410,8 +412,8 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state)
return false; return false;
if (state == DONE) if (state == DONE)
for (MinionSet::iterator i = bossInfo->minion.begin(); i != bossInfo->minion.end(); ++i) for (Creature* minion : minions)
if ((*i)->isWorldBoss() && (*i)->IsAlive()) if (minion && minion->isWorldBoss() && minion->IsAlive())
return false; return false;
bossInfo->state = state; 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) for (DoorSet::iterator i = bossInfo->door[type].begin(); i != bossInfo->door[type].end(); ++i)
UpdateDoorState(*i); UpdateDoorState(*i);
for (MinionSet::iterator i = bossInfo->minion.begin(); i != bossInfo->minion.end(); ++i) for (Creature* minion : minions)
UpdateMinionState(*i, state); if (minion)
UpdateMinionState(minion, state);
return true; return true;
} }