TrinityCore
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
ArenaTeam.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITYCORE_ARENATEAM_H
19#define TRINITYCORE_ARENATEAM_H
20
21#include "QueryResult.h"
22#include "ObjectGuid.h"
23#include <list>
24#include <map>
25
26class WorldSession;
27class WorldPacket;
28class Player;
29class Group;
30
32{
37};
38
40{
60};
61
63{
64 ERR_ARENA_TEAM_JOIN_SS = 3, // player name + arena team name
65 ERR_ARENA_TEAM_LEAVE_SS = 4, // player name + arena team name
66 ERR_ARENA_TEAM_REMOVE_SSS = 5, // player name + arena team name + captain name
67 ERR_ARENA_TEAM_LEADER_IS_SS = 6, // player name + arena team name
68 ERR_ARENA_TEAM_LEADER_CHANGED_SSS = 7, // old captain + new captain + arena team name
69 ERR_ARENA_TEAM_DISBANDED_S = 8 // captain name + arena team name
70};
71
72/*
73need info how to send these ones:
74ERR_ARENA_TEAM_YOU_JOIN_S - client show it automatically when accept invite
75ERR_ARENA_TEAM_TARGET_TOO_LOW_S
76ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S
77ERR_ARENA_TEAM_LEVEL_TOO_LOW_I
78*/
79
80// EnumUtils: DESCRIBE THIS
82{
86};
87
89{
91 std::string Name;
99
100 void ModifyPersonalRating(Player* player, int32 mod, uint32 type);
101 void ModifyMatchmakerRating(int32 mod, uint32 slot);
102};
103
105{
112};
113
114#define MAX_ARENA_SLOT 3 // 0..2 slots
115
117{
118 public:
119 ArenaTeam();
120 ~ArenaTeam();
121
122 bool Create(ObjectGuid captainGuid, uint8 type, std::string const& teamName, uint32 backgroundColor, uint8 emblemStyle, uint32 emblemColor, uint8 borderStyle, uint32 borderColor);
123 void Disband(WorldSession* session);
124 void Disband();
125
126 typedef std::list<ArenaTeamMember> MemberList;
127
128 uint32 GetId() const { return TeamId; }
129 uint32 GetType() const { return Type; }
130 uint8 GetSlot() const { return GetSlotByType(GetType()); }
131 static uint8 GetSlotByType(uint32 type);
132 static uint8 GetTypeBySlot(uint8 slot);
133 ObjectGuid GetCaptain() const { return CaptainGuid; }
134 std::string const& GetName() const { return TeamName; }
135 ArenaTeamStats const& GetStats() const { return Stats; }
136
137 uint32 GetRating() const { return Stats.Rating; }
138 uint32 GetAverageMMR(Group* group) const;
139
140 void SetCaptain(ObjectGuid guid);
141 bool SetName(std::string const& name);
142 bool AddMember(ObjectGuid PlayerGuid);
143 void DelMember(ObjectGuid guid, bool cleanDb);
144
145 size_t GetMembersSize() const { return Members.size(); }
146 bool Empty() const { return Members.empty(); }
147 MemberList::iterator m_membersBegin() { return Members.begin(); }
148 MemberList::iterator m_membersEnd() { return Members.end(); }
149 bool IsMember(ObjectGuid guid) const;
150
151 ArenaTeamMember* GetMember(ObjectGuid guid);
152 ArenaTeamMember* GetMember(std::string const& name);
153
154 bool IsFighting() const;
155
156 bool LoadArenaTeamFromDB(QueryResult arenaTeamDataResult);
157 bool LoadMembersFromDB(QueryResult arenaTeamMembersResult);
158 void LoadStatsFromDB(uint32 ArenaTeamId);
159 void SaveToDB(bool forceMemberSave = false);
160
161 void BroadcastPacket(WorldPacket* packet);
162 void BroadcastEvent(ArenaTeamEvents event, ObjectGuid guid, uint8 strCount, std::string const& str1, std::string const& str2, std::string const& str3);
163 void NotifyStatsChanged();
164
165 void MassInviteToEvent(WorldSession* session);
166
167 void Roster(WorldSession* session);
168 void Query(WorldSession* session);
169 void SendStats(WorldSession* session);
170 void Inspect(WorldSession* session, ObjectGuid guid);
171
172 uint32 GetPoints(uint32 MemberRating);
173 int32 GetMatchmakerRatingMod(uint32 ownRating, uint32 opponentRating, bool won);
174 int32 GetRatingMod(uint32 ownRating, uint32 opponentRating, bool won);
175 float GetChanceAgainst(uint32 ownRating, uint32 opponentRating);
176 int32 WonAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int32& rating_change);
177 void MemberWon(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange);
178 int32 LostAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int32& rating_change);
179 void MemberLost(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
180 void OfflineMemberLost(ObjectGuid guid, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
181
182 void UpdateArenaPointsHelper(std::map<uint32, uint32> & PlayerPoints);
183
184 bool FinishWeek(); // returns true if arena team played this week
185 void FinishGame(int32 mod);
186
187 void SetPreviousOpponents(uint32 arenaTeamId) { PreviousOpponents = arenaTeamId; }
188 uint32 GetPreviousOpponents() { return PreviousOpponents; }
189
190 protected:
191
194 std::string TeamName;
196
197 uint32 BackgroundColor; // ARGB format
198 uint8 EmblemStyle; // icon id
199 uint32 EmblemColor; // ARGB format
200 uint8 BorderStyle; // border image id
201 uint32 BorderColor; // ARGB format
202
205
207};
208#endif
ArenaTeamCommandTypes
Definition: ArenaTeam.h:32
@ ERR_ARENA_TEAM_FOUNDER_S
Definition: ArenaTeam.h:36
@ ERR_ARENA_TEAM_INVITE_SS
Definition: ArenaTeam.h:34
@ ERR_ARENA_TEAM_QUIT_S
Definition: ArenaTeam.h:35
@ ERR_ARENA_TEAM_CREATE_S
Definition: ArenaTeam.h:33
ArenaTeamTypes
Definition: ArenaTeam.h:82
@ ARENA_TEAM_5v5
Definition: ArenaTeam.h:85
@ ARENA_TEAM_2v2
Definition: ArenaTeam.h:83
@ ARENA_TEAM_3v3
Definition: ArenaTeam.h:84
ArenaTeamCommandErrors
Definition: ArenaTeam.h:40
@ ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S
Definition: ArenaTeam.h:57
@ ERR_ARENA_TEAM_TARGET_TOO_HIGH_S
Definition: ArenaTeam.h:56
@ ERR_ARENA_TEAM_NAME_INVALID
Definition: ArenaTeam.h:46
@ ERR_ALREADY_IN_ARENA_TEAM_S
Definition: ArenaTeam.h:43
@ ERR_ARENA_TEAM_INTERNAL
Definition: ArenaTeam.h:41
@ ERR_INVITED_TO_ARENA_TEAM
Definition: ArenaTeam.h:44
@ ERR_ALREADY_IN_ARENA_TEAM
Definition: ArenaTeam.h:42
@ ERR_ARENA_TEAM_IGNORING_YOU_S
Definition: ArenaTeam.h:54
@ ERR_ARENA_TEAM_NOT_FOUND
Definition: ArenaTeam.h:58
@ ERR_ARENA_TEAMS_LOCKED
Definition: ArenaTeam.h:59
@ ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM
Definition: ArenaTeam.h:50
@ ERR_ARENA_TEAM_LEADER_LEAVE_S
Definition: ArenaTeam.h:48
@ ERR_ARENA_TEAM_PERMISSIONS
Definition: ArenaTeam.h:49
@ ERR_ARENA_TEAM_NOT_ALLIED
Definition: ArenaTeam.h:53
@ ERR_ARENA_TEAM_TARGET_TOO_LOW_S
Definition: ArenaTeam.h:55
@ ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S
Definition: ArenaTeam.h:52
@ ERR_ALREADY_INVITED_TO_ARENA_TEAM_S
Definition: ArenaTeam.h:45
@ ERR_ARENA_TEAM_NAME_EXISTS_S
Definition: ArenaTeam.h:47
@ ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM_SS
Definition: ArenaTeam.h:51
ArenaTeamEvents
Definition: ArenaTeam.h:63
@ ERR_ARENA_TEAM_LEADER_CHANGED_SSS
Definition: ArenaTeam.h:68
@ ERR_ARENA_TEAM_REMOVE_SSS
Definition: ArenaTeam.h:66
@ ERR_ARENA_TEAM_LEAVE_SS
Definition: ArenaTeam.h:65
@ ERR_ARENA_TEAM_DISBANDED_S
Definition: ArenaTeam.h:69
@ ERR_ARENA_TEAM_JOIN_SS
Definition: ArenaTeam.h:64
@ ERR_ARENA_TEAM_LEADER_IS_SS
Definition: ArenaTeam.h:67
std::shared_ptr< ResultSet > QueryResult
#define TC_GAME_API
Definition: Define.h:114
uint8_t uint8
Definition: Define.h:135
int32_t int32
Definition: Define.h:129
uint16_t uint16
Definition: Define.h:134
uint32_t uint32
Definition: Define.h:133
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
Definition: QuestPools.cpp:51
TeamId
Stats
uint32 GetPreviousOpponents()
Definition: ArenaTeam.h:188
MemberList::iterator m_membersBegin()
Definition: ArenaTeam.h:147
uint32 EmblemColor
Definition: ArenaTeam.h:199
ObjectGuid CaptainGuid
Definition: ArenaTeam.h:195
ArenaTeamStats const & GetStats() const
Definition: ArenaTeam.h:135
bool Empty() const
Definition: ArenaTeam.h:146
ObjectGuid GetCaptain() const
Definition: ArenaTeam.h:133
uint32 GetRating() const
Definition: ArenaTeam.h:137
uint32 BorderColor
Definition: ArenaTeam.h:201
std::list< ArenaTeamMember > MemberList
Definition: ArenaTeam.h:126
uint32 TeamId
Definition: ArenaTeam.h:192
ArenaTeamStats Stats
Definition: ArenaTeam.h:204
size_t GetMembersSize() const
Definition: ArenaTeam.h:145
uint8 Type
Definition: ArenaTeam.h:193
void SetPreviousOpponents(uint32 arenaTeamId)
Definition: ArenaTeam.h:187
uint8 EmblemStyle
Definition: ArenaTeam.h:198
uint8 BorderStyle
Definition: ArenaTeam.h:200
uint32 PreviousOpponents
Definition: ArenaTeam.h:206
uint8 GetSlot() const
Definition: ArenaTeam.h:130
uint32 GetType() const
Definition: ArenaTeam.h:129
std::string TeamName
Definition: ArenaTeam.h:194
MemberList Members
Definition: ArenaTeam.h:203
uint32 BackgroundColor
Definition: ArenaTeam.h:197
void LoadStatsFromDB(uint32 ArenaTeamId)
std::string const & GetName() const
Definition: ArenaTeam.h:134
MemberList::iterator m_membersEnd()
Definition: ArenaTeam.h:148
uint32 GetId() const
Definition: ArenaTeam.h:128
Definition: Group.h:165
Definition: Player.h:915
Player session in the World.
Definition: WorldSession.h:456
uint16 PersonalRating
Definition: ArenaTeam.h:97
uint16 WeekWins
Definition: ArenaTeam.h:94
uint16 SeasonWins
Definition: ArenaTeam.h:96
std::string Name
Definition: ArenaTeam.h:91
uint16 WeekGames
Definition: ArenaTeam.h:93
ObjectGuid Guid
Definition: ArenaTeam.h:90
uint16 MatchMakerRating
Definition: ArenaTeam.h:98
uint16 SeasonGames
Definition: ArenaTeam.h:95
uint16 SeasonGames
Definition: ArenaTeam.h:109
uint16 WeekGames
Definition: ArenaTeam.h:107
uint16 WeekWins
Definition: ArenaTeam.h:108
uint16 Rating
Definition: ArenaTeam.h:106
uint16 SeasonWins
Definition: ArenaTeam.h:110