AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
ArenaTeamMgr Class Reference

#include "ArenaTeamMgr.h"

Public Types

typedef std::unordered_map< uint32, ArenaTeam * > ArenaTeamContainer
 

Public Member Functions

ArenaTeamGetArenaTeamById (uint32 arenaTeamId) const
 
ArenaTeamGetArenaTeamByName (std::string const &arenaTeamName) const
 
ArenaTeamGetArenaTeamByCaptain (ObjectGuid guid) const
 
ArenaTeamGetArenaTeamByName (std::string const &arenaTeamName, const uint32 type) const
 
ArenaTeamGetArenaTeamByCaptain (ObjectGuid guid, const uint32 type) const
 
void LoadArenaTeams ()
 
void AddArenaTeam (ArenaTeam *arenaTeam)
 
void RemoveArenaTeam (uint32 Id)
 
ArenaTeamContainer::iterator GetArenaTeamMapBegin ()
 
ArenaTeamContainer::iterator GetArenaTeamMapEnd ()
 
ArenaTeamContainerGetArenaTeams ()
 
void DistributeArenaPoints ()
 
uint32 GenerateArenaTeamId ()
 
void SetNextArenaTeamId (uint32 Id)
 
uint32 GetNextArenaLogId ()
 
void SetLastArenaLogId (uint32 id)
 
uint32 GenerateTempArenaTeamId ()
 

Static Public Member Functions

static ArenaTeamMgrinstance ()
 

Protected Attributes

uint32 NextArenaTeamId
 
uint32 NextTempArenaTeamId
 
ArenaTeamContainer ArenaTeamStore
 
uint32 LastArenaLogId
 

Private Member Functions

 ArenaTeamMgr ()
 
 ~ArenaTeamMgr ()
 

Detailed Description

Member Typedef Documentation

◆ ArenaTeamContainer

typedef std::unordered_map<uint32, ArenaTeam*> ArenaTeamMgr::ArenaTeamContainer

Constructor & Destructor Documentation

◆ ArenaTeamMgr()

ArenaTeamMgr::ArenaTeamMgr ( )
private
29{
32 NextTempArenaTeamId = 0xFFF00000;
33}
uint32 NextArenaTeamId
Definition: ArenaTeamMgr.h:61
uint32 NextTempArenaTeamId
Definition: ArenaTeamMgr.h:62
uint32 LastArenaLogId
Definition: ArenaTeamMgr.h:64

References LastArenaLogId, NextArenaTeamId, and NextTempArenaTeamId.

◆ ~ArenaTeamMgr()

ArenaTeamMgr::~ArenaTeamMgr ( )
private
36{
37 for (ArenaTeamContainer::iterator itr = ArenaTeamStore.begin(); itr != ArenaTeamStore.end(); ++itr)
38 delete itr->second;
39}
ArenaTeamContainer ArenaTeamStore
Definition: ArenaTeamMgr.h:63

References ArenaTeamStore.

Member Function Documentation

◆ AddArenaTeam()

void ArenaTeamMgr::AddArenaTeam ( ArenaTeam arenaTeam)
118{
119 ArenaTeamStore[arenaTeam->GetId()] = arenaTeam;
120}
uint32 GetId() const
Definition: ArenaTeam.h:149

References ArenaTeamStore, and ArenaTeam::GetId().

Referenced by LoadArenaTeams().

◆ DistributeArenaPoints()

void ArenaTeamMgr::DistributeArenaPoints ( )
195{
196 // Used to distribute arena points based on last week's stats
197 sWorld->SendWorldText(LANG_DIST_ARENA_POINTS_START);
198
200
201 // Temporary structure for storing maximum points to add values for all players
202 std::map<ObjectGuid, uint32> PlayerPoints;
203
204 // At first update all points for all team members
205 for (ArenaTeamContainer::iterator teamItr = GetArenaTeamMapBegin(); teamItr != GetArenaTeamMapEnd(); ++teamItr)
206 if (ArenaTeam* at = teamItr->second)
207 {
208 at->UpdateArenaPointsHelper(PlayerPoints);
209 sScriptMgr->OnBeforeUpdateArenaPoints(at, PlayerPoints);
210 }
211
212 CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
213
215
216 // Cycle that gives points to all players
217 for (std::map<ObjectGuid, uint32>::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr)
218 {
219 // Add points to player if online
220 if (Player* player = ObjectAccessor::FindPlayer(playerItr->first))
221 player->ModifyArenaPoints(playerItr->second, trans);
222 else // Update database
223 {
224 stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ARENA_POINTS);
225 stmt->SetData(0, playerItr->second);
226 stmt->SetData(1, playerItr->first.GetCounter());
227 trans->Append(stmt);
228 }
229 }
230
231 CharacterDatabase.CommitTransaction(trans);
232
233 PlayerPoints.clear();
234
236
238 for (ArenaTeamContainer::iterator titr = GetArenaTeamMapBegin(); titr != GetArenaTeamMapEnd(); ++titr)
239 {
240 if (ArenaTeam* at = titr->second)
241 {
242 if (at->FinishWeek())
243 at->SaveToDB(true);
244
245 at->NotifyStatsChanged();
246 }
247 }
248
250
251 sWorld->SendWorldText(LANG_DIST_ARENA_POINTS_END);
252}
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition: DatabaseEnvFwd.h:70
@ CHAR_UPD_CHAR_ARENA_POINTS
Definition: CharacterDatabase.h:370
@ LANG_DIST_ARENA_POINTS_TEAM_START
Definition: Language.h:698
@ LANG_DIST_ARENA_POINTS_ONLINE_START
Definition: Language.h:696
@ LANG_DIST_ARENA_POINTS_START
Definition: Language.h:695
@ LANG_DIST_ARENA_POINTS_TEAM_END
Definition: Language.h:699
@ LANG_DIST_ARENA_POINTS_END
Definition: Language.h:700
@ LANG_DIST_ARENA_POINTS_ONLINE_END
Definition: Language.h:697
#define sScriptMgr
Definition: ScriptMgr.h:698
#define sWorld
Definition: World.h:447
Player * FindPlayer(ObjectGuid const guid)
Definition: ObjectAccessor.cpp:248
Definition: PreparedStatement.h:158
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78
Definition: ArenaTeam.h:138
ArenaTeamContainer::iterator GetArenaTeamMapBegin()
Definition: ArenaTeamMgr.h:46
ArenaTeamContainer::iterator GetArenaTeamMapEnd()
Definition: ArenaTeamMgr.h:47
Definition: Player.h:1056

References CHAR_UPD_CHAR_ARENA_POINTS, CharacterDatabase, ObjectAccessor::FindPlayer(), GetArenaTeamMapBegin(), GetArenaTeamMapEnd(), LANG_DIST_ARENA_POINTS_END, LANG_DIST_ARENA_POINTS_ONLINE_END, LANG_DIST_ARENA_POINTS_ONLINE_START, LANG_DIST_ARENA_POINTS_START, LANG_DIST_ARENA_POINTS_TEAM_END, LANG_DIST_ARENA_POINTS_TEAM_START, PreparedStatementBase::SetData(), sScriptMgr, and sWorld.

◆ GenerateArenaTeamId()

uint32 ArenaTeamMgr::GenerateArenaTeamId ( )
128{
130 {
131 LOG_ERROR("bg.arena", "Arena team ids overflow!! Can't continue, shutting down server. ");
133 }
134
135 return NextArenaTeamId++;
136}
#define LOG_ERROR(filterType__,...)
Definition: Log.h:157
constexpr uint32 MAX_ARENA_TEAM_ID
Definition: ArenaTeamMgr.h:23
@ ERROR_EXIT_CODE
Definition: World.h:55
static void StopNow(uint8 exitcode)
Definition: World.h:259

References ERROR_EXIT_CODE, LOG_ERROR, MAX_ARENA_TEAM_ID, NextArenaTeamId, and World::StopNow().

◆ GenerateTempArenaTeamId()

uint32 ArenaTeamMgr::GenerateTempArenaTeamId ( )
139{
142
143 return NextTempArenaTeamId++;
144}
constexpr uint32 MAX_TEMP_ARENA_TEAM_ID
Definition: ArenaTeamMgr.h:24

References MAX_ARENA_TEAM_ID, MAX_TEMP_ARENA_TEAM_ID, and NextTempArenaTeamId.

◆ GetArenaTeamByCaptain() [1/2]

ArenaTeam * ArenaTeamMgr::GetArenaTeamByCaptain ( ObjectGuid  guid) const
94{
95 for (ArenaTeamContainer::const_iterator itr = ArenaTeamStore.begin(); itr != ArenaTeamStore.end(); ++itr)
96 {
97 if (itr->second->GetCaptain() == guid)
98 {
99 return itr->second;
100 }
101 }
102 return nullptr;
103}

References ArenaTeamStore.

◆ GetArenaTeamByCaptain() [2/2]

ArenaTeam * ArenaTeamMgr::GetArenaTeamByCaptain ( ObjectGuid  guid,
const uint32  type 
) const
106{
107 for (ArenaTeamContainer::const_iterator itr = ArenaTeamStore.begin(); itr != ArenaTeamStore.end(); ++itr)
108 {
109 if (itr->second->GetCaptain() == guid && itr->second->GetType() == type)
110 {
111 return itr->second;
112 }
113 }
114 return nullptr;
115}

References ArenaTeamStore.

◆ GetArenaTeamById()

ArenaTeam * ArenaTeamMgr::GetArenaTeamById ( uint32  arenaTeamId) const
49{
50 ArenaTeamContainer::const_iterator itr = ArenaTeamStore.find(arenaTeamId);
51 if (itr != ArenaTeamStore.end())
52 return itr->second;
53
54 return nullptr;
55}

References ArenaTeamStore.

◆ GetArenaTeamByName() [1/2]

ArenaTeam * ArenaTeamMgr::GetArenaTeamByName ( std::string const &  arenaTeamName) const
58{
59 std::string search = arenaTeamName;
60 std::transform(search.begin(), search.end(), search.begin(), ::toupper);
61 for (ArenaTeamContainer::const_iterator itr = ArenaTeamStore.begin(); itr != ArenaTeamStore.end(); ++itr)
62 {
63 std::string teamName = itr->second->GetName();
64 std::transform(teamName.begin(), teamName.end(), teamName.begin(), ::toupper);
65 if (search == teamName)
66 {
67 return itr->second;
68 }
69 }
70 return nullptr;
71}

References ArenaTeamStore.

◆ GetArenaTeamByName() [2/2]

ArenaTeam * ArenaTeamMgr::GetArenaTeamByName ( std::string const &  arenaTeamName,
const uint32  type 
) const
74{
75 std::string search = arenaTeamName;
76 std::transform(search.begin(), search.end(), search.begin(), ::toupper);
77 for (auto itr = ArenaTeamStore.begin(); itr != ArenaTeamStore.end(); ++itr)
78 {
79 if (itr->second->GetType() != type)
80 {
81 continue;
82 }
83 std::string teamName = itr->second->GetName();
84 std::transform(teamName.begin(), teamName.end(), teamName.begin(), ::toupper);
85 if (search == teamName)
86 {
87 return itr->second;
88 }
89 }
90 return nullptr;
91}

References ArenaTeamStore.

◆ GetArenaTeamMapBegin()

ArenaTeamContainer::iterator ArenaTeamMgr::GetArenaTeamMapBegin ( )
inline
46{ return ArenaTeamStore.begin(); }

References ArenaTeamStore.

Referenced by DistributeArenaPoints().

◆ GetArenaTeamMapEnd()

ArenaTeamContainer::iterator ArenaTeamMgr::GetArenaTeamMapEnd ( )
inline
47{ return ArenaTeamStore.end(); }

References ArenaTeamStore.

Referenced by DistributeArenaPoints().

◆ GetArenaTeams()

ArenaTeamContainer & ArenaTeamMgr::GetArenaTeams ( )
inline
48{ return ArenaTeamStore; }

References ArenaTeamStore.

◆ GetNextArenaLogId()

uint32 ArenaTeamMgr::GetNextArenaLogId ( )
inline
55{ return ++LastArenaLogId; }

References LastArenaLogId.

◆ instance()

ArenaTeamMgr * ArenaTeamMgr::instance ( )
static
42{
44 return &instance;
45}
Definition: ArenaTeamMgr.h:27
static ArenaTeamMgr * instance()
Definition: ArenaTeamMgr.cpp:41

References instance().

Referenced by instance().

◆ LoadArenaTeams()

void ArenaTeamMgr::LoadArenaTeams ( )
147{
148 uint32 oldMSTime = getMSTime();
149
150 // Clean out the trash before loading anything
151 CharacterDatabase.Execute("DELETE FROM arena_team_member WHERE arenaTeamId NOT IN (SELECT arenaTeamId FROM arena_team)"); // One-time query
152
153 // 0 1 2 3 4 5 6 7 8
154 QueryResult result = CharacterDatabase.Query("SELECT arenaTeamId, name, captainGuid, type, backgroundColor, emblemStyle, emblemColor, borderStyle, borderColor, "
155 // 9 10 11 12 13 14
156 "rating, weekGames, weekWins, seasonGames, seasonWins, `rank` FROM arena_team ORDER BY arenaTeamId ASC");
157
158 if (!result)
159 {
160 LOG_WARN("server.loading", ">> Loaded 0 arena teams. DB table `arena_team` is empty!");
161 LOG_INFO("server.loading", " ");
162 return;
163 }
164
165 QueryResult result2 = CharacterDatabase.Query(
166 // 0 1 2 3 4 5 6 7 8 9 10
167 "SELECT arenaTeamId, atm.guid, atm.weekGames, atm.weekWins, atm.seasonGames, atm.seasonWins, c.name, class, personalRating, matchMakerRating, maxMMR FROM arena_team_member atm"
168 " INNER JOIN arena_team ate USING (arenaTeamId)"
169 " LEFT JOIN characters AS c ON atm.guid = c.guid"
170 " 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)"
171 " ORDER BY atm.arenateamid ASC");
172
173 uint32 count = 0;
174 do
175 {
176 ArenaTeam* newArenaTeam = new ArenaTeam;
177
178 if (!newArenaTeam->LoadArenaTeamFromDB(result) || !newArenaTeam->LoadMembersFromDB(result2))
179 {
180 newArenaTeam->Disband(nullptr);
181 delete newArenaTeam;
182 continue;
183 }
184
185 AddArenaTeam(newArenaTeam);
186
187 ++count;
188 } while (result->NextRow());
189
190 LOG_INFO("server.loading", ">> Loaded {} arena teams in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
191 LOG_INFO("server.loading", " ");
192}
std::uint32_t uint32
Definition: Define.h:108
#define LOG_INFO(filterType__,...)
Definition: Log.h:165
#define LOG_WARN(filterType__,...)
Definition: Log.h:161
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition: Timer.h:131
uint32 getMSTime()
Definition: Timer.h:103
std::shared_ptr< ResultSet > QueryResult
Definition: DatabaseEnvFwd.h:28
void Disband(WorldSession *session)
Definition: ArenaTeam.cpp:383
bool LoadArenaTeamFromDB(QueryResult arenaTeamDataResult)
Definition: ArenaTeam.cpp:196
bool LoadMembersFromDB(QueryResult arenaTeamMembersResult)
Definition: ArenaTeam.cpp:222
void AddArenaTeam(ArenaTeam *arenaTeam)
Definition: ArenaTeamMgr.cpp:117

References AddArenaTeam(), CharacterDatabase, ArenaTeam::Disband(), getMSTime(), GetMSTimeDiffToNow(), ArenaTeam::LoadArenaTeamFromDB(), ArenaTeam::LoadMembersFromDB(), LOG_INFO, and LOG_WARN.

◆ RemoveArenaTeam()

void ArenaTeamMgr::RemoveArenaTeam ( uint32  Id)
123{
124 ArenaTeamStore.erase(arenaTeamId);
125}

References ArenaTeamStore.

◆ SetLastArenaLogId()

void ArenaTeamMgr::SetLastArenaLogId ( uint32  id)
inline
56{ LastArenaLogId = id; }

References LastArenaLogId.

◆ SetNextArenaTeamId()

void ArenaTeamMgr::SetNextArenaTeamId ( uint32  Id)
inline
53{ NextArenaTeamId = Id; }

References NextArenaTeamId.

Member Data Documentation

◆ ArenaTeamStore

◆ LastArenaLogId

uint32 ArenaTeamMgr::LastArenaLogId
protected

◆ NextArenaTeamId

uint32 ArenaTeamMgr::NextArenaTeamId
protected

◆ NextTempArenaTeamId

uint32 ArenaTeamMgr::NextTempArenaTeamId
protected