Fix MG-3 and MG-4

This commit is contained in:
Ilya 2021-02-16 22:57:30 +03:00
parent 0fb7800d8b
commit a0ab6d6709
2 changed files with 59 additions and 31 deletions

View File

@ -226,12 +226,14 @@ namespace MafiaGame
case Role.Citizen: case Role.Citizen:
App.Current.Dispatcher.Invoke((Action) (() => App.Current.Dispatcher.Invoke((Action) (() =>
{ {
MainWindow.Instance.HideAll();
MainWindow.Instance.ShowVotingPassive("Ты Мирный Житель"); MainWindow.Instance.ShowVotingPassive("Ты Мирный Житель");
})); }));
break; break;
case Role.Don: case Role.Don:
App.Current.Dispatcher.Invoke((Action) (() => App.Current.Dispatcher.Invoke((Action) (() =>
{ {
MainWindow.Instance.HideAll();
MainWindow.Instance.GameVotingActiveSelect.Items.Clear(); MainWindow.Instance.GameVotingActiveSelect.Items.Clear();
MainWindow.Instance.ShowVotingActive("Ты Дон, выбери кого убить!"); MainWindow.Instance.ShowVotingActive("Ты Дон, выбери кого убить!");
foreach (Player player in players) foreach (Player player in players)
@ -245,6 +247,7 @@ namespace MafiaGame
case Role.Mafia: case Role.Mafia:
App.Current.Dispatcher.Invoke((Action) (() => App.Current.Dispatcher.Invoke((Action) (() =>
{ {
MainWindow.Instance.HideAll();
MainWindow.Instance.GameVotingActiveSelect.Items.Clear(); MainWindow.Instance.GameVotingActiveSelect.Items.Clear();
MainWindow.Instance.ShowVotingActive("Ты Мафия, выбери кого убить!"); MainWindow.Instance.ShowVotingActive("Ты Мафия, выбери кого убить!");
foreach (Player player in players) foreach (Player player in players)

View File

@ -55,12 +55,14 @@ namespace MafiaServer
private List<Player> GetPlayersRoles() private List<Player> 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) private bool WorkDeath(PlayerSocketWorker player)
{ {
switch (player.Role) switch (player.Role)
{ {
case Role.Don: case Role.Don:
_mafia.Remove(player); _mafia.Remove(player);
@ -68,7 +70,7 @@ namespace MafiaServer
{ {
foreach (var p in _players) foreach (var p in _players)
{ {
p.sendPacket(new EndGamePacket(true,_playerRolesAtStart)); p.sendPacket(new EndGamePacket(true, _playerRolesAtStart));
} }
_isStarted = false; _isStarted = false;
@ -80,13 +82,16 @@ namespace MafiaServer
_mafia[0].Role = Role.Don; _mafia[0].Role = Role.Don;
if (_gameState == GameState.VotingNight) 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); _mafia.RemoveAt(0);
} }
break; break;
} }
player.Role = Role.Died; player.Role = Role.Died;
var mafias = _mafia.Count + 1; var mafias = _mafia.Count + 1;
@ -94,9 +99,10 @@ namespace MafiaServer
if (mafias < aliveLefts) return true; if (mafias < aliveLefts) return true;
foreach (var p in _players) foreach (var p in _players)
{ {
p.sendPacket(new EndGamePacket(p.Role == Role.Mafia || p.Role == Role.Don, _playerRolesAtStart)); p.sendPacket(new EndGamePacket(p.Role == Role.Mafia || p.Role == Role.Don, _playerRolesAtStart));
} }
_isStarted = false; _isStarted = false;
_gameState = GameState.NotStarted; _gameState = GameState.NotStarted;
return false; return false;
@ -146,6 +152,7 @@ namespace MafiaServer
player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System", player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System",
sender.PlayerName + " проголосовал за " + voteFor.PlayerName)); sender.PlayerName + " проголосовал за " + voteFor.PlayerName));
} }
break; break;
} }
} }
@ -215,10 +222,11 @@ namespace MafiaServer
{ {
_votesRemain.Add(player); _votesRemain.Add(player);
} }
foreach (var player in _players) foreach (var player in _players)
{ {
player.sendPacket(new GameStageChangedPacket(GameState.VotingDay,player.Role,GetPlayersRoles())); player.sendPacket(new GameStageChangedPacket(GameState.VotingDay, player.Role, GetPlayersRoles()));
player.sendPacket(new MessageReceivePacket(ChatType.Day,true,"System","Начинаем голосование!")); player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System", "Начинаем голосование!"));
} }
} }
@ -240,14 +248,15 @@ namespace MafiaServer
{ {
_players.Remove(sender); _players.Remove(sender);
foreach (var player in _players) foreach (var player in _players)
{ {
player.sendPacket(new PlayerDisconnectedPacket(true, sender.Id, _players.Count, player.sendPacket(new PlayerDisconnectedPacket(true, sender.Id, _players.Count,
Settings.Config().MaxPlayers)); Settings.Config().MaxPlayers));
} }
if (_gameState != GameState.NotStarted) if (_gameState != GameState.NotStarted)
{ {
WorkDeath(sender); WorkDeath(sender);
} }
} }
public void Start() public void Start()
@ -256,31 +265,33 @@ namespace MafiaServer
{ {
return; return;
} }
if (_players.Count < 3) if (_players.Count < 3)
{ {
Console.WriteLine("Not Enough Players"); Console.WriteLine("Not Enough Players");
return; return;
} }
foreach (var player in _players) foreach (var player in _players)
{ {
player.Role = Role.Citizen; player.Role = Role.Citizen;
} }
_playerRolesAtStart.Clear(); _playerRolesAtStart.Clear();
_votesRemain.Clear(); _votesRemain.Clear();
_mafiaVotes.Clear(); _mafiaVotes.Clear();
_dayVote.Clear(); _dayVote.Clear();
var random = new Random(); var random = new Random();
var empty = _players.ToArray(); var empty = _players.ToArray();
random.Shuffle(empty); random.Shuffle(empty);
var mafiasNeed = empty.Length / 3; var mafiasNeed = empty.Length / 3;
Console.WriteLine("Debug: needs counted"); Console.WriteLine("Debug: needs counted");
while (mafiasNeed!=0) while (mafiasNeed != 0)
{ {
for (var i = 0; i < empty.Length; i++) for (var i = 0; i < empty.Length; i++)
{ {
@ -296,11 +307,12 @@ namespace MafiaServer
_mafia.Add(empty[i]); _mafia.Add(empty[i]);
empty = empty.RemoveFromArray(i); empty = empty.RemoveFromArray(i);
} }
break; break;
} }
} }
} }
Console.WriteLine("Debug: randomized"); Console.WriteLine("Debug: randomized");
var don = _mafia[0]; var don = _mafia[0];
@ -308,28 +320,28 @@ namespace MafiaServer
_mafia.RemoveAt(0); _mafia.RemoveAt(0);
var players = GetPlayersRoles(); var players = GetPlayersRoles();
don.sendPacket(new GameStartPacket(Role.Don,players)); don.sendPacket(new GameStartPacket(Role.Don, players));
_votesRemain.Add(don); _votesRemain.Add(don);
foreach (var player in empty) foreach (var player in empty)
{ {
player.sendPacket(new GameStartPacket(Role.Citizen,players)); player.sendPacket(new GameStartPacket(Role.Citizen, players));
} }
foreach (var player in _mafia) foreach (var player in _mafia)
{ {
player.sendPacket(new GameStartPacket(Role.Mafia,players)); player.sendPacket(new GameStartPacket(Role.Mafia, players));
_votesRemain.Add(player); _votesRemain.Add(player);
} }
foreach (var player in _players) 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"); Console.WriteLine("Debug: packets sent");
_isStarted = true; _isStarted = true;
_gameState = GameState.VotingNight; _gameState = GameState.VotingNight;
} }
@ -339,11 +351,17 @@ namespace MafiaServer
_players.Remove(sender); _players.Remove(sender);
foreach (var player in _players) 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) private void PlayerOnOnPlayerSendMessageEvent(PlayerSocketWorker sender, ChatType chatType, string text)
{ {
switch (chatType) switch (chatType)
@ -353,9 +371,10 @@ namespace MafiaServer
{ {
foreach (var player in _players) 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; break;
case ChatType.Active: case ChatType.Active:
if (_isStarted) if (_isStarted)
@ -364,21 +383,26 @@ namespace MafiaServer
{ {
case Role.Mafia: case Role.Mafia:
case Role.Don: 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)); text));
} }
break; break;
} }
} }
break; break;
case ChatType.Day: case ChatType.Day:
if (_isStarted) if (_isStarted)
{ {
if (sender.Role == Role.Died) if (sender.Role == Role.Died)
{ {
sender.sendPacket(new MessageReceivePacket(ChatType.Day,true,"system","Мёртвое говорить не может")); sender.sendPacket(new MessageReceivePacket(ChatType.Day, true, "system",
"Мёртвое говорить не может"));
} }
else else
{ {
@ -389,6 +413,7 @@ namespace MafiaServer
} }
} }
} }
break; break;
default: default:
Console.WriteLine("User sending in bad chat"); Console.WriteLine("User sending in bad chat");