diff options
| author | Shauren <shauren.trinity@gmail.com> | 2016-02-02 19:13:04 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-02-02 19:13:04 +0100 |
| commit | db0b8bf24e2b8eb87e6aed7b031ebe138717403d (patch) | |
| tree | 0bc958e6328df57af2072d412f129163bb536d66 /src/server/game/Achievements/AchievementMgr.cpp | |
| parent | 46addc21cda6efa706ee454596b5ccae9b2e69d2 (diff) | |
Core/Maps: Changed the way area data is stored in maps, it now uses ID field from AreaTable.dbc instead AreaBit used for exploration marker (and is not unique anymore on top of simply being stupidly confusing)
Note: Extracting maps is required
Diffstat (limited to 'src/server/game/Achievements/AchievementMgr.cpp')
| -rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 7c9739217d2..6462c89a694 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2275,17 +2275,18 @@ bool AchievementMgr<T>::RequirementsSatisfied(AchievementCriteria const* achieve bool matchFound = false; for (int j = 0; j < MAX_WORLD_MAP_OVERLAY_AREA_IDX; ++j) { - uint32 area_id = worldOverlayEntry->AreaID[j]; - if (!area_id) // array have 0 only in empty tail + AreaTableEntry const* area = sAreaTableStore.LookupEntry(worldOverlayEntry->AreaID[j]); + if (!area) break; - int32 exploreFlag = GetAreaFlagByAreaID(area_id); - if (exploreFlag < 0) + if (area->AreaBit < 0) continue; - uint32 playerIndexOffset = uint32(exploreFlag) / 32; - uint32 mask = 1 << (uint32(exploreFlag) % 32); + uint32 playerIndexOffset = uint32(area->AreaBit) / 32; + if (playerIndexOffset >= PLAYER_EXPLORED_ZONES_SIZE) + continue; + uint32 mask = 1 << (uint32(area->AreaBit) % 32); if (referencePlayer->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + playerIndexOffset) & mask) { matchFound = true; |
