/// <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)); }
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(); } }
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); }
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); }
public double ComputeRating(Game game, Player player) { PlayerRatingData playerData = ComputeRatingData(game, player); return(ComputeRating(game.Rounds.Count, playerData)); }