From 60995d9a9312db007ab510f5d2ba806961cad361 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 4 Oct 2022 20:01:23 -0400 Subject: [PATCH] Core/Instances: Spawn defeated bosses in instances using loot based locks if their preceding bosses are not killed Port From (https://github.com/TrinityCore/TrinityCore/commit/ca5f7a15b9c2ca352f7f83ddc065d795f2294d98) --- Source/Game/Maps/Instances/InstanceScript.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Source/Game/Maps/Instances/InstanceScript.cs b/Source/Game/Maps/Instances/InstanceScript.cs index 300671070..ea0d61905 100644 --- a/Source/Game/Maps/Instances/InstanceScript.cs +++ b/Source/Game/Maps/Instances/InstanceScript.cs @@ -462,6 +462,12 @@ namespace Game.Maps InstanceScriptDataReader reader = new(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 (uint i = 0; i < bosses.Count; ++i) + if (bosses[i].state == EncounterState.Done && !CheckRequiredBosses(i)) + bosses[i].state = EncounterState.NotStarted; + UpdateSpawnGroups(); AfterDataLoad(); } @@ -715,6 +721,16 @@ namespace Game.Maps return false; } + public bool IsEncounterCompletedInMaskByBossId(uint completedEncountersMask, uint bossId) + { + DungeonEncounterRecord dungeonEncounter = GetBossDungeonEncounter(bossId); + if (dungeonEncounter != null) + if ((completedEncountersMask & (1 << dungeonEncounter.Bit)) != 0) + return bosses[bossId].state == EncounterState.Done; + + return false; + } + public void SetEntranceLocation(uint worldSafeLocationId) { _entranceId = worldSafeLocationId;