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:
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)

View File

@ -55,12 +55,14 @@ namespace MafiaServer
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)
{
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");