Core/LFG: Fix dungeon level restrictions when entrance triggers are m… - #185
Merged
Conversation
CDBrodie
marked this pull request as draft
August 11, 2026 15:14
CDBrodie
marked this pull request as ready for review
August 11, 2026 15:16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes Proposed
This PR fixes an issue in the Dungeon Finder where certain dungeons were incorrectly presented as available to players who did not meet their level requirements.
The issue was traced to
LFGMgr::LoadLFGDungeons(), where dungeons without valid teleport coordinates or a corresponding map entrance trigger were excluded from the LFG dungeon cache entirely.Because these dungeons were absent from the cache, the existing eligibility checks in
LFGMgr::GetLockedDungeons()never evaluated them and therefore never reported the appropriate lock status to the client.This PR changes that behavior so that missing teleport information does not prevent a dungeon from participating in normal LFG eligibility processing.
Issue
Dungeon Finder correctly becomes available to players at level 15.
However, testing with a level 15 character showed that the Dungeon Finder was presenting high-level Battle for Azeroth dungeons alongside the appropriate low-level dungeons.
For example, a level 15 character was presented with:
Deadmines and Ragefire Chasm are appropriate for the character.
Siege of Boralus and Kings' Rest should not be available to a level 15 character.
The issue was therefore not the level at which Dungeon Finder becomes available. The problem was that the server was failing to report some level-inappropriate dungeons as locked.
Investigation
The first possibility investigated was incorrect dungeon level data.
This was ruled out.
Debugging confirmed that HavenCore was loading the correct level requirements for the affected dungeons.
Siege of Boralus
Kings' Rest
The existing level filtering in
LFGMgr::GetLockedDungeons()was also inspected.HavenCore already contains the correct checks:
Therefore, the problem was not the level comparison itself.
Additional debugging was added to determine which dungeons were actually reaching
GetLockedDungeons().This revealed that Siege of Boralus and Kings' Rest were never being evaluated by
GetLockedDungeons()at all.The problem was then traced back to
LFGMgr::LoadLFGDungeons().Root Cause
During
LoadLFGDungeons(), HavenCore attempts to populate missing teleport coordinates for non-random dungeons using their map entrance AreaTrigger.The previous logic was effectively:
If a dungeon:
lfg_dungeon_template, andthe loader executed
continue.The problem is that the dungeon was added to the LFG cache after this block.
The relevant cache population occurs later:
As a result, executing
continuedid much more than skip teleport-coordinate initialization.It prevented the dungeon from being inserted into the LFG cache entirely.
Resulting Failure
This created the following sequence:
LFGDungeonsrecord.LoadLFGDungeons()executescontinue.CachedDungeonMapStore.GetLockedDungeons()never evaluates the dungeon.LFG_LOCKSTATUS_TOO_LOW_LEVELresult is generated.This explains why the client could correctly display:
while still allowing them to appear as available to a level 15 character.
The level information itself was correct.
The server simply never evaluated those dungeons when constructing the player's lock information.
Fix
The fix separates two independent concerns:
A missing entrance trigger should prevent automatic coordinate initialization, but it should not remove the dungeon from the LFG cache.
The updated logic attempts to obtain the entrance trigger:
If an entrance trigger exists, its destination information is applied as before.
If no entrance trigger exists, coordinate assignment is skipped, but processing of the dungeon continues.
The dungeon therefore still reaches:
This allows
GetLockedDungeons()to evaluate the dungeon normally.Behavior After Fix
The processing path is now:
Teleport availability and LFG eligibility are therefore no longer incorrectly coupled.
Testing
Testing was performed using a level 15 character.
Before Fix
The Dungeon Finder displayed:
Debugging confirmed that Siege of Boralus and Kings' Rest were being skipped during
LoadLFGDungeons()because HavenCore could not find map entrance triggers for them.They consequently never reached the existing level checks in
GetLockedDungeons().After Fix
Using the same level 15 character:
The existing minimum/maximum level filtering now correctly handles the affected dungeons.
The fix was successfully compiled and tested in-game.
Scope of Fix
This is intentionally a generalized fix rather than a workaround for Siege of Boralus and Kings' Rest.
Debugging showed that many LFG entries can encounter the missing-entrance-trigger path.
The previous behavior potentially prevented any such dungeon from participating in the normal LFG lock-status calculation.
This PR therefore does not:
Instead, it corrects the underlying LFG cache construction so the existing eligibility system can perform its intended checks.
Teleport Data
This PR does not attempt to repair missing dungeon teleport coordinates or missing AreaTrigger data.
A dungeon without valid teleport information may still require a separate data fix before HavenCore can correctly teleport a group into that instance.
This PR specifically fixes the incorrect behavior where missing teleport information also prevented the dungeon from participating in LFG eligibility and lock-status processing.
Missing teleport data and player eligibility are separate issues and should be handled independently.
Files Changed
No other core files are required for this fix.
Database Changes
None.
Client Changes
None.
Summary
Previously:
After this PR:
This preserves the existing LFG eligibility implementation while ensuring that missing teleport data cannot bypass it.