aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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 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);
+ }
}
}