aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAokromes <Aokromes@users.noreply.github.com>2016-08-11 13:00:31 +0200
committerGitHub <noreply@github.com>2016-08-11 13:00:31 +0200
commit43c3f3a235925475075bb4e1776aac04026b6e8c (patch)
tree948226984384ea349f9ea91bc7402885af955323 /src
parent1ad24352acebbc4d7c8829cd111a2f3ba010891a (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.cpp20
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