diff options
-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 |