diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 26 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Handlers/ArenaTeamHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/PetitionsHandler.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.cpp | 2 | ||||
-rw-r--r-- | src/server/shared/SharedDefines.h | 3 |
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 |