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}"); } } }
//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); }
//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); }
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); }
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)); } }
public async Task <bool> UpdateSeasonAsync(SeasonInfoEntity season) { return(await _table.UpdateAsync(season)); }
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); }