|
@@ -43,11 +43,12 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
{
|
|
|
IsRunning = true;
|
|
|
await FirstNight();
|
|
|
+ await FirstDay();
|
|
|
await GameCycle();
|
|
|
await EndOfGame();
|
|
|
}).Start();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public async Task<ResultCode> Prepare()
|
|
|
{
|
|
|
var resultCode = CanStartGame();
|
|
@@ -58,6 +59,30 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
return resultCode;
|
|
|
}
|
|
|
|
|
|
+ private async Task FirstDay()
|
|
|
+ {
|
|
|
+ await NotifyPlayersAbout(-1, strings.first_day_message);
|
|
|
+ await Task.Run(async() =>
|
|
|
+ {
|
|
|
+ var turnsCount = Players.Count;
|
|
|
+ Player firstPlayer = null;
|
|
|
+ for (var i = 0; i < turnsCount; ++i)
|
|
|
+ {
|
|
|
+ var player = _turnOrder.Dequeue();
|
|
|
+ await NotifyPlayersAbout(player.Id, $"{strings.now_turn} {player.NickName}");
|
|
|
+ await Bot.SendWithMarkdown2(player.ChatId, strings.your_turn);
|
|
|
+ player.IsSpeaker = true;
|
|
|
+ Thread.Sleep(60*1000);
|
|
|
+ player.IsSpeaker = false;
|
|
|
+ await Bot.SendWithMarkdown2(player.ChatId, strings.your_turn_ended);
|
|
|
+ if (i != 0) _turnOrder.Enqueue(player);
|
|
|
+ else firstPlayer = player;
|
|
|
+ }
|
|
|
+ _turnOrder.Enqueue(firstPlayer);
|
|
|
+ });
|
|
|
+ await NotifyPlayersAbout(-1, strings.city_falls_asleep);
|
|
|
+ }
|
|
|
+
|
|
|
private async Task FirstNight()
|
|
|
{
|
|
|
await Task.Run(async() =>
|
|
@@ -71,14 +96,13 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
if (don != null) await Bot.SendWithMarkdown2(don.ChatId, message);
|
|
|
foreach (var player in mafia)
|
|
|
await Bot.SendWithMarkdown2(player.ChatId, message);
|
|
|
- Thread.Sleep(10000);
|
|
|
+ Thread.Sleep(10*1000);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
private async Task GameCycle()
|
|
|
{
|
|
|
- await NotifyPlayersAbout(-1, strings.first_day_message);
|
|
|
await Task.Run(() =>
|
|
|
{
|
|
|
|
|
@@ -91,10 +115,12 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
await Task.Run(async () =>
|
|
|
{
|
|
|
foreach (var (_, player) in Players)
|
|
|
+ {
|
|
|
player.CurrentRole = Role.GetNewRoleInstance(Roles.None);
|
|
|
+ player.IsPlaying = false;
|
|
|
+ }
|
|
|
IsRunning = false;
|
|
|
_turnOrder.Clear();
|
|
|
- Thread.Sleep(10000);//TODO just for tests
|
|
|
if (!Players.ContainsKey(Owner.Id) || Players.Count == 0) new Task(async() =>
|
|
|
await RoomController.DissolveRoom(RoomEncrypter.GetCode(RoomName))).Start();
|
|
|
else
|
|
@@ -153,6 +179,7 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
var player = playersCopy.GetAndRemove(random.Next(playersCopy.Count));
|
|
|
_turnOrder.Enqueue(player);
|
|
|
player.TurnOrder = _turnOrder.Count;
|
|
|
+ player.IsPlaying = true;
|
|
|
}
|
|
|
});
|
|
|
}
|