public static Crossout.AspWeb.Models.API.v2.BuildEntry PopulateBuildEntry(FileTraceManagment.BuildRecord build) { Crossout.AspWeb.Models.API.v2.BuildEntry build_entry = new Crossout.AspWeb.Models.API.v2.BuildEntry { }; build_entry.build_hash = build.BuildHash; build_entry.power_score = build.PowerScore; build_entry.parts = build.Parts; return(build_entry); }
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); }