diff options
-rw-r--r-- | src/server/game/Instances/InstanceScript.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Instances/InstanceScript.h | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index fd3d16a2772..2494c4852af 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -477,6 +477,12 @@ void InstanceScript::Load(char const* data) InstanceScriptDataReader reader(*this); if (reader.Load(data) == InstanceScriptDataReader::Result::Ok) { + // in loot-based lockouts instance can be loaded with later boss marked as killed without preceding bosses + // but we still need to have them alive + for (uint32 i = 0; i < bosses.size(); ++i) + if (bosses[i].state == DONE && !CheckRequiredBosses(i)) + bosses[i].state = NOT_STARTED; + UpdateSpawnGroups(); AfterDataLoad(); } @@ -740,6 +746,15 @@ bool InstanceScript::IsEncounterCompleted(uint32 dungeonEncounterId) const return false; } +bool InstanceScript::IsEncounterCompletedInMaskByBossId(uint32 completedEncountersMask, uint32 bossId) const +{ + if (DungeonEncounterEntry const* dungeonEncounter = GetBossDungeonEncounter(bossId)) + if (completedEncountersMask & (1 << dungeonEncounter->Bit)) + return bosses[bossId].state == DONE; + + return false; +} + void InstanceScript::SetEntranceLocation(uint32 worldSafeLocationId) { _entranceId = worldSafeLocationId; diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index b7a2e2fc15e..0e44521dcb0 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -287,6 +287,7 @@ class TC_GAME_API InstanceScript : public ZoneScript uint32 GetCompletedEncounterMask() const { return completedEncounters; } bool IsEncounterCompleted(uint32 dungeonEncounterId) const; + bool IsEncounterCompletedInMaskByBossId(uint32 completedEncountersMask, uint32 bossId) const; uint32 GetEncounterCount() const { return uint32(bosses.size()); } |