TrinityCore
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 "Define.h"
22#include "DatabaseEnvFwd.h"
23#include "ObjectGuid.h"
24#include <list>
25#include <string>
26
27class WorldSession;
28class WorldPacket;
29class Player;
30class Group;
31
33{
38};
39
41{
63};
64
66{
67 ERR_ARENA_TEAM_JOIN_SS = 4, // player name + arena team name
68 ERR_ARENA_TEAM_LEAVE_SS = 5, // player name + arena team name
69 ERR_ARENA_TEAM_REMOVE_SSS = 6, // player name + arena team name + captain name
70 ERR_ARENA_TEAM_LEADER_IS_SS = 7, // player name + arena team name
71 ERR_ARENA_TEAM_LEADER_CHANGED_SSS = 8, // old captain + new captain + arena team name
72 ERR_ARENA_TEAM_DISBANDED_S = 9 // captain name + arena team name
73};
74
75// EnumUtils: DESCRIBE THIS
77{
81};
82
84{
86 std::string Name;
94
95 void ModifyPersonalRating(Player* player, int32 mod, uint32 type);
96 void ModifyMatchmakerRating(int32 mod, uint32 slot);
97};
98
100{
107};
108
109#define MAX_ARENA_SLOT 3 // 0..2 slots
110
112{
113 public:
114 ArenaTeam();
115 ~ArenaTeam();
116
117 bool Create(ObjectGuid captainGuid, uint8 type, std::string const& teamName, uint32 backgroundColor, uint8 emblemStyle, uint32 emblemColor, uint8 borderStyle, uint32 borderColor);
118 void Disband(WorldSession* session);
119 void Disband();
120
121 typedef std::list<ArenaTeamMember> MemberList;
122
123 uint32 GetId() const { return TeamId; }
124 uint32 GetType() const { return Type; }
125 uint8 GetSlot() const { return GetSlotByType(GetType()); }
126 static uint8 GetSlotByType(uint32 type);
127 static uint8 GetTypeBySlot(uint8 slot);
128 ObjectGuid GetCaptain() const { return CaptainGuid; }
129 std::string const& GetName() const { return TeamName; }
130 ArenaTeamStats const& GetStats() const { return Stats; }
131
132 uint32 GetRating() const { return Stats.Rating; }
133 uint32 GetAverageMMR(Group* group) const;
134
135 void SetCaptain(ObjectGuid guid);
136 bool SetName(std::string const& name);
137 bool AddMember(ObjectGuid PlayerGuid);
138 void DelMember(ObjectGuid guid, bool cleanDb);
139
140 size_t GetMembersSize() const { return Members.size(); }
141 bool Empty() const { return Members.empty(); }
142 MemberList::iterator m_membersBegin() { return Members.begin(); }
143 MemberList::iterator m_membersEnd() { return Members.end(); }
144 bool IsMember(ObjectGuid guid) const;
145
146 ArenaTeamMember* GetMember(ObjectGuid guid);
147 ArenaTeamMember* GetMember(std::string const& name);
148
149 bool IsFighting() const;
150
151 bool LoadArenaTeamFromDB(QueryResult arenaTeamDataResult);
152 bool LoadMembersFromDB(QueryResult arenaTeamMembersResult);
153 void LoadStatsFromDB(uint32 ArenaTeamId);
154 void SaveToDB(bool forceMemberSave = false);
155
156 void BroadcastPacket(WorldPacket* packet);
157 void NotifyStatsChanged();
158
159 void SendStats(WorldSession* session);
160 void Inspect(WorldSession* session, ObjectGuid guid);
161
162 uint32 GetPoints(uint32 MemberRating);
163 int32 GetMatchmakerRatingMod(uint32 ownRating, uint32 opponentRating, bool won);
164 int32 GetRatingMod(uint32 ownRating, uint32 opponentRating, bool won);
165 float GetChanceAgainst(uint32 ownRating, uint32 opponentRating);
166 int32 WonAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int32& rating_change);
167 void MemberWon(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange);
168 int32 LostAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int32& rating_change);
169 void MemberLost(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
170 void OfflineMemberLost(ObjectGuid guid, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
171
172 bool FinishWeek(); // returns true if arena team played this week
173 void FinishGame(int32 mod);
174
175 protected:
176
179 std::string TeamName;
181
182 uint32 BackgroundColor; // ARGB format
183 uint8 EmblemStyle; // icon id
184 uint32 EmblemColor; // ARGB format
185 uint8 BorderStyle; // border image id
186 uint32 BorderColor; // ARGB format
187
190};
191#endif
ArenaTeamCommandTypes
Definition: ArenaTeam.h:33
@ ERR_ARENA_TEAM_FOUNDER_S
Definition: ArenaTeam.h:37
@ ERR_ARENA_TEAM_INVITE_SS
Definition: ArenaTeam.h:35
@ ERR_ARENA_TEAM_QUIT_S
Definition: ArenaTeam.h:36
@ ERR_ARENA_TEAM_CREATE_S
Definition: ArenaTeam.h:34
ArenaTeamTypes
Definition: ArenaTeam.h:77
@ ARENA_TEAM_5v5
Definition: ArenaTeam.h:80
@ ARENA_TEAM_2v2
Definition: ArenaTeam.h:78
@ ARENA_TEAM_3v3
Definition: ArenaTeam.h:79
ArenaTeamCommandErrors
Definition: ArenaTeam.h:41
@ ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S
Definition: ArenaTeam.h:59
@ ERR_ARENA_TEAM_TARGET_TOO_HIGH_S
Definition: ArenaTeam.h:58
@ ERR_ARENA_TEAM_NAME_INVALID
Definition: ArenaTeam.h:48
@ ERR_ALREADY_IN_ARENA_TEAM_S
Definition: ArenaTeam.h:45
@ ERR_ARENA_TEAM_INTERNAL
Definition: ArenaTeam.h:43
@ ERR_ARENA_TEAM_CREATED
Definition: ArenaTeam.h:42
@ ERR_INVITED_TO_ARENA_TEAM
Definition: ArenaTeam.h:46
@ ERR_ALREADY_IN_ARENA_TEAM
Definition: ArenaTeam.h:44
@ ERR_ARENA_TEAM_IGNORING_YOU_S
Definition: ArenaTeam.h:56
@ ERR_ARENA_TEAM_NOT_FOUND
Definition: ArenaTeam.h:60
@ ERR_ARENA_TEAMS_LOCKED
Definition: ArenaTeam.h:61
@ ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM
Definition: ArenaTeam.h:52
@ ERR_ARENA_TEAM_LEADER_LEAVE_S
Definition: ArenaTeam.h:50
@ ERR_ARENA_TEAM_PERMISSIONS
Definition: ArenaTeam.h:51
@ ERR_ARENA_TEAM_NOT_ALLIED
Definition: ArenaTeam.h:55
@ ERR_ARENA_TEAM_TARGET_TOO_LOW_S
Definition: ArenaTeam.h:57
@ ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S
Definition: ArenaTeam.h:54
@ ERR_ALREADY_INVITED_TO_ARENA_TEAM_S
Definition: ArenaTeam.h:47
@ ERR_ARENA_TEAM_NAME_EXISTS_S
Definition: ArenaTeam.h:49
@ ERR_ARENA_TEAM_TOO_MANY_CREATE
Definition: ArenaTeam.h:62
@ ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM_SS
Definition: ArenaTeam.h:53
ArenaTeamEvents
Definition: ArenaTeam.h:66
@ ERR_ARENA_TEAM_LEADER_CHANGED_SSS
Definition: ArenaTeam.h:71
@ ERR_ARENA_TEAM_REMOVE_SSS
Definition: ArenaTeam.h:69
@ ERR_ARENA_TEAM_LEAVE_SS
Definition: ArenaTeam.h:68
@ ERR_ARENA_TEAM_DISBANDED_S
Definition: ArenaTeam.h:72
@ ERR_ARENA_TEAM_JOIN_SS
Definition: ArenaTeam.h:67
@ ERR_ARENA_TEAM_LEADER_IS_SS
Definition: ArenaTeam.h:70
std::shared_ptr< ResultSet > QueryResult
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
Definition: QuestPools.cpp:50
TeamId
Stats
MemberList::iterator m_membersBegin()
Definition: ArenaTeam.h:142
uint32 EmblemColor
Definition: ArenaTeam.h:184
ObjectGuid CaptainGuid
Definition: ArenaTeam.h:180
ArenaTeamStats const & GetStats() const
Definition: ArenaTeam.h:130
bool Empty() const
Definition: ArenaTeam.h:141
ObjectGuid GetCaptain() const
Definition: ArenaTeam.h:128
uint32 GetRating() const
Definition: ArenaTeam.h:132
uint32 BorderColor
Definition: ArenaTeam.h:186
std::list< ArenaTeamMember > MemberList
Definition: ArenaTeam.h:121
uint32 TeamId
Definition: ArenaTeam.h:177
ArenaTeamStats Stats
Definition: ArenaTeam.h:189
size_t GetMembersSize() const
Definition: ArenaTeam.h:140
uint8 Type
Definition: ArenaTeam.h:178
uint8 EmblemStyle
Definition: ArenaTeam.h:183
uint8 BorderStyle
Definition: ArenaTeam.h:185
uint8 GetSlot() const
Definition: ArenaTeam.h:125
uint32 GetType() const
Definition: ArenaTeam.h:124
std::string TeamName
Definition: ArenaTeam.h:179
MemberList Members
Definition: ArenaTeam.h:188
uint32 BackgroundColor
Definition: ArenaTeam.h:182
void LoadStatsFromDB(uint32 ArenaTeamId)
std::string const & GetName() const
Definition: ArenaTeam.h:129
uint32 GetPoints(uint32 MemberRating)
MemberList::iterator m_membersEnd()
Definition: ArenaTeam.h:143
uint32 GetId() const
Definition: ArenaTeam.h:123
Definition: Group.h:197
Player session in the World.
Definition: WorldSession.h:963
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
Definition: Vignette.cpp:72
uint16 PersonalRating
Definition: ArenaTeam.h:92
uint16 WeekWins
Definition: ArenaTeam.h:89
uint16 SeasonWins
Definition: ArenaTeam.h:91
std::string Name
Definition: ArenaTeam.h:86
uint16 WeekGames
Definition: ArenaTeam.h:88
ObjectGuid Guid
Definition: ArenaTeam.h:85
uint16 MatchMakerRating
Definition: ArenaTeam.h:93
uint16 SeasonGames
Definition: ArenaTeam.h:90
uint16 SeasonGames
Definition: ArenaTeam.h:104
uint16 WeekGames
Definition: ArenaTeam.h:102
uint16 WeekWins
Definition: ArenaTeam.h:103
uint16 Rating
Definition: ArenaTeam.h:101
uint16 SeasonWins
Definition: ArenaTeam.h:105