Exemplo n.º 1
0
        /// <summary>
        /// Compute rating of a player based on the rating formula by hltv.org
        /// </summary>
        /// <param name="game"></param>
        /// <param name="player"></param>
        /// <returns></returns>
        public double ComputeRating(int numberOfRounds, PlayerRatingData playerData)
        {
            int Rounds = numberOfRounds;

            double KillRating     = playerData.Kills / (double)Rounds / (double)AVERAGE_KPR;                                                                                                      // Kills/Rounds/AverageKPR
            double SurvivalRating = (Rounds - playerData.Deaths) / (double)Rounds / (double)AVERAGE_SPR;                                                                                          // (Rounds-Deaths)/Rounds/AverageSPR
            double RoundsWithMultipleKillsRating = (playerData._1K + 4 * playerData._2K + 9 * playerData._3K + 16 * playerData._4K + 25 * playerData._5K) / (double)Rounds / (double)AVERAGE_RMK; // (1K + 4*2K + 9*3K + 16*4K + 25*5K)/Rounds/AverageRMK

            return(Math.Round((KillRating + 0.7 * SurvivalRating + RoundsWithMultipleKillsRating) / 2.7, 3));
        }
Exemplo n.º 2
0
        public double ComputeRating(int numberOfRounds, PlayerRatingData playerData, RatingMethod method)
        {
            switch (method)
            {
            case RatingMethod.HLTV_ORG: return(ComputeRating(numberOfRounds, playerData));

            case RatingMethod.CSGO: throw new NotImplementedException();                     // TODO (score in csgo scoreboard)

            case RatingMethod.BuRner: throw new NotImplementedException();                   //TODO (assists, clutch)

            default: throw new ArgumentException();
            }
        }
Exemplo n.º 3
0
        public ScoreBoardLine GetScoreBoardLine(Game game, Player player)
        {
            ScoreBoardLine line = new ScoreBoardLine();

            line.PlayerName = player.Name;
            line.TeamName   = (player.Team != null) ? player.Team.Name : string.Empty;

            foreach (Round round in game.Rounds)
            {
                foreach (Frag frag in round.Frags)
                {
                    if (frag.Killer.SteamId == player.SteamId)
                    {
                        line.Kills++;

                        if (frag.Headshot)
                        {
                            line.Headshot++;
                        }
                    }

                    if (frag.Assist != null && frag.Assist.SteamId == player.SteamId)
                    {
                        line.Assist++;
                    }

                    if (frag.Victim.SteamId == player.SteamId)
                    {
                        line.Deaths++;
                    }
                }

                if (round.Mvp != null && round.Mvp.SteamId == player.SteamId)
                {
                    line.Mvp++;
                }
            }

            PlayerRatingData data = ratingService.ComputeRatingData(game, player);

            line._1K = data._1K;
            line._2K = data._2K;
            line._3K = data._3K;
            line._4K = data._4K;
            line._5K = data._5K;

            line.Rating = ratingService.ComputeRating(game.Rounds.Count, data);

            return(line);
        }
Exemplo n.º 4
0
        public PlayerRatingData ComputeRatingData(Game game, Player player)
        {
            PlayerRatingData data = new PlayerRatingData();

            int fragByRound;

            foreach (Round round in game.Rounds)
            {
                fragByRound = 0;

                foreach (Frag frag in round.Frags)
                {
                    if (frag.Killer.SteamId == player.SteamId)
                    {
                        data.Kills++;
                        fragByRound++;
                    }

                    if (frag.Victim.SteamId == player.SteamId)
                    {
                        data.Deaths++;
                    }
                }

                switch (fragByRound)
                {
                case 1: data._1K++; break;

                case 2: data._2K++; break;

                case 3: data._3K++; break;

                case 4: data._4K++; break;

                case 5: data._5K++; break;
                }
            }

            return(data);
        }
Exemplo n.º 5
0
        public double ComputeRating(Game game, Player player)
        {
            PlayerRatingData playerData = ComputeRatingData(game, player);

            return(ComputeRating(game.Rounds.Count, playerData));
        }