День, убийство, общение, надо сделать проверку на роль после убийтсва, для самоубийц
This commit is contained in:
parent
dc9796ed31
commit
8d62442107
@ -4,5 +4,6 @@
|
|||||||
{
|
{
|
||||||
Queue=1,
|
Queue=1,
|
||||||
Active=2,
|
Active=2,
|
||||||
|
Day=3
|
||||||
}
|
}
|
||||||
}
|
}
|
12
MafiaCommon/Packets/GameStageChangedPacket.cs
Normal file
12
MafiaCommon/Packets/GameStageChangedPacket.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
namespace MafiaCommon.Packets
|
||||||
|
{
|
||||||
|
public class GameStageChangedPacket : Packet
|
||||||
|
{
|
||||||
|
public readonly GameState GameState;
|
||||||
|
|
||||||
|
public GameStageChangedPacket(GameState gameState) : base(PacketType.GameStateChanged)
|
||||||
|
{
|
||||||
|
GameState = gameState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
@ -9,51 +10,68 @@ namespace MafiaCommon.Packets
|
|||||||
{
|
{
|
||||||
public static byte[] toBytes(Packet packet)
|
public static byte[] toBytes(Packet packet)
|
||||||
{
|
{
|
||||||
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(packet));
|
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(packet)+",");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Packet toPacket(String json)
|
public static List<Packet> toPacket(String jsons)
|
||||||
{
|
{
|
||||||
PacketType packetType = ((JObject)JsonConvert.DeserializeObject(json)).GetValue("PacketType").ToObject<PacketType>();
|
List<Packet> packets = new List<Packet>();
|
||||||
|
jsons = jsons.Substring(0, jsons.Length - 1);
|
||||||
|
jsons = "[" + jsons + "]";
|
||||||
|
foreach (JObject packet in (JArray) JsonConvert.DeserializeObject(jsons))
|
||||||
|
{
|
||||||
|
packets.Add(ConvertPacket(packet));
|
||||||
|
}
|
||||||
|
|
||||||
|
return packets;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Packet ConvertPacket(JObject json)
|
||||||
|
{
|
||||||
|
PacketType packetType = json.GetValue("PacketType")
|
||||||
|
.ToObject<PacketType>();
|
||||||
Packet packet = null;
|
Packet packet = null;
|
||||||
|
|
||||||
switch (packetType)
|
switch (packetType)
|
||||||
{
|
{
|
||||||
case PacketType.ServerShutdown:
|
case PacketType.ServerShutdown:
|
||||||
packet = JsonConvert.DeserializeObject<ServerShutdownPacket>(json);
|
packet = json.ToObject<ServerShutdownPacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.Connect:
|
case PacketType.Connect:
|
||||||
packet = JsonConvert.DeserializeObject<ConnectPacket>(json);
|
packet = json.ToObject<ConnectPacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.Welcome:
|
case PacketType.Welcome:
|
||||||
packet = JsonConvert.DeserializeObject<WelcomePacket>(json);
|
packet = json.ToObject<WelcomePacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.Disconnect:
|
case PacketType.Disconnect:
|
||||||
packet = JsonConvert.DeserializeObject<DisconnectPacket>(json);
|
packet = json.ToObject<DisconnectPacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.PlayerConnected:
|
case PacketType.PlayerConnected:
|
||||||
packet = JsonConvert.DeserializeObject<PlayerConnectedPacket>(json);
|
packet = json.ToObject<PlayerConnectedPacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.PlayerDisconnected:
|
case PacketType.PlayerDisconnected:
|
||||||
packet = JsonConvert.DeserializeObject<PlayerDisconnectedPacket>(json);
|
packet = json.ToObject<PlayerDisconnectedPacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.MessageReceivePacket:
|
case PacketType.MessageReceivePacket:
|
||||||
packet = JsonConvert.DeserializeObject<MessageReceivePacket>(json);
|
packet = json.ToObject<MessageReceivePacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.MessageSendPacket:
|
case PacketType.MessageSendPacket:
|
||||||
packet = JsonConvert.DeserializeObject<MessageSendPacket>(json);
|
packet = json.ToObject<MessageSendPacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.GameStartPacket:
|
case PacketType.GameStartPacket:
|
||||||
packet = JsonConvert.DeserializeObject<GameStartPacket>(json);
|
packet = json.ToObject<GameStartPacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.EndGame:
|
case PacketType.EndGame:
|
||||||
packet = JsonConvert.DeserializeObject<EndGamePacket>(json);
|
packet = json.ToObject<EndGamePacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.DisconnectPlayer:
|
case PacketType.DisconnectPlayer:
|
||||||
packet = JsonConvert.DeserializeObject<DisconnectPacket>(json);
|
packet = json.ToObject<DisconnectPacket>();
|
||||||
break;
|
break;
|
||||||
case PacketType.Vote:
|
case PacketType.Vote:
|
||||||
packet = JsonConvert.DeserializeObject<VotePacket>(json);
|
packet = json.ToObject<VotePacket>();
|
||||||
|
break;
|
||||||
|
case PacketType.GameStateChanged:
|
||||||
|
packet = json.ToObject<GameStageChangedPacket>();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
EndGame=9,
|
EndGame=9,
|
||||||
DisconnectPlayer=10,
|
DisconnectPlayer=10,
|
||||||
Vote=11,
|
Vote=11,
|
||||||
|
GameStateChanged=12,
|
||||||
ServerShutdown=99
|
ServerShutdown=99
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,6 +16,7 @@
|
|||||||
Ninja=12,
|
Ninja=12,
|
||||||
Maniac=13,
|
Maniac=13,
|
||||||
Werewolf=14,
|
Werewolf=14,
|
||||||
RedJudge=15
|
RedJudge=15,
|
||||||
|
Died=16
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -247,5 +247,39 @@
|
|||||||
<TextBlock Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="3" HorizontalAlignment="Center" x:Name="GameEndScreenRoles" FontSize="25" TextWrapping="Wrap"></TextBlock>
|
<TextBlock Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="3" HorizontalAlignment="Center" x:Name="GameEndScreenRoles" FontSize="25" TextWrapping="Wrap"></TextBlock>
|
||||||
<Button Grid.Column="2" Grid.Row="6" Click="GameEndScreenBack_OnClick" Content="Назад" FontSize="25"></Button>
|
<Button Grid.Column="2" Grid.Row="6" Click="GameEndScreenBack_OnClick" Content="Назад" FontSize="25"></Button>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
<Grid x:Name="GameDay" Visibility="Hidden" KeyUp="GameDayWait_OnKeyUp">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="5*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="10*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="5*"></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="10*"></RowDefinition>
|
||||||
|
<RowDefinition Height="5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="10*"></RowDefinition>
|
||||||
|
<RowDefinition Height="5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="10*"></RowDefinition>
|
||||||
|
<RowDefinition Height="5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="10*"></RowDefinition>
|
||||||
|
<RowDefinition Height="5*"></RowDefinition>
|
||||||
|
<RowDefinition Height="10*"></RowDefinition>
|
||||||
|
<RowDefinition Height="10*"></RowDefinition>
|
||||||
|
<RowDefinition Height="10*"></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="7" HorizontalAlignment="Center" FontSize="30" x:Name="GameDayHotBar" Text="Обсуждай и думай" TextAlignment="Center"></TextBlock>
|
||||||
|
<ListBox Grid.Column="5" Grid.ColumnSpan="5" Grid.Row="2" Grid.RowSpan="8" x:Name="GameDayChat"></ListBox>
|
||||||
|
<TextBox Grid.Column="5" Grid.ColumnSpan="4" Grid.Row="10" TextWrapping="Wrap" x:Name="GameDayChatInput"></TextBox>
|
||||||
|
<Button Grid.Column="9" Grid.Row="10" Content="Отправить!" Click="GameDayChatSend_OnClick"></Button>
|
||||||
|
<ListBox Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="2" Grid.RowSpan="8" x:Name="GameDaySelect" MouseDoubleClick="GameDaySelect_OnMouseDoubleClick" SelectionMode="Single"></ListBox>
|
||||||
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
@ -49,6 +49,7 @@ namespace MafiaGame
|
|||||||
GameVotingPassive.Visibility = Visibility.Hidden;
|
GameVotingPassive.Visibility = Visibility.Hidden;
|
||||||
GameVotingActive.Visibility = Visibility.Hidden;
|
GameVotingActive.Visibility = Visibility.Hidden;
|
||||||
GameEndScreen.Visibility = Visibility.Hidden;
|
GameEndScreen.Visibility = Visibility.Hidden;
|
||||||
|
GameDay.Visibility = Visibility.Hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Exit_OnClick(object sender, RoutedEventArgs e)
|
private void Exit_OnClick(object sender, RoutedEventArgs e)
|
||||||
@ -221,8 +222,7 @@ namespace MafiaGame
|
|||||||
|
|
||||||
GameEndScreenRoles.Text = text;
|
GameEndScreenRoles.Text = text;
|
||||||
|
|
||||||
GameVotingActive.Visibility = Visibility.Hidden;
|
HideAll();
|
||||||
GameVotingPassive.Visibility = Visibility.Hidden;
|
|
||||||
GameEndScreen.Visibility = Visibility.Visible;
|
GameEndScreen.Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,5 +248,42 @@ namespace MafiaGame
|
|||||||
ListBoxItem selected = (ListBoxItem)GameVotingActiveSelect.SelectedItem;
|
ListBoxItem selected = (ListBoxItem)GameVotingActiveSelect.SelectedItem;
|
||||||
App.Instance.Connection.Vote(Convert.ToInt32(((string)selected.Content).Split(")")[0]));
|
App.Instance.Connection.Vote(Convert.ToInt32(((string)selected.Content).Split(")")[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GameDayWait_OnKeyUp(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Key == Key.Enter)
|
||||||
|
{
|
||||||
|
GameDayChatSend_OnClick(null, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GameDayChatSend_OnClick(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (GameDayChatInput.Text.Trim() != "")
|
||||||
|
{
|
||||||
|
App.Instance.Connection.SendMessage(ChatType.Day, GameDayChatInput.Text);
|
||||||
|
GameDayChatInput.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GameDaySelect_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ShowDay(bool voting)
|
||||||
|
{
|
||||||
|
HideAll();
|
||||||
|
GameDaySelect.IsEnabled = voting;
|
||||||
|
if (voting)
|
||||||
|
{
|
||||||
|
GameDayHotBar.Text = "Обсуждай и думай";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GameDayHotBar.Text = "Голосуй и молись";
|
||||||
|
}
|
||||||
|
GameDay.Visibility = Visibility.Visible;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -97,7 +97,16 @@ namespace MafiaGame
|
|||||||
|
|
||||||
Console.WriteLine(builder.ToString());
|
Console.WriteLine(builder.ToString());
|
||||||
|
|
||||||
Packet packet = PacketConverter.toPacket(builder.ToString());
|
List<Packet> packets = PacketConverter.toPacket(builder.ToString());
|
||||||
|
foreach (Packet packet in packets)
|
||||||
|
{
|
||||||
|
WorkPacket(packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WorkPacket(Packet packet)
|
||||||
|
{
|
||||||
switch (packet.PacketType)
|
switch (packet.PacketType)
|
||||||
{
|
{
|
||||||
case PacketType.Welcome:
|
case PacketType.Welcome:
|
||||||
@ -254,8 +263,7 @@ namespace MafiaGame
|
|||||||
case GameState.Day:
|
case GameState.Day:
|
||||||
App.Current.Dispatcher.Invoke((Action) (() =>
|
App.Current.Dispatcher.Invoke((Action) (() =>
|
||||||
{
|
{
|
||||||
MainWindow.Instance.HideAll();
|
MainWindow.Instance.ShowDay(false);
|
||||||
MainWindow.Instance.GameDay.Visibility = Visibility.Visible;
|
|
||||||
}));
|
}));
|
||||||
App.Instance.GetRpcClient().UpdateDetails("День");
|
App.Instance.GetRpcClient().UpdateDetails("День");
|
||||||
break;
|
break;
|
||||||
@ -264,10 +272,4 @@ namespace MafiaGame
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WorkPacket(Packet packet)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using MafiaCommon.Packets;
|
using MafiaCommon.Packets;
|
||||||
using MafiaCommon;
|
using MafiaCommon;
|
||||||
|
|
||||||
@ -96,6 +97,30 @@ namespace MafiaServer
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_votesRemain.Count == 0)
|
||||||
|
{
|
||||||
|
int selId = 0;
|
||||||
|
int selVotes = 0;
|
||||||
|
foreach (KeyValuePair<int,int> votes in _mafiaVotes)
|
||||||
|
{
|
||||||
|
if (votes.Value > selVotes)
|
||||||
|
{
|
||||||
|
selId = votes.Key;
|
||||||
|
selVotes = votes.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_gameState = GameState.Day;
|
||||||
|
|
||||||
|
PlayerSocketWorker killed = _players.FindPlayerById(selId);
|
||||||
|
killed.Role = Role.Died;
|
||||||
|
foreach (PlayerSocketWorker player in _players)
|
||||||
|
{
|
||||||
|
player.sendPacket(new GameStageChangedPacket(GameState.Day));
|
||||||
|
player.sendPacket(new MessageReceivePacket(ChatType.Day,true,"System",killed.PlayerName+" был убит!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PlayerOnOnDisconnectEvent(PlayerSocketWorker sender)
|
private void PlayerOnOnDisconnectEvent(PlayerSocketWorker sender)
|
||||||
@ -281,6 +306,23 @@ namespace MafiaServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ChatType.Day:
|
||||||
|
if (isStarted)
|
||||||
|
{
|
||||||
|
if (sender.Role == Role.Died)
|
||||||
|
{
|
||||||
|
sender.sendPacket(new MessageReceivePacket(ChatType.Day,true,"system","Мёртвое говорить не может"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (PlayerSocketWorker player in _players)
|
||||||
|
{
|
||||||
|
player.sendPacket(
|
||||||
|
new MessageReceivePacket(ChatType.Day, false, sender.PlayerName, text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ namespace MafiaServer
|
|||||||
builder.Append(Encoding.UTF8.GetString(data, 0, bytes));
|
builder.Append(Encoding.UTF8.GetString(data, 0, bytes));
|
||||||
} while (_socket.Available > 0);
|
} while (_socket.Available > 0);
|
||||||
|
|
||||||
var packet = PacketConverter.toPacket(builder.ToString());
|
var packet = PacketConverter.toPacket(builder.ToString())[0];
|
||||||
if (packet.GetType() == typeof(ConnectPacket))
|
if (packet.GetType() == typeof(ConnectPacket))
|
||||||
{
|
{
|
||||||
PlayerName = ((ConnectPacket) packet).Name;
|
PlayerName = ((ConnectPacket) packet).Name;
|
||||||
@ -77,7 +77,21 @@ namespace MafiaServer
|
|||||||
|
|
||||||
Console.WriteLine(builder.ToString());
|
Console.WriteLine(builder.ToString());
|
||||||
|
|
||||||
Packet packet = PacketConverter.toPacket(builder.ToString());
|
List<Packet> packets = PacketConverter.toPacket(builder.ToString());
|
||||||
|
foreach (Packet packet in packets)
|
||||||
|
{
|
||||||
|
WorkPacket(packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SocketException e)
|
||||||
|
{
|
||||||
|
OnDisconnectByErrorEvent.Invoke(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WorkPacket(Packet packet)
|
||||||
|
{
|
||||||
switch (packet.PacketType)
|
switch (packet.PacketType)
|
||||||
{
|
{
|
||||||
case PacketType.MessageSendPacket:
|
case PacketType.MessageSendPacket:
|
||||||
@ -93,12 +107,6 @@ namespace MafiaServer
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (SocketException e)
|
|
||||||
{
|
|
||||||
OnDisconnectByErrorEvent.Invoke(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class PlayerSocketWorkerUtils {
|
public static class PlayerSocketWorkerUtils {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user