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;
            }
Exemple #2
0
        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();
                                }
                            }
                        }
                    }
                }
            }
        }