public static void UpdateAchieves(StatisticsWindowLogic game) // Проверка ачивок { // Проверка стандартных ачивок CheckPlayer(game.Player1Id); CheckPlayer(game.Player2Id); // Проверка спецачивок if (!CheckPlayerHasAchieve(game.Player1Id, "AFirst180")) { if (game.Player1_180 > 0) { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var cmd2 = new SqlCommand($"UPDATE Players SET AFirst180 = 'True' WHERE Id = {game.Player1Id}", connection); cmd2.ExecuteNonQuery(); var name = (string)new SqlCommand($"SELECT Nickname FROM Players WHERE Id = {game.Player1Id}", connection).ExecuteScalar(); connection.Close(); NewAchieve.ShowNewAchieveWindow(name, "AFirst180"); } } } if (!CheckPlayerHasAchieve(game.Player2Id, "AFirst180")) { if (game.Player2_180 > 0) { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var cmd2 = new SqlCommand($"UPDATE Players SET AFirst180 = 'True' WHERE Id = {game.Player2Id}", connection); cmd2.ExecuteNonQuery(); var name = (string)new SqlCommand($"SELECT Nickname FROM Players WHERE Id = {game.Player2Id}", connection).ExecuteScalar(); connection.Close(); NewAchieve.ShowNewAchieveWindow(name, "AFirst180"); } } } if (!CheckPlayerHasAchieve(game.Player1Id, "A3Bull")) { if (game.Player1Is3Bull) { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var cmd = new SqlCommand($"UPDATE Players SET A3Bull = 'True' WHERE Id = {game.Player1Id}", connection); cmd.ExecuteNonQuery(); var name = (string)new SqlCommand($"SELECT Nickname FROM Players WHERE Id = {game.Player1Id}", connection).ExecuteScalar(); connection.Close(); NewAchieve.ShowNewAchieveWindow(name, "A3Bull"); connection.Close(); } } } if (!CheckPlayerHasAchieve(game.Player2Id, "A3Bull")) { if (game.Player2Is3Bull) { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var cmd = new SqlCommand($"UPDATE Players SET A3Bull = 'True' WHERE Id = {game.Player2Id}", connection); cmd.ExecuteNonQuery(); var name = (string)new SqlCommand($"SELECT Nickname FROM Players WHERE Id = {game.Player2Id}", connection).ExecuteScalar(); connection.Close(); NewAchieve.ShowNewAchieveWindow(name, "A3Bull"); connection.Close(); } } } if (!CheckPlayerHasAchieve(game.Player1Id, "AmrZ")) { if (game.Player1IsmrZ) { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var cmd = new SqlCommand($"UPDATE Players SET AmrZ = 'True' WHERE Id = {game.Player1Id}", connection); cmd.ExecuteNonQuery(); var name = (string)new SqlCommand($"SELECT Nickname FROM Players WHERE Id = {game.Player1Id}", connection).ExecuteScalar(); connection.Close(); NewAchieve.ShowNewAchieveWindow(name, "AmrZ"); connection.Close(); } } } if (!CheckPlayerHasAchieve(game.Player2Id, "AmrZ")) { if (game.Player2IsmrZ) { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var cmd = new SqlCommand($"UPDATE Players SET AmrZ = 'True' WHERE Id = {game.Player2Id}", connection); cmd.ExecuteNonQuery(); var name = (string)new SqlCommand($"SELECT Nickname FROM Players WHERE Id = {game.Player2Id}", connection).ExecuteScalar(); connection.Close(); NewAchieve.ShowNewAchieveWindow(name, "AmrZ"); connection.Close(); } } } void CheckPlayer(int Id) { // Если ачивка не получена - проверяем на получение в матче if (!CheckPlayerHasAchieve(Id, "A10matchespalyed")) { CheckPlayerGetAchieve(Id, "GamesPlayed", "A10matchespalyed", 10); } if (!CheckPlayerHasAchieve(Id, "A100MatchesPalyed")) { CheckPlayerGetAchieve(Id, "GamesPlayed", "A100MatchesPalyed", 100); } if (!CheckPlayerHasAchieve(Id, "A1000MatchesPalyed")) { CheckPlayerGetAchieve(Id, "GamesPlayed", "A1000MatchesPalyed", 1000); } if (!CheckPlayerHasAchieve(Id, "A10MatchesWon")) { CheckPlayerGetAchieve(Id, "GamesWon", "A10MatchesWon", 10); } if (!CheckPlayerHasAchieve(Id, "A100MatchesWon")) { CheckPlayerGetAchieve(Id, "GamesWon", "A100MatchesWon", 100); } if (!CheckPlayerHasAchieve(Id, "A1000MatchesWon")) { CheckPlayerGetAchieve(Id, "GamesWon", "A1000MatchesWon", 1000); } if (!CheckPlayerHasAchieve(Id, "A1000Throws")) { CheckPlayerGetAchieve(Id, "Throws", "A1000Throws", 1000); } if (!CheckPlayerHasAchieve(Id, "A10000Throws")) { CheckPlayerGetAchieve(Id, "Throws", "A10000Throws", 10000); } if (!CheckPlayerHasAchieve(Id, "A100000Throws")) { CheckPlayerGetAchieve(Id, "Throws", "A100000Throws", 100000); } if (!CheckPlayerHasAchieve(Id, "A10000Points")) { CheckPlayerGetAchieve(Id, "Points", "A10000Points", 10000); } if (!CheckPlayerHasAchieve(Id, "A100000Points")) { CheckPlayerGetAchieve(Id, "Points", "A100000Points", 100000); } if (!CheckPlayerHasAchieve(Id, "A1000000Points")) { CheckPlayerGetAchieve(Id, "Points", "A1000000Points", 1000000); } if (!CheckPlayerHasAchieve(Id, "A180x10")) { CheckPlayerGetAchieve(Id, "_180", "A180x10", 10); } if (!CheckPlayerHasAchieve(Id, "A180x100")) { CheckPlayerGetAchieve(Id, "_180", "A180x100", 100); } if (!CheckPlayerHasAchieve(Id, "A180x1000")) { CheckPlayerGetAchieve(Id, "_180", "A180x1000", 1000); } } bool CheckPlayerHasAchieve(int id, string achieve) // Проверка игрока на наличие ачивки { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var cmd = new SqlCommand($"SELECT {achieve} FROM Players WHERE Id = {id}", connection); var result = (bool)cmd.ExecuteScalar(); connection.Close(); return(result); } } void CheckPlayerGetAchieve(int id, string playerRow, string achieve, int number) { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var cmd = new SqlCommand($"SELECT {playerRow} FROM Players WHERE Id = {id}", connection); var result = (int)cmd.ExecuteScalar(); connection.Close(); if (result >= number) // Ачивка получена в процессе матча { connection.Open(); var cmd2 = new SqlCommand($"UPDATE Players SET {achieve} = 'True' WHERE Id = {id}", connection); cmd2.ExecuteNonQuery(); var name = (string)new SqlCommand($"SELECT Nickname FROM Players WHERE Id = {id}", connection).ExecuteScalar(); connection.Close(); NewAchieve.ShowNewAchieveWindow(name, achieve); } } } }
public static void AfterMatchSave(StatisticsWindowLogic game) // Сохранение данных матча в БД { MainWindow.Cursor = Cursors.Wait; using (var connection = new SqlConnection(connectionstring)) { connection.Open(); UpdateRow("Players", game.WinnerId, "GamesWon", 1, connection); UpdateRow("Players", game.LooserId, "GamesLoose", 1, connection); // Игрок 1 // Обновляем данные игрока в БД UpdateRow("Players", game.Player1Id, "GamesPlayed", 1, connection); UpdateRow("Players", game.Player1Id, "SetsPlayed", game.SetsPlayed, connection); UpdateRow("Players", game.Player1Id, "SetsWon", game.Player1SetsWon, connection); UpdateRow("Players", game.Player1Id, "LegsPlayed", game.LegsPlayed, connection); UpdateRow("Players", game.Player1Id, "LegsWon", game.Player1LegsWon, connection); UpdateRow("Players", game.Player1Id, "Throws", game.Player1Throws, connection); UpdateRow("Players", game.Player1Id, "Points", game.Player1Points, connection); UpdateRow("Players", game.Player1Id, "_180", game.Player1_180, connection); UpdateRow("Players", game.Player1Id, "Trembles", game.Player1TrembleThrows, connection); UpdateRow("Players", game.Player1Id, "Bulleyes", game.Player1BulleyeThrows, connection); UpdateRow("Players", game.Player1Id, "Doubles", game.Player1DoubleThrows, connection); UpdateRow("Players", game.Player1Id, "Singles", game.Player1SingleThrows, connection); UpdateRow("Players", game.Player1Id, "_25", game.Player1_25Throws, connection); UpdateRow("Players", game.Player1Id, "Zeroes", game.Player1ZeroThrows, connection); UpdateRow("Players", game.Player1Id, "Faults", game.Player1FaultThrows, connection); // Игрок 2 // Обновляем данные игрока в БД UpdateRow("Players", game.Player2Id, "GamesPlayed", 1, connection); UpdateRow("Players", game.Player2Id, "SetsPlayed", game.SetsPlayed, connection); UpdateRow("Players", game.Player2Id, "SetsWon", game.Player2SetsWon, connection); UpdateRow("Players", game.Player2Id, "LegsPlayed", game.LegsPlayed, connection); UpdateRow("Players", game.Player2Id, "LegsWon", game.Player2LegsWon, connection); UpdateRow("Players", game.Player2Id, "Throws", game.Player2Throws, connection); UpdateRow("Players", game.Player2Id, "Points", game.Player2Points, connection); UpdateRow("Players", game.Player2Id, "_180", game.Player2_180, connection); UpdateRow("Players", game.Player2Id, "Trembles", game.Player2TrembleThrows, connection); UpdateRow("Players", game.Player2Id, "Bulleyes", game.Player2BulleyeThrows, connection); UpdateRow("Players", game.Player2Id, "Doubles", game.Player2DoubleThrows, connection); UpdateRow("Players", game.Player2Id, "Singles", game.Player2SingleThrows, connection); UpdateRow("Players", game.Player2Id, "_25", game.Player2_25Throws, connection); UpdateRow("Players", game.Player2Id, "Zeroes", game.Player2ZeroThrows, connection); UpdateRow("Players", game.Player2Id, "Faults", game.Player2FaultThrows, connection); // Среднее игроков UpdatePlayersAverages(game.Player1Id, game.Player2Id, connection); // Вычисляем и обновляем Avarages игроков // Проверяем лучший средний набор и обновляем если нужно CheckAndUpdateBestHand(game.Player1Id, game.AveragePlayer1Points * 3); CheckAndUpdateBestHand(game.Player2Id, game.AveragePlayer2Points * 3); // Матч // Сохраняем матч в БД var savematch = new SqlCommand("INSERT INTO Games VALUES (@Player1ID,@Player1Name,@Player2ID,@Player2Name,@Datetime,@WinnerID,@WinnerName,@LooserID,@LooserName,@SetsPlayed,@Player1SetsWon,@Player2SetsWon,@LegsPlayed,@Player1LegsWon,@Player2LegsWon,@Throws,@Player1Throws,@Player2Throws,@Points,@Player1Points,@Player2Points,@AvarageThrowPoints,@Player1AvaragePoints,@Player1AvarageHand,@Player2AvaragePoints,@Player2AvarageHand,@_180,@Player1180,@Player2180,@Trembles,@Player1Trembles,@Player2Trembles,@Bulleyes,@Player1Bulleyes,@Player2Bulleyes,@Doubles,@Player1Doubles,@Player2Doubles,@Singles,@Player1Singles,@Player2Singles,@_25,@Player125,@Player225,@Zeroes,@Player1Zeroes,@Player2Zeroes,@Faults,@Player1Faults,@Player2Faults,@Log)", connection); savematch.Parameters.AddWithValue("@Player1ID", game.Player1Id); savematch.Parameters.AddWithValue("@Player1Name", game.Player1Name); savematch.Parameters.AddWithValue("@Player2ID", game.Player2Id); savematch.Parameters.AddWithValue("@Player2Name", game.Player2Name); savematch.Parameters.AddWithValue("@Datetime", DateTime.Now); savematch.Parameters.AddWithValue("@WinnerID", game.WinnerId); savematch.Parameters.AddWithValue("@WinnerName", game.WinnerName); savematch.Parameters.AddWithValue("@LooserID", game.LooserId); savematch.Parameters.AddWithValue("@LooserName", game.LooserName); savematch.Parameters.AddWithValue("@SetsPlayed", game.SetsPlayed); savematch.Parameters.AddWithValue("@Player1SetsWon", game.Player1SetsWon); savematch.Parameters.AddWithValue("@Player2SetsWon", game.Player2SetsWon); savematch.Parameters.AddWithValue("@LegsPlayed", game.LegsPlayed); savematch.Parameters.AddWithValue("@Player1LegsWon", game.Player1LegsWon); savematch.Parameters.AddWithValue("@Player2LegsWon", game.Player2LegsWon); savematch.Parameters.AddWithValue("@Throws", game.Throws); savematch.Parameters.AddWithValue("@Player1Throws", game.Player1Throws); savematch.Parameters.AddWithValue("@Player2Throws", game.Player2Throws); savematch.Parameters.AddWithValue("@Points", game.Points); savematch.Parameters.AddWithValue("@Player1Points", game.Player1Points); savematch.Parameters.AddWithValue("@Player2Points", game.Player2Points); savematch.Parameters.AddWithValue("@AvarageThrowPoints", game.AveragePoints); savematch.Parameters.AddWithValue("@Player1AvaragePoints", game.AveragePlayer1Points); savematch.Parameters.AddWithValue("@Player1AvarageHand", game.AveragePlayer1Points * 3); savematch.Parameters.AddWithValue("@Player2AvaragePoints", game.AveragePlayer2Points); savematch.Parameters.AddWithValue("@Player2AvarageHand", game.AveragePlayer2Points * 3); savematch.Parameters.AddWithValue("@_180", game._180); savematch.Parameters.AddWithValue("@Player1180", game.Player1_180); savematch.Parameters.AddWithValue("@Player2180", game.Player2_180); savematch.Parameters.AddWithValue("@Trembles", game.TrembleThrows); savematch.Parameters.AddWithValue("@Player1Trembles", game.Player1TrembleThrows); savematch.Parameters.AddWithValue("@Player2Trembles", game.Player2TrembleThrows); savematch.Parameters.AddWithValue("@Bulleyes", game.BulleyeThrows); savematch.Parameters.AddWithValue("@Player1Bulleyes", game.Player1BulleyeThrows); savematch.Parameters.AddWithValue("@Player2Bulleyes", game.Player2BulleyeThrows); savematch.Parameters.AddWithValue("@Doubles", game.DoubleThrows); savematch.Parameters.AddWithValue("@Player1Doubles", game.Player1DoubleThrows); savematch.Parameters.AddWithValue("@Player2Doubles", game.Player2DoubleThrows); savematch.Parameters.AddWithValue("@Singles", game.SingleThrows); savematch.Parameters.AddWithValue("@Player1Singles", game.Player1SingleThrows); savematch.Parameters.AddWithValue("@Player2Singles", game.Player2SingleThrows); savematch.Parameters.AddWithValue("@_25", game._25Throws); savematch.Parameters.AddWithValue("@Player125", game.Player1_25Throws); savematch.Parameters.AddWithValue("@Player225", game.Player2_25Throws); savematch.Parameters.AddWithValue("@Zeroes", game.ZeroThrows); savematch.Parameters.AddWithValue("@Player1Zeroes", game.Player1ZeroThrows); savematch.Parameters.AddWithValue("@Player2Zeroes", game.Player2ZeroThrows); savematch.Parameters.AddWithValue("@Faults", game.FaultThrows); savematch.Parameters.AddWithValue("@Player1Faults", game.Player1FaultThrows); savematch.Parameters.AddWithValue("@Player2Faults", game.Player2FaultThrows); savematch.Parameters.AddWithValue("@Log", MainWindow.TextLog.Text); savematch.ExecuteNonQuery(); // Закрываем подключения connection.Close(); MainWindow.Cursor = Cursors.Arrow; } void UpdateRow(string Table, int PlayerId, string TableRow, double Add, SqlConnection connection) // Обновление данных у игрока { var getDataCmd = new SqlCommand($"SELECT {TableRow} FROM {Table} WHERE Id = {PlayerId}", connection); var data = (int)getDataCmd.ExecuteScalar(); // Получаем старые данные var setDataCmd = new SqlCommand($"UPDATE {Table} SET {TableRow} = {data + Add} WHERE Id={PlayerId}", connection); setDataCmd.ExecuteNonQuery(); // Добавляем к старым данным новые данные } void UpdatePlayersAverages(int id1, int id2, SqlConnection connection) // Рассчет и обновление Avarages игроков { // Player 1 var getPlayer1Throws = new SqlCommand($"SELECT Throws FROM Players WHERE Id = {id1}", connection); var player1Throws = (int)getPlayer1Throws.ExecuteScalar(); // Получение бросков игрока 1 var getPlayer1Points = new SqlCommand($"SELECT Points FROM Players WHERE Id = {id1}", connection); var player1Points = (int)getPlayer1Points.ExecuteScalar(); // Получение очков игрока 1 var player1AverageThrowPoints = player1Throws != 0 ? Math.Round((double)player1Points / player1Throws, 2) : 0; // Рассчет среднего броска var setPlayer1AverageThrowPoints = new SqlCommand($"UPDATE Players SET AvarageThrowPoints = @Player1AvarageThrowPoints WHERE Id={id1}", connection); setPlayer1AverageThrowPoints.Parameters.AddWithValue("@Player1AvarageThrowPoints", player1AverageThrowPoints); setPlayer1AverageThrowPoints.ExecuteNonQuery(); // Запись среднего броска var setPlayer1AverageHandPoints = new SqlCommand($"UPDATE Players SET AvarageHand = @Player1AvarageHandPoints WHERE Id={id1}", connection); setPlayer1AverageHandPoints.Parameters.AddWithValue("@Player1AvarageHandPoints", player1AverageThrowPoints * 3); setPlayer1AverageHandPoints.ExecuteNonQuery(); // Запись средних очков подхода // Player 2 var getPlayer2Throws = new SqlCommand($"SELECT Throws FROM Players WHERE Id = {id2}", connection); var player2Throws = (int)getPlayer2Throws.ExecuteScalar(); // Получение бросков игрока 2 var getPlayer2Points = new SqlCommand($"SELECT Points FROM Players WHERE Id = {id2}", connection); var player2Points = (int)getPlayer2Points.ExecuteScalar(); // Получение очков игрока 2 var player2AverageThrowPoints = player2Throws != 0 ? Math.Round((double)player2Points / player2Throws, 2) : 0; // Рассчет среднего броска var setPlayer2AverageThrowPoints = new SqlCommand($"UPDATE Players SET AvarageThrowPoints = @Player2AvarageThrowPoints WHERE Id={id2}", connection); setPlayer2AverageThrowPoints.Parameters.AddWithValue("@Player2AvarageThrowPoints", player2AverageThrowPoints); setPlayer2AverageThrowPoints.ExecuteNonQuery(); // Запись среднего броска var setPlayer2AverageHandPoints = new SqlCommand($"UPDATE Players SET AvarageHand = @Player2AvarageHandPoints WHERE Id={id2}", connection); setPlayer2AverageHandPoints.Parameters.AddWithValue("@Player2AvarageHandPoints", player2AverageThrowPoints * 3); setPlayer2AverageHandPoints.ExecuteNonQuery(); // Запись средних очков подхода } void CheckAndUpdateBestHand(int Id, double AvHand) // Проверяем лучший средний набор и обновляем если нужно { using (var connection = new SqlConnection(connectionstring)) { connection.Open(); var getPlayerBestHand = new SqlCommand($"SELECT AvarageHandMatchRecord FROM Players WHERE Id = {Id}", connection); var playerBestHand = (double)getPlayerBestHand.ExecuteScalar(); // Получение лучшего среднего набора игрока if (AvHand > playerBestHand) // Если в матче установлен новый рекорд - записываем { var setPlayerBestHand = new SqlCommand($"UPDATE Players SET AvarageHandMatchRecord = @PlayerBestHand WHERE Id={Id}", connection); setPlayerBestHand.Parameters.AddWithValue("@PlayerBestHand", AvHand); setPlayerBestHand.ExecuteNonQuery(); } connection.Close(); } } }