aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp40
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.h8
2 files changed, 30 insertions, 18 deletions
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 683547ef3fc..753d0f92ef3 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -51,7 +51,7 @@
BattlegroundMgr::BattlegroundMgr() :
m_NextRatedArenaUpdate(sWorld->getIntConfig(CONFIG_ARENA_RATED_UPDATE_TIMER)),
m_NextAutoDistributionTime(0),
- m_AutoDistributionTimeChecker(0), m_ArenaTesting(false), m_Testing(false)
+ m_AutoDistributionTimeChecker(0), m_UpdateTimer(0), m_ArenaTesting(false), m_Testing(false)
{ }
BattlegroundMgr::~BattlegroundMgr()
@@ -85,28 +85,34 @@ BattlegroundMgr* BattlegroundMgr::instance()
// used to update running battlegrounds, and delete finished ones
void BattlegroundMgr::Update(uint32 diff)
{
- for (BattlegroundDataContainer::iterator itr1 = bgDataStore.begin(); itr1 != bgDataStore.end(); ++itr1)
+ m_UpdateTimer += diff;
+ if (m_UpdateTimer > BATTLEGROUND_OBJECTIVE_UPDATE_INTERVAL)
{
- BattlegroundContainer& bgs = itr1->second.m_Battlegrounds;
- BattlegroundContainer::iterator itrDelete = bgs.begin();
- // first one is template and should not be deleted
- for (BattlegroundContainer::iterator itr = ++itrDelete; itr != bgs.end();)
+ for (BattlegroundDataContainer::iterator itr1 = bgDataStore.begin(); itr1 != bgDataStore.end(); ++itr1)
{
- itrDelete = itr++;
- Battleground* bg = itrDelete->second;
-
- bg->Update(diff);
- if (bg->ToBeDeleted())
+ BattlegroundContainer& bgs = itr1->second.m_Battlegrounds;
+ BattlegroundContainer::iterator itrDelete = bgs.begin();
+ // first one is template and should not be deleted
+ for (BattlegroundContainer::iterator itr = ++itrDelete; itr != bgs.end();)
{
- itrDelete->second = NULL;
- bgs.erase(itrDelete);
- BattlegroundClientIdsContainer& clients = itr1->second.m_ClientBattlegroundIds[bg->GetBracketId()];
- if (!clients.empty())
- clients.erase(bg->GetClientInstanceID());
+ itrDelete = itr++;
+ Battleground* bg = itrDelete->second;
+
+ bg->Update(m_UpdateTimer);
+ if (bg->ToBeDeleted())
+ {
+ itrDelete->second = nullptr;
+ bgs.erase(itrDelete);
+ BattlegroundClientIdsContainer& clients = itr1->second.m_ClientBattlegroundIds[bg->GetBracketId()];
+ if (!clients.empty())
+ clients.erase(bg->GetClientInstanceID());
- delete bg;
+ delete bg;
+ }
}
}
+
+ m_UpdateTimer = 0;
}
// update events timer
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h
index bdfd1745fdc..2542d932e31 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.h
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.h
@@ -29,7 +29,12 @@ typedef std::set<uint32> BattlegroundClientIdsContainer;
typedef std::unordered_map<uint32, BattlegroundTypeId> BattleMastersMap;
-#define BATTLEGROUND_ARENA_POINT_DISTRIBUTION_DAY 86400 // seconds in a day
+enum BattlegroundMisc
+{
+ BATTLEGROUND_ARENA_POINT_DISTRIBUTION_DAY = 86400, // seconds in a day
+
+ BATTLEGROUND_OBJECTIVE_UPDATE_INTERVAL = 1000
+};
struct BattlegroundData
{
@@ -141,6 +146,7 @@ class TC_GAME_API BattlegroundMgr
uint32 m_NextRatedArenaUpdate;
time_t m_NextAutoDistributionTime;
uint32 m_AutoDistributionTimeChecker;
+ uint32 m_UpdateTimer;
bool m_ArenaTesting;
bool m_Testing;
BattleMastersMap mBattleMastersMap;