День, убийство, общение, надо сделать проверку на роль после убийтсва, для самоубийц
This commit is contained in:
parent
dc9796ed31
commit
8d62442107
@ -4,5 +4,6 @@
|
||||
{
|
||||
Queue=1,
|
||||
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.Collections.Generic;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
@ -9,51 +10,68 @@ namespace MafiaCommon.Packets
|
||||
{
|
||||
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;
|
||||
|
||||
switch (packetType)
|
||||
{
|
||||
case PacketType.ServerShutdown:
|
||||
packet = JsonConvert.DeserializeObject<ServerShutdownPacket>(json);
|
||||
packet = json.ToObject<ServerShutdownPacket>();
|
||||
break;
|
||||
case PacketType.Connect:
|
||||
packet = JsonConvert.DeserializeObject<ConnectPacket>(json);
|
||||
packet = json.ToObject<ConnectPacket>();
|
||||
break;
|
||||
case PacketType.Welcome:
|
||||
packet = JsonConvert.DeserializeObject<WelcomePacket>(json);
|
||||
packet = json.ToObject<WelcomePacket>();
|
||||
break;
|
||||
case PacketType.Disconnect:
|
||||
packet = JsonConvert.DeserializeObject<DisconnectPacket>(json);
|
||||
packet = json.ToObject<DisconnectPacket>();
|
||||
break;
|
||||
case PacketType.PlayerConnected:
|
||||
packet = JsonConvert.DeserializeObject<PlayerConnectedPacket>(json);
|
||||
packet = json.ToObject<PlayerConnectedPacket>();
|
||||
break;
|
||||
case PacketType.PlayerDisconnected:
|
||||
packet = JsonConvert.DeserializeObject<PlayerDisconnectedPacket>(json);
|
||||
packet = json.ToObject<PlayerDisconnectedPacket>();
|
||||
break;
|
||||
case PacketType.MessageReceivePacket:
|
||||
packet = JsonConvert.DeserializeObject<MessageReceivePacket>(json);
|
||||
packet = json.ToObject<MessageReceivePacket>();
|
||||
break;
|
||||
case PacketType.MessageSendPacket:
|
||||
packet = JsonConvert.DeserializeObject<MessageSendPacket>(json);
|
||||
packet = json.ToObject<MessageSendPacket>();
|
||||
break;
|
||||
case PacketType.GameStartPacket:
|
||||
packet = JsonConvert.DeserializeObject<GameStartPacket>(json);
|
||||
packet = json.ToObject<GameStartPacket>();
|
||||
break;
|
||||
case PacketType.EndGame:
|
||||
packet = JsonConvert.DeserializeObject<EndGamePacket>(json);
|
||||
packet = json.ToObject<EndGamePacket>();
|
||||
break;
|
||||
case PacketType.DisconnectPlayer:
|
||||
packet = JsonConvert.DeserializeObject<DisconnectPacket>(json);
|
||||
packet = json.ToObject<DisconnectPacket>();
|
||||
break;
|
||||
case PacketType.Vote:
|
||||
packet = JsonConvert.DeserializeObject<VotePacket>(json);
|
||||
packet = json.ToObject<VotePacket>();
|
||||
break;
|
||||
case PacketType.GameStateChanged:
|
||||
packet = json.ToObject<GameStageChangedPacket>();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
EndGame=9,
|
||||
DisconnectPlayer=10,
|
||||
Vote=11,
|
||||
GameStateChanged=12,
|
||||
ServerShutdown=99
|
||||
}
|
||||
}
|
@ -16,6 +16,7 @@
|
||||
Ninja=12,
|
||||
Maniac=13,
|
||||
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>
|
||||
<Button Grid.Column="2" Grid.Row="6" Click="GameEndScreenBack_OnClick" Content="Назад" FontSize="25"></Button>
|
||||
</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>
|
||||
</Window>
|
||||
|
@ -49,6 +49,7 @@ namespace MafiaGame
|
||||
GameVotingPassive.Visibility = Visibility.Hidden;
|
||||
GameVotingActive.Visibility = Visibility.Hidden;
|
||||
GameEndScreen.Visibility = Visibility.Hidden;
|
||||
GameDay.Visibility = Visibility.Hidden;
|
||||
}
|
||||
|
||||
private void Exit_OnClick(object sender, RoutedEventArgs e)
|
||||
@ -221,8 +222,7 @@ namespace MafiaGame
|
||||
|
||||
GameEndScreenRoles.Text = text;
|
||||
|
||||
GameVotingActive.Visibility = Visibility.Hidden;
|
||||
GameVotingPassive.Visibility = Visibility.Hidden;
|
||||
HideAll();
|
||||
GameEndScreen.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
@ -248,5 +248,42 @@ namespace MafiaGame
|
||||
ListBoxItem selected = (ListBoxItem)GameVotingActiveSelect.SelectedItem;
|
||||
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,8 +97,17 @@ namespace MafiaGame
|
||||
|
||||
Console.WriteLine(builder.ToString());
|
||||
|
||||
Packet packet = PacketConverter.toPacket(builder.ToString());
|
||||
switch (packet.PacketType)
|
||||
List<Packet> packets = PacketConverter.toPacket(builder.ToString());
|
||||
foreach (Packet packet in packets)
|
||||
{
|
||||
WorkPacket(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WorkPacket(Packet packet)
|
||||
{
|
||||
switch (packet.PacketType)
|
||||
{
|
||||
case PacketType.Welcome:
|
||||
App.Current.Dispatcher.Invoke((Action) (() =>
|
||||
@ -254,20 +263,13 @@ namespace MafiaGame
|
||||
case GameState.Day:
|
||||
App.Current.Dispatcher.Invoke((Action) (() =>
|
||||
{
|
||||
MainWindow.Instance.HideAll();
|
||||
MainWindow.Instance.GameDay.Visibility = Visibility.Visible;
|
||||
MainWindow.Instance.ShowDay(false);
|
||||
}));
|
||||
App.Instance.GetRpcClient().UpdateDetails("День");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WorkPacket(Packet packet)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MafiaCommon.Packets;
|
||||
using MafiaCommon;
|
||||
|
||||
@ -96,6 +97,30 @@ namespace MafiaServer
|
||||
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)
|
||||
@ -281,6 +306,23 @@ namespace MafiaServer
|
||||
}
|
||||
}
|
||||
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));
|
||||
} while (_socket.Available > 0);
|
||||
|
||||
var packet = PacketConverter.toPacket(builder.ToString());
|
||||
var packet = PacketConverter.toPacket(builder.ToString())[0];
|
||||
if (packet.GetType() == typeof(ConnectPacket))
|
||||
{
|
||||
PlayerName = ((ConnectPacket) packet).Name;
|
||||
@ -77,20 +77,10 @@ namespace MafiaServer
|
||||
|
||||
Console.WriteLine(builder.ToString());
|
||||
|
||||
Packet packet = PacketConverter.toPacket(builder.ToString());
|
||||
switch (packet.PacketType)
|
||||
List<Packet> packets = PacketConverter.toPacket(builder.ToString());
|
||||
foreach (Packet packet in packets)
|
||||
{
|
||||
case PacketType.MessageSendPacket:
|
||||
OnPlayerSendMessageEvent.Invoke(this, ((MessageSendPacket) packet).ChatType,
|
||||
((MessageSendPacket) packet).Text);
|
||||
break;
|
||||
case PacketType.DisconnectPlayer:
|
||||
_socket.Close();
|
||||
OnDisconnectEvent.Invoke(this);
|
||||
break;
|
||||
case PacketType.Vote:
|
||||
OnPlayerVoteEvent.Invoke(this, ((VotePacket) packet).Id);
|
||||
break;
|
||||
WorkPacket(packet);
|
||||
}
|
||||
}
|
||||
catch (SocketException e)
|
||||
@ -99,6 +89,24 @@ namespace MafiaServer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WorkPacket(Packet packet)
|
||||
{
|
||||
switch (packet.PacketType)
|
||||
{
|
||||
case PacketType.MessageSendPacket:
|
||||
OnPlayerSendMessageEvent.Invoke(this, ((MessageSendPacket) packet).ChatType,
|
||||
((MessageSendPacket) packet).Text);
|
||||
break;
|
||||
case PacketType.DisconnectPlayer:
|
||||
_socket.Close();
|
||||
OnDisconnectEvent.Invoke(this);
|
||||
break;
|
||||
case PacketType.Vote:
|
||||
OnPlayerVoteEvent.Invoke(this, ((VotePacket) packet).Id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class PlayerSocketWorkerUtils {
|
||||
|
Loading…
x
Reference in New Issue
Block a user