private List <PlayerEncounterStats> GetPlayerEncounters(Player player, TimeConstraints constraints) { var statsDictionary = new InitializerDictionary <string, PlayerEncounterStats>(); Func <Player, PlayerEncounterStats> getStats = (Player statsPlayer) => { var stats = statsDictionary.Get(statsPlayer.SteamId, () => new PlayerEncounterStats(statsPlayer.Name, statsPlayer.SteamId)); return(stats); }; var kills = player.Kills.Where(kill => constraints.Match(kill.Time)); var deaths = player.Deaths.Where(kill => constraints.Match(kill.Time)); foreach (var kill in kills) { var stats = getStats(kill.Victim); stats.Kills++; } foreach (var death in deaths) { var stats = getStats(death.Killer); stats.Deaths++; } var encounters = statsDictionary.Values.OrderByDescending(stats => stats.Encounters).ToList(); return(encounters); }
private List <PlayerItemStats> GetPlayerItems(Player player, TimeConstraints constraints) { var statsDictionary = new InitializerDictionary <string, PlayerItemStats>(); var purchases = player.Purchases.Where(purchase => constraints.Match(purchase.Time)); var kills = player.Kills.Where(kill => constraints.Match(kill.Time)).ToList(); int rounds = player.Rounds.Count(round => constraints.Match(round.Time)); foreach (var purchase in purchases) { var stats = statsDictionary.Get(purchase.Item, () => new PlayerItemStats(purchase.Item)); stats.TimesPurchased++; } var items = statsDictionary.Values.OrderByDescending(stats => stats.TimesPurchased).ToList(); foreach (var item in items) { int itemKills = kills.Count(kill => kill.Weapon == item.Item); item.PurchasesPerRound = Ratio.Get(item.TimesPurchased, rounds, true); item.KillsPerPurchase = Ratio.Get(itemKills, item.TimesPurchased, true); } return(items); }
private List <PlayerWeaponStats> GetPlayerWeapons(Player player, TimeConstraints constraints) { var statsDictionary = new InitializerDictionary <string, PlayerWeaponStats>(); var kills = player.Kills.Where(kill => constraints.Match(kill.Time)); foreach (var kill in kills) { var stats = statsDictionary.Get(kill.Weapon, () => new PlayerWeaponStats(kill.Weapon)); stats.Kills++; if (kill.Headshot) { stats.HeadshotKills++; } if (kill.Penetrated) { stats.PenetrationKills++; } } var weapons = statsDictionary.Values.OrderByDescending(stats => stats.Kills).ToList(); return(weapons); }