diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2016-08-16 00:44:31 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2016-08-16 00:44:31 -0300 |
| commit | 9cdbf903e28fca303c580b096016e26c402a6a7f (patch) | |
| tree | df5625de01bd573d42a2f6197a58e270da703195 | |
| parent | 82517ef46277170cc8db703d9e3a22078a4acb66 (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.
| -rw-r--r-- | src/server/game/Battlegrounds/BattlegroundMgr.cpp | 40 | ||||
| -rw-r--r-- | src/server/game/Battlegrounds/BattlegroundMgr.h | 8 |
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; |
