47 ArenaTeamContainer::const_iterator itr =
ArenaTeamStore.find(arenaTeamId);
64 if (team->GetCaptain() == guid)
72 ASSERT((team ==
nullptr) || (team == arenaTeam),
"Duplicate arena team with ID %u", arenaTeam->
GetId());
85 TC_LOG_ERROR(
"bg.battleground",
"Arena team ids overflow!! Can't continue, shutting down server. ");
96 CharacterDatabase.DirectExecute(
"DELETE FROM arena_team_member WHERE arenaTeamId NOT IN (SELECT arenaTeamId FROM arena_team)");
99 QueryResult result =
CharacterDatabase.Query(
"SELECT arenaTeamId, name, captainGuid, type, backgroundColor, emblemStyle, emblemColor, borderStyle, borderColor, "
101 "rating, weekGames, weekWins, seasonGames, seasonWins, `rank` FROM arena_team ORDER BY arenaTeamId ASC");
105 TC_LOG_INFO(
"server.loading",
">> Loaded 0 arena teams. DB table `arena_team` is empty!");
111 "SELECT arenaTeamId, atm.guid, atm.weekGames, atm.weekWins, atm.seasonGames, atm.seasonWins, c.name, class, personalRating, matchMakerRating FROM arena_team_member atm"
112 " INNER JOIN arena_team ate USING (arenaTeamId)"
113 " LEFT JOIN characters AS c ON atm.guid = c.guid"
114 " LEFT JOIN character_arena_stats AS cas ON c.guid = cas.guid AND (cas.slot = 0 AND ate.type = 2 OR cas.slot = 1 AND ate.type = 3 OR cas.slot = 2 AND ate.type = 5)"
115 " ORDER BY atm.arenateamid ASC");
124 newArenaTeam->
Disband(
nullptr);
133 while (result->NextRow());
146 std::map<ObjectGuid, uint32> PlayerPoints;
150 team->UpdateArenaPointsHelper(PlayerPoints);
157 for (std::map<ObjectGuid, uint32>::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr)
161 player->ModifyArenaPoints(playerItr->second, trans);
166 stmt->
setUInt32(1, playerItr->first.GetCounter());
173 PlayerPoints.clear();
180 if (team->FinishWeek())
181 team->SaveToDB(
true);
183 team->NotifyStatsChanged();
@ CHAR_UPD_ADD_CHAR_ARENA_POINTS
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
@ LANG_DIST_ARENA_POINTS_TEAM_START
@ LANG_DIST_ARENA_POINTS_ONLINE_START
@ LANG_DIST_ARENA_POINTS_START
@ LANG_DIST_ARENA_POINTS_TEAM_END
@ LANG_DIST_ARENA_POINTS_END
@ LANG_DIST_ARENA_POINTS_ONLINE_END
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
bool StringEqualI(std::string_view a, std::string_view b)
void DistributeArenaPoints()
uint32 GenerateArenaTeamId()
ArenaTeam * GetArenaTeamByCaptain(ObjectGuid guid) const
ArenaTeam * GetArenaTeamById(uint32 arenaTeamId) const
void AddArenaTeam(ArenaTeam *arenaTeam)
ArenaTeamContainer ArenaTeamStore
ArenaTeam * GetArenaTeamByName(std::string_view arenaTeamName) const
void RemoveArenaTeam(uint32 Id)
static ArenaTeamMgr * instance()
void Disband(WorldSession *session)
bool LoadArenaTeamFromDB(QueryResult arenaTeamDataResult)
bool LoadMembersFromDB(QueryResult arenaTeamMembersResult)
void setUInt32(uint8 index, uint32 value)
static void StopNow(uint8 exitcode)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)