From a0313cf13e5b60cf68eafff3cef0aab6cace19ba Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Tue, 3 Nov 2020 17:05:27 +0100 Subject: [PATCH] Core/Packets: name and handle another field in BattlefieldRatedInfo and corrected reward amount calculation based on sniff research --- .../game/Handlers/BattleGroundHandler.cpp | 31 ++++++++++--------- .../Server/Packets/BattlegroundPackets.cpp | 6 ++-- .../game/Server/Packets/BattlegroundPackets.h | 1 + 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 3899a63e99e..4708202d5c2 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -813,25 +813,28 @@ void WorldSession::HandleRequestRatedBgInfo(WorldPacket & recvData) WorldPackets::Battleground::BattlefieldRatedInfo packet; packet.Mode = mode; - switch (mode) + int32 baseReward = 0; + int32 remainingConquest = _player->GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_POINTS, true) - _player->GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_POINTS, true); + + if (mode == 3) { - case 0: // Arena 2v2 - case 1: // Arena 3v3 - case 2: // Arena 5v5 - packet.Reward = sWorld->getIntConfig(CONFIG_CURRENCY_CONQUEST_POINTS_ARENA_REWARD) / CURRENCY_PRECISION; - break; - case 3: // Rated Battlegrounds - packet.Reward = sWorld->getIntConfig(CONFIG_RATED_BATTLEGROUND_REWARD) / CURRENCY_PRECISION; - packet.RatedMaxRewardPointsThisWeek = _player->GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_META_RBG, true); - packet.PersonalRating = 0; // Todo: implement - break; - default: - TC_LOG_ERROR("bg.battleground", "WorldSession::HandleRequestRatedBgInfo: Player %s tried to request rated BG infos for a invalid game mode (%u). Possible cheater.", _player->GetGUID().ToString().c_str(), mode); - return; + baseReward = sWorld->getIntConfig(CONFIG_RATED_BATTLEGROUND_REWARD) / CURRENCY_PRECISION; + int32 remainingConquestRBG = _player->GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_META_RBG, true) - _player->GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_META_RBG, true); + baseReward = std::min(baseReward, remainingConquestRBG); + } + else + { + baseReward = sWorld->getIntConfig(CONFIG_CURRENCY_CONQUEST_POINTS_ARENA_REWARD) / CURRENCY_PRECISION; + int32 remainingConquestArena = _player->GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_META_ARENA, true) - _player->GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_META_ARENA, true); + baseReward = std::min(baseReward, remainingConquestArena); } + packet.Reward = std::min(baseReward, remainingConquest); + packet.RatedMaxRewardPointsThisWeek = _player->GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_META_RBG, true); packet.MaxRewardPointsThisWeek = _player->GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_POINTS, true); packet.RewardPointsThisWeek = _player->GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_POINTS, true); + packet.RatedRewardPointsThisWeek = _player->GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_META_RBG, true); + packet.PersonalRating = 0; // Todo: implement SendPacket(packet.Write()); diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 188d530ee19..f117aa4c554 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -58,9 +58,9 @@ WorldPacket const* WorldPackets::Battleground::BattlefieldRatedInfo::Write() _worldPacket << int8(Mode); _worldPacket << int32(PersonalRating); _worldPacket << int32(RewardPointsThisWeek); - _worldPacket << int32(RatedMaxRewardPointsThisWeek); // this and MaxRewardPointsThisWeek are weekly conquest limits but not sure which one is for rated BGs - _worldPacket << int32(0); - _worldPacket << int32(0); + _worldPacket << int32(RatedMaxRewardPointsThisWeek); // this and MaxRewardPointsThisWeek are weekly conquest limits but not sure which one is for rated BGs + _worldPacket << int32(RatedRewardPointsThisWeek); + _worldPacket << int32(0); // values are being sent in in sniffs but this filed is unused in the client and interface code _worldPacket << int32(MaxRewardPointsThisWeek); return &_worldPacket; diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 7faf58ddcca..0767d531549 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -69,6 +69,7 @@ namespace WorldPackets int32 RatedMaxRewardPointsThisWeek = 0; int32 MaxRewardPointsThisWeek = 0; int32 RewardPointsThisWeek = 0; + int32 RatedRewardPointsThisWeek = 0; int8 Mode = 0; // 0 = arena 2v2, 1 = arena 3v3, 2 = arena 5v5, 3 = rated battleground };