diff options
Diffstat (limited to 'src/game/BattleGroundMgr.h')
-rw-r--r-- | src/game/BattleGroundMgr.h | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/src/game/BattleGroundMgr.h b/src/game/BattleGroundMgr.h index 9100142ebd0..2de067d3639 100644 --- a/src/game/BattleGroundMgr.h +++ b/src/game/BattleGroundMgr.h @@ -17,32 +17,23 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - #ifndef __BATTLEGROUNDMGR_H #define __BATTLEGROUNDMGR_H - #include "Common.h" #include "Policies/Singleton.h" - #include "BattleGround.h" - typedef std::map<uint32, BattleGround*> BattleGroundSet; - //this container can't be deque, because deque doesn't like removing the last element - if you remove it, it invalidates next iterator and crash appears typedef std::list<BattleGround*> BGFreeSlotQueueType; - typedef UNORDERED_MAP<uint32, BattleGroundTypeId> BattleMastersMap; - #define BATTLEGROUND_ARENA_POINT_DISTRIBUTION_DAY 86400 // seconds in a day #define COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME 10 - struct GroupQueueInfo; // type predefinition struct PlayerQueueInfo // stores information for players in queue { uint32 LastOnlineTime; // for tracking and removing offline players from queue after 5 minutes GroupQueueInfo * GroupInfo; // pointer to the associated groupqueueinfo }; - struct GroupQueueInfo // stores information about the group in queue (also used when joined as solo!) { std::map<uint64, PlayerQueueInfo*> Players; // player queue info map @@ -57,7 +48,6 @@ struct GroupQueueInfo // stores informatio uint32 ArenaTeamRating; // if rated match, inited to the rating of the team uint32 OpponentsTeamRating; // for rated arena matches }; - enum BattleGroundQueueGroupTypes { BG_QUEUE_PREMADE_ALLIANCE = 0, @@ -66,16 +56,13 @@ enum BattleGroundQueueGroupTypes BG_QUEUE_NORMAL_HORDE = 3 }; #define BG_QUEUE_GROUP_TYPES_COUNT 4 - class BattleGround; class BattleGroundQueue { public: BattleGroundQueue(); ~BattleGroundQueue(); - void Update(BattleGroundTypeId bgTypeId, BGQueueIdBasedOnLevel queue_id, uint8 arenaType = 0, bool isRated = false, uint32 minRating = 0); - void FillPlayersToBG(BattleGround* bg, BGQueueIdBasedOnLevel queue_id); bool CheckPremadeMatch(BGQueueIdBasedOnLevel queue_id, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam); bool CheckNormalMatch(BattleGround* bg_template, BGQueueIdBasedOnLevel queue_id, uint32 minPlayers, uint32 maxPlayers); @@ -85,16 +72,12 @@ class BattleGroundQueue void RemovePlayer(const uint64& guid, bool decreaseInvitedCount); void PlayerInvitedToBGUpdateAverageWaitTime(GroupQueueInfo* ginfo, BGQueueIdBasedOnLevel queue_id); uint32 GetAverageQueueWaitTime(GroupQueueInfo* ginfo, BGQueueIdBasedOnLevel queue_id); - void DecreaseGroupLength(uint32 queueId, uint32 AsGroup); void AnnounceWorld(GroupQueueInfo *ginfo, const uint64& playerGUID, bool isAddedToQueue); - typedef std::map<uint64, PlayerQueueInfo> QueuedPlayersMap; QueuedPlayersMap m_QueuedPlayers; - //we need constant add to begin and constant remove / add from the end, therefore deque suits our problem well typedef std::list<GroupQueueInfo*> GroupsQueueType; - /* This two dimensional array is used to store All queued groups First dimension specifies the bgTypeId @@ -105,7 +88,6 @@ class BattleGroundQueue BG_QUEUE_NORMAL_HORDE is used for normal (or small) horde groups or non-rated arena matches */ GroupsQueueType m_QueuedGroups[MAX_BATTLEGROUND_QUEUES][BG_QUEUE_GROUP_TYPES_COUNT]; - // class to select and invite groups to bg class SelectionPool { @@ -119,18 +101,14 @@ class BattleGroundQueue private: uint32 PlayerCount; }; - //one selection pool for horde, other one for alliance SelectionPool m_SelectionPools[BG_TEAMS_COUNT]; - private: - bool InviteGroupToBG(GroupQueueInfo * ginfo, BattleGround * bg, uint32 side); uint32 m_WaitTimes[BG_TEAMS_COUNT][MAX_BATTLEGROUND_QUEUES][COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME]; uint32 m_WaitTimeLastPlayer[BG_TEAMS_COUNT][MAX_BATTLEGROUND_QUEUES]; uint32 m_SumOfWaitTimes[BG_TEAMS_COUNT][MAX_BATTLEGROUND_QUEUES]; }; - /* This class is used to invite player to BG again, when minute lasts from his first invitation it is capable to solve all possibilities @@ -143,7 +121,6 @@ class BGQueueInviteEvent : public BasicEvent { }; virtual ~BGQueueInviteEvent() {}; - virtual bool Execute(uint64 e_time, uint32 p_time); virtual void Abort(uint64 e_time); private: @@ -152,7 +129,6 @@ class BGQueueInviteEvent : public BasicEvent BattleGroundTypeId m_BgTypeId; uint32 m_RemoveTime; }; - /* This class is used to remove player from BG queue after 1 minute 20 seconds from first invitation We must store removeInvite time in case player left queue and joined and is invited again @@ -164,9 +140,7 @@ class BGQueueRemoveEvent : public BasicEvent BGQueueRemoveEvent(const uint64& pl_guid, uint32 bgInstanceGUID, BattleGroundTypeId BgTypeId, BattleGroundQueueTypeId bgQueueTypeId, uint32 removeTime) : m_PlayerGuid(pl_guid), m_BgInstanceGUID(bgInstanceGUID), m_RemoveTime(removeTime), m_BgTypeId(BgTypeId), m_BgQueueTypeId(bgQueueTypeId) {} - virtual ~BGQueueRemoveEvent() {} - virtual bool Execute(uint64 e_time, uint32 p_time); virtual void Abort(uint64 e_time); private: @@ -176,7 +150,6 @@ class BGQueueRemoveEvent : public BasicEvent BattleGroundTypeId m_BgTypeId; BattleGroundQueueTypeId m_BgQueueTypeId; }; - class BattleGroundMgr { public: @@ -184,7 +157,6 @@ class BattleGroundMgr BattleGroundMgr(); ~BattleGroundMgr(); void Update(uint32 diff); - /* Packet Building */ void BuildPlayerJoinedBattleGroundPacket(WorldPacket *data, Player *plr); void BuildPlayerLeftBattleGroundPacket(WorldPacket *data, const uint64& guid); @@ -195,41 +167,30 @@ class BattleGroundMgr void BuildBattleGroundStatusPacket(WorldPacket *data, BattleGround *bg, uint8 QueueSlot, uint8 StatusID, uint32 Time1, uint32 Time2, uint8 arenatype); void BuildPlaySoundPacket(WorldPacket *data, uint32 soundid); void SendAreaSpiritHealerQueryOpcode(Player *pl, BattleGround *bg, const uint64& guid); - /* Battlegrounds */ BattleGround* GetBattleGroundThroughClientInstance(uint32 instanceId, BattleGroundTypeId bgTypeId); BattleGround* GetBattleGround(uint32 InstanceID, BattleGroundTypeId bgTypeId); //there must be uint32 because MAX_BATTLEGROUND_TYPE_ID means unknown - BattleGround* GetBattleGroundTemplate(BattleGroundTypeId bgTypeId); BattleGround* CreateNewBattleGround(BattleGroundTypeId bgTypeId, BGQueueIdBasedOnLevel queue_id, uint8 arenaType, bool isRated); - uint32 CreateBattleGround(BattleGroundTypeId bgTypeId, bool IsArena, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam, uint32 LevelMin, uint32 LevelMax, char* BattleGroundName, uint32 MapID, float Team1StartLocX, float Team1StartLocY, float Team1StartLocZ, float Team1StartLocO, float Team2StartLocX, float Team2StartLocY, float Team2StartLocZ, float Team2StartLocO); - void AddBattleGround(uint32 InstanceID, BattleGroundTypeId bgTypeId, BattleGround* BG) { m_BattleGrounds[bgTypeId][InstanceID] = BG; }; void RemoveBattleGround(uint32 instanceID, BattleGroundTypeId bgTypeId) { m_BattleGrounds[bgTypeId].erase(instanceID); } uint32 CreateClientVisibleInstanceId(BattleGroundTypeId bgTypeId, BGQueueIdBasedOnLevel queue_id); - void CreateInitialBattleGrounds(); void DeleteAllBattleGrounds(); - void SendToBattleGround(Player *pl, uint32 InstanceID, BattleGroundTypeId bgTypeId); - /* Battleground queues */ //these queues are instantiated when creating BattlegroundMrg BattleGroundQueue m_BattleGroundQueues[MAX_BATTLEGROUND_QUEUE_TYPES]; // public, because we need to access them in BG handler code - BGFreeSlotQueueType BGFreeSlotQueue[MAX_BATTLEGROUND_TYPE_ID]; - void ScheduleQueueUpdate(BattleGroundQueueTypeId bgQueueTypeId, BattleGroundTypeId bgTypeId, BGQueueIdBasedOnLevel queue_id); uint32 GetMaxRatingDifference() const; uint32 GetRatingDiscardTimer() const; uint32 GetPrematureFinishTime() const; - void InitAutomaticArenaPointDistribution(); void DistributeArenaPoints(); void ToggleArenaTesting(); void ToggleTesting(); - void SetHolidayWeekends(uint32 mask); void LoadBattleMastersEntry(); BattleGroundTypeId GetBattleMasterBG(uint32 entry) const @@ -239,20 +200,16 @@ class BattleGroundMgr return itr->second; return BATTLEGROUND_WS; } - bool isArenaTesting() const { return m_ArenaTesting; } bool isTesting() const { return m_Testing; } - static bool IsArenaType(BattleGroundTypeId bgTypeId); static bool IsBattleGroundType(BattleGroundTypeId bgTypeId) { return !BattleGroundMgr::IsArenaType(bgTypeId); } static BattleGroundQueueTypeId BGQueueTypeId(BattleGroundTypeId bgTypeId, uint8 arenaType); static BattleGroundTypeId BGTemplateId(BattleGroundQueueTypeId bgQueueTypeId); static uint8 BGArenaType(BattleGroundQueueTypeId bgQueueTypeId); - static bool IsBGWeekend(BattleGroundTypeId bgTypeId); private: BattleMastersMap mBattleMastersMap; - /* Battlegrounds */ BattleGroundSet m_BattleGrounds[MAX_BATTLEGROUND_TYPE_ID]; std::vector<uint32>m_QueueUpdateScheduler; @@ -263,7 +220,6 @@ class BattleGroundMgr bool m_ArenaTesting; bool m_Testing; }; - #define sBattleGroundMgr Trinity::Singleton<BattleGroundMgr>::Instance() #endif |