예제 #1
0
        public static void GetTimeResultsAsJson(sc2dsstatsContext context, ILogger logger)
        {
            var replays = ReplayFilter.DefaultFilter(context);

            var results = replays
                          .Include(i => i.Dsplayers)
                          .Select(s => UploadService.GetTimeResultValues(s)).ToList().SelectMany(s => s).ToList();

            logger.LogInformation($"Got results: {results.Count} - serializing ...");
            File.WriteAllText("/data/results.json", JsonSerializer.Serialize(results, new JsonSerializerOptions()
            {
                WriteIndented = false
            }));
        }
예제 #2
0
        public static void SetMengskTestReplaysDefaultToFalse(sc2dsstatsContext context)
        {
            var replays     = ReplayFilter.DefaultFilter(context);
            var testReplays = from r in replays
                              from p in r.Dsplayers
                              where p.Race == (byte)DSData.Commander.Mengsk && r.Gametime < new DateTime(2020, 07, 28, 5, 23, 0)
                              select r;

            foreach (var replay in testReplays)
            {
                replay.DefaultFilter = false;
            }
            context.SaveChanges();
        }
예제 #3
0
        public static async Task <DsPlayerStats> GetPlayerStats(sc2dsstatsContext context, string playerName)
        {
            var replays = ReplayFilter.DefaultFilter(context);

            Guid         guid;
            DsPlayerName player;

            if (Guid.TryParse(playerName, out guid))
            {
                player = await context.DsPlayerNames.FirstOrDefaultAsync(f => f.DbId.Equals(guid));
            }
            else
            {
                player = await context.DsPlayerNames.FirstOrDefaultAsync(f => f.Name == playerName);
            }
            if (player == null)
            {
                return(null);
            }

            var stats = from r in replays
                        from p in r.Dsplayers
                        where p.PlayerName == player
                        group p by p.Race into g
                        select new DsResponseItem
            {
                Label = ((DSData.Commander)g.Key).ToString(),
                Count = g.Count(),
                Wins  = g.Count(s => s.Win)
            };
            var items = await stats.ToListAsync();

            items = items.Where(x => DSData.cmdrs.Contains(x.Label)).OrderByDescending(o => o.Winrate).ToList();


            var matchups = from r in replays
                           from p in r.Dsplayers
                           where p.PlayerName == player && Enum.GetValues <DSData.Commander>().Select(s => (byte)s).Contains(p.Race) && Enum.GetValues <DSData.Commander>().Select(s => (byte)s).Contains(p.Opprace)
                           group p by new { cmdr = p.Race, opp = p.Opprace } into g
                select new DsResponseItem
            {
                Label = $"{((DSData.Commander)g.Key.cmdr).ToString()} vs {((DSData.Commander)g.Key.opp).ToString()}",
                Count = g.Count(),
                Wins  = g.Count(s => s.Win)
            };
            var lmatchups = await matchups.ToListAsync();

            return(new DsPlayerStats()
            {
                Winrate = new DsResponse()
                {
                    Count = items.Sum(s => s.Count),
                    Items = items
                },
                Matchups = new DsResponse()
                {
                    Count = lmatchups.Sum(s => s.Count),
                    Items = lmatchups
                }
            });
        }
예제 #4
0
        public static async Task <DsPlayerStats> GetPlayerStats(sc2dsstatsContext context, List <string> playerNames)
        {
            // Console.WriteLine($"Most played Commander is {mostplayed.cmdr} ({(mostplayed.count * 100 / (double)count).ToString("N2")})");
            // Console.WriteLine($"Least played Commander is {leastplayed.cmdr} ({(leastplayed.count * 100 / (double)count).ToString("N2")})");
            var replays = ReplayFilter.DefaultFilter(context);

            var stats = from r in replays
                        from p in r.Dsplayers
                        where playerNames.Contains(p.Name)
                        group p by p.Race into g
                        select new DsResponseItem
            {
                Label = ((DSData.Commander)g.Key).ToString(),
                Count = g.Count(),
                Wins  = g.Count(s => s.Win)
            };
            var items = await stats.ToListAsync();

            items = items.Where(x => DSData.cmdrs.Contains(x.Label)).OrderByDescending(o => o.Winrate).ToList();

            // Console.WriteLine($"Best cmdr is {bestcmdr.cmdr} ({(bestcmdr.wins * 100 / (double)bestcmdr.count).ToString("N2")})");
            // Console.WriteLine($"Worst cmdr is {worstcmdr.cmdr} ({(worstcmdr.wins * 100 / (double)worstcmdr.count).ToString("N2")})");

            var matchups = from r in replays
                           from p in r.Dsplayers
                           where playerNames.Contains(p.Name) && Enum.GetValues <DSData.Commander>().Select(s => (byte)s).Contains(p.Race) && Enum.GetValues <DSData.Commander>().Select(s => (byte)s).Contains(p.Opprace)
                           group p by new { cmdr = p.Race, opp = p.Opprace } into g
                select new DsResponseItem
            {
                Label = $"{((DSData.Commander)g.Key.cmdr).ToString()} vs {((DSData.Commander)g.Key.opp).ToString()}",
                Count = g.Count(),
                Wins  = g.Count(s => s.Win)
            };
            var lmatchups = await matchups.ToListAsync();

            // Console.WriteLine($"Best matchup is {bestmatchup.matchup.cmdr} vs {bestmatchup.matchup.opp} ({(bestmatchup.wins * 100 / (double)bestmatchup.count).ToString("N2")})");
            // Console.WriteLine($"Worst matchup is {worstmatchup.matchup.cmdr} vs {worstmatchup.matchup.opp} ({(worstmatchup.wins * 100 / (double)worstmatchup.count).ToString("N2")})");

            return(new DsPlayerStats()
            {
                Winrate = new DsResponse()
                {
                    Count = items.Sum(s => s.Count),
                    Items = items
                },
                Matchups = new DsResponse()
                {
                    Count = lmatchups.Sum(s => s.Count),
                    Items = lmatchups
                }
            });

            // var poss = from r in replays
            //            from p in r.Dsplayers
            //            where playerNames.Contains(p.Name) && p.Opprace != null
            //            group p by p.Pos into g
            //            select new
            //            {
            //                pos = g.Key,
            //                count = g.Count(),
            //                wins = g.Count(s => s.Win)
            //            };
            // var lposs = await poss.ToListAsync();
            // if (lposs.Any())
            // {
            //     foreach (var pos in lposs.OrderBy(o => o.pos))
            //     {
            //         Console.WriteLine($"Pos: {pos.pos} => {(pos.wins * 100 / (double)pos.count).ToString("N2")}");
            //     }
            // }
        }