Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }