Core/Arena: Fix another exploit: When leaving your team in the middle of the arena fight your average Matchmaker Rating will not change till after the fight.
--HG-- branch : trunk
This commit is contained in:
@@ -729,17 +729,15 @@ void Battleground::EndBattleground(uint32 winner)
|
|||||||
if (winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)
|
if (winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)
|
||||||
{
|
{
|
||||||
loser_team_rating = loser_arena_team->GetRating();
|
loser_team_rating = loser_arena_team->GetRating();
|
||||||
loser_matchmaker_rating = loser_arena_team->GetAverageMMR(GetBgRaid(GetOtherTeam(winner)));
|
loser_matchmaker_rating = GetArenaMatchmakerRating(GetOtherTeam(winner));
|
||||||
winner_team_rating = winner_arena_team->GetRating();
|
winner_team_rating = winner_arena_team->GetRating();
|
||||||
winner_matchmaker_rating = winner_arena_team->GetAverageMMR(GetBgRaid(winner));
|
winner_matchmaker_rating = GetArenaMatchmakerRating(winner);
|
||||||
winner_change = winner_arena_team->WonAgainst(loser_matchmaker_rating);
|
winner_change = winner_arena_team->WonAgainst(loser_matchmaker_rating);
|
||||||
loser_change = loser_arena_team->LostAgainst(winner_matchmaker_rating);
|
loser_change = loser_arena_team->LostAgainst(winner_matchmaker_rating);
|
||||||
sLog.outDebug("--- Winner rating: %u, Loser rating: %u, Winner MMR: %u, Loser MMR: %u, Winner change: %u, Losser change: %u ---", winner_team_rating, loser_team_rating,
|
sLog.outDebug("--- Winner rating: %u, Loser rating: %u, Winner MMR: %u, Loser MMR: %u, Winner change: %u, Losser change: %u ---", winner_team_rating, loser_team_rating,
|
||||||
winner_matchmaker_rating, loser_matchmaker_rating, winner_change, loser_change);
|
winner_matchmaker_rating, loser_matchmaker_rating, winner_change, loser_change);
|
||||||
SetArenaTeamRatingChangeForTeam(winner, winner_change);
|
SetArenaTeamRatingChangeForTeam(winner, winner_change);
|
||||||
SetArenaTeamRatingChangeForTeam(GetOtherTeam(winner), loser_change);
|
SetArenaTeamRatingChangeForTeam(GetOtherTeam(winner), loser_change);
|
||||||
SetArenaMatchmakerRating(winner, winner_matchmaker_rating);
|
|
||||||
SetArenaMatchmakerRating(GetOtherTeam(winner), loser_matchmaker_rating);
|
|
||||||
sLog.outArena("Arena match Type: %u for Team1Id: %u - Team2Id: %u ended. WinnerTeamId: %u. Winner rating: +%d, Loser rating: %d", m_ArenaType, m_ArenaTeamIds[BG_TEAM_ALLIANCE], m_ArenaTeamIds[BG_TEAM_HORDE], winner_arena_team->GetId(), winner_change, loser_change);
|
sLog.outArena("Arena match Type: %u for Team1Id: %u - Team2Id: %u ended. WinnerTeamId: %u. Winner rating: +%d, Loser rating: %d", m_ArenaType, m_ArenaTeamIds[BG_TEAM_ALLIANCE], m_ArenaTeamIds[BG_TEAM_HORDE], winner_arena_team->GetId(), winner_change, loser_change);
|
||||||
if (sWorld.getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO))
|
if (sWorld.getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO))
|
||||||
for (Battleground::BattlegroundScoreMap::const_iterator itr = GetPlayerScoresBegin(); itr != GetPlayerScoresEnd(); itr++)
|
for (Battleground::BattlegroundScoreMap::const_iterator itr = GetPlayerScoresBegin(); itr != GetPlayerScoresEnd(); itr++)
|
||||||
@@ -962,7 +960,7 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
|
|||||||
ArenaTeam * winner_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));
|
ArenaTeam * winner_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));
|
||||||
ArenaTeam * loser_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(team));
|
ArenaTeam * loser_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(team));
|
||||||
if (winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)
|
if (winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)
|
||||||
loser_arena_team->MemberLost(plr, winner_arena_team->GetAverageMMR(GetBgRaid(team)));
|
loser_arena_team->MemberLost(plr, GetArenaMatchmakerRating(GetOtherTeam(team)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (SendPacket)
|
if (SendPacket)
|
||||||
@@ -984,7 +982,7 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
|
|||||||
ArenaTeam * others_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));
|
ArenaTeam * others_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));
|
||||||
ArenaTeam * players_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(team));
|
ArenaTeam * players_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(team));
|
||||||
if (others_arena_team && players_arena_team)
|
if (others_arena_team && players_arena_team)
|
||||||
players_arena_team->OfflineMemberLost(guid, others_arena_team->GetAverageMMR(GetBgRaid(GetOtherTeam(team))));
|
players_arena_team->OfflineMemberLost(guid, GetArenaMatchmakerRating(GetOtherTeam(team)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1004,6 +1004,8 @@ void BattlegroundQueue::Update(BattlegroundTypeId bgTypeId, BattlegroundBracketI
|
|||||||
itr_team[BG_TEAM_HORDE] = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].begin();
|
itr_team[BG_TEAM_HORDE] = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
arena->SetArenaMatchmakerRating(ALLIANCE, (*(itr_team[BG_TEAM_ALLIANCE]))->ArenaMatchmakerRating);
|
||||||
|
arena->SetArenaMatchmakerRating(HORDE, (*(itr_team[BG_TEAM_HORDE]))->ArenaMatchmakerRating);
|
||||||
InviteGroupToBG(*(itr_team[BG_TEAM_ALLIANCE]), arena, ALLIANCE);
|
InviteGroupToBG(*(itr_team[BG_TEAM_ALLIANCE]), arena, ALLIANCE);
|
||||||
InviteGroupToBG(*(itr_team[BG_TEAM_HORDE]), arena, HORDE);
|
InviteGroupToBG(*(itr_team[BG_TEAM_HORDE]), arena, HORDE);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user