public void Update(uint diff) { m_UpdateTimer += diff; if (m_UpdateTimer > 1000) { foreach (var data in bgDataStore.Values) { var bgs = data.m_Battlegrounds; // first one is template and should not be deleted foreach (var pair in bgs.ToList()) { Battleground bg = pair.Value; bg.Update(m_UpdateTimer); if (bg.ToBeDeleted()) { bgs.Remove(pair.Key); var clients = data.m_ClientBattlegroundIds[(int)bg.GetBracketId()]; if (!clients.Empty()) { clients.Remove(bg.GetClientInstanceID()); } bg.Dispose(); } } } m_UpdateTimer = 0; } // update events timer for (var qtype = BattlegroundQueueTypeId.None; qtype < BattlegroundQueueTypeId.Max; ++qtype) { m_BattlegroundQueues[(int)qtype].UpdateEvents(diff); } // update scheduled queues if (!m_QueueUpdateScheduler.Empty()) { List <ulong> scheduled = new List <ulong>(); Extensions.Swap(ref scheduled, ref m_QueueUpdateScheduler); for (byte i = 0; i < scheduled.Count; i++) { uint arenaMMRating = (uint)(scheduled[i] >> 32); byte arenaType = (byte)(scheduled[i] >> 24 & 255); BattlegroundQueueTypeId bgQueueTypeId = (BattlegroundQueueTypeId)(scheduled[i] >> 16 & 255); BattlegroundTypeId bgTypeId = (BattlegroundTypeId)((scheduled[i] >> 8) & 255); BattlegroundBracketId bracket_id = (BattlegroundBracketId)(scheduled[i] & 255); m_BattlegroundQueues[(int)bgQueueTypeId].BattlegroundQueueUpdate(diff, bgTypeId, bracket_id, arenaType, arenaMMRating > 0, arenaMMRating); } } // if rating difference counts, maybe force-update queues if (WorldConfig.GetIntValue(WorldCfg.ArenaMaxRatingDifference) != 0 && WorldConfig.GetIntValue(WorldCfg.ArenaRatedUpdateTimer) != 0) { // it's time to force update if (m_NextRatedArenaUpdate < diff) { // forced update for rated arenas (scan all, but skipped non rated) Log.outDebug(LogFilter.Arena, "BattlegroundMgr: UPDATING ARENA QUEUES"); for (var qtype = BattlegroundQueueTypeId.Arena2v2; qtype <= BattlegroundQueueTypeId.Arena5v5; ++qtype) { for (int bracket = (int)BattlegroundBracketId.First; bracket < (int)BattlegroundBracketId.Max; ++bracket) { m_BattlegroundQueues[(int)qtype].BattlegroundQueueUpdate(diff, BattlegroundTypeId.AA, (BattlegroundBracketId)bracket, (byte)BGArenaType(qtype), true, 0); } } m_NextRatedArenaUpdate = WorldConfig.GetUIntValue(WorldCfg.ArenaRatedUpdateTimer); } else { m_NextRatedArenaUpdate -= diff; } } }
public void Update(uint diff) { m_UpdateTimer += diff; if (m_UpdateTimer > 1000) { foreach (var data in bgDataStore.Values) { var bgs = data.m_Battlegrounds; // first one is template and should not be deleted foreach (var pair in bgs.ToList()) { Battleground bg = pair.Value; bg.Update(m_UpdateTimer); if (bg.ToBeDeleted()) { bgs.Remove(pair.Key); var clients = data.m_ClientBattlegroundIds[(int)bg.GetBracketId()]; if (!clients.Empty()) { clients.Remove(bg.GetClientInstanceID()); } bg.Dispose(); } } } m_UpdateTimer = 0; } // update events timer foreach (var pair in m_BattlegroundQueues) { pair.Value.UpdateEvents(diff); } // update scheduled queues if (!m_QueueUpdateScheduler.Empty()) { List <ScheduledQueueUpdate> scheduled = new(); Extensions.Swap(ref scheduled, ref m_QueueUpdateScheduler); for (byte i = 0; i < scheduled.Count; i++) { uint arenaMMRating = scheduled[i].ArenaMatchmakerRating; BattlegroundQueueTypeId bgQueueTypeId = scheduled[i].QueueId; BattlegroundBracketId bracket_id = scheduled[i].BracketId; GetBattlegroundQueue(bgQueueTypeId).BattlegroundQueueUpdate(diff, bracket_id, arenaMMRating); } } // if rating difference counts, maybe force-update queues if (WorldConfig.GetIntValue(WorldCfg.ArenaMaxRatingDifference) != 0 && WorldConfig.GetIntValue(WorldCfg.ArenaRatedUpdateTimer) != 0) { // it's time to force update if (m_NextRatedArenaUpdate < diff) { // forced update for rated arenas (scan all, but skipped non rated) Log.outDebug(LogFilter.Arena, "BattlegroundMgr: UPDATING ARENA QUEUES"); foreach (ArenaTypes teamSize in new[] { ArenaTypes.Team2v2, ArenaTypes.Team3v3, ArenaTypes.Team5v5 }) { BattlegroundQueueTypeId ratedArenaQueueId = BGQueueTypeId((ushort)BattlegroundTypeId.AA, BattlegroundQueueIdType.Arena, true, teamSize); for (var bracket = BattlegroundBracketId.First; bracket < BattlegroundBracketId.Max; ++bracket) { GetBattlegroundQueue(ratedArenaQueueId).BattlegroundQueueUpdate(diff, bracket, 0); } } m_NextRatedArenaUpdate = WorldConfig.GetUIntValue(WorldCfg.ArenaRatedUpdateTimer); } else { m_NextRatedArenaUpdate -= diff; } } }