aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Drosdo.www <g1ran1q@gmail.com>2020-07-11 12:10:04 +0300
committerShauren <shauren.trinity@gmail.com>2022-01-22 16:00:49 +0100
commitb7353fb92795801c2c2a52035026e9e0059fa83d (patch)
tree72b070a7c48a4110f4c54064d68978730a29ca81
parent0bbdfc6112835396992473c940ae619598f64ec2 (diff)
Core/Player: Introduce separate level caps for each expansion (#24989)
(cherry picked from commit 352944266822f8c8d3bfdd6078c6f82d3555dd85)
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp19
2 files changed, 13 insertions, 8 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 7b25f151ee7..3104fe53936 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -3419,7 +3419,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
break;
}
case ModifierTreeType::PlayerIsAtMaxExpansionLevel: // 264
- if (referencePlayer->GetLevel() != GetMaxLevelForExpansion(sWorld->getIntConfig(CONFIG_EXPANSION)))
+ if (!referencePlayer->IsMaxLevel())
return false;
break;
case ModifierTreeType::TransmogSource: // 265
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 6ca3a8bb404..bdc8b61858b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2267,7 +2267,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
sScriptMgr->OnGivePlayerXP(this, xp, victim);
// XP to money conversion processed in Player::RewardQuest
- if (level >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (IsMaxLevel())
return;
uint32 bonus_xp;
@@ -2291,11 +2291,11 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
uint32 nextLvlXP = GetXPForNextLevel();
uint32 newXP = GetXP() + xp + bonus_xp;
- while (newXP >= nextLvlXP && level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ while (newXP >= nextLvlXP && !IsMaxLevel())
{
newXP -= nextLvlXP;
- if (level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!IsMaxLevel())
GiveLevel(level + 1);
level = GetLevel();
@@ -2449,7 +2449,12 @@ void Player::InitStatsForLevel(bool reapplyMods)
PlayerLevelInfo info;
sObjectMgr->GetPlayerLevelInfo(GetRace(), GetClass(), GetLevel(), &info);
- SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MaxLevel), sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL));
+ uint8 exp_max_lvl = GetMaxLevelForExpansion(GetSession()->GetExpansion());
+ uint8 conf_max_lvl = sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
+ if (exp_max_lvl == DEFAULT_MAX_LEVEL || exp_max_lvl >= conf_max_lvl)
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MaxLevel), conf_max_lvl);
+ else
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MaxLevel), exp_max_lvl);
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NextLevelXP), sObjectMgr->GetXPForLevel(GetLevel()));
if (m_activePlayerData->XP >= m_activePlayerData->NextLevelXP)
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::XP), m_activePlayerData->NextLevelXP - 1);
@@ -6204,7 +6209,7 @@ void Player::CheckAreaExploreAndOutdoor()
if (Optional<ContentTuningLevels> areaLevels = sDB2Manager.GetContentTuningData(areaEntry->ContentTuningID, m_playerData->CtrOptions->ContentTuningConditionMask))
{
- if (GetLevel() >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (IsMaxLevel())
{
SendExplorationExperience(areaId, 0);
}
@@ -15725,7 +15730,7 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew
uint32 XP = GetQuestXPReward(quest);
int32 moneyRew = 0;
- if (GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!IsMaxLevel())
GiveXP(XP, nullptr);
else
moneyRew = int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY));
@@ -17392,7 +17397,7 @@ void Player::SendQuestReward(Quest const* quest, Creature const* questGiver, uin
uint32 moneyReward;
- if (GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!IsMaxLevel())
{
moneyReward = GetQuestMoneyReward(quest);
}