diff options
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateField.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 6 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 8 |
7 files changed, 21 insertions, 18 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 92390429997..02be080a4a7 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -1526,11 +1526,11 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis if (area->AreaBit < 0) continue; - uint16 playerIndexOffset = uint16(uint32(area->AreaBit) / 64); + size_t playerIndexOffset = size_t(area->AreaBit) / PLAYER_EXPLORED_ZONES_BITS; if (playerIndexOffset >= PLAYER_EXPLORED_ZONES_SIZE) continue; - uint64 mask = uint64(1) << (area->AreaBit % 64); + uint64 mask = uint64(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS); if (referencePlayer->m_activePlayerData->ExploredZones[playerIndexOffset] & mask) { matchFound = true; @@ -2271,10 +2271,10 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 return false; if (areaTable->AreaBit <= 0) break; // success - uint32 playerIndexOffset = uint32(areaTable->AreaBit) / 64; + size_t playerIndexOffset = size_t(areaTable->AreaBit) / PLAYER_EXPLORED_ZONES_BITS; if (playerIndexOffset >= PLAYER_EXPLORED_ZONES_SIZE) break; - if (!(referencePlayer->m_activePlayerData->ExploredZones[playerIndexOffset] & (UI64LIT(1) << (areaTable->AreaBit % 64)))) + if (!(referencePlayer->m_activePlayerData->ExploredZones[playerIndexOffset] & (UI64LIT(1) << (areaTable->AreaBit % PLAYER_EXPLORED_ZONES_BITS)))) return false; break; } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index bdb20ae9ba8..c0be07a60d9 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -3179,7 +3179,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio { for (std::size_t i = 0; i < condition->Explored.size(); ++i) if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(condition->Explored[i])) - if (area->AreaBit != -1 && !(player->m_activePlayerData->ExploredZones[area->AreaBit / 64] & (UI64LIT(1) << (uint32(area->AreaBit) % 64)))) + if (area->AreaBit != -1 && !(player->m_activePlayerData->ExploredZones[area->AreaBit / PLAYER_EXPLORED_ZONES_BITS] & (UI64LIT(1) << (uint32(area->AreaBit) % PLAYER_EXPLORED_ZONES_BITS)))) return false; } diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h index 877c2b72ec8..9ad32f62d78 100644 --- a/src/server/game/Entities/Object/Updates/UpdateField.h +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -751,7 +751,7 @@ namespace UF return std::end(_values); } - std::size_t size() const + constexpr std::size_t size() const { return Size; } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1a5bcf8156e..96f375f3590 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6216,7 +6216,7 @@ void Player::CheckAreaExploreAndOutdoor() return; } - uint32 offset = areaEntry->AreaBit / 64; + uint32 offset = areaEntry->AreaBit / PLAYER_EXPLORED_ZONES_BITS; if (offset >= PLAYER_EXPLORED_ZONES_SIZE) { @@ -6225,7 +6225,7 @@ void Player::CheckAreaExploreAndOutdoor() return; } - uint64 val = UI64LIT(1) << (areaEntry->AreaBit % 64); + uint64 val = UI64LIT(1) << (areaEntry->AreaBit % PLAYER_EXPLORED_ZONES_BITS); uint64 currFields = m_activePlayerData->ExploredZones[offset]; if (!(currFields & val)) @@ -17419,9 +17419,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol SetXP(fields.xp); std::vector<std::string_view> exploredZones = Trinity::Tokenize(fields.exploredZones, ' ', false); - if (exploredZones.size() == PLAYER_EXPLORED_ZONES_SIZE * 2) - for (std::size_t i = 0; i < exploredZones.size(); ++i) - SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, i / 2), + for (std::size_t i = 0; i < exploredZones.size() && i / 2 < PLAYER_EXPLORED_ZONES_SIZE; ++i) + SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, i / 2), Trinity::StringTo<uint64>(exploredZones[i]).value_or(UI64LIT(0)) << (32 * (i % 2))); std::vector<std::string_view> knownTitles = Trinity::Tokenize(fields.knownTitles, ' ', false); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index d12f15ce881..228af299a99 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -141,7 +141,11 @@ enum SkillFieldOffset : uint16 SKILL_PERM_BONUS_OFFSET = SKILL_TEMP_BONUS_OFFSET + CalculateSkillFieldArraySize<uint16>() }; -#define PLAYER_EXPLORED_ZONES_SIZE 192 +enum PlayerExplorationConstants +{ + PLAYER_EXPLORED_ZONES_SIZE = decltype(UF::ActivePlayerData::ExploredZones){}.size(), + PLAYER_EXPLORED_ZONES_BITS = sizeof(decltype(UF::ActivePlayerData::ExploredZones)::value_type) * 8 +}; enum SpellModType : uint8 { diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 214e6aefcaa..57ccbefaf6a 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1301,8 +1301,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder) // start with every map explored if (sWorld->getBoolConfig(CONFIG_START_ALL_EXPLORED)) { - for (uint16 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) - pCurrChar->SetUpdateFieldValue(pCurrChar->m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, i), UI64LIT(0xFFFFFFFFFFFFFFFF)); + for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) + pCurrChar->AddExploredZones(i, UI64LIT(0xFFFFFFFFFFFFFFFF)); } // Max relevant reputations if "StartAllReputation" is enabled diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index cf9d34bfa1c..ceec104b317 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1127,7 +1127,7 @@ public: return false; } - uint32 offset = area->AreaBit / 64; + uint32 offset = area->AreaBit / PLAYER_EXPLORED_ZONES_BITS; if (offset >= PLAYER_EXPLORED_ZONES_SIZE) { handler->SendSysMessage(LANG_BAD_VALUE); @@ -1135,7 +1135,7 @@ public: return false; } - uint64 val = UI64LIT(1) << (area->AreaBit % 64); + uint64 val = UI64LIT(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS); playerTarget->AddExploredZones(offset, val); handler->SendSysMessage(LANG_EXPLORE_AREA); @@ -1167,7 +1167,7 @@ public: return false; } - uint32 offset = area->AreaBit / 64; + uint32 offset = area->AreaBit / PLAYER_EXPLORED_ZONES_BITS; if (offset >= PLAYER_EXPLORED_ZONES_SIZE) { handler->SendSysMessage(LANG_BAD_VALUE); @@ -1175,7 +1175,7 @@ public: return false; } - uint64 val = UI64LIT(1) << (area->AreaBit % 64); + uint64 val = UI64LIT(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS); playerTarget->RemoveExploredZones(offset, val); handler->SendSysMessage(LANG_UNEXPLORE_AREA); |