aboutsummaryrefslogtreecommitdiff
path: root/src/game/ArenaTeam.h
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-17 15:51:44 -0700
committermaximius <none@none>2009-10-17 15:51:44 -0700
commite585187b248f48b3c6e9247b49fa07c6565d65e5 (patch)
tree637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/game/ArenaTeam.h
parent26b5e033ffde3d161382fc9addbfa99738379641 (diff)
*Backed out changeset 3be01fb200a5
--HG-- branch : trunk
Diffstat (limited to 'src/game/ArenaTeam.h')
-rw-r--r--src/game/ArenaTeam.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/game/ArenaTeam.h b/src/game/ArenaTeam.h
index fe7a4d04ea5..dbeac2f09f0 100644
--- a/src/game/ArenaTeam.h
+++ b/src/game/ArenaTeam.h
@@ -17,8 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+
#ifndef TRINITYCORE_ARENATEAM_H
#define TRINITYCORE_ARENATEAM_H
+
enum ArenaTeamCommandTypes
{
ERR_ARENA_TEAM_CREATE_S = 0x00,
@@ -27,6 +29,7 @@ enum ArenaTeamCommandTypes
ERR_ARENA_TEAM_QUIT_S = 0x03,
ERR_ARENA_TEAM_FOUNDER_S = 0x0C // need check, probably wrong...
};
+
enum ArenaTeamCommandErrors
{
//ARENA_TEAM_PLAYER_NO_MORE_IN_ARENA_TEAM = 0x00,
@@ -46,6 +49,7 @@ enum ArenaTeamCommandErrors
ERR_ARENA_TEAM_PLAYER_TO_LOW = 0x15,
ERR_ARENA_TEAM_FULL = 0x16
};
+
enum ArenaTeamEvents
{
ERR_ARENA_TEAM_JOIN_SS = 3, // player name + arena team name
@@ -55,6 +59,7 @@ enum ArenaTeamEvents
ERR_ARENA_TEAM_LEADER_CHANGED_SSS = 7, // old captain + new captain + arena team name
ERR_ARENA_TEAM_DISBANDED_S = 8 // captain name + arena team name
};
+
/*
need info how to send these ones:
ERR_ARENA_TEAM_YOU_JOIN_S - client show it automatically when accept invite
@@ -62,6 +67,7 @@ ERR_ARENA_TEAM_TARGET_TOO_LOW_S
ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S
ERR_ARENA_TEAM_LEVEL_TOO_LOW_I
*/
+
enum ArenaTeamStatTypes
{
STAT_TYPE_RATING = 0,
@@ -71,12 +77,14 @@ enum ArenaTeamStatTypes
STAT_TYPE_WINS_SEASON = 4,
STAT_TYPE_RANK = 5
};
+
enum ArenaTeamTypes
{
ARENA_TEAM_2v2 = 2,
ARENA_TEAM_3v3 = 3,
ARENA_TEAM_5v5 = 5
};
+
struct ArenaTeamMember
{
uint64 guid;
@@ -87,8 +95,10 @@ struct ArenaTeamMember
uint32 games_season;
uint32 wins_season;
uint32 personal_rating;
+
void ModifyPersonalRating(Player* plr, int32 mod, uint32 slot);
};
+
struct ArenaTeamStats
{
uint32 rating;
@@ -98,15 +108,20 @@ struct ArenaTeamStats
uint32 wins_season;
uint32 rank;
};
+
#define MAX_ARENA_SLOT 3 // 0..2 slots
+
class ArenaTeam
{
public:
ArenaTeam();
~ArenaTeam();
+
bool Create(uint64 captainGuid, uint32 type, std::string ArenaTeamName);
void Disband(WorldSession *session);
+
typedef std::list<ArenaTeamMember> MemberList;
+
uint32 GetId() const { return m_TeamId; }
uint32 GetType() const { return m_Type; }
uint8 GetSlot() const { return GetSlotByType(GetType()); }
@@ -116,46 +131,61 @@ class ArenaTeam
const ArenaTeamStats& GetStats() const { return m_stats; }
void SetStats(uint32 stat_type, uint32 value);
uint32 GetRating() const { return m_stats.rating; }
+
uint32 GetEmblemStyle() const { return m_EmblemStyle; }
uint32 GetEmblemColor() const { return m_EmblemColor; }
uint32 GetBorderStyle() const { return m_BorderStyle; }
uint32 GetBorderColor() const { return m_BorderColor; }
uint32 GetBackgroundColor() const { return m_BackgroundColor; }
+
void SetCaptain(const uint64& guid);
bool AddMember(const uint64& PlayerGuid);
+
// Shouldn't be const uint64& ed, because than can reference guid from members on Disband
// and this method removes given record from list. So invalid reference can happen.
void DelMember(uint64 guid);
+
void SetEmblem(uint32 backgroundColor, uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor);
+
size_t GetMembersSize() const { return m_members.size(); }
bool Empty() const { return m_members.empty(); }
MemberList::iterator m_membersBegin() { return m_members.begin(); }
MemberList::iterator m_membersEnd() { return m_members.end(); }
bool HaveMember(const uint64& guid) const;
+
ArenaTeamMember* GetMember(const uint64& guid)
{
for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if(itr->guid == guid)
return &(*itr);
+
return NULL;
}
+
ArenaTeamMember* GetMember(const std::string& name)
{
for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if(itr->name == name)
return &(*itr);
+
return NULL;
}
+
bool IsFighting() const;
+
bool LoadArenaTeamFromDB(uint32 ArenaTeamId);
void LoadMembersFromDB(uint32 ArenaTeamId);
void LoadStatsFromDB(uint32 ArenaTeamId);
+
void SaveToDB();
+
void BroadcastPacket(WorldPacket *packet);
+
void Roster(WorldSession *session);
void Query(WorldSession *session);
void Stats(WorldSession *session);
void InspectStats(WorldSession *session, uint64 guid);
+
uint32 GetPoints(uint32 MemberRating);
float GetChanceAgainst(uint32 own_rating, uint32 enemy_rating);
int32 WonAgainst(uint32 againstRating);
@@ -163,20 +193,27 @@ class ArenaTeam
int32 LostAgainst(uint32 againstRating);
void MemberLost(Player * plr, uint32 againstRating);
void OfflineMemberLost(uint64 guid, uint32 againstRating);
+
void UpdateArenaPointsHelper(std::map<uint32, uint32> & PlayerPoints);
+
void NotifyStatsChanged();
+
void FinishWeek();
void FinishGame(int32 mod);
+
protected:
+
uint32 m_TeamId;
uint32 m_Type;
std::string m_Name;
uint64 m_CaptainGuid;
+
uint32 m_BackgroundColor; // ARGB format
uint32 m_EmblemStyle; // icon id
uint32 m_EmblemColor; // ARGB format
uint32 m_BorderStyle; // border image id
uint32 m_BorderColor; // ARGB format
+
MemberList m_members;
ArenaTeamStats m_stats;
};