From 6202835cff40a47658d14a15d6ebb33e2159b1a4 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Wed, 3 Jan 2024 19:47:26 +0100 Subject: [PATCH] fix(Core/LFG): Hide XP from max players (#18103) * Cherry-pick Player::IsMaxLevel from TrinityCore * Correctly hide XP reward for max level players in LFG * Closes #18101 --- src/server/game/Entities/Player/Player.cpp | 5 +++++ src/server/game/Entities/Player/Player.h | 1 + src/server/game/Entities/Player/PlayerQuest.cpp | 2 +- src/server/game/Handlers/LFGHandler.cpp | 5 ++++- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a04616cbe..5364e98d2 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2524,6 +2524,11 @@ void Player::GiveLevel(uint8 level) sScriptMgr->OnPlayerLevelChanged(this, oldLevel); } +bool Player::IsMaxLevel() const +{ + return GetLevel() >= GetUInt32Value(PLAYER_FIELD_MAX_LEVEL); +} + void Player::InitTalentForLevel() { uint32 talentPointsForLevel = CalculateTalentsPoints(); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e5606b037..48474ce99 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1686,6 +1686,7 @@ public: void SetFreeTalentPoints(uint32 points); bool resetTalents(bool noResetCost = false); [[nodiscard]] uint32 resetTalentsCost() const; + bool IsMaxLevel() const; void InitTalentForLevel(); void BuildPlayerTalentsInfoData(WorldPacket* data); void BuildPetTalentsInfoData(WorldPacket* data); diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index 659e84c72..ea7a0b2a9 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -2348,7 +2348,7 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP) 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); data << uint32(quest->GetRewOrReqMoney(GetLevel())); diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index a78b88644..4599347f8 100644 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -188,7 +188,10 @@ void WorldSession::HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& /*recvData* uint8 playerLevel = GetPlayer() ? GetPlayer()->GetLevel() : 0; data << uint8(done); data << uint32(quest->GetRewOrReqMoney(playerLevel)); - data << uint32(quest->XPValue(playerLevel)); + if (!GetPlayer()->IsMaxLevel()) + data << uint32(quest->XPValue(playerLevel)); + else + data << uint32(0); data << uint32(0); data << uint32(0); data << uint8(quest->GetRewItemsCount());