diff --git a/Source/Game/DungeonFinding/LFGManager.cs b/Source/Game/DungeonFinding/LFGManager.cs
index bb73e6724..088179804 100644
--- a/Source/Game/DungeonFinding/LFGManager.cs
+++ b/Source/Game/DungeonFinding/LFGManager.cs
@@ -1339,9 +1339,9 @@ namespace Game.DungeonFinding
/// Check if dungeon can be rewarded, if any.
///
/// Group guid
- /// DungeonEncounter that was just completed
+ /// DungeonEncounter that was just completed
/// Map of the instance where encounter was completed
- public void OnDungeonEncounterDone(ObjectGuid gguid, uint[] dungeonEncounterIds, Map currMap)
+ public void OnDungeonEncounterDone(ObjectGuid gguid, uint[] dungeonEncounters, Map currMap)
{
if (GetState(gguid) == LfgState.FinishedDungeon) // Shouldn't happen. Do not reward multiple times
{
@@ -1352,7 +1352,7 @@ namespace Game.DungeonFinding
uint gDungeonId = GetDungeon(gguid);
LFGDungeonData dungeonDone = GetLFGDungeon(gDungeonId);
// LFGDungeons can point to a DungeonEncounter from any difficulty so we need this kind of lenient check
- if (dungeonDone.finalDungeonEncounterId == 0 || !dungeonEncounterIds.Contains(dungeonDone.finalDungeonEncounterId))
+ if (dungeonDone.finalDungeonEncounterId == 0 || !dungeonEncounters.Contains(dungeonDone.finalDungeonEncounterId))
return;
FinishDungeon(gguid, gDungeonId, currMap);
diff --git a/Source/Game/Maps/Instances/InstanceScript.cs b/Source/Game/Maps/Instances/InstanceScript.cs
index 762c434ad..de24e91e1 100644
--- a/Source/Game/Maps/Instances/InstanceScript.cs
+++ b/Source/Game/Maps/Instances/InstanceScript.cs
@@ -138,8 +138,9 @@ namespace Game.Maps
void LoadDungeonEncounterData(uint bossId, uint[] dungeonEncounterIds)
{
if (bossId < bosses.Count)
- for (int i = 0; i < dungeonEncounterIds.Length && i < MapConst.MaxDungeonEncountersPerBoss; ++i)
- bosses[bossId].DungeonEncounters[i] = CliDB.DungeonEncounterStorage.LookupByKey(dungeonEncounterIds[i]);
+ for (int i = 0, j = 0; i < dungeonEncounterIds.Length && i < MapConst.MaxDungeonEncountersPerBoss; ++i)
+ if (dungeonEncounterIds[i] != 0)
+ bosses[bossId].DungeonEncounters[j++] = CliDB.DungeonEncounterStorage.LookupByKey(dungeonEncounterIds[i]);
}
public virtual void UpdateDoorState(GameObject door)
@@ -724,10 +725,9 @@ namespace Game.Maps
public bool IsEncounterCompleted(uint dungeonEncounterId)
{
- for (uint i = 0; i < bosses.Count; ++i)
- for (var j = 0; j < bosses[i].DungeonEncounters.Length; ++j)
- if (bosses[i].DungeonEncounters[j] != null && bosses[i].DungeonEncounters[j].Id == dungeonEncounterId)
- return bosses[i].state == EncounterState.Done;
+ foreach (var (_, boss) in bosses)
+ if (boss.DungeonEncounters.Any(p => p.Id == dungeonEncounterId))
+ return boss.state == EncounterState.Done;
return false;
}