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
23 #include "ObjectGuid.h"
24 #include "SharedDefines.h"
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,
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
84 STAT_TYPE_GAMES_WEEK
= 1,
85 STAT_TYPE_WINS_WEEK
= 2,
86 STAT_TYPE_GAMES_SEASON
= 3,
87 STAT_TYPE_WINS_SEASON
= 4,
91 struct ArenaTeamMember
100 uint32 personal_rating
;
102 void ModifyPersonalRating(Player
* plr
, int32 mod
, uint32 slot
);
105 struct ArenaTeamStats
115 #define MAX_ARENA_SLOT 3 // 0..2 slots
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
)
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
)
176 bool IsFighting() const;
178 bool LoadArenaTeamFromDB(QueryResult
* arenaTeamDataResult
);
179 bool LoadMembersFromDB(QueryResult
* arenaTeamMembersResult
);
180 void LoadStatsFromDB(uint32 ArenaTeamId
);
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();
207 void FinishGame(int32 mod
);
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
;