diff options
author | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
---|---|---|
committer | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
commit | e585187b248f48b3c6e9247b49fa07c6565d65e5 (patch) | |
tree | 637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/game/ArenaTeam.h | |
parent | 26b5e033ffde3d161382fc9addbfa99738379641 (diff) |
*Backed out changeset 3be01fb200a5
--HG--
branch : trunk
Diffstat (limited to 'src/game/ArenaTeam.h')
-rw-r--r-- | src/game/ArenaTeam.h | 37 |
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; }; |