aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/DBCStores.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index 91e083e6e79..d9d5695cc94 100644
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -808,16 +808,26 @@ MapDifficulty const* GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &di
PvPDifficultyEntry const* GetBattlegroundBracketByLevel(uint32 mapid, uint32 level)
{
- // prevent out-of-range levels for dbc data
- if (level > DEFAULT_MAX_LEVEL)
- level = DEFAULT_MAX_LEVEL;
-
+ PvPDifficultyEntry const* maxEntry = NULL; // used for level > max listed level case
for (uint32 i = 0; i < sPvPDifficultyStore.GetNumRows(); ++i)
+ {
if (PvPDifficultyEntry const* entry = sPvPDifficultyStore.LookupEntry(i))
- if (entry->mapId == mapid && entry->minLevel <= level && entry->maxLevel >= level)
+ {
+ // skip unrelated and too-high brackets
+ if (entry->mapId != mapid || entry->minLevel > level)
+ continue;
+
+ // exactly fit
+ if (entry->maxLevel >= level)
return entry;
- return NULL;
+ // remember for possible out-of-range case (search higher from existed)
+ if (!maxEntry || maxEntry->maxLevel < entry->maxLevel)
+ maxEntry = entry;
+ }
+ }
+
+ return maxEntry;
}
PvPDifficultyEntry const* GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id)