mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 15:58:04 +00:00
fix(Core/Instances): snapshot minions before state updates (#26519)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user