aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2023-11-17 11:06:12 +0100
committerOvahlord <dreadkiller@gmx.de>2023-11-17 11:06:12 +0100
commit7131bb4ad17b0e61b3ea1a9b44ea68339105f51b (patch)
tree135bea83683a167b301bac899945aec9770b0ed2
parentc6da9cb0f60d44be87b251e5532e672a19285237 (diff)
Core/Players: restore exploration experience handling
-rw-r--r--src/server/game/Entities/Player/Player.cpp33
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 e48c95d89ad..17c4ad7c363 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -6333,6 +6333,39 @@ void Player::CheckAreaExploreAndOutdoor()
SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, 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);
+ }
}
}