diff options
author | Aokromes <Aokromes@users.noreply.github.com> | 2016-08-11 13:00:31 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-12 13:29:10 +0100 |
commit | 011a7c56d33aa5e14231d562e634b63c26824cef (patch) | |
tree | 9cf954095df927ea54bfdda46ff8df80af0b5c73 /src | |
parent | 26bb056542c32cd955bce4a82c7318c2086015c7 (diff) |
Core/Arena: Teams don't lose rating after arena draw (#17515)
By Raydor, closes #16865
(cherry picked from commit 43c3f3a235925475075bb4e1776aac04026b6e8c)
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 a6952bfc3b9..f87e78fd55a 100644 --- a/src/server/game/Battlegrounds/Arena.cpp +++ b/src/server/game/Battlegrounds/Arena.cpp @@ -145,15 +145,19 @@ void Arena::EndBattleground(uint32 winner) int32 winnerMatchmakerChange = 0; bool guildAwarded = false; - 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) { @@ -209,7 +213,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; } @@ -241,6 +250,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 |