Esempio n. 1
0
        public IEnumerable <WorstVersus> GetWorstVersus(long accountId, int heroId)
        {
            var details  = GetAllPlayersByHero(accountId, heroId);
            var enemyIds = new List <int>();

            foreach (var detail in details)
            {
                var isRadiance = true;
                var radiantWin = detail.MyPlayer.RadiantWin;
                var playerSlot = detail.MyPlayer.PlayerSlot;

                if (playerSlot > 5)
                {
                    isRadiance = false;
                }

                foreach (var enemy in detail.EnemyPlayers)
                {
                    if (isRadiance && !radiantWin)
                    {
                        if (enemy.PlayerSlot > 5)
                        {
                            enemyIds.Add(enemy.HeroId);
                        }
                    }
                    else if (!isRadiance && radiantWin)
                    {
                        if (enemy.PlayerSlot < 5)
                        {
                            enemyIds.Add(enemy.HeroId);
                        }
                    }
                }
            }

            var ids = enemyIds.AsEnumerable().GroupBy(n => n).Select(c => new { HeroId = c.Key, Count = c.Count() }).Take(3).OrderByDescending(i => i.Count).ToList();

            var retList = new List <WorstVersus>();
            var heroes  = Heroes.GetHeroes();

            foreach (var id in ids)
            {
                var worstVersus = new WorstVersus();
                foreach (var hero in heroes)
                {
                    if (hero.HeroId != id.HeroId)
                    {
                        continue;
                    }
                    worstVersus.HeroId        = hero.HeroId;
                    worstVersus.LocalizedName = hero.LocalizedName;
                    worstVersus.Name          = hero.Name;
                    worstVersus.Count         = id.Count;
                }
                retList.Add(worstVersus);
            }
            return(retList);
        }
Esempio n. 2
0
 public Model.Persistence.Hero Get(int heroId)
 {
     //return Context.Repositories.Heroes.Query().Where(h => h.HeroId == heroId).AsEnumerable().FirstOrDefault();
     return(Heroes.GetHeroes().FirstOrDefault(h => h.HeroId == heroId));
 }
Esempio n. 3
0
 public IEnumerable <Model.Persistence.Hero> GetAll()
 {
     //return Context.Repositories.Heroes.Query().AsEnumerable();
     return(Heroes.GetHeroes().AsEnumerable());
 }
Esempio n. 4
0
        public IEnumerable <HeroRecord> GetAll(long accountId)
        {
            var retList   = new List <HeroRecord>();
            var matches   = GetMatchesByAccount(accountId).ToList();
            var allHeroes = Heroes.GetHeroes();

            // TODO -- Change 114 to # of heroes constant
            for (var i = 1; i < 114; i++)
            {
                var heroRecord = new HeroRecord();
                var i1         = i;
                heroRecord.Hero = allHeroes.FirstOrDefault(h => h.HeroId == i1);

                var matchesByHero = matches.Where(m => m.Players.Any(p => p.AccountId == accountId && p.HeroId == i1)).OrderByDescending(m => m.StartTime).ToList();
                if (!matchesByHero.Any())
                {
                    continue;
                }

                var players = matchesByHero.Select(m => m.Players.FirstOrDefault(p => p.HeroId == i1)).ToList();
                if (!players.Any())
                {
                    continue;
                }

                heroRecord.TotalGames = matchesByHero.Count;


                var kills   = new List <int>();
                var deaths  = new List <int>();
                var assists = new List <int>();
                var gpms    = new List <int>();
                var xpms    = new List <int>();
                foreach (var player in players)
                {
                    var match = matchesByHero.Find(m => m.Players.Contains(player));
                    if (match == null)
                    {
                        continue;
                    }
                    if ((player.PlayerSlot < 5 && match.RadiantWin) ||
                        (player.PlayerSlot > 5 && !match.RadiantWin))
                    {
                        heroRecord.Wins++;
                    }
                    else if ((player.PlayerSlot < 5 && !match.RadiantWin) ||
                             (player.PlayerSlot > 5 && match.RadiantWin == false))
                    {
                        heroRecord.Losses++;
                    }

                    kills.Add(player.Kills);
                    deaths.Add(player.Deaths);
                    assists.Add(player.Assists);
                    gpms.Add(player.GoldPerMin);
                    xpms.Add(player.XpPerMin);
                }

                if (heroRecord.Wins > 0 || heroRecord.Losses > 0)
                {
                    heroRecord.WinRate = (int)Math.Round((double)heroRecord.Wins / ((double)heroRecord.Wins + (double)heroRecord.Losses) * 100);
                }
                if (kills.Any())
                {
                    heroRecord.AverageKills = kills.Sum() / matchesByHero.Count; heroRecord.BestKills = kills.Max();
                }
                if (deaths.Any())
                {
                    heroRecord.AverageDeaths = deaths.Sum() / matchesByHero.Count;
                }
                if (assists.Any())
                {
                    heroRecord.AverageAssists = assists.Sum() / matchesByHero.Count; heroRecord.BestAssists = assists.Max();
                }
                if (gpms.Any())
                {
                    heroRecord.AverageGoldPerMinute = gpms.Sum() / matchesByHero.Count; heroRecord.BestGoldPerMinute = gpms.Max();
                }
                if (xpms.Any())
                {
                    heroRecord.AverageXpPerMinute = xpms.Sum() / matchesByHero.Count; heroRecord.BestXpPerMinute = xpms.Max();
                }

                retList.Add(heroRecord);
            }

            return(retList);
        }