From daa425b02919dbe7835cbd5713d3149bd81da3c0 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 6 May 2018 15:32:00 -0400 Subject: [PATCH] Core/Misc: More Fixes --- Source/Game/BattleFields/BattleField.cs | 33 +++++++++---------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/Source/Game/BattleFields/BattleField.cs b/Source/Game/BattleFields/BattleField.cs index 835c40cba..321e08bf5 100644 --- a/Source/Game/BattleFields/BattleField.cs +++ b/Source/Game/BattleFields/BattleField.cs @@ -26,6 +26,7 @@ using Game.Network.Packets; using System; using System.Collections.Generic; using System.Diagnostics.Contracts; +using System.Linq; namespace Game.BattleFields { @@ -1026,8 +1027,8 @@ namespace Game.BattleFields m_neutralValuePct = 0; m_maxSpeed = 0; - m_activePlayers[0] = new List(); - m_activePlayers[1] = new List(); + m_activePlayers[0] = new HashSet(); + m_activePlayers[1] = new HashSet(); } public virtual bool HandlePlayerEnter(Player player) @@ -1043,12 +1044,10 @@ namespace Game.BattleFields } } - m_activePlayers[player.GetTeamId()].Add(player.GetGUID()); - return true; + return m_activePlayers[player.GetTeamId()].Add(player.GetGUID()); } - //Index of place in for loop - public virtual int HandlePlayerLeave(Player player) + public virtual void HandlePlayerLeave(Player player) { if (!m_capturePointGUID.IsEmpty()) { @@ -1057,13 +1056,7 @@ namespace Game.BattleFields player.SendUpdateWorldState(capturePoint.GetGoInfo().ControlZone.worldState1, 0); } - var index = m_activePlayers[player.GetTeamId()].IndexOf(player.GetGUID()); - - if (index == m_activePlayers[player.GetTeamId()].Count) - return m_activePlayers[player.GetTeamId()].Count; // return end() - m_activePlayers[player.GetTeamId()].Remove(player.GetGUID()); - return ++index; } public virtual void SendChangePhase() @@ -1154,18 +1147,14 @@ namespace Game.BattleFields for (byte team = 0; team < SharedConst.BGTeamsCount; ++team) { - for (int i = 0; i < m_activePlayers[team].Count; ) + foreach (var guid in m_activePlayers[team].ToList()) { - Player player = Global.ObjAccessor.FindPlayer(m_activePlayers[team][i]); + Player player = Global.ObjAccessor.FindPlayer(guid); if (player) { if (!capturePoint.IsWithinDistInMap(player, radius) || !player.IsOutdoorPvPActive()) - i = HandlePlayerLeave(player); - else - ++i; + HandlePlayerLeave(player); } - else - ++i; } } @@ -1178,8 +1167,8 @@ namespace Game.BattleFields { if (player.IsOutdoorPvPActive()) { - m_activePlayers[player.GetTeamId()].Add(player.GetGUID()); - HandlePlayerEnter(player); + if (m_activePlayers[player.GetTeamId()].Add(player.GetGUID())) + HandlePlayerEnter(player); } } } @@ -1317,7 +1306,7 @@ namespace Game.BattleFields uint GetTeamId() { return m_team; } // active Players in the area of the objective, 0 - alliance, 1 - horde - List[] m_activePlayers = new List[SharedConst.BGTeamsCount]; + HashSet[] m_activePlayers = new HashSet[SharedConst.BGTeamsCount]; // Total shift needed to capture the objective float m_maxValue;