Updated Copyright year to 2013
[getmangos.git] / src / game / ArenaTeam.h
blob916205aff01509a87482e22c08d1e0c4cc537b92
1 /*
2 * Copyright (C) 2005-2013 MaNGOS <http://getmangos.com/>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #ifndef MANGOSSERVER_ARENATEAM_H
20 #define MANGOSSERVER_ARENATEAM_H
22 #include "Common.h"
23 #include "ObjectGuid.h"
24 #include "SharedDefines.h"
26 class QueryResult;
27 class WorldPacket;
28 class WorldSession;
29 class Player;
31 enum ArenaTeamCommandTypes
33 ERR_ARENA_TEAM_CREATE_S = 0x00,
34 ERR_ARENA_TEAM_INVITE_SS = 0x01,
35 ERR_ARENA_TEAM_QUIT_S = 0x03,
36 ERR_ARENA_TEAM_FOUNDER_S = 0x0E
39 enum ArenaTeamCommandErrors
41 ERR_ARENA_TEAM_INTERNAL = 0x01,
42 ERR_ALREADY_IN_ARENA_TEAM = 0x02,
43 ERR_ALREADY_IN_ARENA_TEAM_S = 0x03,
44 ERR_INVITED_TO_ARENA_TEAM = 0x04,
45 ERR_ALREADY_INVITED_TO_ARENA_TEAM_S = 0x05,
46 ERR_ARENA_TEAM_NAME_INVALID = 0x06,
47 ERR_ARENA_TEAM_NAME_EXISTS_S = 0x07,
48 ERR_ARENA_TEAM_LEADER_LEAVE_S = 0x08,
49 ERR_ARENA_TEAM_PERMISSIONS = 0x08,
50 ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM = 0x09,
51 ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM_SS = 0x0A,
52 ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S = 0x0B,
53 ERR_ARENA_TEAM_NOT_ALLIED = 0x0C,
54 ERR_ARENA_TEAM_IGNORING_YOU_S = 0x13,
55 ERR_ARENA_TEAM_TARGET_TOO_LOW_S = 0x15,
56 ERR_ARENA_TEAM_TARGET_TOO_HIGH_S = 0x16,
57 ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S = 0x17,
58 ERR_ARENA_TEAM_NOT_FOUND = 0x1B,
59 ERR_ARENA_TEAMS_LOCKED = 0x1E,
60 ERR_ARENA_TEAM_TOO_MANY_CREATE = 0x21,
63 enum ArenaTeamEvents
65 ERR_ARENA_TEAM_JOIN_SS = 4, // player name + arena team name
66 ERR_ARENA_TEAM_LEAVE_SS = 5, // player name + arena team name
67 ERR_ARENA_TEAM_REMOVE_SSS = 6, // player name + arena team name + captain name
68 ERR_ARENA_TEAM_LEADER_IS_SS = 7, // player name + arena team name
69 ERR_ARENA_TEAM_LEADER_CHANGED_SSS = 8, // old captain + new captain + arena team name
70 ERR_ARENA_TEAM_DISBANDED_S = 9, // captain name + arena team name
74 need info how to send these ones:
75 ERR_ARENA_TEAM_YOU_JOIN_S - client show it automatically when accept invite
76 ERR_ARENA_TEAM_TARGET_TOO_LOW_S
77 ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S
78 ERR_ARENA_TEAM_LEVEL_TOO_LOW_I
81 enum ArenaTeamStatTypes
83 STAT_TYPE_RATING = 0,
84 STAT_TYPE_GAMES_WEEK = 1,
85 STAT_TYPE_WINS_WEEK = 2,
86 STAT_TYPE_GAMES_SEASON = 3,
87 STAT_TYPE_WINS_SEASON = 4,
88 STAT_TYPE_RANK = 5
91 struct ArenaTeamMember
93 ObjectGuid guid;
94 std::string name;
95 uint8 Class;
96 uint32 games_week;
97 uint32 wins_week;
98 uint32 games_season;
99 uint32 wins_season;
100 uint32 personal_rating;
102 void ModifyPersonalRating(Player* plr, int32 mod, uint32 slot);
105 struct ArenaTeamStats
107 uint32 rating;
108 uint32 games_week;
109 uint32 wins_week;
110 uint32 games_season;
111 uint32 wins_season;
112 uint32 rank;
115 #define MAX_ARENA_SLOT 3 // 0..2 slots
117 class ArenaTeam
119 public:
120 ArenaTeam();
121 ~ArenaTeam();
123 bool Create(ObjectGuid captainGuid, ArenaType type, std::string arenaTeamName);
124 void Disband(WorldSession* session);
126 typedef std::list<ArenaTeamMember> MemberList;
128 uint32 GetId() const { return m_TeamId; }
129 ArenaType GetType() const { return m_Type; }
130 uint8 GetSlot() const { return GetSlotByType(GetType()); }
131 static uint8 GetSlotByType(ArenaType type);
132 static ArenaType GetTypeBySlot(uint8 slot);
133 ObjectGuid GetCaptainGuid() const { return m_CaptainGuid; }
134 std::string GetName() const { return m_Name; }
135 const ArenaTeamStats& GetStats() const { return m_stats; }
136 void SetStats(uint32 stat_type, uint32 value);
137 uint32 GetRating() const { return m_stats.rating; }
139 uint32 GetEmblemStyle() const { return m_EmblemStyle; }
140 uint32 GetEmblemColor() const { return m_EmblemColor; }
141 uint32 GetBorderStyle() const { return m_BorderStyle; }
142 uint32 GetBorderColor() const { return m_BorderColor; }
143 uint32 GetBackgroundColor() const { return m_BackgroundColor; }
145 void SetCaptain(ObjectGuid guid);
146 bool AddMember(ObjectGuid playerGuid);
147 void DelMember(ObjectGuid guid);
149 void SetEmblem(uint32 backgroundColor, uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor);
151 size_t GetMembersSize() const { return m_members.size(); }
152 size_t GetMaxMembersSize() const { return size_t(GetType() * 2); }
153 bool Empty() const { return m_members.empty(); }
154 MemberList::iterator m_membersBegin() { return m_members.begin(); }
155 MemberList::iterator m_membersEnd() { return m_members.end(); }
156 bool HaveMember(ObjectGuid guid) const;
158 ArenaTeamMember* GetMember(ObjectGuid guid)
160 for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
161 if (itr->guid == guid)
162 return &(*itr);
164 return NULL;
167 ArenaTeamMember* GetMember(const std::string& name)
169 for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
170 if (itr->name == name)
171 return &(*itr);
173 return NULL;
176 bool IsFighting() const;
178 bool LoadArenaTeamFromDB(QueryResult* arenaTeamDataResult);
179 bool LoadMembersFromDB(QueryResult* arenaTeamMembersResult);
180 void LoadStatsFromDB(uint32 ArenaTeamId);
182 void SaveToDB();
184 void BroadcastPacket(WorldPacket* packet);
186 void BroadcastEvent(ArenaTeamEvents event, ObjectGuid guid, char const* str1 = NULL, char const* str2 = NULL, char const* str3 = NULL);
187 void BroadcastEvent(ArenaTeamEvents event, char const* str1 = NULL, char const* str2 = NULL, char const* str3 = NULL)
189 BroadcastEvent(event, ObjectGuid(), str1, str2, str3);
192 void Roster(WorldSession* session);
193 void Query(WorldSession* session);
194 void Stats(WorldSession* session);
195 void InspectStats(WorldSession* session, ObjectGuid guid);
197 float GetChanceAgainst(uint32 own_rating, uint32 enemy_rating);
198 int32 WonAgainst(uint32 againstRating);
199 void MemberWon(Player* plr, uint32 againstRating);
200 int32 LostAgainst(uint32 againstRating);
201 void MemberLost(Player* plr, uint32 againstRating);
202 void OfflineMemberLost(ObjectGuid guid, uint32 againstRating);
204 void NotifyStatsChanged();
206 void FinishWeek();
207 void FinishGame(int32 mod);
209 protected:
211 uint32 m_TeamId;
212 ArenaType m_Type;
213 std::string m_Name;
214 ObjectGuid m_CaptainGuid;
216 uint32 m_BackgroundColor; // ARGB format
217 uint32 m_EmblemStyle; // icon id
218 uint32 m_EmblemColor; // ARGB format
219 uint32 m_BorderStyle; // border image id
220 uint32 m_BorderColor; // ARGB format
222 MemberList m_members;
223 ArenaTeamStats m_stats;
225 #endif