diff options
author | Ovahlord <dreadkiller@gmx.de> | 2023-11-17 11:06:12 +0100 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-06-15 04:05:43 +0200 |
commit | f5bdd03ae1eba578c47498295fbee9c60650c3f9 (patch) | |
tree | 19401b905e6da005a583e3c7d2c0f1c4c7bc843e /src | |
parent | 9cc6dcd37953a0d4e3e4915976af00d7645d0ead (diff) |
Core/Players: restore exploration experience handling
(cherry picked from commit 7131bb4ad17b0e61b3ea1a9b44ea68339105f51b)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 70378c1a60c..7730dd5824b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6237,6 +6237,39 @@ void Player::CheckAreaExplore() AddExploredZones(offset, val); UpdateCriteria(CriteriaType::RevealWorldMapOverlay, GetAreaId()); + + if (areaEntry->ExplorationLevel > 0) + { + if (IsMaxLevel()) + SendExplorationExperience(areaId, 0); + else + { + int32 diff = int32(GetLevel()) - areaEntry->ExplorationLevel; + uint32 XP; + if (diff < -5) + XP = uint32(sObjectMgr->GetBaseXP(GetLevel() + 5) * sWorld->getRate(RATE_XP_EXPLORE)); + else if (diff > 5) + { + int32 exploration_percent = 100 - ((diff - 5) * 5); + if (exploration_percent < 0) + exploration_percent = 0; + + XP = uint32(sObjectMgr->GetBaseXP(areaEntry->ExplorationLevel) * exploration_percent / 100 * sWorld->getRate(RATE_XP_EXPLORE)); + } + else + XP = uint32(sObjectMgr->GetBaseXP(areaEntry->ExplorationLevel) * sWorld->getRate(RATE_XP_EXPLORE)); + + if (sWorld->getIntConfig(CONFIG_MIN_DISCOVERED_SCALED_XP_RATIO)) + { + uint32 minScaledXP = uint32(sObjectMgr->GetBaseXP(areaEntry->ExplorationLevel) * sWorld->getRate(RATE_XP_EXPLORE)) * sWorld->getIntConfig(CONFIG_MIN_DISCOVERED_SCALED_XP_RATIO) / 100; + XP = std::max(minScaledXP, XP); + } + + GiveXP(XP, nullptr); + SendExplorationExperience(areaId, XP); + } + TC_LOG_DEBUG("entities.player", "Player '{}' ({}) discovered a new area: {}", GetName(), GetGUID().ToString(), areaId); + } } } |