Bläddra i källkod

Parasite-parent night forwarding messages

Tigran 4 år sedan
förälder
incheckning
08b0bf117a

+ 4 - 3
MafiaTelegramBot/Game/GameRoles/ParasiteRole.cs

@@ -46,8 +46,6 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
-            Player.IsSpeaker = true;
-            Room.Players[ParentId].IsSpeaker = true;
             if (!_actionApplied && NightTargetId != -2 && NightTargetId != -3)
             {
                 _actionApplied = true;
@@ -58,11 +56,14 @@ namespace MafiaTelegramBot.Game.GameRoles
                     await Room.PlayersMessageChannel.SendTo(NightTargetId, $"{strings.you_have_been_chosen_by_the_parasite} {Player.NickName}");
                     KnownRoles.Add(NightTargetId, strings.container);
                     Room.Players[NightTargetId].CurrentRole.KnownRoles.Add(Player.Id, roles.Parasite);
-                    if (Room.Players[NightTargetId].CurrentRole.ColorRole == 2) Room.MafiaMessageChannel.AddPerson(Player);
                 }
                 else Player.IsAlive = false;
             }
             if (!Room.Players[ParentId].IsAlive) Player.IsAlive = false;
+            else if (_actionApplied) {
+                Player.IsSpeaker = false;
+                Room.Players[ParentId].IsSpeaker = false;
+            }
         }
 
         public override async Task<string> IsWon()

+ 3 - 2
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -292,8 +292,9 @@ namespace MafiaTelegramBot.Game.GameRooms
                 var resetEvent = new ManualResetEvent(false);
                 timer.Elapsed += async (_, _) =>
                 {
-                    foreach (var voter in votersPlayers.Where(p => !_voteKillList.ContainsKey(p.Id) && Players.ContainsKey(p.Id)))
-                        await voter.CurrentRole.RandomVoting();
+                    if (Constants.ENABLE_AUTO_VOTING)
+                        foreach (var voter in votersPlayers.Where(p => !_voteKillList.ContainsKey(p.Id) && Players.ContainsKey(p.Id)))
+                            await voter.CurrentRole.RandomVoting();
                     resetEvent.Set();
                 };
                 timer.Start();

+ 30 - 1
MafiaTelegramBot/Game/GameRooms/GameRoom.MessageHandler.cs

@@ -2,6 +2,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 using MafiaTelegramBot.Controllers;
+using MafiaTelegramBot.Game.GameRoles;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
 using Telegram.Bot.Types;
@@ -34,9 +35,37 @@ namespace MafiaTelegramBot.Game.GameRooms
                     if (_room.IsDay && _room.Players[userId].IsSpeaker) _room.Players[userId].CurrentRole.TalkingActionComplete.Set();
                     else await _room.PlayersMessageChannel.SendTo(userId, strings.now_is_not_your_turn);
                 }
-                else await _room.ForwardMessage(_room.Players[userId], text);
+                else await ForwardMessage(_room.Players[userId], text);
                 return update.Message;
             }
+            
+            private async Task ForwardMessage(Player player, string message)
+            {
+                if(!_room.IsRunning) await _room.PlayersMessageChannel.SendExcept(player.Id, $"{player.NickName}: {message}");
+                else
+                {
+                    if (!player.IsAlive) await _room.PlayersMessageChannel.SendTo(player.Id, strings.you_now_died);
+                    else if (player.IsBlocked) await _room.PlayersMessageChannel.SendTo(player.Id, strings.you_blocked);
+                    else if (!player.IsSpeaker) await _room.PlayersMessageChannel.SendTo(player.Id, strings.now_you_cant_speak);
+                    else if (_room.IsDay) await _room.PlayersMessageChannel.SendExcept(player.Id, $"({player.TurnOrder}) {player.NickName}: {message}");
+                    else
+                    {
+                        if (player.CurrentRole.ColorRole == 2)
+                            await _room.MafiaMessageChannel.SendExcept(player.Id, $"({player.TurnOrder}) {player.NickName}: {message}");
+                        if (player.GetRole() is Roles.Parasite)
+                        {
+                            var parasiteRole = player.CurrentRole as ParasiteRole;
+                            await _room.PlayersMessageChannel.SendTo(parasiteRole!.ParentId, $"({player.TurnOrder}) {player.NickName}: {message}");
+                        }
+                        else if (_room.PlayersRole.ContainsKey(Roles.Parasite)
+                                 && _room.PlayersRole[Roles.Parasite].Count == 1
+                                 && ((ParasiteRole)_room.PlayersRole[Roles.Parasite][0].CurrentRole).ParentId == player.Id)
+                        {
+                            await _room.PlayersMessageChannel.SendTo(_room.PlayersRole[Roles.Parasite][0].Id, $"({player.TurnOrder}) {player.NickName}: {message}");
+                        }
+                    }
+                }
+            }
 
             private async Task LookPlayers(Player player)
             {

+ 0 - 27
MafiaTelegramBot/Game/GameRooms/GameRoom.Structure.cs

@@ -90,33 +90,6 @@ namespace MafiaTelegramBot.Game.GameRooms
             player.ResetState();
         }
 
-        private async Task ForwardMessage(Player player, string message)
-        {
-            if(!IsRunning) await PlayersMessageChannel.SendExcept(player.Id, $"{player.NickName}: {message}");
-            else
-            {
-                if (!player.IsAlive) await PlayersMessageChannel.SendTo(player.Id, strings.you_now_died);
-                else if (player.IsBlocked) await PlayersMessageChannel.SendTo(player.Id, strings.you_blocked);
-                else if (!player.IsSpeaker) await PlayersMessageChannel.SendTo(player.Id, strings.now_you_cant_speak);
-                else if (IsDay) await PlayersMessageChannel.SendExcept(player.Id, $"({player.TurnOrder}) {player.NickName}: {message}");
-                else
-                {
-                    if (player.CurrentRole.ColorRole == 2)
-                        await MafiaMessageChannel.SendExcept(player.Id, $"({player.TurnOrder}) {player.NickName}: {message}");
-                    else if (player.GetRole() is Roles.Parasite)
-                    {
-                        var parasiteRole = player.CurrentRole as ParasiteRole;
-                        await PlayersMessageChannel.SendTo(parasiteRole!.ParentId, $"({player.TurnOrder}) {player.NickName}: {message}");
-                    }
-                    else
-                    {
-                        await PlayersMessageChannel.SendTo(Players.Values.First(p => p.GetRole() is Roles.Parasite).Id, 
-                            $"({player.TurnOrder}) {player.NickName}: {message}");
-                    }
-                }
-            }
-        }
-
         public async Task<int> GetCapacity()
         {
             return await Task.FromResult(Players.Count);

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

@@ -13,6 +13,7 @@ namespace MafiaTelegramBot.Models.Inlines
         protected override Callback Name => Callback.ChangeRoles;
         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 = (ExtendedGameRoom) RoomController.GetRoom(roomKey);

+ 1 - 0
MafiaTelegramBot/Models/Inlines/StartGameQuery.cs

@@ -12,6 +12,7 @@ namespace MafiaTelegramBot.Models.Inlines
         protected override Callback Name => Callback.StartGame;
         protected override async Task<Message> Execute(Update update)
         {
+            await DeletePreviousMessage(ChatId, update.CallbackQuery.Message.MessageId);
             var owner = await UserDao.GetPlayerById(UserId);
             var roomKey = RoomEncrypter.GetCode(owner.GetRoomName());
             var room = RoomController.GetRoom(roomKey);

+ 9 - 5
MafiaTelegramBot/Resources/Constants.cs

@@ -6,26 +6,30 @@ namespace MafiaTelegramBot.Resources
 {
     public static class Constants
     {
-        public const int PLAYER_LIMITS_MIN = 6;
+        public const int PLAYER_LIMITS_MIN = 1; //6;
         public const int MEMORY_CLEANER_INTERVAL = 60 * 60 * 1000;
+        // ReSharper disable once InconsistentNaming
         public static readonly TimeSpan PLAYER_INACTIVE_INTERVAL = new(0, 40, 0);
         public const int MINUTES_UNTIL_DISSOLVE = 10;
         public const int PLAYER_LIMITS_MAX = 16;
         public const int MAX_SHOWING_ROOMS = 10;
         
         public const string SHOP_CURRENCY = "RUB";
+        // ReSharper disable once InconsistentNaming
         public static List<LabeledPrice> RANDOM_ROLE_PRICE = new()
         {
             new LabeledPrice {Label = "100 рублей", Amount = 10000}
         };
 
-        public const int FIRST_NIGHT_INTERVAL = 10 * 1000;
+        public const bool ENABLE_AUTO_VOTING = false;
+
+        public const int FIRST_NIGHT_INTERVAL = 10 * 100;
         public const int PUT_UP_VOTE_INTERVAL = 20 * 1000;
         public const int VOTE_KILL_INTERVAL = 20 * 1000;
         public const int NIGHT_ACTION_INTERVAL = 60 * 1000;
-        public const int DEFENCE_INTERVAL = 90 * 1000;
-        public const int SPEAK_INTERVAL = 60 * 1000;
-        public const int DISCUSSION_INTERVAL = 60 * 1000;
+        public const int DEFENCE_INTERVAL = 90 * 100;
+        public const int SPEAK_INTERVAL = 60 * 100;
+        public const int DISCUSSION_INTERVAL = 60 * 100;
 
         public const int ROOM_CODE_LENGTH = 6;
     }