diff options
| -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; | 
