Core/Packets: name and handle another field in BattlefieldRatedInfo and corrected reward amount calculation based on sniff research

This commit is contained in:
Ovahlord
2020-11-03 17:05:27 +01:00
parent ed77ee7443
commit a0313cf13e
3 changed files with 21 additions and 17 deletions

View File

@@ -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<int32>(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<int32>(baseReward, remainingConquestArena);
}
packet.Reward = std::min<int32>(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());

View File

@@ -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;

View File

@@ -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
};