From 43c3f3a235925475075bb4e1776aac04026b6e8c Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 11 Aug 2016 13:00:31 +0200 Subject: Core/Arena: Teams don't lose rating after arena draw (#17515) By Raydor, closes #16865 --- src/server/game/Battlegrounds/Arena.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp index 1ccf3107a00..0fc58c59287 100644 --- a/src/server/game/Battlegrounds/Arena.cpp +++ b/src/server/game/Battlegrounds/Arena.cpp @@ -142,15 +142,19 @@ void Arena::EndBattleground(uint32 winner) int32 winnerChange = 0; int32 winnerMatchmakerChange = 0; - ArenaTeam* winnerArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(winner)); - ArenaTeam* loserArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(winner))); + // In case of arena draw, follow this logic: + // winnerArenaTeam => ALLIANCE, loserArenaTeam => HORDE + ArenaTeam* winnerArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(winner == 0 ? ALLIANCE : winner)); + ArenaTeam* loserArenaTeam = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(winner == 0 ? HORDE : GetOtherTeam(winner))); if (winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam) { + // In case of arena draw, follow this logic: + // winnerMatchmakerRating => ALLIANCE, loserMatchmakerRating => HORDE loserTeamRating = loserArenaTeam->GetRating(); - loserMatchmakerRating = GetArenaMatchmakerRating(GetOtherTeam(winner)); + loserMatchmakerRating = GetArenaMatchmakerRating(winner == 0 ? HORDE : GetOtherTeam(winner)); winnerTeamRating = winnerArenaTeam->GetRating(); - winnerMatchmakerRating = GetArenaMatchmakerRating(winner); + winnerMatchmakerRating = GetArenaMatchmakerRating(winner == 0 ? ALLIANCE : winner); if (winner != 0) { @@ -206,7 +210,12 @@ void Arena::EndBattleground(uint32 winner) if (team == winner) winnerArenaTeam->OfflineMemberLost(i.first, loserMatchmakerRating, winnerMatchmakerChange); else + { + if (winner == 0) + winnerArenaTeam->OfflineMemberLost(i.first, loserMatchmakerRating, winnerMatchmakerChange); + loserArenaTeam->OfflineMemberLost(i.first, winnerMatchmakerRating, loserMatchmakerChange); + } continue; } @@ -230,6 +239,9 @@ void Arena::EndBattleground(uint32 winner) } else { + if (winner == 0) + winnerArenaTeam->MemberLost(player, loserMatchmakerRating, winnerMatchmakerChange); + loserArenaTeam->MemberLost(player, winnerMatchmakerRating, loserMatchmakerChange); // Arena lost => reset the win_rated_arena having the "no_lose" condition -- cgit v1.2.3