|
@@ -72,8 +72,8 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
foreach (var player in Players.Values)
|
|
|
{
|
|
|
player.CurrentRole.KnownRoles.Add(player);
|
|
|
- if(player.GetRole() is Roles.Don or Roles.Mafia) player.CurrentRole.KnownRoles.AddRange(
|
|
|
- Players.Values.Where(p=> player.Id != p.Id && p.GetRole() is Roles.Mafia or Roles.Don)
|
|
|
+ if(player.GetRole() is Roles.Don or Roles.Mafia or Roles.Dame) player.CurrentRole.KnownRoles.AddRange(
|
|
|
+ Players.Values.Where(p=> player.Id != p.Id && p.GetRole() is Roles.Mafia or Roles.Don or Roles.Dame)
|
|
|
);
|
|
|
}
|
|
|
resetEvent.WaitOne();
|
|
@@ -111,7 +111,7 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
|
|
|
var discussionTimer = new Timer {AutoReset = false, Interval = 60 * 1000};
|
|
|
var discussionEnded = new ManualResetEvent(false);
|
|
|
- foreach (var player in Players.Values) player.IsSpeaker = true;
|
|
|
+ foreach (var player in Players.Values.Where(player => !player.IsBlocked)) player.IsSpeaker = true;
|
|
|
discussionTimer.Elapsed += async (_, _) =>
|
|
|
{
|
|
|
foreach (var player in Players.Values) player.IsSpeaker = false;
|
|
@@ -127,13 +127,16 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
for (var i = 0; i < turnsCount; ++i)
|
|
|
{
|
|
|
var player = _turnOrder.Dequeue();
|
|
|
- if(!player.IsPlaying || !player.IsAlive) continue;
|
|
|
- if (firstPlayer == null) player.IsFirst = true;
|
|
|
- await PlayersCh.Send($"{strings.now_turn} ({player.TurnOrder}) {player.NickName}");
|
|
|
- if (TimerEnabled) await Bot.SendWithMarkdown2(player.ChatId, strings.you_turn_say);
|
|
|
- await player.CurrentRole.SpeakAction();
|
|
|
- if (Players.ContainsKey(player.Id)) await player.CurrentRole.VotingAction();
|
|
|
- if (player.IsFirst) firstPlayer = player;
|
|
|
+ if(!Players.ContainsKey(player.Id) || !player.IsAlive) continue;
|
|
|
+ if (!player.IsBlocked)
|
|
|
+ {
|
|
|
+ if (firstPlayer == null) player.IsFirst = true;
|
|
|
+ await PlayersCh.Send($"{strings.now_turn} ({player.TurnOrder}) {player.NickName}");
|
|
|
+ if (TimerEnabled) await Bot.SendWithMarkdown2(player.ChatId, strings.you_turn_say);
|
|
|
+ await player.CurrentRole.SpeakAction();
|
|
|
+ if (Players.ContainsKey(player.Id)) await player.CurrentRole.VotingAction();
|
|
|
+ if (player.IsFirst) firstPlayer = player;
|
|
|
+ }
|
|
|
else _turnOrder.Enqueue(player);
|
|
|
}
|
|
|
firstPlayer!.IsFirst = false;
|
|
@@ -159,6 +162,8 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
{
|
|
|
if(doctorId != player.Id) player.CanBeHealed = true;
|
|
|
player.CanBeBlockedNight = true;
|
|
|
+ player.CanBeBlockedDay = true;
|
|
|
+ player.IsBlocked = false;
|
|
|
}
|
|
|
timer.Start();
|
|
|
resetEvent.WaitOne();
|
|
@@ -215,8 +220,8 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
var contendersCopy = contenders.ToList();
|
|
|
VoteUpList.Clear();
|
|
|
VoteKillList.Clear();
|
|
|
- foreach (var contender in contendersCopy) await contender.CurrentRole.DefenceAction();
|
|
|
- var votersPlayers = Players.Values.Where(p => p.IsAlive).ToArray();
|
|
|
+ foreach (var contender in contendersCopy.Where(p => !p.IsBlocked)) await contender.CurrentRole.DefenceAction();
|
|
|
+ var votersPlayers = Players.Values.Where(p => p.IsAlive && !p.IsBlocked).ToArray();
|
|
|
Timer votingTimer = new() {Interval = 20 * 1000, AutoReset = false};
|
|
|
var resetEvent = new ManualResetEvent(false);
|
|
|
votingTimer.Elapsed += (_, _) => resetEvent.Set();
|