Example #1
0
        private List <MapStats> GetMapStats(List <string> steamIDFilters)
        {
            long steamID  = GetSteamID();
            var  mapStats = new List <MapStats>();
            var  allMaps  = new MapStats("[All maps]");

            foreach (var match in _Matches)
            {
                ProcessMatch(match, steamID, steamIDFilters, mapStats);
                ProcessMatch(match, steamID, steamIDFilters, mapStats, allMaps);
            }
            mapStats = mapStats.OrderByDescending(m => m.Games).ToList();
            mapStats.Add(allMaps);
            return(mapStats);
        }
Example #2
0
        private void ProcessMatch(Match match, long steamID, List <string> steamIDFilters, List <MapStats> mapStats, MapStats statsOverride = null)
        {
            if (match.Teams.Count != 2)
            {
                return;
            }
            var player = match.Teams.SelectMany(t => t.Players).FirstOrDefault(p => p.SteamID == steamID);

            if (player == null)
            {
                return;
            }
            var  team1        = match.Teams[0];
            var  team2        = match.Teams[1];
            bool isOnTeam1    = team1.Players.Contains(player);
            var  playerTeam   = isOnTeam1 ? team1 : team2;
            var  enemyTeam    = isOnTeam1 ? team2 : team1;
            var  inclusiveSet = new HashSet <long>();
            var  exclusiveSet = new HashSet <long>();

            foreach (string filter in steamIDFilters)
            {
                if (filter[0] != '!')
                {
                    inclusiveSet.Add(long.Parse(filter));
                }
                else
                {
                    exclusiveSet.Add(long.Parse(filter.Substring(1)));
                }
            }
            var teamSet = new HashSet <long>(playerTeam.Players.Select(p => p.SteamID));

            if (!inclusiveSet.IsSubsetOf(teamSet) || exclusiveSet.Intersect(teamSet).Any())
            {
                return;
            }
            var stats = statsOverride ?? mapStats.FirstOrDefault(s => s.Map == match.Map);

            if (stats == null)
            {
                stats = new MapStats(match.Map);
                mapStats.Add(stats);
            }
            if (playerTeam.Score > enemyTeam.Score)
            {
                stats.Wins++;
            }
            else if (playerTeam.Score < enemyTeam.Score)
            {
                stats.Losses++;
            }
            else
            {
                stats.Draws++;
            }
            stats.Kills  += player.Kills;
            stats.Deaths += player.Deaths;
            for (int i = 0; i < player.MultiKills.Length; i++)
            {
                stats.MultiKills[i] += player.MultiKills[i];
            }
            stats.RoundsWon  += playerTeam.Score;
            stats.RoundsLost += enemyTeam.Score;
        }