Explorar o código

Hooker role, room settings 50%

Tigran %!s(int64=4) %!d(string=hai) anos
pai
achega
d11927c580

+ 18 - 0
MafiaTelegramBot/CustomCollections/Extensions/DictionaryExtension.cs

@@ -0,0 +1,18 @@
+using System.Collections.Generic;
+
+namespace MafiaTelegramBot.CustomCollections.Extensions
+{
+    public static class DictionaryExtension
+    {
+        public static bool IsEquals<TK, TV>(this Dictionary<TK,TV> dictionary, Dictionary<TK,TV> obj)
+        {
+            if (dictionary.Count != obj.Count) return false;
+            foreach (var (k, v) in dictionary)
+            {
+                if (!obj.ContainsKey(k)) return false;
+                if(!obj[k].Equals(v)) return false;
+            }
+            return true;
+        }
+    }
+}

+ 23 - 2
MafiaTelegramBot/Game/GameRoles/HookerRole.cs

@@ -1,3 +1,4 @@
+using System.Linq;
 using System.Threading.Tasks;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Models;
@@ -10,22 +11,42 @@ namespace MafiaTelegramBot.Game.GameRoles
     {
         public override Roles RoleKey => Roles.Hooker;
 
-        public override Task NightAction()
+        public override async Task NightAction()
         {
-            return Task.CompletedTask;
+            var targets = Room.Players.Values.Where(p => p.IsAlive && p.Id != Player.Id && p.CanBeBlockedNight).ToList();
+            Room.Players[NightTargetId].CanBeBlockedNight = true;
+            NightTargetId = -1;
+            var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_block_night, 
+                Keyboard.NightChooseTargetKeyboard(targets, Player.Id, true));
+            MessageId = message.MessageId;
         }
 
         public override Task ApplyNightActionResult()
         {
+            Room.Players[NightTargetId].IsBlocked = false;
             return Task.CompletedTask;
         }
 
         public override async Task SetNightTarget(long userId)
         {
             NightTargetId = userId;
+            var target = Room.Players[userId];
+            target.CanBeBlockedNight = false;
+            target.IsBlocked = true;
+            await target.CurrentRole.CancelNightActionResult(strings.hooker_block_you);
             await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
+        public override async Task Kill()
+        {
+            if (NightTargetId != -1 && !Room.IsDay)
+            {
+                var target = Room.Players[NightTargetId];
+                if (target.CurrentRole.RoleKey != Roles.Mafia) await target.CurrentRole.Kill();
+            }
+            await base.Kill();
+        }
+
         public HookerRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 14 - 11
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -27,7 +27,7 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task FirstDay()
         {
-            _isDay = true;
+            IsDay = true;
             await PlayersCh.SendSticker(Stickers.Sticker["Day"]);
             await PlayersCh.Send(strings.first_day_message);
             await Task.Run(async() =>
@@ -49,7 +49,7 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task FirstNight()
         {
-            _isDay = false;
+            IsDay = false;
             await Task.Run(async() =>
             {
                 await PlayersCh.SendSticker(Stickers.Sticker["Night"]);
@@ -106,7 +106,7 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task DayPhase()
         {
-            _isDay = true;
+            IsDay = true;
             var turnsCount = _turnOrder.Count;
             Player firstPlayer = null;
             for (var i = 0; i < turnsCount; ++i)
@@ -126,7 +126,7 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task NightPhase()
         {
-            _isDay = false;
+            IsDay = false;
             await PlayersCh.SendSticker(Stickers.Sticker["Night"]);
             await PlayersCh.Send(strings.city_falls_asleep);
             await Task.Run(async () =>
@@ -147,7 +147,7 @@ namespace MafiaTelegramBot.Game.GameRooms
         {
             await Task.Run(async () =>
             {
-                long killedPlayerId = -1;
+                var beforeKill = Players.Values.ToDictionary(p=>p.Id,p=>p.IsAlive);
                 var mafiaNotAgree = "";
                 foreach (var (role, players) in PlayersRole)
                 {
@@ -159,15 +159,14 @@ namespace MafiaTelegramBot.Game.GameRooms
                             .ToList();
                         var max = votes.Max(item => item.count);
                         var maxCount = votes.Count(item => item.count == max);
-                        if (maxCount > 1)
+                        if (maxCount != 1)
                         {
                             mafiaNotAgree = $"\n{strings.mafia_not_agree}";
                             continue;
                         }
                         var selected = votes.First(item => item.count == max);
                         if (selected.id == -1) continue;
-                        killedPlayerId = selected.id;
-                        await Players[killedPlayerId].Kill();
+                        await Players[selected.id].CurrentRole.Kill();
                         foreach (var mafia in players) await mafia.CurrentRole.ApplyNightActionResult();
                     }
                     else if (players.Count == 1)
@@ -177,9 +176,13 @@ namespace MafiaTelegramBot.Game.GameRooms
                         await player.CurrentRole.ApplyNightActionResult();
                     }
                 }
+                var afterKill = Players.Values.ToDictionary(p=>p.Id,p=>p.IsAlive);
                 var message = strings.city_wakes_up;
-                if (killedPlayerId != -1 && !Players[killedPlayerId].IsAlive) message += $"{strings.at_this_night} {Players[killedPlayerId].NickName}";
-                else message += strings.everyone_survived;
+                if(afterKill.IsEquals(beforeKill)) message += strings.everyone_survived;
+                else foreach (var (id, alive) in beforeKill)
+                    if(afterKill[id] != alive) message += alive
+                        ? $"{Players[id].NickName} {strings.will_be_ressurected}"
+                        : $"{Players[id].NickName} {strings.will_be_killed}";
                 message += mafiaNotAgree;
                 await PlayersCh.SendSticker(Stickers.Sticker["Day"]);
                 await PlayersCh.Send(message);
@@ -271,7 +274,7 @@ namespace MafiaTelegramBot.Game.GameRooms
                 }
                 await PlayersCh.Send(rolesMessage);
                 IsRunning = false;
-                _isDay = false;
+                IsDay = false;
                 _turnOrder.Clear();
                 Settings.Clear();
                 foreach (var (_, list) in PlayersRole) list.Clear();

+ 7 - 24
MafiaTelegramBot/Game/GameRooms/GameRoom.MessageHandler.cs

@@ -27,37 +27,20 @@ namespace MafiaTelegramBot.Game.GameRooms
                 else if (text == keyboard.leave) await Leave(player);
                 else if (text == keyboard.end_turn)
                 {
-                    if (_room._isDay && player.IsSpeaker) player.CurrentRole.TalkingActionComplete.Set();
+                    if (_room.IsDay && player.IsSpeaker) player.CurrentRole.TalkingActionComplete.Set();
                     else await Bot.SendWithMarkdown2(player.ChatId, strings.now_is_not_your_turn);
                 }
-                else
-                {
-                    if (!player.IsAlive) await Bot.SendWithMarkdown2(player.ChatId, strings.you_now_died);
-                    else await ForwardMessage(player, text);
-                }
+                else await ForwardMessage(player, text);
                 return update.Message;
             }
 
             private async Task ForwardMessage(Player player, string message)
             {
-                if (_room._isDay)
-                {
-                    if (player.IsSpeaker)
-                        await _room.PlayersCh.SendExcept(player.Id, $"\\({player.TurnOrder}\\) {player.NickName}: {message}");
-                    else
-                        await Bot.SendWithMarkdown2(player.ChatId, strings.now_is_not_your_turn);
-                }
-                else
-                {
-                    if (player.IsSpeaker)
-                        await _room._mafiaCh.SendExcept(player.Id, $"\\({player.TurnOrder}\\) {player.NickName}: {message}");
-                    else
-                    {
-                        if(player.GetRole() is Roles.Mafia or Roles.Don)
-                            await Bot.SendWithMarkdown2(player.ChatId, strings.mafia_get_mail);
-                        else await Bot.SendWithMarkdown2(player.ChatId, strings.villagers_are_sleep);
-                    }
-                }
+                if (!player.IsAlive) await Bot.SendWithMarkdown2(player.ChatId, strings.you_now_died);
+                else if (player.IsBlocked) await Bot.SendWithMarkdown2(player.ChatId, strings.you_blocked);
+                else if (!player.IsSpeaker) await Bot.SendWithMarkdown2(player.ChatId, strings.now_you_cant_speak);
+                else if (_room.IsDay) await _room.PlayersCh.SendExcept(player.Id, $"\\({player.TurnOrder}\\) {player.NickName}: {message}");
+                else await _room._mafiaCh.SendExcept(player.Id, $"\\({player.TurnOrder}\\) {player.NickName}: {message}");
             }
 
             private async Task LookPlayers(Player player)

+ 21 - 1
MafiaTelegramBot/Game/GameRooms/GameRoom.Role.cs

@@ -31,6 +31,7 @@ namespace MafiaTelegramBot.Game.GameRooms
                 await Bot.EditMessageAsync(Player.ChatId, MessageId, strings.activity_blocked);
                 NightTargetId = -1;
                 MessageId = -1;
+                Player.IsSpeaker = false;
                 await Bot.SendWithMarkdown2(Player.ChatId, message);
             }
             public virtual Task SetNightTarget(long userId) { return Task.CompletedTask; }
@@ -39,7 +40,26 @@ namespace MafiaTelegramBot.Game.GameRooms
             {
                 await Room.PlayersCh.SendExcept(Player.Id, $"{strings.to_player} {Player.NickName} {strings.issued_posthumous_minute}");
                 await OneMinuteSpeak();
-                await Player.Kill();
+                await Kill();
+            }
+
+            public virtual async Task Kill()
+            {
+                if (Room.PlayersRole[Roles.Hooker].Count == 1 && !Room.IsDay)
+                {
+                    var hooker = Room.PlayersRole[Roles.Hooker][0];
+                    if (hooker.CurrentRole.NightTargetId == Player.Id) await hooker.CurrentRole.Kill();
+                    else
+                    {
+                        Player.IsAlive = false;
+                        await Bot.SendWithMarkdown2(Player.ChatId, strings.you_died);
+                    }
+                }
+                else
+                {
+                    Player.IsAlive = false;
+                    await Bot.SendWithMarkdown2(Player.ChatId, strings.you_died);
+                }
             }
 
             protected Role(GameRoom room, Player player)

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

@@ -8,7 +8,7 @@ namespace MafiaTelegramBot.Game.GameRooms
     public abstract partial class GameRoom
     {
         public bool IsRunning;
-        private bool _isDay;
+        public bool IsDay;
         public int MaxPlayers = 10;
         private int _minPlayers = Constants.PLAYER_LIMITS_MIN;
         public bool IsPrivate { get; init; }
@@ -36,7 +36,7 @@ namespace MafiaTelegramBot.Game.GameRooms
         
         protected GameRoom()
         {
-            _isDay = false;
+            IsDay = false;
             MHandler = new MessageHandler(this);
             QHandler = new QueryHandler(this);
             _mafiaCh = new MafiaChannel(this);

+ 4 - 15
MafiaTelegramBot/Game/Player.cs

@@ -20,10 +20,11 @@ namespace MafiaTelegramBot.Game
         public int TurnOrder = -1;
         private string _roomName = "";
         public bool IsAlive = true;
-        public bool IsSpeaker = false;
-        public bool IsPlaying = false;
-        public bool IsFirst = false;
+        public bool IsSpeaker;
+        public bool IsPlaying;
+        public bool IsFirst;
         public bool CanBeHealed = true;
+        public bool IsBlocked = false;
         public bool CanBeBlockedNight = true;
         public bool CanBeBlockedDay = true;
         public int VotedCount = 0; //количество голосов за игрока
@@ -41,12 +42,6 @@ namespace MafiaTelegramBot.Game
             return true;
         }
         
-        public async Task BlockDay()
-        {
-            CanBeBlockedDay = false;
-            await Bot.SendWithMarkdown2(ChatId, strings.dame_block_you);
-        }
-        
         public static Player FromUserEntity(UserEntity b)
         {
             var serialized = JsonConvert.SerializeObject(b);
@@ -94,12 +89,6 @@ namespace MafiaTelegramBot.Game
             return roles.ResourceManager.GetString(CurrentRole.RoleKey.ToString())!;
         }
 
-        public async Task Kill()
-        {
-            IsAlive = false;
-            await Bot.SendWithMarkdown2(ChatId, strings.you_died);
-        }
-
         public void ResetState()
         {
             CurrentRole = new NoneRole();

+ 4 - 2
MafiaTelegramBot/Models/Bot.cs

@@ -75,7 +75,9 @@ namespace MafiaTelegramBot.Models
                 new ConnectToPublicRoomQuery(),
                 new ConnectToSelectedRoomQuery(),
                 new KickSelectedPlayerQuery(),
-                new TimerSwitchQuery(),
+                new SwitchTimerQuery(),
+                new ChangeRolesQuery(),
+                new PlayersCountSettingsQuery(),
             };
         }
         
@@ -89,7 +91,7 @@ namespace MafiaTelegramBot.Models
         {
             try
             {
-                return await Get().SendStickerAsync(chatId, fileId, disableNotification: true);
+                return await Get().SendStickerAsync(chatId, fileId, true);
             }
             catch (Exception e)
             {

+ 2 - 3
MafiaTelegramBot/Models/Commands/RoomSettingsCommand.cs

@@ -16,10 +16,9 @@ namespace MafiaTelegramBot.Models.Commands
             var user = await UserDao.GetPlayerById(UserId);
             var roomKey = RoomEncrypter.GetCode(user.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
-            var roomMaxCapacity = room.MaxPlayers;
             var status = room.TimerEnabled ? strings.enabled : strings.disabled;
-            await Bot.SendWithMarkdown2(ChatId, $"{strings.timer}: {status}", Keyboard.TimerSwitchKeyboard(UserId, room.TimerEnabled ? strings.disable : strings.enable));
-            return await Bot.SendWithMarkdown2(ChatId, $"{strings.max_capacity_message}: {roomMaxCapacity}", Keyboard.SetMaximumKeyboard(UserId));
+            return await Bot.SendWithMarkdown2(ChatId, strings.what_settings, 
+                Keyboard.SettingsRoomKeyboard(UserId, $"{strings.timer}: {status}", room.IsExtended));
         }
     }
 }

+ 40 - 0
MafiaTelegramBot/Models/Inlines/ChangeRolesQuery.cs

@@ -0,0 +1,40 @@
+using System.Security.AccessControl;
+using System.Threading.Tasks;
+using MafiaTelegramBot.Controllers;
+using MafiaTelegramBot.DataBase.EntityDao;
+using MafiaTelegramBot.Game;
+using MafiaTelegramBot.Game.GameRooms;
+using MafiaTelegramBot.Resources;
+using Telegram.Bot.Types;
+
+namespace MafiaTelegramBot.Models.Inlines
+{
+    public class ChangeRolesQuery : Query
+    {
+        protected override Callback Name => Callback.ChangeRoles;
+        protected override async Task<Message> Execute(Update update)
+        {
+            var user = await UserDao.GetPlayerById(UserId);
+            var roomKey = RoomEncrypter.GetCode(user.GetRoomName());
+            var room = RoomController.GetRoom(roomKey);
+            var message = $"{strings.current_enabled_roles}" +
+                          $"\n{roles.Elder} - {strings.disabled}" +
+                          $"\n{roles.Fool} - {strings.disabled}" +
+                          $"\n{roles.Hooker} - {strings.enabled}" +
+                          $"\n{roles.Parasite} - {strings.disabled}" +
+                          $"\n{roles.Don} - {strings.enabled}" +
+                          $"\n{roles.Dame} - {strings.disabled}" +
+                          $"\n{roles.Cop} - {strings.enabled}" +
+                          $"\n{roles.Journalist} - {strings.disabled}" +
+                          $"\n{roles.Detective} - {strings.disabled}" +
+                          $"\n{roles.Lawyer} - {strings.disabled}" +
+                          $"\n{roles.Bodyguard} - {strings.disabled}" +
+                          $"\n{roles.Doctor} - {strings.disabled}" +
+                          $"\n{roles.Necromancer} - {strings.enabled}" +
+                          $"\n{roles.Werewolf} - {strings.enabled}" +
+                          $"\n{roles.Mafia} - 1" +
+                          $"\n{roles.Villager} - 3";
+            return await Bot.SendWithMarkdown2(ChatId, message, Keyboard.ChangeRolesKeyboard(UserId, roomKey, (ExtendedGameRoom)room));
+        }
+    }
+}

+ 24 - 0
MafiaTelegramBot/Models/Inlines/PlayersCountSettingsQuery.cs

@@ -0,0 +1,24 @@
+using System.Threading.Tasks;
+using MafiaTelegramBot.Controllers;
+using MafiaTelegramBot.DataBase.EntityDao;
+using MafiaTelegramBot.Game;
+using MafiaTelegramBot.Resources;
+using Telegram.Bot.Types;
+
+namespace MafiaTelegramBot.Models.Inlines
+{
+    public class PlayersCountSettingsQuery : Query
+    {
+        protected override Callback Name => Callback.PlayersCount;
+        
+        protected override async Task<Message> Execute(Update update)
+        {
+            await DeletePreviousMessage(ChatId, update.CallbackQuery.Message.MessageId);
+            var user = await UserDao.GetPlayerById(UserId);
+            var roomKey = RoomEncrypter.GetCode(user.GetRoomName());
+            var room = RoomController.GetRoom(roomKey);
+            var roomMaxCapacity = room.MaxPlayers;
+            return await Bot.SendWithMarkdown2(ChatId, $"{strings.max_capacity_message}: {roomMaxCapacity}", Keyboard.SetMaximumKeyboard(UserId));
+        }
+    }
+}

+ 2 - 3
MafiaTelegramBot/Models/Inlines/TimerSwitchQuery.cs → MafiaTelegramBot/Models/Inlines/SwitchTimerQuery.cs

@@ -7,19 +7,18 @@ using Telegram.Bot.Types;
 
 namespace MafiaTelegramBot.Models.Inlines
 {
-    public class TimerSwitchQuery : Query
+    public class SwitchTimerQuery : Query
     {
         protected override Callback Name => Callback.SwitchTimer;
         protected override async Task<Message> Execute(Update update)
         {
-            await DeletePreviousMessage(ChatId, update.CallbackQuery.Message.MessageId);
             var user = await UserDao.GetPlayerById(UserId);
             var roomName = user.GetRoomName();
             var roomKey = RoomEncrypter.GetCode(roomName);
             var room = RoomController.GetRoom(roomKey);
             room.TimerEnabled = !room.TimerEnabled;
             var status = room.TimerEnabled ? strings.enabled : strings.disabled;
-            return await Bot.SendWithMarkdown2(ChatId, $"{strings.timer}: {status}");
+            return await Bot.EditMessageAsync(ChatId, update.CallbackQuery.Message.MessageId, $"{strings.timer}: {status}");
         }
     }
 }

+ 3 - 0
MafiaTelegramBot/Resources/Callback.cs

@@ -17,6 +17,9 @@ namespace MafiaTelegramBot.Resources
         SetPlayersMaximum,
         KickUser,
         SwitchTimer,
+        PlayersCount,
+        ChangeRoles,
+        ApplyRolesChange,
         Vote,
         Skip,
         Target

+ 63 - 2
MafiaTelegramBot/Resources/Keyboard.cs

@@ -169,11 +169,72 @@ namespace MafiaTelegramBot.Resources
             return inlineButtons;
         }
 
-        public static InlineKeyboardMarkup TimerSwitchKeyboard(long userId, string text)
+        public static InlineKeyboardMarkup SettingsRoomKeyboard(long userId, string timerStatus, bool extendedRoom)
+        {
+            
+            return extendedRoom
+            ? new InlineKeyboardMarkup( new[]
+            {
+                new[] {InlineKeyboardButton.WithCallbackData(timerStatus, $"{Callback.SwitchTimer}|{userId}")},
+                new[] {InlineKeyboardButton.WithCallbackData(strings.players_count, $"{Callback.PlayersCount}|{userId}")},
+                new[] {InlineKeyboardButton.WithCallbackData(strings.change_roles, $"{Callback.ChangeRoles}|{userId}")}
+            })
+            : new InlineKeyboardMarkup( new[]
+            {
+                new[] {InlineKeyboardButton.WithCallbackData(timerStatus, $"{Callback.SwitchTimer}|{userId}")},
+                new[] {InlineKeyboardButton.WithCallbackData(strings.players_count, $"{Callback.PlayersCount}|{userId}")}
+            });
+        }
+
+        public static InlineKeyboardMarkup ChangeRolesKeyboard(long userId, string roomKey, ExtendedGameRoom room)
         {
             return new( new[]
             {
-                InlineKeyboardButton.WithCallbackData(text, $"{Callback.SwitchTimer}|{userId}"), 
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Mafia}-", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Mafia}+", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Villager}-", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Villager}+", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Elder} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Fool} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Hooker} (1)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Parasite} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Don} (1)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Dame} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Cop} (1)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Journalist} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Detective} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Lawyer} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Bodyguard} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Doctor} (0)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
+                new[]
+                {
+                    InlineKeyboardButton.WithCallbackData($"{roles.Necromancer} (1)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                    InlineKeyboardButton.WithCallbackData($"{roles.Werewolf} (1)", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}"),
+                },
             });
         }
     }

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

@@ -758,5 +758,71 @@ namespace MafiaTelegramBot {
                 return ResourceManager.GetString("you_save_yourself", resourceCulture);
             }
         }
+        
+        internal static string change_roles {
+            get {
+                return ResourceManager.GetString("change_roles", resourceCulture);
+            }
+        }
+        
+        internal static string players_count {
+            get {
+                return ResourceManager.GetString("players_count", resourceCulture);
+            }
+        }
+        
+        internal static string what_settings {
+            get {
+                return ResourceManager.GetString("what_settings", resourceCulture);
+            }
+        }
+        
+        internal static string minus {
+            get {
+                return ResourceManager.GetString("minus", resourceCulture);
+            }
+        }
+        
+        internal static string plus {
+            get {
+                return ResourceManager.GetString("plus", resourceCulture);
+            }
+        }
+        
+        internal static string current_enabled_roles {
+            get {
+                return ResourceManager.GetString("current_enabled_roles", resourceCulture);
+            }
+        }
+        
+        internal static string choose_player_to_block_night {
+            get {
+                return ResourceManager.GetString("choose_player_to_block_night", resourceCulture);
+            }
+        }
+        
+        internal static string you_blocked {
+            get {
+                return ResourceManager.GetString("you_blocked", resourceCulture);
+            }
+        }
+        
+        internal static string now_you_cant_speak {
+            get {
+                return ResourceManager.GetString("now_you_cant_speak", resourceCulture);
+            }
+        }
+        
+        internal static string will_be_ressurected {
+            get {
+                return ResourceManager.GetString("will_be_ressurected", resourceCulture);
+            }
+        }
+        
+        internal static string will_be_killed {
+            get {
+                return ResourceManager.GetString("will_be_killed", resourceCulture);
+            }
+        }
     }
 }

+ 34 - 1
MafiaTelegramBot/Resources/strings.resx

@@ -373,6 +373,39 @@
         <value>Вы вылечили сами себя</value>
     </data>
     <data name="you_save_yourself" xml:space="preserve">
-        <value />
+        <value>Вы спасли себя</value>
+    </data>
+    <data name="change_roles" xml:space="preserve">
+        <value>Изменить рассадку</value>
+    </data>
+    <data name="players_count" xml:space="preserve">
+        <value>Количество игроков</value>
+    </data>
+    <data name="what_settings" xml:space="preserve">
+        <value>Что вы хотите настроить?</value>
+    </data>
+    <data name="minus" xml:space="preserve">
+        <value>-</value>
+    </data>
+    <data name="plus" xml:space="preserve">
+        <value>+</value>
+    </data>
+    <data name="current_enabled_roles" xml:space="preserve">
+        <value>Текущая рассадка в комнате:</value>
+    </data>
+    <data name="choose_player_to_block_night" xml:space="preserve">
+        <value>Выберите цель для блокировки</value>
+    </data>
+    <data name="you_blocked" xml:space="preserve">
+        <value>Вы заблокированы</value>
+    </data>
+    <data name="now_you_cant_speak" xml:space="preserve">
+        <value>Сейчас вы не можете разговаривать</value>
+    </data>
+    <data name="will_be_ressurected" xml:space="preserve">
+        <value>был воскрешен</value>
+    </data>
+    <data name="will_be_killed" xml:space="preserve">
+        <value>был убит</value>
     </data>
 </root>