aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-08-16 00:44:31 -0300
committerariel- <ariel-@users.noreply.github.com>2016-08-16 00:44:31 -0300
commit9cdbf903e28fca303c580b096016e26c402a6a7f (patch)
treedf5625de01bd573d42a2f6197a58e270da703195 /src
parent82517ef46277170cc8db703d9e3a22078a4acb66 (diff)
Core/BattlegroundMgr: Update Battlegrounds each second instead of every tick (just like Battlefield).
There are some battleground scripts (like SOTA) performing object access every update, this should help throttle the cpu usage.
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;