private void PopulateBuildRecords() { buildStats = new Dictionary <string, BuildStats> { }; foreach (FileTraceManagment.MatchRecord match in matchHistory.MatchHistory.ToList()) { if (!Filter.CheckFilters(filterSelections, match, buildRecords, session, translations)) { continue; } if (!buildStats.ContainsKey(match.MatchData.LocalPlayer.BuildHash)) { buildStats.Add(match.MatchData.LocalPlayer.BuildHash, new BuildStats { buildHash = match.MatchData.LocalPlayer.BuildHash, powerScore = match.MatchData.LocalPlayer.PowerScore, stats = match.MatchData.LocalPlayer.Stats }); } else { buildStats[match.MatchData.LocalPlayer.BuildHash].stats = FileTraceManagment.SumStats(buildStats[match.MatchData.LocalPlayer.BuildHash].stats, match.MatchData.LocalPlayer.Stats); } } Filter.PopulateFilters(filterSelections, cb_game_modes, cb_grouped, cb_power_score, cb_versions, cb_weapons, cb_movement, cb_cabins, cb_modules); }
public void populate_meta_detail_screen() { if (!force_refresh) { new_selection = Filter.FilterString(filter_selections); if (new_selection == previous_selection) { return; } } force_refresh = false; total_games = 0; total_wins = 0; master_groupings = new List <master_meta_grouping> { }; previous_selection = new_selection; Filter.ResetFilters(filter_selections); initialize_user_profile(); foreach (FileTraceManagment.MatchRecord match in match_history.ToList()) { if (!Filter.CheckFilters(filter_selections, match, build_records, session, translations)) { continue; } /* begin calc */ total_games += 1; List <meta_grouping> match_level_grouping = new List <meta_grouping> { }; if (match.MatchData.LocalPlayer.Team != match.MatchData.WinningTeam && match.MatchData.WinningTeam != -1) { total_wins += 1; /* enemy wins */ } foreach (FileTraceManagment.RoundRecord round in match.MatchData.RoundRecords) { List <meta_grouping> round_level_grouping = new List <meta_grouping> { }; foreach (FileTraceManagment.Player player in round.Players) { #region player_level if (player.Team == match.MatchData.LocalPlayer.Team) { continue; } if (!build_records.ContainsKey(player.BuildHash)) { continue; } if (!chk_bot_filter.Checked && player.Bot == 1) { continue; } if (!chk_bot_filter.Checked && player.PowerScore >= 22000) { continue; } if (!round.Players.Any(x => x.Nickname == player.Nickname)) { continue; } if (!build_records.ContainsKey(round.Players.FirstOrDefault(x => x.Nickname == player.Nickname).BuildHash)) { continue; } List <meta_grouping> player_level_grouping = new List <meta_grouping> { }; FileTraceManagment.BuildRecord build = build_records[round.Players.First(x => x.Nickname == player.Nickname).BuildHash]; if (chk_weapon_filter.Checked) { foreach (PartLoader.Weapon weapon in build.Weapons) { meta_grouping new_group = new_grouping(); new_group.weapon = Translate.TranslateString(weapon.Name, session, translations); new_group.stats = round.Players.First(x => x.Nickname == player.Nickname).Stats; player_level_grouping.Add(new_group); } } if (chk_movement_filter.Checked) { if (player_level_grouping == null || !player_level_grouping.Any()) { foreach (PartLoader.Movement movement in build.Movement) { meta_grouping new_group = new_grouping(); new_group.movement = Translate.TranslateString(movement.Name, session, translations); new_group.stats = round.Players.First(x => x.Nickname == player.Nickname).Stats; player_level_grouping.Add(new_group); } } else { foreach (meta_grouping sub_group in player_level_grouping.ToList()) { for (int i = 0; i < build.Movement.Count(); i++) { if (i == 0) { sub_group.movement = Translate.TranslateString(build.Movement[i].Name, session, translations); } else { meta_grouping new_group = new_grouping(); new_group.weapon = sub_group.weapon; new_group.movement = Translate.TranslateString(build.Movement[i].Name, session, translations); new_group.stats = round.Players.First(x => x.Nickname == player.Nickname).Stats; player_level_grouping.Add(new_group); } } } } } if (chk_cabin_filter.Checked) { if (player_level_grouping == null || !player_level_grouping.Any()) { meta_grouping new_group = new_grouping(); new_group.cabin = Translate.TranslateString(build.Cabin.Name, session, translations); new_group.stats = round.Players.First(x => x.Nickname == player.Nickname).Stats; player_level_grouping.Add(new_group); } else { foreach (meta_grouping sub_group in player_level_grouping) { sub_group.cabin = Translate.TranslateString(build.Cabin.Name, session, translations); } } } if (chk_map_filter.Checked) { if (player_level_grouping == null || !player_level_grouping.Any()) { meta_grouping new_group = new_grouping(); new_group.map = Translate.TranslateString(match.MatchData.MapName, session, translations); new_group.stats = round.Players.First(x => x.Nickname == player.Nickname).Stats; player_level_grouping.Add(new_group); } else { foreach (meta_grouping sub_group in player_level_grouping) { sub_group.map = Translate.TranslateString(match.MatchData.MapName, session, translations); } } } #endregion foreach (meta_grouping sub_group in player_level_grouping) { bool found = false; for (int i = 0; i < round_level_grouping.Count(); i++) { if (round_level_grouping[i].cabin == sub_group.cabin && round_level_grouping[i].movement == sub_group.movement && round_level_grouping[i].weapon == sub_group.weapon && round_level_grouping[i].map == sub_group.map) { found = true; round_level_grouping[i].total_seen += 1; round_level_grouping[i].stats = FileTraceManagment.SumStats(round_level_grouping[i].stats, round.Players.First(x => x.Nickname == player.Nickname).Stats); } } if (!found) { round_level_grouping.Add(sub_group); } } } foreach (meta_grouping sub_group in round_level_grouping) { bool found = false; for (int i = 0; i < match_level_grouping.Count(); i++) { if (match_level_grouping[i].cabin == sub_group.cabin && match_level_grouping[i].movement == sub_group.movement && match_level_grouping[i].weapon == sub_group.weapon && match_level_grouping[i].map == sub_group.map) { found = true; match_level_grouping[i].rounds += 1; match_level_grouping[i].total_seen += sub_group.total_seen; match_level_grouping[i].stats = FileTraceManagment.SumStats(match_level_grouping[i].stats, sub_group.stats); } } if (!found) { match_level_grouping.Add(sub_group); } } } foreach (meta_grouping sub_group in match_level_grouping) { bool found = false; for (int i = 0; i < master_groupings.Count(); i++) { if (master_groupings[i].group.cabin == sub_group.cabin && master_groupings[i].group.movement == sub_group.movement && master_groupings[i].group.weapon == sub_group.weapon && master_groupings[i].group.map == sub_group.map) { found = true; master_groupings[i].games += 1; master_groupings[i].rounds += sub_group.rounds; master_groupings[i].total_seen += sub_group.total_seen; if (match.MatchData.LocalPlayer.Team != match.MatchData.WinningTeam && match.MatchData.WinningTeam != -1) { master_groupings[i].wins += 1; } master_groupings[i].group.stats = FileTraceManagment.SumStats(master_groupings[i].group.stats, sub_group.stats); } } if (!found) { if (match.MatchData.LocalPlayer.Team != match.MatchData.WinningTeam && match.MatchData.WinningTeam != -1) { master_groupings.Add(new master_meta_grouping { games = 1, wins = 1, rounds = sub_group.rounds, group = sub_group }); } else { master_groupings.Add(new master_meta_grouping { games = 1, wins = 0, rounds = sub_group.rounds, group = sub_group }); } } } } global_enemy_win_percent = (double)total_games > 0 ? (double)total_wins / (double)total_games : 0.0; lb_global_percentage.Text = string.Format("{0}%", Math.Round(global_enemy_win_percent * 100, 1)); lb_total_game.Text = total_games.ToString(); populate_meta_detail_screen_elements(); Filter.PopulateFilters(filter_selections, cb_game_modes, cb_grouped, cb_power_score, cb_versions, cb_weapons, cb_movement, cb_cabins, cb_modules); }
public static void AssignStats(FileTraceManagment.SessionStats currentSession, OverlayWriter writer, Dictionary <string, Dictionary <string, Translate.Translation> > translation, string game_mode) { FileTraceManagment.Stats stats = FileTraceManagment.NewStats(); if (currentSession.TwitchSettings.ToggleOverviewTimeRanges) { if (currentSession.TwitchSettings.OverviewTimeRange == 7.0) { currentSession.TwitchSettings.OverviewTimeRange = 31.0; } else if (currentSession.TwitchSettings.OverviewTimeRange == 31.0) { currentSession.TwitchSettings.OverviewTimeRange = 365.0; } else if (currentSession.TwitchSettings.OverviewTimeRange == 365.0) { currentSession.TwitchSettings.OverviewTimeRange = 1.0; } else if (currentSession.TwitchSettings.OverviewTimeRange == 1.0) { currentSession.TwitchSettings.OverviewTimeRange = 7.0; } } else { currentSession.TwitchSettings.OverviewTimeRange = currentSession.TwitchSettings.DefaultTimeRange; } DateTime timeCutoff = DateTime.Now.AddDays(currentSession.TwitchSettings.OverviewTimeRange * -1); foreach (FileTraceManagment.MatchRecord match in currentSession.MatchHistory) { if (match.MatchData.MatchStart < timeCutoff) { continue; } if (match.MatchData.MatchTypeDesc != game_mode) { continue; } stats = FileTraceManagment.SumStats(stats, match.MatchData.LocalPlayer.Stats); } if (stats.Games > 0) { writer.AddHeader(string.Format(@"{0,3} Day Stats for {1}", currentSession.TwitchSettings.OverviewTimeRange, game_mode), "day_stats"); writer.AddHorizontalRow(); writer.AddLine(string.Format(@"{0,16} {1,8}", "Games", stats.Games), "day_stats games"); writer.AddLine(string.Format(@"{0,16} {1,8} {2:P1}", "W/L %", string.Format(@"{0,4}/{1,-4}", stats.Wins, stats.Losses), (double)stats.Wins / (double)stats.Games), "day_stats win_lose_ratio"); writer.AddLine(string.Format(@"{0,16} {1,8} {2:N1}", "K/D ", string.Format(@"{0,4}/{1,-4}", stats.Kills, stats.Deaths), (double)stats.Kills / (double)stats.Deaths), "day_stats kill_death_ratio"); writer.AddLine(string.Format(@"{0,16} {1,8} {2:N1}", "K/G ", string.Format(@"{0,4}/{1,-4}", stats.Kills, stats.Games), (double)stats.Kills / (double)stats.Games), "day_stats kill_game_ratio"); writer.AddLine(string.Format(@"{0,16} {1,8:N1}", "Avg Dmg", stats.Damage / (double)stats.Rounds), "day_stats avg_dmg"); writer.AddLine(string.Format(@"{0,16} {1,8:N1}", "Avg Dmg Rec", stats.DamageTaken / (double)stats.Rounds), "day_stats avg_dmg_rec"); writer.AddLine(string.Format(@"{0,16} {1,8:N1}", "Avg Score", stats.Score / (double)stats.Rounds), "day_stats avg_score"); } }