Parcourir la source

make known roles static, Dame role realization complete

Tigran il y a 4 ans
Parent
commit
0ef39b792d

+ 8 - 8
MafiaTelegramBot.sln.DotSettings.user

@@ -1,13 +1,13 @@
 <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
-	<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=0ea868fa_002D7cf8_002D466b_002Dbf25_002Dc540fc960a6b/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="Killing_Player_In_Summing_Up_Phase #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
-  &lt;TestAncestor&gt;&#xD;
-    &lt;TestId&gt;xUnit::BB1857E4-418E-4AE5-8437-43EBD1D903FB::net5.0::MafiaTelegramBotTests.Game.Tests.GameRooms.Tests.GameRoomTests&lt;/TestId&gt;&#xD;
-  &lt;/TestAncestor&gt;&#xD;
+	<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=0ea868fa_002D7cf8_002D466b_002Dbf25_002Dc540fc960a6b/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="Killing_Player_In_Summing_Up_Phase #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
+  &lt;TestAncestor&gt;
+    &lt;TestId&gt;xUnit::BB1857E4-418E-4AE5-8437-43EBD1D903FB::net5.0::MafiaTelegramBotTests.Game.Tests.GameRooms.Tests.GameRoomTests&lt;/TestId&gt;
+  &lt;/TestAncestor&gt;
 &lt;/SessionState&gt;</s:String>
-	<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=fbf9be8e_002Dabe2_002D485d_002Dbae0_002D5fd4fbd8c901/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="Killing_Player_In_Summing_Up_Phase" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
-  &lt;TestAncestor&gt;&#xD;
-    &lt;TestId&gt;xUnit::BB1857E4-418E-4AE5-8437-43EBD1D903FB::net5.0::MafiaTelegramBotTests.Game.Tests.GameRooms.Tests.GameRoomTests.Killing_Player_In_Summing_Up_Phase&lt;/TestId&gt;&#xD;
-  &lt;/TestAncestor&gt;&#xD;
+	<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=fbf9be8e_002Dabe2_002D485d_002Dbae0_002D5fd4fbd8c901/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="Killing_Player_In_Summing_Up_Phase" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
+  &lt;TestAncestor&gt;
+    &lt;TestId&gt;xUnit::BB1857E4-418E-4AE5-8437-43EBD1D903FB::net5.0::MafiaTelegramBotTests.Game.Tests.GameRooms.Tests.GameRoomTests.Killing_Player_In_Summing_Up_Phase&lt;/TestId&gt;
+  &lt;/TestAncestor&gt;
 &lt;/SessionState&gt;</s:String>
 	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002Fappsettings/@EntryIndexedValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002FResources_002Fkeyboard/@EntryIndexedValue">True</s:Boolean>

+ 2 - 2
MafiaTelegramBot/Game/GameRoles/CopRole.cs

@@ -12,7 +12,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override async Task NightAction()
         {
             NightTargetId = -1;
-            NightTargetList = Room.Players.Values.Except(KnownRoles).Where(p => p.IsAlive).ToList();
+            NightTargetList = Room.Players.Values.Where(p => p.IsAlive && !KnownRoles.ContainsKey(p.Id)).ToList();
             var message = await Room.PlayersCh.SendTo(Player.ChatId, strings.choose_player_to_check_role, 
                 Keyboard.NightChooseTargetKeyboard(NightTargetList, Player.Id));
             MessageId = message.MessageId;
@@ -25,12 +25,12 @@ namespace MafiaTelegramBot.Game.GameRoles
                 if (NightTargetId == -1) await SetRandomNightTarget();
                 if (Room.Players.ContainsKey(NightTargetId))
                 {
-                    KnownRoles.Add(Room.Players[NightTargetId]);
                     var role = Room.Players[NightTargetId].GetRole() is Roles.Don or Roles.Mafia or Roles.Dame or Roles.Lawyer
                         ? roles.Mafia
                         : Room.Players[NightTargetId].GetRole() is Roles.Werewolf && ((WerewolfRole) Room.Players[NightTargetId].CurrentRole).IsMafia
                             ? roles.Mafia
                             : roles.Villager;
+                    KnownRoles.Add(Room.Players[NightTargetId].Id, role);
                     await Room.PlayersCh.EditTo(Player.Id, MessageId,
                         $"{strings.role_of_your_target} {Room.Players[NightTargetId].NickName} - {role}");
                 }

+ 5 - 1
MafiaTelegramBot/Game/GameRoles/DameRole.cs

@@ -14,7 +14,7 @@ namespace MafiaTelegramBot.Game.GameRoles
             NightTargetId = -1;
             Player.IsSpeaker = true;
             var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
-            NightTargetList = alivePlayers.Where(p=> p.CanBeBlockedDay).ToList();
+            NightTargetList = alivePlayers.Where(p=> p.CanBeBlockedDay && p.Id != Player.Id).ToList();
             
             var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_block, 
                 Keyboard.NightChooseTargetKeyboard(NightTargetList, Player.Id));
@@ -38,6 +38,10 @@ namespace MafiaTelegramBot.Game.GameRoles
                     Room.Players[NightTargetId].IsBlocked = true;
                     Room.Players[NightTargetId].CanBeBlockedDay = false;
                     await Room.PlayersCh.SendTo(NightTargetId, strings.dame_block_you);
+                    await Room.PlayersCh.SendExcept(NightTargetId, $"{strings.dame_block_player} " +
+                                                                   $"({Room.Players[NightTargetId].TurnOrder}) " +
+                                                                   $"{Room.Players[NightTargetId].NickName}." +
+                                                                   $"{strings.player_cant_talk_and_vote}");
                 }
             }
         }

+ 4 - 4
MafiaTelegramBot/Game/GameRoles/DonRole.cs

@@ -15,7 +15,7 @@ namespace MafiaTelegramBot.Game.GameRoles
             NightTargetId = -1;
             Player.IsSpeaker = true;
             var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
-            NightTargetList = alivePlayers.Except(KnownRoles).ToList();
+            NightTargetList = alivePlayers.Where(p => !KnownRoles.ContainsKey(p.Id)).ToList();
             
             var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_check_role, 
                 Keyboard.NightChooseTargetKeyboard(NightTargetList, Player.Id));
@@ -36,10 +36,10 @@ namespace MafiaTelegramBot.Game.GameRoles
                 if (NightTargetId == -1) await SetRandomNightTarget();
                 if(Room.Players.ContainsKey(NightTargetId))
                 {
-                    KnownRoles.Add(Room.Players[NightTargetId]);
-                    var role = Room.Players[NightTargetId].GetRole() is Roles.Cop
-                        ? roles.Cop
+                    var role = Room.Players[NightTargetId].GetRole() is Roles.Cop or Roles.Detective or Roles.Journalist
+                        ? Room.Players[NightTargetId].GetRoleName()
                         : roles.Villager;
+                    KnownRoles.Add(Room.Players[NightTargetId].Id, role);
                     await Room.PlayersCh.EditTo(Player.Id, MessageId,
                         $"{strings.role_of_your_target} {Room.Players[NightTargetId].NickName} - {role}");
                 }

+ 28 - 26
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
 using MafiaTelegramBot.Controllers;
 using MafiaTelegramBot.CustomCollections.Extensions;
 using MafiaTelegramBot.DataBase.EntityDao;
+using MafiaTelegramBot.Game.GameRoles;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
 using Microsoft.EntityFrameworkCore;
@@ -74,10 +75,12 @@ namespace MafiaTelegramBot.Game.GameRooms
                 timer.Start();
                 foreach (var player in Players.Values)
                 {
-                    player.CurrentRole.KnownRoles.Add(player);
-                    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)
-                    );
+                    if (player.GetRole() is not (Roles.Don or Roles.Mafia or Roles.Dame)) 
+                        player.CurrentRole.KnownRoles.Add(player.Id, player.GetRoleName());
+                    else
+                        foreach (var p in Players.Values
+                            .Where(p => p.GetRole() is Roles.Don or Roles.Mafia or Roles.Dame))
+                            player.CurrentRole.KnownRoles.Add(p.Id, p.GetRoleName());
                 }
                 resetEvent.WaitOne();
             });
@@ -87,27 +90,29 @@ namespace MafiaTelegramBot.Game.GameRooms
         {
             await Task.Run(async () =>
             {
-                var alivePlayers = Players.Values.Where(p => p.IsAlive).ToList();
-                var aliveMafia = alivePlayers.Where(p => p.GetRole() is Roles.Don or Roles.Mafia).ToList();
-                var gameNotEnded = alivePlayers.Count > 2 * aliveMafia.Count && aliveMafia.Count > 0;
-                while (gameNotEnded)
+                while (GameNotEnded())
                 {
                     await NightPhase();
                     await SummingUpPhase();
-                    alivePlayers = Players.Values.Where(p => p.IsAlive).ToList();
-                    aliveMafia = alivePlayers.Where(p => p.GetRole() is Roles.Don or Roles.Mafia).ToList();
-                    gameNotEnded = alivePlayers.Count > 2 * aliveMafia.Count && aliveMafia.Count > 0;
-                    if (!gameNotEnded) break;
+                    if (!GameNotEnded()) break;
                     await DayPhase();
                     await DispatchPhase();
-                    alivePlayers = Players.Values.Where(p => p.IsAlive).ToList();
-                    aliveMafia = alivePlayers.Where(p => p.GetRole() is Roles.Don or Roles.Mafia).ToList();
-                    gameNotEnded = alivePlayers.Count > 2 * aliveMafia.Count && aliveMafia.Count > 0;
-                    if (!gameNotEnded) break;
+                    if (!GameNotEnded()) break;
                 }
             });
         }
 
+        private bool GameNotEnded()
+        {
+            var playersCount = Players.Values.Count(p => p.IsAlive);
+            var mafiaCount = Players.Values.Count(p => p.IsAlive && p.GetRole() is Roles.Don or Roles.Mafia or Roles.Dame);
+            if (PlayersRole.ContainsKey(Roles.Werewolf)
+                && PlayersRole[Roles.Werewolf].Count == 1
+                && ((WerewolfRole) PlayersRole[Roles.Werewolf][0].CurrentRole).IsMafia) mafiaCount++;
+            var villagersCount = playersCount - mafiaCount;
+            return villagersCount > mafiaCount || mafiaCount > 0;
+        }
+
         private async Task DayPhase()
         {
             IsDay = true;
@@ -126,24 +131,22 @@ namespace MafiaTelegramBot.Game.GameRooms
             discussionEnded.WaitOne();
             
             var turnsCount = _turnOrder.Count;
-            Player firstPlayer = null;
+            Player toEndQueue = null;
             for (var i = 0; i < turnsCount; ++i)
             {
                 var player = _turnOrder.Dequeue();
                 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;
+                    if (Players.ContainsKey(player.Id)) await player.CurrentRole.VotingAction(VoteUpList.Count == 0);
                 }
-                else _turnOrder.Enqueue(player);
+                if (toEndQueue != null) _turnOrder.Enqueue(player);
+                else toEndQueue = player;
             }
-            firstPlayer!.IsFirst = false;
-            _turnOrder.Enqueue(firstPlayer);
+            _turnOrder.Enqueue(toEndQueue);
         }
 
         private async Task NightPhase()
@@ -385,12 +388,11 @@ namespace MafiaTelegramBot.Game.GameRooms
                 if (PlayersRole.ContainsKey(Roles.Fool) && PlayersRole[Roles.Fool].Count == 1)
                     await PlayersRole[Roles.Fool][0].CurrentRole.IsWon();
                 var rolesMessage = strings.in_this_game_roles;
-                var sortedPLayers = Players.Values.ToList();
-                sortedPLayers.Sort((x, y) => x.TurnOrder - y.TurnOrder);
+                var players = Players.Values.ToList();
                 
                 var statsQuery = "SELECT * FROM mafia.statistics WHERE";
                 
-                foreach (var player in sortedPLayers)
+                foreach (var player in players)
                 {
                     rolesMessage += $"\n({player.TurnOrder}) {player.NickName} - {player.GetRoleName()}";
                     statsQuery += $" id = {player.Id} AND role = '{player.GetRole().ToString()}' OR role = 'All' OR";

+ 3 - 29
MafiaTelegramBot/Game/GameRooms/GameRoom.MessageHandler.cs

@@ -1,7 +1,6 @@
 using System.Linq;
 using System.Threading.Tasks;
 using MafiaTelegramBot.Controllers;
-using MafiaTelegramBot.Game.GameRoles;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
 using Telegram.Bot.Types;
@@ -52,37 +51,12 @@ namespace MafiaTelegramBot.Game.GameRooms
             {
                 var players = _room.Players.Values.ToList();
                 var knownRoles = player.CurrentRole.KnownRoles;
-                players.Sort((x, y) => x.TurnOrder - y.TurnOrder);
                 var message = strings.players_list;
                 foreach (var item in players)
                 {
-                    var role = "";
-                    if (item.Id == player.Id) role = player.GetRoleName();
-                    else if (knownRoles.Contains(item) && item.GetRole() != Roles.None)
-                    {
-                        role = player.GetRole() switch
-                        {
-                            Roles.Cop => item.GetRole() is Roles.Don or Roles.Mafia or Roles.Dame
-                            ? roles.Mafia
-                            : roles.Villager,
-                            Roles.Detective => item.GetRole() is Roles.Don or Roles.Mafia or Roles.Dame
-                            ? roles.Mafia
-                            : roles.Villager,
-                            Roles.Don => item.GetRole() is Roles.Cop or Roles.Journalist or Roles.Detective
-                                ? item.GetRoleName()
-                                : item.GetRole() is Roles.Mafia or Roles.Dame
-                                    ? roles.Mafia
-                                    : item.GetRole() is Roles.Werewolf && ((WerewolfRole) item.CurrentRole).IsMafia
-                                        ? roles.Mafia
-                                        : roles.Villager,
-                            Roles.Dame => item.GetRole() is Roles.Mafia or Roles.Don
-                                    ? roles.Mafia
-                                    : item.GetRole() is Roles.Werewolf && ((WerewolfRole) item.CurrentRole).IsMafia
-                                        ? roles.Mafia
-                                        : roles.Villager,
-                            _ => item.GetRoleName()
-                        };
-                    }
+                    var role =  knownRoles.ContainsKey(item.Id)
+                        ? knownRoles[item.Id]
+                        : "";
                     message +=
                         $"\n({item.TurnOrder}) " +
                         $"{item.NickName} " +

+ 2 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.PrepareRoom.cs

@@ -68,6 +68,8 @@ namespace MafiaTelegramBot.Game.GameRooms
                     player.TurnOrder = _turnOrder.Count;
                     player.IsPlaying = true;
                 }
+                Players = Players.OrderBy(item => item.Value.TurnOrder)
+                    .ToDictionary(x => x.Key, x => x.Value);
             });
         }
         

+ 6 - 5
MafiaTelegramBot/Game/GameRooms/GameRoom.Role.cs

@@ -15,7 +15,7 @@ namespace MafiaTelegramBot.Game.GameRooms
         {
             protected readonly GameRoom Room;
             protected readonly Player Player;
-            public readonly List<Player> KnownRoles = new();
+            public readonly Dictionary<long, string> KnownRoles = new();
             protected long NightTargetId = -1;
             public long MafiaTargetId = -1;
             public readonly ManualResetEvent TalkingActionComplete = new(false);
@@ -66,6 +66,7 @@ namespace MafiaTelegramBot.Game.GameRooms
                         await SpeakAction(enableTimer: true);
                     }
                     await Kill();
+                    await Room.PlayersCh.Send($"({Player.TurnOrder}) {Player.NickName} {strings.dispatched}");
                 }
             }
 
@@ -122,16 +123,16 @@ namespace MafiaTelegramBot.Game.GameRooms
                 Player.IsSpeaker = false;
             }
 
-            public async Task VotingAction()
+            public async Task VotingAction(bool isFirst = false)
             {
                 var voteTimer = new Timer(20 * 1000) {AutoReset = false};
                 var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).Except(Room.VoteUpList).ToList();
                 var message = await Room.PlayersCh.SendTo(Player.ChatId,
-                    $"{strings.put_up_vote}\n{strings.you_have_ten_seconds}{(Player.IsFirst ? "\n" + strings.user_not_choose : "")}",  
-                    Keyboard.VoteKeyboard(alivePlayers, Player.Id, !Player.IsFirst));
+                    $"{strings.put_up_vote}\n{strings.you_have_ten_seconds}{(isFirst ? "\n" + strings.user_not_choose : "")}",  
+                    Keyboard.VoteKeyboard(alivePlayers, Player.Id, !isFirst));
                 voteTimer.Elapsed += async (_, _) =>
                 {
-                    if (Player.IsFirst) await Room.PutUpVote(Player.Id, Player.Id, message.MessageId);
+                    if (isFirst) await Room.PutUpVote(Player.Id, Player.Id, message.MessageId);
                     else await Room.PutUpVote(Player.Id, 0, message.MessageId);
                     VoteActionComplete.Set();
                 };

+ 1 - 1
MafiaTelegramBot/Game/GameRooms/GameRoom.Structure.cs

@@ -31,7 +31,7 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private readonly Queue<Player> _turnOrder = new();
 
-        public readonly Dictionary<long, Player> Players = new();
+        public Dictionary<long, Player> Players = new();
 
         protected Dictionary<Roles, int> Settings = new();
 

+ 10 - 13
MafiaTelegramBot/Game/Player.cs

@@ -7,7 +7,6 @@ using MafiaTelegramBot.CustomCollections;
 using MafiaTelegramBot.DataBase.Entity;
 using MafiaTelegramBot.DataBase.EntityDao;
 using MafiaTelegramBot.Game.GameRoles;
-using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
 using Microsoft.EntityFrameworkCore;
 using Newtonsoft.Json;
@@ -20,10 +19,9 @@ namespace MafiaTelegramBot.Game
         public int TurnOrder = -1;
         private string _roomName = "";
 
-        private static System.Timers.Timer ActiveTime = new();
+        private static System.Timers.Timer _activeTime = new();
         public bool IsSpeaker;
         public bool IsPlaying;
-        public bool IsFirst;
         public bool IsAlive = true;
         public bool CanBeHealed = true;
         public bool IsBlocked = false;
@@ -45,29 +43,29 @@ namespace MafiaTelegramBot.Game
 
         public async Task SetTimer()
         {
-            ActiveTime = new System.Timers.Timer(3600000);
-            ActiveTime.Elapsed += async (x , y) =>
+            _activeTime = new System.Timers.Timer(3600000);
+            _activeTime.Elapsed += async (x , y) =>
             {
                 await Remove();
             };
-            ActiveTime.Enabled = true;
+            _activeTime.Enabled = true;
         }
 
         public async Task Restart()
         {
-            if (ActiveTime.Enabled)
-                ActiveTime.Stop();
-            ActiveTime.Start();
+            if (_activeTime.Enabled)
+                _activeTime.Stop();
+            _activeTime.Start();
         }
 
         public async Task StopTimer()
         {
-            ActiveTime.Stop();
+            _activeTime.Stop();
         }
 
         public async Task StartTimer()
         {
-            ActiveTime.Start();
+            _activeTime.Start();
         }
 
         private async Task Remove()
@@ -75,7 +73,7 @@ namespace MafiaTelegramBot.Game
             try
             {
                 UserDao.ActiveUsers.Remove(Id);
-                ActiveTime.Dispose();
+                _activeTime.Dispose();
             }
             catch (Exception)
             {
@@ -137,7 +135,6 @@ namespace MafiaTelegramBot.Game
             IsAlive = true;
             IsSpeaker = true;
             IsPlaying = false;
-            IsFirst = false;
             CanBeHealed = true;
             CanBeBlockedDay = true;
             CanBeBlockedNight = true;

+ 0 - 3
MafiaTelegramBot/Resources/Keyboard.cs

@@ -139,7 +139,6 @@ namespace MafiaTelegramBot.Resources
 
         public static InlineKeyboardMarkup VoteKeyboard(List<Player> players, long userId, bool withSkipButton = true, Callback vote = Callback.Vote)
         {
-            players.Sort((x, y) => x.TurnOrder - y.TurnOrder);
             var inlineButtons = new InlineKeyboardButton[withSkipButton ?players.Count+1 :players.Count][];
             for (var i = 0; i<players.Count; ++i)
             {
@@ -155,7 +154,6 @@ namespace MafiaTelegramBot.Resources
 
         public static InlineKeyboardMarkup NightChooseTargetKeyboard(List<Player> players, long userId, bool skipButton = false)
         {
-            players.Sort((x, y) => x.TurnOrder - y.TurnOrder);
             var inlineButtons = new InlineKeyboardButton[skipButton ?players.Count+1 : players.Count][];
             for (var i = 0; i<players.Count; ++i)
             {
@@ -173,7 +171,6 @@ namespace MafiaTelegramBot.Resources
 
         public static InlineKeyboardMarkup NightMafiaTargetKeyboard(List<Player> players, long userId)
         {
-            players.Sort((x, y) => x.TurnOrder - y.TurnOrder);
             var inlineButtons = new InlineKeyboardButton[players.Count + 1][];
             for (var i = 0; i<players.Count; ++i)
             {

+ 2 - 2
MafiaTelegramBot/Resources/Stickers.cs

@@ -18,8 +18,8 @@ namespace MafiaTelegramBot.Resources
             ["DeadVillager"] = "CAACAgIAAxkBAAIWmGDuYSuWGWrCxNVX_GefH7SYYhJLAAKTDQACsH5xS6clMluq2O_zIAQ",
             ["Bodyguard"] = "CAACAgIAAxkBAAIWmWDuYUoggM4U2_FNTnIEQ0ufwe3jAAIxDAACzfJ5S6CKxkCfchZmIAQ",
             ["DeadBodyguard"] = "CAACAgIAAxkBAAIWmmDuYUs9d8oi57pfqrgJmc3ANPvYAAKiDAACEo95S5TcPNrfb-VdIAQ",
-            ["Dama"] = "CAACAgIAAxkBAAIWm2DuYYjh6N4B9Se06sPlB8lETKKcAAIEEAACEOZxS9urBCnjSXGTIAQ",
-            ["DeadDama"] = "CAACAgIAAxkBAAIWnGDuYYkZllwqLQfq1VmJoUJWyN44AAK4DwAC92hxSybwqMm-nhCKIAQ",
+            ["Dame"] = "CAACAgIAAxkBAAIWm2DuYYjh6N4B9Se06sPlB8lETKKcAAIEEAACEOZxS9urBCnjSXGTIAQ",
+            ["DeadDame"] = "CAACAgIAAxkBAAIWnGDuYYkZllwqLQfq1VmJoUJWyN44AAK4DwAC92hxSybwqMm-nhCKIAQ",
             ["Detective"] = "CAACAgIAAxkBAAIWnWDuYaivH-Ylnh-I9GKVtUmUtHDGAAKVCwACvl55SxydRamkQoAbIAQ",
             ["DeadDetective"] = "CAACAgIAAxkBAAIWnmDuYax0ql1oQQFfrKhnJbU1t7l6AAIGEAAC9BN5SwZ7IlpQTEZ3IAQ",
             ["Elder"] = "CAACAgIAAxkBAAIWn2DuYdTRlU2W71Y02Bzv1TqG1UJiAALcCwACLxlxS4MDFmJYEoe7IAQ",

+ 18 - 0
MafiaTelegramBot/Resources/strings.Designer.cs

@@ -944,5 +944,23 @@ namespace MafiaTelegramBot {
                 return ResourceManager.GetString("nothing_to_choose", resourceCulture);
             }
         }
+        
+        internal static string dame_block_player {
+            get {
+                return ResourceManager.GetString("dame_block_player", resourceCulture);
+            }
+        }
+        
+        internal static string player_cant_talk_and_vote {
+            get {
+                return ResourceManager.GetString("player_cant_talk_and_vote", resourceCulture);
+            }
+        }
+        
+        internal static string dispatched {
+            get {
+                return ResourceManager.GetString("dispatched", resourceCulture);
+            }
+        }
     }
 }

+ 9 - 0
MafiaTelegramBot/Resources/strings.resx

@@ -468,4 +468,13 @@
     <data name="nothing_to_choose" xml:space="preserve">
         <value>Не из кого выбирать</value>
     </data>
+    <data name="dame_block_player" xml:space="preserve">
+        <value>Дама заткнула рот кляпом игроку</value>
+    </data>
+    <data name="player_cant_talk_and_vote" xml:space="preserve">
+        <value>Он не сможет разговаривать и голосовать в этот день.</value>
+    </data>
+    <data name="dispatched" xml:space="preserve">
+        <value>казнен</value>
+    </data>
 </root>