private IEnumerable <(Player, TimeSpan)> GetCampCaptures(TimeSpan start, TimeSpan end, Replay replay, bool bossCamp = false) { foreach (TrackerEvent capture in replayHelper.GetCampCaptureEvents(replay.TrackerEvents, start, end)) { int teamId = (int)capture.Data.dictionary[3].optionalData.array[0].dictionary[1].vInt.Value - 1; IEnumerable <Unit> campUnit = replay.Units.Where(unit => bossCamp ? replayHelper.IsBossCamp(unit) : replayHelper.IsCamp(unit)) .Where(unit => unit.TimeSpanDied.HasValue && unit.TimeSpanDied.Value <capture.TimeSpan && unit.TimeSpanDied.Value> capture.TimeSpan.Subtract(TimeSpan.FromSeconds(10)) && unit.PlayerKilledBy != null && unit.PlayerKilledBy.Team == teamId); foreach ((Player player, string name) in campUnit.Select(unit => (unit.PlayerKilledBy, unit.Name)).Distinct()) { logger.LogDebug($"GetCampCaptures: {player.HeroId}:{name}"); yield return(player, capture.TimeSpan); } } }