diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-08-15 16:06:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-10-04 00:19:38 +0200 |
commit | ca5f7a15b9c2ca352f7f83ddc065d795f2294d98 (patch) | |
tree | 7467903f938066ff24da38aada6a4550b8b2c1fb /src/server/game/Instances/InstanceScript.cpp | |
parent | 5a516fb6549e460e68b45005a17ec1b6217fefa5 (diff) |
Core/Instances: Spawn defeated bosses in instances using loot based locks if their preceding bosses are not killed
Diffstat (limited to 'src/server/game/Instances/InstanceScript.cpp')
-rw-r--r-- | src/server/game/Instances/InstanceScript.cpp | 15 |
1 files changed, 15 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; |