From a0ab6d670916bd1aa11adb20283656fe4c935911 Mon Sep 17 00:00:00 2001 From: Ilya Date: Tue, 16 Feb 2021 22:57:30 +0300 Subject: [PATCH] Fix MG-3 and MG-4 --- MafiaGame/ServerConnection.cs | 3 ++ MafiaServer/Game.cs | 87 ++++++++++++++++++++++------------- 2 files changed, 59 insertions(+), 31 deletions(-) diff --git a/MafiaGame/ServerConnection.cs b/MafiaGame/ServerConnection.cs index d626e44..92050de 100644 --- a/MafiaGame/ServerConnection.cs +++ b/MafiaGame/ServerConnection.cs @@ -226,12 +226,14 @@ namespace MafiaGame case Role.Citizen: App.Current.Dispatcher.Invoke((Action) (() => { + MainWindow.Instance.HideAll(); MainWindow.Instance.ShowVotingPassive("Ты Мирный Житель"); })); break; case Role.Don: App.Current.Dispatcher.Invoke((Action) (() => { + MainWindow.Instance.HideAll(); MainWindow.Instance.GameVotingActiveSelect.Items.Clear(); MainWindow.Instance.ShowVotingActive("Ты Дон, выбери кого убить!"); foreach (Player player in players) @@ -245,6 +247,7 @@ namespace MafiaGame case Role.Mafia: App.Current.Dispatcher.Invoke((Action) (() => { + MainWindow.Instance.HideAll(); MainWindow.Instance.GameVotingActiveSelect.Items.Clear(); MainWindow.Instance.ShowVotingActive("Ты Мафия, выбери кого убить!"); foreach (Player player in players) diff --git a/MafiaServer/Game.cs b/MafiaServer/Game.cs index 953f091..f2b3248 100644 --- a/MafiaServer/Game.cs +++ b/MafiaServer/Game.cs @@ -55,12 +55,14 @@ namespace MafiaServer private List GetPlayersRoles() { - return (from player in _players where player.Role != Role.Died select new Player(player.Id, player.PlayerName)).ToList(); + return (from player in _players + where player.Role != Role.Died + select new Player(player.Id, player.PlayerName)).ToList(); } private bool WorkDeath(PlayerSocketWorker player) { - switch (player.Role) + switch (player.Role) { case Role.Don: _mafia.Remove(player); @@ -68,7 +70,7 @@ namespace MafiaServer { foreach (var p in _players) { - p.sendPacket(new EndGamePacket(true,_playerRolesAtStart)); + p.sendPacket(new EndGamePacket(true, _playerRolesAtStart)); } _isStarted = false; @@ -80,13 +82,16 @@ namespace MafiaServer _mafia[0].Role = Role.Don; if (_gameState == GameState.VotingNight) { - _mafia[0].sendPacket(new MessageReceivePacket(ChatType.Active,true,"System","Дон покинул игру, ты новый дон!")); + _mafia[0].sendPacket(new MessageReceivePacket(ChatType.Active, true, "System", + "Дон покинул игру, ты новый дон!")); } + _mafia.RemoveAt(0); } + break; } - + player.Role = Role.Died; var mafias = _mafia.Count + 1; @@ -94,9 +99,10 @@ namespace MafiaServer if (mafias < aliveLefts) return true; foreach (var p in _players) - { + { p.sendPacket(new EndGamePacket(p.Role == Role.Mafia || p.Role == Role.Don, _playerRolesAtStart)); } + _isStarted = false; _gameState = GameState.NotStarted; return false; @@ -146,6 +152,7 @@ namespace MafiaServer player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System", sender.PlayerName + " проголосовал за " + voteFor.PlayerName)); } + break; } } @@ -215,10 +222,11 @@ namespace MafiaServer { _votesRemain.Add(player); } + foreach (var player in _players) { - player.sendPacket(new GameStageChangedPacket(GameState.VotingDay,player.Role,GetPlayersRoles())); - player.sendPacket(new MessageReceivePacket(ChatType.Day,true,"System","Начинаем голосование!")); + player.sendPacket(new GameStageChangedPacket(GameState.VotingDay, player.Role, GetPlayersRoles())); + player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System", "Начинаем голосование!")); } } @@ -240,14 +248,15 @@ namespace MafiaServer { _players.Remove(sender); foreach (var player in _players) - { + { player.sendPacket(new PlayerDisconnectedPacket(true, sender.Id, _players.Count, Settings.Config().MaxPlayers)); } + if (_gameState != GameState.NotStarted) { WorkDeath(sender); - } + } } public void Start() @@ -256,31 +265,33 @@ namespace MafiaServer { return; } + if (_players.Count < 3) { Console.WriteLine("Not Enough Players"); return; } - + foreach (var player in _players) { player.Role = Role.Citizen; } + _playerRolesAtStart.Clear(); _votesRemain.Clear(); _mafiaVotes.Clear(); _dayVote.Clear(); var random = new Random(); - + var empty = _players.ToArray(); random.Shuffle(empty); var mafiasNeed = empty.Length / 3; - + Console.WriteLine("Debug: needs counted"); - while (mafiasNeed!=0) + while (mafiasNeed != 0) { for (var i = 0; i < empty.Length; i++) { @@ -296,11 +307,12 @@ namespace MafiaServer _mafia.Add(empty[i]); empty = empty.RemoveFromArray(i); } + break; } } } - + Console.WriteLine("Debug: randomized"); var don = _mafia[0]; @@ -308,28 +320,28 @@ namespace MafiaServer _mafia.RemoveAt(0); var players = GetPlayersRoles(); - - don.sendPacket(new GameStartPacket(Role.Don,players)); + + don.sendPacket(new GameStartPacket(Role.Don, players)); _votesRemain.Add(don); foreach (var player in empty) { - player.sendPacket(new GameStartPacket(Role.Citizen,players)); + player.sendPacket(new GameStartPacket(Role.Citizen, players)); } - + foreach (var player in _mafia) { - player.sendPacket(new GameStartPacket(Role.Mafia,players)); + player.sendPacket(new GameStartPacket(Role.Mafia, players)); _votesRemain.Add(player); } - + foreach (var player in _players) { - _playerRolesAtStart.Add(new PlayerRole(player.PlayerName,player.Role)); + _playerRolesAtStart.Add(new PlayerRole(player.PlayerName, player.Role)); } - + Console.WriteLine("Debug: packets sent"); - + _isStarted = true; _gameState = GameState.VotingNight; } @@ -339,11 +351,17 @@ namespace MafiaServer _players.Remove(sender); foreach (var player in _players) { - player.sendPacket(new PlayerDisconnectedPacket(true,sender.Id,_players.Count,Settings.Config().MaxPlayers)); + player.sendPacket(new PlayerDisconnectedPacket(true, sender.Id, _players.Count, + Settings.Config().MaxPlayers)); + } + + if (_gameState != GameState.NotStarted) + { + WorkDeath(sender); } - WorkDeath(sender); } - + + private void PlayerOnOnPlayerSendMessageEvent(PlayerSocketWorker sender, ChatType chatType, string text) { switch (chatType) @@ -353,9 +371,10 @@ namespace MafiaServer { foreach (var player in _players) { - player.sendPacket(new MessageReceivePacket(ChatType.Queue,false,sender.PlayerName,text)); + player.sendPacket(new MessageReceivePacket(ChatType.Queue, false, sender.PlayerName, text)); } } + break; case ChatType.Active: if (_isStarted) @@ -364,21 +383,26 @@ namespace MafiaServer { case Role.Mafia: case Role.Don: - foreach (var player in _players.Where(player => player.Role == Role.Mafia || player.Role == Role.Don)) + foreach (var player in _players.Where(player => + player.Role == Role.Mafia || player.Role == Role.Don)) { - player.sendPacket(new MessageReceivePacket(ChatType.Active, false, sender.PlayerName, + player.sendPacket(new MessageReceivePacket(ChatType.Active, false, + sender.PlayerName, text)); } + break; } } + break; case ChatType.Day: if (_isStarted) { if (sender.Role == Role.Died) { - sender.sendPacket(new MessageReceivePacket(ChatType.Day,true,"system","Мёртвое говорить не может")); + sender.sendPacket(new MessageReceivePacket(ChatType.Day, true, "system", + "Мёртвое говорить не может")); } else { @@ -389,6 +413,7 @@ namespace MafiaServer } } } + break; default: Console.WriteLine("User sending in bad chat");