void UpdateSummonerRatings(Summoner summoner, PlayerLifeTimeStats lifeTimeStatistics, DbConnection connection) { List <PlayerStatSummary> summaries = lifeTimeStatistics.playerStatSummaries.playerStatSummarySet; ProcessSummary(MapType.SummonersRift, GameModeType.Normal, "Unranked", summoner, summaries, connection, true); ProcessSummary(MapType.TwistedTreeline, GameModeType.Premade, "RankedPremade3x3", summoner, summaries, connection); ProcessSummary(MapType.SummonersRift, GameModeType.Solo, "RankedSolo5x5", summoner, summaries, connection); ProcessSummary(MapType.SummonersRift, GameModeType.Premade, "RankedPremade5x5", summoner, summaries, connection); ProcessSummary(MapType.Dominion, GameModeType.Normal, "OdinUnranked", summoner, summaries, connection, true); }
void GetLifeTimeStatistics(PlayerLifeTimeStats lifeTimeStatistics) { LifeTimeStatistics = lifeTimeStatistics; ProcessReply(); }
void AnalyseSummonerProfile(List <string> arguments) { string summonerName = GetSummonerName(arguments[0]); PublicSummoner publicSummoner = RPC.GetSummonerByName(summonerName); if (publicSummoner == null) { NoSuchSummoner(); return; } SummonerLeaguesDTO summonerLeagues = RPC.GetAllLeaguesForPlayer(publicSummoner.summonerId); Output.WriteLine("Name: {0}", publicSummoner.name); Output.WriteLine("Account ID: {0}", publicSummoner.acctId); Output.WriteLine("Summoner ID: {0}", publicSummoner.summonerId); Output.WriteLine("Summoner level: {0}", publicSummoner.summonerLevel); foreach (var league in summonerLeagues.summonerLeagues) { int?leaguePoints = null; foreach (var entry in league.entries) { try { int id = Convert.ToInt32(entry.playerOrTeamId); if (publicSummoner.summonerId == id) { leaguePoints = entry.leaguePoints; break; } } catch (Exception) { // playerOrTeamId may be a strange string like "TEAM-xxx" for team queue break; } } Output.WriteLine("League ({0}): {1} {2}, {3} LP ({4})", league.queue, league.tier, league.requestorsRank, leaguePoints == null ? "?" : leaguePoints.Value.ToString(), league.name); } string[] seasonStrings = { "CURRENT", "TWO", "ONE", }; foreach (string seasonString in seasonStrings) { Output.WriteLine("Season: \"{0}\"", seasonString); PlayerLifeTimeStats lifeTimeStatistics = RPC.RetrievePlayerStatsByAccountID(publicSummoner.acctId, seasonString); if (lifeTimeStatistics == null) { Output.WriteLine("Unable to retrieve lifetime statistics"); return; } List <PlayerStatSummary> summaries = lifeTimeStatistics.playerStatSummaries.playerStatSummarySet; //The hidden "Team" variants of the "Premade" ratings are currently unused, it seems AnalayseStatistics("Unranked Summoner's Rift/Twisted Treeline", "Unranked", summaries); AnalayseStatistics("Ranked Twisted Treeline (team)", "RankedPremade3x3", summaries); AnalayseStatistics("Ranked Summoner's Rift (solo)", "RankedSolo5x5", summaries); AnalayseStatistics("Ranked Summoner's Rift (team)", "RankedPremade5x5", summaries); AnalayseStatistics("Unranked Dominion", "OdinUnranked", summaries); } }
void UpdateSummoner(Summoner summoner, AllPublicSummonerDataDTO publicSummonerData, AggregatedStats[] aggregatedStats, PlayerLifeTimeStats lifeTimeStatistics, RecentGames recentGames, DbConnection connection) { int accountId = summoner.AccountId; lock (ActiveAccountIds) { // Avoid concurrent updates of the same account, it's asking for trouble and is redundant anyways // We might obtain outdated results in one query but that's a minor issue in comparison to corrupted database results if (ActiveAccountIds.Contains(accountId)) { return; } ActiveAccountIds.Add(accountId); } // Use a transaction because we're going to insert a fair amount of data using (var transaction = connection.BeginTransaction()) { UpdateSummonerFields(summoner, connection, true); UpdateRunes(summoner, publicSummonerData, connection); UpdateSummonerRatings(summoner, lifeTimeStatistics, connection); // A season value of zero indicates the current season only for (int season = 0; season < aggregatedStats.Length; season++) { UpdateSummonerRankedStatistics(summoner, season, aggregatedStats[season], connection); } UpdateSummonerGames(summoner, recentGames, connection); transaction.Commit(); } lock (ActiveAccountIds) ActiveAccountIds.Remove(accountId); }