private CompetitionPosition[] PositionFinalPlayersInCompetition(CompetitionDetails details, CompetitionPlayer[] players)
 {
     var positioningEngine = new FinalPositioningEngine();
     var positioningParameters = new FinalPositioningParameters
     {
         QualifyingToFinal = details.Type.QualifyingToFinalPlayersCount,
         Players = (from p in players select new Simple.SAMS.CompetitionEngine.Player
                                                 {
                                                     Id = p.Id, 
                                                     Rank = p.CompetitionRank,
                                                     AccumulatedScore = p.AccumulatedScore.GetValueOrDefault(),
                                                     AverageScore = p.AverageScore.GetValueOrDefault()
                                                 }).ToArray<Simple.SAMS.CompetitionEngine.Player>()
     };
     
     return positioningEngine.Evaluate(positioningParameters);
 }
Пример #2
0
        private static Contracts.Players.CompetitionPlayer MapDataCompetitionPlayer(CompetitionPlayer dataEntity, int competitionId)
        {
            var entity = new Contracts.Players.CompetitionPlayer();

            AutoMapper.Mapper.DynamicMap(dataEntity.Player, entity);
            entity.CompetitionRank  = dataEntity.Rank.GetValueOrDefault();
            entity.AccumulatedScore = dataEntity.Player.AccumulatedScore;
            entity.AverageScore     = dataEntity.Player.AverageScore;
            entity.Replaceable      =
                dataEntity.Player.Matches.Count(
                    m => m.CompetitionId == competitionId && m.Status >= (int)MatchStatus.Playing) == 0;
            entity.Source  = (CompetitionPlayerSource)dataEntity.Source;
            entity.Section = (CompetitionSection)dataEntity.Section;
            entity.Status  =
                (CompetitionPlayerStatus)dataEntity.Status.GetValueOrDefault((int)CompetitionPlayerStatus.Active);
            entity.Points   = dataEntity.Points;
            entity.Position = dataEntity.Position;
            return(entity);
        }
        private void UpdatePlayerForTeam(Team team, Uri uri, string role)
        {
            try
            {
                var responseString = Client.GetStringAsync(uri).Result;

                if (responseString == null)
                {
                    return;
                }

                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(responseString);
                var playerName = doc.DocumentNode.SelectSingleNode("//h1")?.InnerText.Replace("&nbsp; ", "").Trim();

                if (playerName == null)
                {
                    return;
                }

                var player = _dbContext.CompetitionPlayers.FirstOrDefault(p => p.Nickname == playerName);

                if (player == null)
                {
                    player = new CompetitionPlayer();

                    _dbContext.CompetitionPlayers.Add(player);
                }

                player.Role     = (Role)Enum.Parse(typeof(Role), role, true);
                player.Team     = team;
                player.Nickname = playerName;

                Console.WriteLine($"Parsing player {player.Nickname} for team {player.Team.Name} in role {player.Role}");

                PopulatePlayerStats(doc, player);
            }
            catch (Exception ex)
            {
                Log.Logger.Error($"Error updating player for team {team.Name} {ex.Message}");
            }
        }
        private void SaveSchedule(MatchHeaderInfo[] matches, CompetitionPlayer[] players, string schedulePath)
        {
            var playersMap = new Dictionary<int, int>();
            var index = 1;
            foreach (var player in players)
            {
                playersMap[player.Id] = index++;
            }

            var items = new List<MatchScheduleInfo>();
            index = 1;
            foreach (var match in matches)
            {
                var matchSchedule = new MatchScheduleInfo();
                matchSchedule.Id = "M" + index++;
                if (match.Player1 != null)
                {
                    matchSchedule.Player1 = playersMap[match.Player1.Id];
                }
                else if (match.Player1 == null || match.Player1Code == "BYE")
                {
                    matchSchedule.Player1 = players.Length+1;
                }
                if (match.Player2 != null)
                {
                    matchSchedule.Player2 = playersMap[match.Player2.Id];
                }
                else if (match.Player2 == null || match.Player2Code == "BYE")
                {
                    matchSchedule.Player2 = players.Length+1;
                }

                if (match.Winner != MatchWinner.None)
                {
                    matchSchedule.Winner = (int) match.Winner;
                }

                matchSchedule.Player1Points = 0;
                matchSchedule.Player2Points = 0;
                matchSchedule.SetScores = match.SetScores;
                //matchSchedule.SetScores = new[]
                //                              {
                //                                  new SetScore()
                //                                      {
                //                                          Player1Points = 7,
                //                                          Player2Points = 5,
                //                                      }, 
                //                                  new SetScore()
                //                                      {
                //                                          Player1Points = 2,
                //                                          Player2Points = 6,
                //                                      }, 
                //                                  new SetScore()
                //                                      {
                //                                          Player1Points = 0,
                //                                          Player2Points = 6,
                //                                      }, 
                //                              };
                items.Add(matchSchedule);
            }

            MatchScheduleInfo.Write(items.ToArray(), schedulePath);
        }
 private void SavePlayers(CompetitionPlayer[] players, string playersPath, HebrewWordInverter inverter)
 {
     File.WriteAllLines(playersPath, players.Select(p=>string.Format("{0};;;", inverter.Invert(p.FullName))));
 }
        private void PopulatePlayerStats(HtmlDocument doc, CompetitionPlayer player)
        {
            var tables = doc.DocumentNode.SelectNodes("//table[contains(@class,'table_list')]");

            if (tables == null)
            {
                return;
            }

            List <Task> tasks = new List <Task>();

            foreach (var table in tables)
            {
                try
                {
                    if (table.InnerText.Contains("General stats"))
                    {
                        var columns = table.SelectNodes(".//td");
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            for (int i = 0; i < columns.Count - 1; i += 2)
                            {
                                if (columns[i].InnerText.Contains("Record") && columns[i + 1].InnerText != "-")
                                {
                                    var winrateArr = columns[i + 1].InnerText.Replace("W", "").Replace("L", "").Split(" - ");
                                    var wins       = int.Parse(winrateArr[0].Trim());
                                    var losses     = int.Parse(winrateArr[1].Trim());
                                    player.Wins    = wins;
                                    player.Losses  = losses;

                                    if (wins + losses > 0)
                                    {
                                        var winrate    = (int)(((double)wins / (double)(wins + losses)) * 100);
                                        player.Winrate = winrate;
                                    }

                                    continue;
                                }
                                if (columns[i].InnerText.Contains("KDA") && columns[i + 1].InnerText != "-")
                                {
                                    try
                                    {
                                        player.KDA = float.Parse(columns[i + 1].InnerText, CultureInfo.InvariantCulture);
                                    }
                                    catch
                                    {
                                        Log.Logger.Error($"Could not parse KDA for player {player.Nickname}, KDA {columns[i + 1].InnerText}");
                                    }
                                }
                                if (columns[i].InnerText.Contains("CS per Minute") && columns[i + 1].InnerText != "-")
                                {
                                    player.CSPM = float.Parse(columns[i + 1].InnerText, CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("Gold Per Minute") && columns[i + 1].InnerText != "-")
                                {
                                    player.GPM = float.Parse(columns[i + 1].InnerText, CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("Gold%") && columns[i + 1].InnerText != "-")
                                {
                                    player.GoldPercent = float.Parse(columns[i + 1].InnerText.Replace("%", "").Trim(), CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("Kill Participation") && columns[i + 1].InnerText != "-")
                                {
                                    player.KillParticipationPercent = float.Parse(columns[i + 1].InnerText.Replace("%", "").Trim(), CultureInfo.InvariantCulture);
                                    continue;
                                }
                            }
                        }));
                    }
                    if (table.InnerText.Contains("Early game"))
                    {
                        var columns = table.SelectNodes(".//td");
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            for (int i = 0; i < columns.Count - 1; i += 2)
                            {
                                if (columns[i].InnerText.Contains("Ahead in CS at 15 min") && columns[i + 1].InnerText != "-")
                                {
                                    var percentString = columns[i + 1].InnerText.Replace("%", "").Trim().Replace("&nbsp;", "").Trim();
                                    player.AheadInCSAt15MinPercent = float.Parse(percentString, CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("CS Differential at 15 min") && columns[i + 1].InnerText != "-")
                                {
                                    player.CSDifferenceAt15Min = float.Parse(columns[i + 1].InnerText, CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("Gold Differential at 15 min") && columns[i + 1].InnerText != "-")
                                {
                                    player.GoldDifferenceAt15Min = float.Parse(columns[i + 1].InnerText, CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("XP Differential at 15 min") && columns[i + 1].InnerText != "-")
                                {
                                    player.XPDifferenceAt15Min = float.Parse(columns[i + 1].InnerText, CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("First Blood Participation") && columns[i + 1].InnerText != "-")
                                {
                                    player.FirstBloodParticipationPercent = float.Parse(columns[i + 1].InnerText.Replace("%", "").Trim(), CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("First Blood Victim") && columns[i + 1].InnerText != "-")
                                {
                                    player.FirstBloodVictimPercent = float.Parse(columns[i + 1].InnerText.Replace("%", "").Trim(), CultureInfo.InvariantCulture);
                                    continue;
                                }
                            }
                        }));
                    }
                    if (table.InnerText.Contains("Aggression"))
                    {
                        var columns = table.SelectNodes(".//td");
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            for (int i = 0; i < columns.Count - 1; i += 2)
                            {
                                if (columns[i].InnerText.Contains("Damage Per Minute") && columns[i + 1].InnerText != "-")
                                {
                                    player.DamagePerMinute = float.Parse(columns[i + 1].InnerText, CultureInfo.InvariantCulture);
                                    continue;
                                }
                                if (columns[i].InnerText.Contains("Damage%") && columns[i + 1].InnerText != "-")
                                {
                                    player.DamagePercent = float.Parse(columns[i + 1].InnerText.Replace("%", "").Trim(), CultureInfo.InvariantCulture);
                                    continue;
                                }
                            }
                        }));
                    }
                    if (table.InnerText.Contains("Vision"))
                    {
                        var columns = table.SelectNodes(".//td");
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            for (int i = 0; i < columns.Count - 1; i += 2)
                            {
                                if (columns[i].InnerText.Contains("Vision score Per Minute") && columns[i + 1].InnerText != "-")
                                {
                                    player.VisionScorePerMinute = float.Parse(columns[i + 1].InnerText, CultureInfo.InvariantCulture);
                                    continue;
                                }
                            }
                        }));
                    }
                }
                catch (Exception ex)
                {
                    Log.Logger.Error($"Error parsing Player column! PlayerName: {player.Nickname}", ex);
                }
            }

            Task.WaitAll(tasks.ToArray());
        }
 private CompetitionPosition[] PositionQualifyingPlayers(CompetitionDetails details, CompetitionPlayer[] qualifyingPlayers)
 {
     var qualifyingPositioningEngine = new QualifyingPositioningEngine();
     var qualifyingPositioningParameters = new QualifyingPositionParameters
     {
         PlayersCount = details.Type.QualifyingPlayersCount,
         QualifyingCount = details.Type.QualifyingToFinalPlayersCount,
         Players = (from p in qualifyingPlayers.Take<CompetitionPlayer>(details.Type.QualifyingPlayersCount) select new Simple.SAMS.CompetitionEngine.Player
                                                                                                                        {
                                                                                                                            Id = p.Id, 
                                                                                                                            Rank = p.CompetitionRank,
                                                                                                                            AverageScore = p.AverageScore.GetValueOrDefault(),
                                                                                                                            AccumulatedScore = p.AccumulatedScore.GetValueOrDefault()
                                                                                                                        }).ToArray<Simple.SAMS.CompetitionEngine.Player>()
     };
     
     return qualifyingPositioningEngine.Evaluate(qualifyingPositioningParameters);
 }