113 BattlegroundPlayerMap::const_iterator itr =
m_Players.find(guid);
117 Team team = itr->second.Team;
123 if (winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
125 if (
Player* player =
_GetPlayer(itr->first, itr->second.OfflineRemoveTime != 0,
"Arena::RemovePlayerAtLeave"))
150 uint32 loserTeamRating = 0;
151 uint32 loserMatchmakerRating = 0;
152 int32 loserChange = 0;
153 int32 loserMatchmakerChange = 0;
154 uint32 winnerTeamRating = 0;
155 uint32 winnerMatchmakerRating = 0;
156 int32 winnerChange = 0;
157 int32 winnerMatchmakerChange = 0;
158 bool guildAwarded =
false;
165 if (winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam)
169 loserTeamRating = loserArenaTeam->
GetRating();
171 winnerTeamRating = winnerArenaTeam->
GetRating();
176 winnerMatchmakerChange = winnerArenaTeam->
WonAgainst(winnerMatchmakerRating, loserMatchmakerRating, winnerChange);
177 loserMatchmakerChange = loserArenaTeam->
LostAgainst(loserMatchmakerRating, winnerMatchmakerRating, loserChange);
179 TC_LOG_DEBUG(
"bg.arena",
"match Type: {} --- Winner: old rating: {}, rating gain: {}, old MMR: {}, MMR gain: {} --- Loser: old rating: {}, rating loss: {}, old MMR: {}, MMR loss: {} ---",
180 GetArenaType(), winnerTeamRating, winnerChange, winnerMatchmakerRating, winnerMatchmakerChange,
181 loserTeamRating, loserChange, loserMatchmakerRating, loserMatchmakerChange);
194 TC_LOG_DEBUG(
"bg.arena",
"Arena match Type: {} for Team1Id: {} - Team2Id: {} ended. WinnerTeamId: {}. Winner rating: +{}, Loser rating: {}",
201 TC_LOG_DEBUG(
"bg.arena",
"Statistics match Type: {} for {} ({}, Team: {}, IP: {}): {}",
203 player->GetSession()->GetRemoteAddress(), score.second->ToString());
220 Team team = i.second.Team;
222 if (i.second.OfflineRemoveTime)
226 winnerArenaTeam->
OfflineMemberLost(i.first, loserMatchmakerRating, winnerMatchmakerChange);
230 winnerArenaTeam->
OfflineMemberLost(i.first, loserMatchmakerRating, winnerMatchmakerChange);
232 loserArenaTeam->
OfflineMemberLost(i.first, winnerMatchmakerRating, loserMatchmakerChange);
237 Player* player =
_GetPlayer(i.first, i.second.OfflineRemoveTime != 0,
"Arena::EndBattleground");
262 winnerArenaTeam->
MemberWon(player, loserMatchmakerRating, winnerMatchmakerChange);
267 winnerArenaTeam->
MemberLost(player, loserMatchmakerRating, winnerMatchmakerChange);
269 loserArenaTeam->
MemberLost(player, winnerMatchmakerRating, loserMatchmakerChange);
@ SPELL_LAST_MAN_STANDING
@ SPELL_ALLIANCE_GOLD_FLAG
@ SPELL_ALLIANCE_GREEN_FLAG
@ ARENA_TEXT_START_ONE_MINUTE
@ ARENA_TEXT_START_THIRTY_SECONDS
@ ARENA_TEXT_START_BATTLE_HAS_BEGUN
@ ARENA_TEXT_START_FIFTEEN_SECONDS
@ ARENA_WORLD_STATE_ALIVE_PLAYERS_GREEN
@ ARENA_WORLD_STATE_ALIVE_PLAYERS_GOLD
#define ARENA_TIMELIMIT_POINTS_LOSS
@ BG_STARTING_EVENT_THIRD
@ BG_STARTING_EVENT_SECOND
@ BG_STARTING_EVENT_FIRST
@ BG_STARTING_EVENT_FOURTH
@ WinRankedArenaMatchWithTeamSize
@ LoseRankedArenaMatchWithTeamSize
#define TC_LOG_DEBUG(filterType__,...)
uint8 constexpr PVP_TEAMS_COUNT
void SaveToDB(bool forceMemberSave=false)
void OfflineMemberLost(ObjectGuid guid, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange=-12)
int32 LostAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int32 &rating_change)
void MemberLost(Player *player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange=-12)
int32 WonAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int32 &rating_change)
void FinishGame(int32 mod)
void NotifyStatsChanged()
void MemberWon(Player *player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange)
void AddPlayer(Player *player, BattlegroundQueueTypeId queueId) override
void EndBattleground(Team winner) override
void RemovePlayer(Player *, ObjectGuid, uint32) override
void UpdateArenaWorldState()
void RemovePlayerAtLeave(ObjectGuid guid, bool transport, bool sendPacket) override
void BuildPvPLogDataPacket(WorldPackets::Battleground::PVPMatchStatistics &pvpLogData) const override
void CheckWinConditions() override
void HandleKillPlayer(Player *player, Player *killer) override
Arena(BattlegroundTemplate const *battlegroundTemplate)
ArenaTeamScore _arenaTeamScores[PVP_TEAMS_COUNT]
virtual void HandleKillPlayer(Player *player, Player *killer)
uint8 GetArenaType() const
BattlegroundPlayerMap m_Players
uint32 GetArenaTeamIdForTeam(Team team) const
BattlegroundMap * GetBgMap() const
uint32 GetArenaTeamIdByIndex(TeamId teamId) const
Player * _GetPlayer(ObjectGuid guid, bool offlineRemove, char const *context) const
void SetArenaMatchmakerRating(Team team, uint32 MMR)
Team GetOtherTeam(Team team) const
void UpdateWorldState(int32 worldStateId, int32 value, bool hidden=false)
virtual void EndBattleground(Team winner)
BattlegroundStartTimeIntervals StartDelayTimes[BG_STARTING_EVENT_COUNT]
BattlegroundPlayerMap const & GetPlayers() const
BattlegroundScoreMap PlayerScores
virtual void AddPlayer(Player *player, BattlegroundQueueTypeId queueId)
BattlegroundStatus GetStatus() const
uint32 GetPlayersCountByTeam(Team team) const
uint32 GetAlivePlayersCountByTeam(Team team) const
uint32 GetArenaMatchmakerRating(Team team) const
virtual void BuildPvPLogDataPacket(WorldPackets::Battleground::PVPMatchStatistics &pvpLogData) const
virtual void RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool SendPacket)
uint32 StartMessageIds[BG_STARTING_EVENT_COUNT]
uint32 GetArenaPersonalRating(uint8 slot) const
void StartCriteria(CriteriaStartEvent startEvent, uint32 entry, Milliseconds timeLost=Milliseconds::zero())
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject *ref=nullptr)
Team GetEffectiveTeam() const
void FailCriteria(CriteriaFailEvent condition, int32 failAsset)
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
@ CONFIG_ARENA_LOG_EXTENDED_INFO
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
void Assign(uint32 preMatchRating, uint32 postMatchRating, uint32 preMatchMMR, uint32 postMatchMMR)
Optional< RatingData > Ratings