diff options
| author | Aokromes <Aokromes@users.noreply.github.com> | 2016-08-11 13:00:31 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-11 13:00:31 +0200 |
| commit | 43c3f3a235925475075bb4e1776aac04026b6e8c (patch) | |
| tree | 948226984384ea349f9ea91bc7402885af955323 /src | |
| parent | 1ad24352acebbc4d7c8829cd111a2f3ba010891a (diff) | |
Core/Arena: Teams don't lose rating after arena draw (#17515)
By Raydor, closes #16865
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Battlegrounds/Arena.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
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 |
