Ejemplo n.º 1
0
        public static async Task <DsResponse> GetSynergy(sc2dsstatsContext context, DsRequest request)
        {
            var timestrings = DSData.Timestrings(request.Timespan);

            var results = context.DsTimeResults
                          .Include(i => i.Teammates)
                          .AsNoTracking()
                          .Where(x => x.Player == request.Player && timestrings.Contains(x.Timespan) && x.Cmdr == request.Interest);

            var synresults = await results.ToListAsync();

            int tcount   = synresults.Sum(s => s.Count);
            var response = new DsResponse()
            {
                Interest    = request.Interest,
                Count       = tcount,
                AvgDuration = (int)(synresults.Sum(s => s.Duration) / tcount),
                Items       = new List <DsResponseItem>()
            };

            foreach (var cmdr in DSData.cmdrs)
            {
                var teammates = synresults.SelectMany(s => s.Teammates).Where(x => x.Cmdr == cmdr);
                int count     = teammates.Sum(s => s.Count);
                response.Items.Add(new DsResponseItem()
                {
                    Label = cmdr,
                    Count = count / 6,
                    Wins  = teammates.Sum(s => s.Wins)
                });
            }

            return(response);
        }
Ejemplo n.º 2
0
        public static async Task <DsResponse> GetCrosstableFromTimeResults(sc2dsstatsContext context, DsRequest request)
        {
            var timestrings = DSData.Timestrings(request.Timespan, true);

            var results = await context.DsTimeResults
                          .AsNoTracking()
                          .Where(x =>
                                 x.Player == request.Player &&
                                 timestrings.Contains(x.Timespan))
                          .ToListAsync();

            CrosstableResponse response = new CrosstableResponse()
            {
                Interest = "CrossTable",
                Items    = new List <CrosstableResponseItem>()
            };

            var removeMonths = new List <string>()
            {
                DateTime.Today.ToString("yyyyMM")
            };

            if (DateTime.Today.Day < 16)
            {
                removeMonths.Add((DateTime.Today.AddMonths(-1)).ToString("yyyyMM"));
            }

            foreach (var cmdr in DSData.cmdrs)
            {
                var cmdrResults = results.Where(x => x.Cmdr == cmdr).ToArray();

                foreach (var vs in DSData.cmdrs)
                {
                    if (vs == cmdr)
                    {
                        response.Items.Add(new CrosstableResponseItem());
                    }
                    else
                    {
                        var vsResults    = cmdrResults.Where(x => x.Opp == vs).ToArray();
                        var oldVsResults = vsResults.Where(x => !removeMonths.Contains(x.Timespan)).ToArray();
                        response.Items.Add(new CrosstableResponseItem()
                        {
                            Label    = $"{cmdr} vs {vs}",
                            Count    = vsResults.Sum(s => s.Count),
                            Wins     = vsResults.Sum(s => s.Wins),
                            OldCount = oldVsResults.Sum(s => s.Count),
                            OldWins  = oldVsResults.Sum(s => s.Wins),
                        });
                    }
                }
            }
            return(response);
        }
Ejemplo n.º 3
0
        public static async Task <DsResponse> GetDpsFromTimeResults(sc2dsstatsContext context, DsRequest request)
        {
            var timestrings = DSData.Timestrings(request.Timespan);

            var results = context.DsTimeResults.AsNoTracking().Where(x => x.Player == request.Player && timestrings.Contains(x.Timespan));

            if (request.Interest == "ALL")
            {
                results = results.Where(x => x.Opp == String.Empty);
            }
            else
            {
                results = results.Where(x => x.Cmdr == request.Interest);
            }

            var dpsresults = await results.ToListAsync();

            int count = dpsresults.Sum(s => s.Count);

            var response = new DsResponse()
            {
                Interest    = request.Interest,
                Count       = request.Player ? count : count / 6,
                AvgDuration = (int)(dpsresults.Sum(s => s.Duration) / count),
                Items       = new List <DsResponseItem>()
            };

            foreach (var cmdr in DSData.cmdrs)
            {
                var cmdrresults = (request.Interest == "ALL") switch
                {
                    true => dpsresults.Where(x => x.Cmdr == cmdr).ToList(),
                    false => dpsresults.Where(x => x.Opp == cmdr).ToList(),
                };

                var army  = cmdrresults.Sum(s => s.Army);
                var kills = cmdrresults.Sum(s => s.Kills);
                var dpv   = army / kills;

                response.Items.Add(new DsResponseItem()
                {
                    Label = cmdr,
                    Count = (int)(dpv * 10000),
                    Wins  = 10000
                });
            }

            return(response);
        }
Ejemplo n.º 4
0
        public static async Task <DsResponse> GetWinrateFromTimeResults(sc2dsstatsContext context, DsRequest request)
        {
            var timestrings = DSData.Timestrings(request.Timespan);

            var results = context.DsTimeResults.AsNoTracking().Where(x => x.Player == request.Player && timestrings.Contains(x.Timespan));

            if (request.Interest == "ALL")
            {
                results = results.Where(x => x.Opp == String.Empty);
            }
            else
            {
                results = results.Where(x => x.Cmdr == request.Interest);
            }

            var timeresults = await results.ToListAsync();

            int tcount   = timeresults.Sum(s => s.Count);
            var response = new DsResponse()
            {
                Interest    = request.Interest,
                Count       = timeresults.Sum(s => s.Count) / 6,
                AvgDuration = tcount == 0 ? 0 : (int)(timeresults.Sum(s => s.Duration) / tcount),
                Items       = new List <DsResponseItem>()
            };

            foreach (var cmdr in DSData.cmdrs)
            {
                var cmdrresults = (request.Interest == "ALL") switch
                {
                    true => timeresults.Where(x => x.Cmdr == cmdr).ToList(),
                    false => timeresults.Where(x => x.Opp == cmdr).ToList(),
                };
                int count = cmdrresults.Sum(s => s.Count);
                response.Items.Add(new DsResponseItem()
                {
                    Label = cmdr,
                    Count = count,
                    Wins  = cmdrresults.Sum(s => s.Wins)
                });
            }

            return(response);
        }