public BattleModel(SpringBattle bat) { WholeHistoryRating whr = RatingSystems.GetRatingSystem(bat.GetRatingCategory()) as WholeHistoryRating; players = bat.SpringBattlePlayers.Where(x => !x.IsSpectator).Select(player => new PlayerModel() { rating = whr.GetInternalRating(player.AccountID, bat.StartTime)?.GetElo() + WholeHistoryRating.RatingOffset, stdev = whr.GetInternalRating(player.AccountID, bat.StartTime)?.GetEloStdev(), accountId = player.AccountID, }).ToList(); id = bat.SpringBattleID; }
private static void CalculateRatingsWHR(string game) { var config = new Config(100); var whr = new WholeHistoryRating(config); int gameId = 0; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); DateTime beginningOfTime = new DateTime(); if (game.ToLower() == "msc") { gameId = 1; beginningOfTime = new DateTime(2019, 6, 13); } else if (game.ToLower() == "sms") { gameId = 2; beginningOfTime = new DateTime(2020, 12, 9); } string sql = "select * from match where futurematch = 0 and gametype = " + gameId; using (SqlCommand cmd = new SqlCommand(sql, connection)) { using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { int player1 = Convert.ToInt32(reader["player1"]); int player2 = Convert.ToInt32(reader["player2"]); int p1wins = Convert.ToInt32(reader["p1wins"]); int p2wins = Convert.ToInt32(reader["p1losses"]); DateTime matchDate = Convert.ToDateTime(reader["MatchDate"]); int timeStep = (matchDate.Date - beginningOfTime.Date).Days; for (int i = 0; i < p1wins; i++) { whr.CreateGame(player1, player2, WHResult.Player1Win, timeStep); } for (int j = 0; j < p2wins; j++) { whr.CreateGame(player1, player2, WHResult.Player2Win, timeStep); } } } } } whr.Iterate(200); using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand cmd = new SqlCommand("select * from playerstats where gametype = " + gameId, connection)) { using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { int player = Convert.ToInt32(reader["Player"]); try { foreach (double[] playerRating in whr.RatingsForPlayer(player)) { using (SqlConnection connUpsert = new SqlConnection(connectionString)) { connUpsert.Open(); using (SqlCommand cmdUpsert = new SqlCommand("UpsertRatingHistoryWHR", connUpsert)) { cmdUpsert.CommandType = System.Data.CommandType.StoredProcedure; cmdUpsert.Parameters.AddWithValue("@Player", player); cmdUpsert.Parameters.AddWithValue("@GameType", gameId); cmdUpsert.Parameters.AddWithValue("@MatchDate", GetDateFromDayNumber(playerRating[0], gameId)); cmdUpsert.Parameters.AddWithValue("@RatingWHR", playerRating[1]); cmdUpsert.ExecuteNonQuery(); } } } double rating = whr.RatingsForPlayer(player).Last()[1]; using (SqlConnection connUpdate = new SqlConnection(connectionString)) { connUpdate.Open(); using (SqlCommand cmdUpdate = new SqlCommand( "update playerstats set ratingwhr = " + rating + " where player = " + player + " and gametype = " + gameId, connUpdate)) { cmdUpdate.ExecuteNonQuery(); } } } catch (Exception ex) { /* please don't judge me */ } } } } } using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand cmd = new SqlCommand("select * from match where gametype = @x", connection)) { cmd.Parameters.AddWithValue("@x", gameId); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { Game gameToCalc = whr.CreateGame(Convert.ToInt32(reader["Player1"]), Convert.ToInt32(reader["Player2"]), WHResult.Player1Win, GetDayNumberFromDate(Convert.ToDateTime(reader["MatchDate"]), gameId)); double rating = gameToCalc.Player1WinProbability; using (SqlConnection connUpdate = new SqlConnection(connectionString)) { connUpdate.Open(); using (SqlCommand cmdUpdate = new SqlCommand("update match set matchodds = @x where match = @y", connUpdate)) { cmdUpdate.Parameters.AddWithValue("@y", Convert.ToInt32(reader["match"])); cmdUpdate.Parameters.AddWithValue("@x", gameToCalc.Player1WinProbability); cmdUpdate.ExecuteNonQuery(); } } } } } } }