Example #1
0
        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);
        }
Example #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);
        }
Example #3
0
        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");
            }
        }