public void CheckRespawns() { lock (_markersLock) { if (_markers.Count == 0) { return; } } List <Tuple <int, Rectangle, Rectangle> > list = new List <Tuple <int, Rectangle, Rectangle> >(); for (int i = 0; i < 255; i++) { Player player = Main.player[i]; if (player.active && !player.dead) { list.Add(Tuple.Create(i, Utils.CenteredRectangle(player.Center, _playerBoxSizeInner), Utils.CenteredRectangle(player.Center, _playerBoxSizeOuter))); } } if (list.Count == 0) { return; } RemoveExpiredOrInvalidMarkers(); lock (_markersLock) { List <RevengeMarker> list2 = new List <RevengeMarker>(); for (int j = 0; j < _markers.Count; j++) { RevengeMarker revengeMarker = _markers[j]; bool flag = false; Tuple <int, Rectangle, Rectangle> tuple = null; foreach (Tuple <int, Rectangle, Rectangle> item in list) { if (revengeMarker.Intersects(item.Item2, item.Item3)) { tuple = item; flag = true; break; } } if (!flag) { revengeMarker.SetRespawnAttemptLock(state: false); } else if (!revengeMarker.RespawnAttemptLocked) { revengeMarker.SetRespawnAttemptLock(state: true); if (revengeMarker.WouldNPCBeDiscouraged(Main.player[tuple.Item1])) { revengeMarker.SetToExpire(); continue; } revengeMarker.SpawnEnemy(); list2.Add(revengeMarker); } } _markers = _markers.Except(list2).ToList(); } }