Beispiel #1
0
 public void CollectBans(MatchSubmissionView view, Match riotMatch, ChampionListStatic champions,
                         SeasonInfoEntity seasonInfo, Guid divisionId, List <ChampionStatsEntity> championDetails)
 {
     foreach (var ban in riotMatch.Teams.SelectMany(x => x.Bans))
     {
         var riotChampion = champions.Keys[ban.ChampionId].ToLowerInvariant();
         try
         {
             var ourChampion        = GlobalVariables.ChampionDictionary[riotChampion];
             var bannedChampionStat =
                 CreateChampionStat(seasonInfo, divisionId, ourChampion.Id, view.ScheduleId);
             championDetails.Add(bannedChampionStat);
         }
         catch (Exception e)
         {
             _logger.LogError(e, $"Error getting banned champion: {riotChampion}");
         }
     }
 }
Beispiel #2
0
        //per game
        private ChampionStatsEntity CreateChampionStat(SeasonInfoEntity seasonInfo, Guid divisionId, Guid championId, Guid teamScheduleId)
        {
            var championStat = new ChampionStatsEntity
            {
                Id             = Guid.NewGuid(),
                PlayerId       = null,
                SeasonInfoId   = seasonInfo.Id,
                DivisionId     = divisionId,
                Kills          = 0,
                Assists        = 0,
                Deaths         = 0,
                Picked         = false,
                Banned         = true,
                Win            = false,
                Loss           = false,
                ChampionId     = championId,
                TeamScheduleId = teamScheduleId
            };

            return(championStat);
        }
Beispiel #3
0
        //per player
        private ChampionStatsEntity CreateChampionStat(PlayerStatsEntity playerStats, SeasonInfoEntity seasonInfo, Guid divisionId, bool win, bool loss, Guid championId, Guid matchDetailId, Guid teamScheduleId)
        {
            var championStat = new ChampionStatsEntity
            {
                Id             = Guid.NewGuid(),
                PlayerId       = playerStats.SummonerId,
                SeasonInfoId   = seasonInfo.Id,
                DivisionId     = divisionId,
                Kills          = playerStats.Kills,
                Deaths         = playerStats.Deaths,
                Assists        = playerStats.Assists,
                Picked         = true,
                Banned         = false,
                Win            = win,
                Loss           = loss,
                ChampionId     = championId,
                MatchDetailId  = matchDetailId,
                TeamScheduleId = teamScheduleId
            };

            return(championStat);
        }
Beispiel #4
0
        private static PlayerStatsEntity CreatePlayerMatchStat(SummonerInfoEntity registeredPlayer, Participant participant,
                                                               TimeSpan gameDuration, SeasonInfoEntity seasonInfo)
        {
            var matchStat = new PlayerStatsEntity
            {
                Id           = Guid.NewGuid(),
                SummonerId   = registeredPlayer.Id,
                Kills        = (int)participant.Stats.Kills,
                Deaths       = (int)participant.Stats.Deaths,
                Assists      = (int)participant.Stats.Assists,
                CS           = (int)(participant.Stats.TotalMinionsKilled + participant.Stats.NeutralMinionsKilled),
                Gold         = (int)participant.Stats.GoldEarned,
                VisionScore  = (int)participant.Stats.VisionScore,
                GameTime     = gameDuration,
                Games        = 1,
                SeasonInfoId = seasonInfo.Id
            };

            return(matchStat);
        }
Beispiel #5
0
        public async Task CollectPlayerMatchDetailsAsync(MatchSubmissionView view, Match riotMatch, ChampionListStatic champions, GameInfo gameInfo,
                                                         Dictionary <string, SummonerInfoEntity> registeredPlayers, TimeSpan gameDuration, SeasonInfoEntity seasonInfo,
                                                         Dictionary <MatchDetailKey, MatchDetailEntity> matchDictionary, List <MatchDetailContract> matchList, Guid divisionId,
                                                         List <ChampionStatsEntity> championDetails)
        {
            var blueTotalKills = riotMatch.Participants.Where(x => x.TeamId == 100).Sum(y => y.Stats.Kills);
            var redTotalKills  = riotMatch.Participants.Where(x => x.TeamId == 200).Sum(y => y.Stats.Kills);

            foreach (var participant in riotMatch.Participants)
            {
                //Get champion by Riot Api
                var riotChampion = champions.Keys[participant.ChampionId].ToLowerInvariant();
                //Get who played said champion and if they were blue side or not
                var gameInfoPlayer = gameInfo.PlayerName(riotChampion);

                //If the player listed doesn't match a champion, then we ignore it for purposes of stat tracking
                if (gameInfoPlayer == null)
                {
                    continue;
                }

                //Check to make sure the player is officially registered, if not, this will send a red flag
                registeredPlayers.TryGetValue(gameInfoPlayer.PlayerName.ToLowerInvariant(), out var registeredPlayer);
                if (registeredPlayer == null)
                {
                    var message = $"This player is not legal for a match as a player: {gameInfoPlayer.PlayerName}";
                    _logger.LogCritical(message);
                    const string to = "*****@*****.**";
                    await _emailService.SendEmailAsync(to, message,
                                                       $"Illegal player in match: {view.HomeTeamName} vs {view.AwayTeamName}");

                    throw new Exception(message);
                }

                var matchStat = CreatePlayerMatchStat(registeredPlayer, participant, gameDuration, seasonInfo);
                switch (participant.TeamId)
                {
                case 100:
                    matchStat.TotalTeamKills = (int)blueTotalKills;
                    break;

                case 200:
                    matchStat.TotalTeamKills = (int)redTotalKills;
                    break;
                }

                //will always create a new match detail
                var matchDetail = new MatchDetailEntity
                {
                    Id             = Guid.NewGuid(),
                    Game           = gameInfo.GameNum,
                    PlayerId       = registeredPlayer.Id,
                    PlayerStatsId  = matchStat.Id,
                    SeasonInfoId   = seasonInfo.Id,
                    TeamScheduleId = view.ScheduleId,
                    Winner         = participant.Stats.Winner
                };

                //per player
                var win         = participant.Stats.Winner;
                var loss        = !win;
                var ourChampion = GlobalVariables.ChampionDictionary[riotChampion];

                var pickedChampionStat = CreateChampionStat(matchStat, seasonInfo, divisionId, win, loss, ourChampion.Id, matchDetail.Id, view.ScheduleId);
                championDetails.Add(pickedChampionStat);

                //Add special achievements here
                var achievements = await AddSpecialAchievements(participant, ourChampion, registeredPlayer, seasonInfo.Id, riotMatch, view, gameInfo.GameNum);

                matchList.Add(new MatchDetailContract(gameInfoPlayer.IsBlue, matchDetail, matchStat, achievements));
            }
        }
Beispiel #6
0
 public async Task <bool> UpdateSeasonAsync(SeasonInfoEntity season)
 {
     return(await _table.UpdateAsync(season));
 }
Beispiel #7
0
 public async Task <bool> CreateSeasonAsync(SeasonInfoEntity season)
 {
     return(await _table.InsertAsync(season) == 1);
 }
        /// <summary>
        /// For Admin usage only
        /// </summary>
        /// <returns></returns>
        public async Task <IEnumerable <RosterView> > GetAllRosters(SeasonInfoEntity seasonInfo = null)
        {
            var list = new List <RosterView>();

            if (seasonInfo == null)
            {
                seasonInfo = await _seasonInfoRepository.GetCurrentSeasonAsync();
            }
            var rostersTask           = _teamRosterRepository.GetAllTeamsAsync(seasonInfo.Id);
            var captainsTask          = _teamCaptainRepository.GetAllTeamCaptainsAsync();
            var alternateAccountsTask = _alternateAccountRepository.ReadAllAsync();
            var allPlayersTask        = _teamPlayerRepository.ReadAllForSeasonAsync(seasonInfo.Id);

            var rosters           = await rostersTask;
            var captains          = (await captainsTask).ToList();
            var alternateAccounts = (await alternateAccountsTask).ToList();
            var allPlayers        = (await allPlayersTask).ToList();

            foreach (var roster in rosters)
            {
                var players = allPlayers.Where(x => x.TeamRosterId == roster.Id).ToList();
                var captain = captains.FirstOrDefault(x => x.TeamRosterId == roster.Id);

                var summoners =
                    (await _summonerInfoRepository.GetAllForSummonerIdsAsync(players.Select(x => x.SummonerId))).ToList();

                var alts          = alternateAccounts.Where(x => summoners.Select(y => y.Id).ToList().Contains(x.SummonerId));
                var summonerViews = _summonerMapper.MapDetailed(summoners, alts, new List <PlayerStatsView>()).ToList();
                foreach (var teamPlayerEntity in players)
                {
                    var player = summoners.First(x => x.Id == teamPlayerEntity.SummonerId);

                    var isSub        = teamPlayerEntity.IsSub ?? false;
                    var summonerView = summonerViews.First(x => x.SummonerName == player.SummonerName);
                    summonerView.IsSub = isSub;
                }

                var rosterView = new RosterView
                {
                    RosterId      = roster.Id,
                    Captain       = summoners.FirstOrDefault(x => x.Id == captain?.SummonerId)?.SummonerName,
                    TeamName      = roster.TeamName,
                    Wins          = roster.Wins ?? 0,
                    Loses         = roster.Loses ?? 0,
                    Points        = roster.Points ?? 0,
                    Players       = summonerViews,
                    TeamTierScore = roster.TeamTierScore.GetValueOrDefault()
                };

                var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/logos", roster.Id.ToString());
                if (File.Exists(path))
                {
                    var byteData = await File.ReadAllBytesAsync(path);

                    var base64 = Convert.ToBase64String(byteData);
                    var type   = GetContentType(path);
                    var imgSrc = String.Format($"data:{type};base64,{base64}");
                    rosterView.FileSource = imgSrc;
                }
                rosterView.Cleanup();
                list.Add(rosterView);
            }

            return(list);
        }