|
@@ -20,6 +20,7 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
public readonly List<Player> KnownRoles = new();
|
|
|
protected long NightTargetId = -1;
|
|
|
public readonly ManualResetEvent DayActionComplete = new(false);
|
|
|
+ public ManualResetEvent VoteEvent = new(false);
|
|
|
protected int MessageId = -1;
|
|
|
public abstract Roles RoleKey { get; }
|
|
|
public abstract Task NightAction();
|
|
@@ -41,39 +42,39 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
public async Task DayAction()
|
|
|
{
|
|
|
await Room.PlayersCh.SendExcept(Player.Id, $"{strings.now_turn} {Player.NickName}");
|
|
|
- await Bot.SendWithMarkdown2(Player.ChatId, strings.your_turn + "\n" + strings.you_turn_say);
|
|
|
+ await Bot.SendWithMarkdown2(Player.ChatId, $"{strings.your_turn}\n{strings.you_turn_say}", Keyboard.InGamePlayerMenuWithEndTurn);
|
|
|
Player.IsSpeaker = true;
|
|
|
var timer = new Timer(60 * 1000);
|
|
|
- var voteTimer = new Timer(10 * 1000);
|
|
|
- Message message = null;
|
|
|
- timer.Elapsed += async (_, _) =>
|
|
|
- {
|
|
|
- Player.IsSpeaker = false;
|
|
|
- await Bot.SendWithMarkdown2(Player.ChatId, strings.your_turn_ended);
|
|
|
- if (!Room.IsFirstCycle)
|
|
|
- {
|
|
|
- var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
|
|
|
- message = await Bot.SendWithMarkdown2(Player.ChatId, strings.put_up_vote, Keyboard.VoteKeyboard(alivePlayers, Player.Id, !Player.IsFirst));
|
|
|
- voteTimer.Elapsed += async (_, _) =>
|
|
|
- {
|
|
|
- await Bot.Get().EditMessageReplyMarkupAsync(Player.ChatId, message.MessageId);
|
|
|
- if (Player.IsFirst)
|
|
|
- await Room.PutUpVote(Player.Id, Player.Id);
|
|
|
- else
|
|
|
- await Room.PlayersCh.SendExcept(Player.Id, $"{Player.NickName} {strings.didnt_put_anyone}");
|
|
|
- DayActionComplete.Set();
|
|
|
- };
|
|
|
- await Bot.SendWithMarkdown2(Player.Id, strings.you_have_one_minute);
|
|
|
- if(Player.IsFirst) await Bot.SendWithMarkdown2(Player.Id, strings.user_not_choose);
|
|
|
- voteTimer.Start();
|
|
|
- }
|
|
|
- if(!voteTimer.Enabled) DayActionComplete.Set();
|
|
|
- };
|
|
|
+ timer.Elapsed += (_, _) => DayActionComplete.Set();
|
|
|
timer.AutoReset = false;
|
|
|
timer.Start();
|
|
|
DayActionComplete.WaitOne();
|
|
|
DayActionComplete.Reset();
|
|
|
timer.Stop();
|
|
|
+ await Bot.SendWithMarkdown2(Player.ChatId, strings.your_turn_ended, Keyboard.InGamePlayerMenu);
|
|
|
+ Player.IsSpeaker = false;
|
|
|
+ if (!Room.IsFirstCycle) await VotingAction();
|
|
|
+ }
|
|
|
+
|
|
|
+ private async Task VotingAction()
|
|
|
+ {
|
|
|
+ var voteTimer = new Timer(10 * 1000);
|
|
|
+ var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
|
|
|
+ var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.put_up_vote, Keyboard.VoteKeyboard(alivePlayers, Player.Id, !Player.IsFirst));
|
|
|
+ voteTimer.Elapsed += async (_, _) =>
|
|
|
+ {
|
|
|
+ await Bot.Get().EditMessageReplyMarkupAsync(Player.ChatId, message.MessageId);
|
|
|
+ if (Player.IsFirst)
|
|
|
+ await Room.PutUpVote(Player.Id, Player.Id);
|
|
|
+ else
|
|
|
+ await Room.PlayersCh.SendExcept(Player.Id, $"{Player.NickName} {strings.didnt_put_anyone}");
|
|
|
+ VoteEvent.Set();
|
|
|
+ };
|
|
|
+ await Bot.SendWithMarkdown2(Player.Id, strings.you_have_ten_seconds);
|
|
|
+ if(Player.IsFirst) await Bot.SendWithMarkdown2(Player.Id, strings.user_not_choose);
|
|
|
+ voteTimer.Start();
|
|
|
+ VoteEvent.WaitOne();
|
|
|
+ VoteEvent.Reset();
|
|
|
voteTimer.Stop();
|
|
|
if(message!=null) await Bot.Get().DeleteMessageAsync(Player.ChatId, message.MessageId);
|
|
|
}
|