aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp26
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Handlers/ArenaTeamHandler.cpp2
-rw-r--r--src/server/game/Handlers/PetitionsHandler.cpp6
-rw-r--r--src/server/game/Quests/QuestDef.cpp2
-rw-r--r--src/server/shared/SharedDefines.h3
6 files changed, 26 insertions, 14 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 70360d82ea7..bfd4b0c636e 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2536,7 +2536,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;
@@ -2553,11 +2553,11 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
uint32 nextLvlXP = GetUInt32Value(PLAYER_NEXT_LEVEL_XP);
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();
@@ -2665,6 +2665,11 @@ void Player::GiveLevel(uint8 level)
sScriptMgr->OnPlayerLevelChanged(this, oldLevel);
}
+bool Player::IsMaxLevel() const
+{
+ return GetLevel() >= GetUInt32Value(PLAYER_FIELD_MAX_LEVEL);
+}
+
void Player::InitTalentForLevel()
{
uint8 level = GetLevel();
@@ -2716,7 +2721,12 @@ void Player::InitStatsForLevel(bool reapplyMods)
PlayerLevelInfo info;
sObjectMgr->GetPlayerLevelInfo(GetRace(), GetClass(), GetLevel(), &info);
- SetUInt32Value(PLAYER_FIELD_MAX_LEVEL, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL));
+ uint8 exp_max_lvl = GetMaxLevelForExpansion(GetSession()->Expansion());
+ uint8 conf_max_lvl = sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
+ if (exp_max_lvl == DEFAULT_MAX_LEVEL || exp_max_lvl >= conf_max_lvl)
+ SetUInt32Value(PLAYER_FIELD_MAX_LEVEL, conf_max_lvl);
+ else
+ SetUInt32Value(PLAYER_FIELD_MAX_LEVEL, exp_max_lvl);
SetUInt32Value(PLAYER_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(GetLevel()));
// reset before any aura state sources (health set/aura apply)
@@ -6447,7 +6457,7 @@ void Player::CheckAreaExploreAndOutdoor()
if (areaEntry->area_level > 0)
{
- if (GetLevel() >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (IsMaxLevel())
{
SendExplorationExperience(areaId, 0);
}
@@ -15196,7 +15206,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
// handle SPELL_AURA_MOD_XP_QUEST_PCT auras
XP *= GetTotalAuraMultiplier(SPELL_AURA_MOD_XP_QUEST_PCT);
- if (GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!IsMaxLevel())
GiveXP(XP, nullptr);
// Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative
@@ -16804,7 +16814,7 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP) const
WorldPacket data(SMSG_QUESTGIVER_QUEST_COMPLETE, (4+4+4+4+4));
data << uint32(questid);
- if (GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!IsMaxLevel())
data << uint32(XP);
else
data << uint32(0);
@@ -21265,7 +21275,7 @@ void Player::LeaveAllArenaTeams(ObjectGuid guid)
void Player::SetRestBonus(float rest_bonus_new)
{
// Prevent resting on max level
- if (GetLevel() >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (IsMaxLevel())
rest_bonus_new = 0;
if (rest_bonus_new < 0)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 9fc1281158d..6cbe23394f1 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -969,6 +969,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SetXP(uint32 xp) { SetUInt32Value(PLAYER_XP, xp); }
void GiveXP(uint32 xp, Unit* victim, float group_rate = 1.0f);
void GiveLevel(uint8 level);
+ bool IsMaxLevel() const;
void InitStatsForLevel(bool reapplyMods = false);
diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp
index c31a0ec843f..862e0a9d5fd 100644
--- a/src/server/game/Handlers/ArenaTeamHandler.cpp
+++ b/src/server/game/Handlers/ArenaTeamHandler.cpp
@@ -108,7 +108,7 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData)
return;
}
- if (player->GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!player->IsMaxLevel())
{
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", player->GetName(), ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
return;
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp
index 19a7063164a..6f64c620392 100644
--- a/src/server/game/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Handlers/PetitionsHandler.cpp
@@ -107,7 +107,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
else
{
/// @todo find correct opcode
- if (_player->GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!_player->IsMaxLevel())
{
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", _player->GetName(), ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
return;
@@ -416,7 +416,7 @@ void WorldSession::HandleSignPetition(WorldPacket& recvData)
if (type != GUILD_CHARTER_TYPE)
{
- if (_player->GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!_player->IsMaxLevel())
{
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", _player->GetName(), ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
return;
@@ -544,7 +544,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData)
if (type != GUILD_CHARTER_TYPE)
{
- if (player->GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!player->IsMaxLevel())
{
// player is too low level to join an arena team
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, player->GetName(), "", ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index d4a2b25ad04..7170597cfa8 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -242,7 +242,7 @@ int32 Quest::GetRewOrReqMoney(Player const* player) const
return _rewardMoney;
// RewardMoney: the positive amount
- if (!player || player->GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ if (!player || !player->IsMaxLevel())
return int32(_rewardMoney * sWorld->getRate(RATE_MONEY_QUEST));
else // At level cap, the money reward is the maximum amount between normal and bonus money reward
return std::max(int32(GetRewMoneyMaxLevel()), int32(_rewardMoney * sWorld->getRate(RATE_MONEY_QUEST)));
diff --git a/src/server/shared/SharedDefines.h b/src/server/shared/SharedDefines.h
index 4e0c560b2ff..ab4265d087d 100644
--- a/src/server/shared/SharedDefines.h
+++ b/src/server/shared/SharedDefines.h
@@ -18,6 +18,7 @@
#ifndef TRINITY_SHAREDDEFINES_H
#define TRINITY_SHAREDDEFINES_H
+#include "DBCEnums.h"
#include "Define.h"
#include "DetourNavMesh.h"
#include "SmartEnum.h"
@@ -67,7 +68,7 @@ inline uint32 GetMaxLevelForExpansion(uint32 expansion)
default:
break;
}
- return 0;
+ return DEFAULT_MAX_LEVEL;
}
enum Gender