aboutsummaryrefslogtreecommitdiff
path: root/src/game/ArenaTeam.h
diff options
context:
space:
mode:
authormegamage <none@none>2008-12-19 16:05:13 -0600
committermegamage <none@none>2008-12-19 16:05:13 -0600
commit400f7b859693eef1043a75a18c369dd871ffb721 (patch)
tree5f480c9380d4125a57cbeb4315ef22ad2ab32a71 /src/game/ArenaTeam.h
parentcebaa3a703f36efeedc5fd786b6eacb7a93585c2 (diff)
*Temp fix for crash caused by AV creature. Need to find a way to allow summoned creatures to use RandomMovement.
--HG-- branch : trunk
Diffstat (limited to 'src/game/ArenaTeam.h')
-rw-r--r--src/game/ArenaTeam.h96
1 files changed, 62 insertions, 34 deletions
diff --git a/src/game/ArenaTeam.h b/src/game/ArenaTeam.h
index 2e9f32a97f7..3c6972cdcd0 100644
--- a/src/game/ArenaTeam.h
+++ b/src/game/ArenaTeam.h
@@ -45,7 +45,9 @@ enum ArenaTeamCommandErrors
ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM = 0x09,
ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM_SS = 0x0A,
ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S = 0x0B,
- ERR_ARENA_TEAM_NOT_ALLIED = 0x0C
+ ERR_ARENA_TEAM_NOT_ALLIED = 0x0C,
+ ERR_ARENA_TEAM_PLAYER_TO_LOW = 0x15,
+ ERR_ARENA_TEAM_FULL = 0x16
};
enum ArenaTeamEvents
@@ -87,14 +89,22 @@ struct ArenaTeamMember
{
uint64 guid;
std::string name;
- //uint32 unk2;
- //uint8 unk1;
uint8 Class;
uint32 games_week;
uint32 wins_week;
uint32 games_season;
uint32 wins_season;
- //uint32 personal_rating;
+ uint32 personal_rating;
+
+ void ModifyPersonalRating(Player* plr, int32 mod, uint32 slot)
+ {
+ if (personal_rating + mod < 0)
+ personal_rating = 0;
+ else
+ personal_rating += mod;
+ if(plr)
+ plr->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot*6) + 5, personal_rating);
+ }
};
struct ArenaTeamStats
@@ -115,58 +125,76 @@ class ArenaTeam
ArenaTeam();
~ArenaTeam();
- bool create(uint64 CaptainGuid, uint32 type, std::string ArenaTeamName);
+ bool Create(uint64 CaptainGuid, uint32 type, std::string ArenaTeamName);
void Disband(WorldSession *session);
typedef std::list<ArenaTeamMember> MemberList;
- uint32 GetId() const { return Id; }
- uint32 GetType() const { return Type; }
- uint8 GetSlot() const;
+ uint32 GetId() const { return Id; }
+ uint32 GetType() const { return Type; }
+ uint8 GetSlot() const { return GetSlotByType(GetType()); }
static uint8 GetSlotByType(uint32 type);
- const uint64& GetCaptain() const { return CaptainGuid; }
- std::string GetName() const { return Name; }
+ const uint64& GetCaptain() const { return CaptainGuid; }
+ std::string GetName() const { return Name; }
const ArenaTeamStats& GetStats() const { return stats; }
void SetStats(uint32 stat_type, uint32 value);
- uint32 GetRating() const { return stats.rating; }
+ uint32 GetRating() const { return stats.rating; }
- uint32 GetEmblemStyle() const { return EmblemStyle; }
- uint32 GetEmblemColor() const { return EmblemColor; }
- uint32 GetBorderStyle() const { return BorderStyle; }
- uint32 GetBorderColor() const { return BorderColor; }
+ uint32 GetEmblemStyle() const { return EmblemStyle; }
+ uint32 GetEmblemColor() const { return EmblemColor; }
+ uint32 GetBorderStyle() const { return BorderStyle; }
+ uint32 GetBorderColor() const { return BorderColor; }
uint32 GetBackgroundColor() const { return BackgroundColor; }
- void SetCaptain(uint64 guid);
- bool AddMember(uint64 PlayerGuid);
+ 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);
- uint32 GetMembersSize() const { return members.size(); }
- MemberList::iterator membersbegin(){ return members.begin(); }
- MemberList::iterator membersEnd(){ return members.end(); }
- bool HaveMember(uint64 guid) const;
- ArenaTeamMember* GetMember(uint64 guid)
+ size_t GetMembersSize() const { return members.size(); }
+ bool Empty() const { return members.empty(); }
+ MemberList::iterator membersBegin() { return members.begin(); }
+ MemberList::iterator membersEnd() { return members.end(); }
+ bool HaveMember(const uint64& guid) const;
+
+ ArenaTeamMember* GetMember(const uint64& guid)
{
for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr)
- if(itr->guid==guid)
+ if(itr->guid == guid)
return &(*itr);
return NULL;
}
- ArenaTeamMember* GetMember(std::string& name)
+
+ ArenaTeamMember* GetMember(const std::string& name)
{
for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr)
- if(itr->name==name)
+ if(itr->name == name)
return &(*itr);
return NULL;
}
+ bool IsFighting() const
+ {
+ for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
+ {
+ if (Player *p = objmgr.GetPlayer(itr->guid))
+ {
+ if (p->GetMap()->IsBattleArena())
+ return true;
+ }
+ }
+ return false;
+ }
+
bool LoadArenaTeamFromDB(uint32 ArenaTeamId);
void LoadMembersFromDB(uint32 ArenaTeamId);
void LoadStatsFromDB(uint32 ArenaTeamId);
- void LoadPlayerStats(ArenaTeamMember* member);
void SaveToDB();
@@ -178,18 +206,18 @@ class ArenaTeam
void InspectStats(WorldSession *session, uint64 guid);
uint32 GetPoints(uint32 MemberRating);
- float GetChanceAgainst(uint32 rating);
- int32 WonAgainstChance(float chance);
- void MemberWon(Player * plr, uint32 againstrating);
- int32 LostAgainstChance(float chance);
- void MemberLost(Player * plr, uint32 againstrating);
-
- void UpdateArenaPointsHelper();
+ float GetChanceAgainst(uint32 own_rating, uint32 enemy_rating);
+ int32 WonAgainst(uint32 againstRating);
+ void MemberWon(Player * plr, uint32 againstRating);
+ int32 LostAgainst(uint32 againstRating);
+ void MemberLost(Player * plr, uint32 againstRating);
- void FinishWeek();
+ void UpdateArenaPointsHelper(std::map<uint32, uint32> & PlayerPoints);
void NotifyStatsChanged();
+ void FinishWeek();
+
protected:
uint32 Id;