Ver código fonte

werewolf role complete

Tigran 4 anos atrás
pai
commit
ab191e23c7

+ 9 - 0
MafiaTelegramBot/Game/GameRoles/DameRole.cs

@@ -70,6 +70,15 @@ namespace MafiaTelegramBot.Game.GameRoles
                 }
             }
         }
+
+        public override Task Kill()
+        {
+            if (Room.PlayersRole.ContainsKey(Roles.Werewolf)
+                && Room.PlayersRole[Roles.Werewolf].Count == 1)
+                ((WerewolfRole) Room.PlayersRole[Roles.Werewolf][0].CurrentRole).IsMafia = true;
+            return base.Kill();
+        }
+        
         public DameRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 9 - 1
MafiaTelegramBot/Game/GameRoles/DonRole.cs

@@ -71,7 +71,15 @@ namespace MafiaTelegramBot.Game.GameRoles
                 }
             }
         }
-
+        
+        public override Task Kill()
+        {
+            if (Room.PlayersRole.ContainsKey(Roles.Werewolf)
+                && Room.PlayersRole[Roles.Werewolf].Count == 1)
+                ((WerewolfRole) Room.PlayersRole[Roles.Werewolf][0].CurrentRole).IsMafia = true;
+            return base.Kill();
+        }
+        
         public DonRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 8 - 0
MafiaTelegramBot/Game/GameRoles/MafiaRole.cs

@@ -42,6 +42,14 @@ namespace MafiaTelegramBot.Game.GameRoles
             }
         }
 
+        public override Task Kill()
+        {
+            if (Room.PlayersRole.ContainsKey(Roles.Werewolf)
+                && Room.PlayersRole[Roles.Werewolf].Count == 1)
+                ((WerewolfRole) Room.PlayersRole[Roles.Werewolf][0].CurrentRole).IsMafia = true;
+            return base.Kill();
+        }
+
         public MafiaRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 45 - 4
MafiaTelegramBot/Game/GameRoles/WerewolfRole.cs

@@ -1,7 +1,7 @@
+using System.Linq;
 using System.Threading.Tasks;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Resources;
-using Telegram.Bot.Types;
 
 namespace MafiaTelegramBot.Game.GameRoles
 {
@@ -9,9 +9,50 @@ namespace MafiaTelegramBot.Game.GameRoles
     {
         public override Roles RoleKey => Roles.Werewolf;
         public bool IsMafia = false;
-        public override Task NightAction() { return Task.CompletedTask; }
-        public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override async Task NightAction()
+        {
+            if (IsMafia)
+            {
+                Player.IsSpeaker = true;
+                var targets = Room.Players.Values.Where(p => p.IsAlive).ToList();
+                var message = await Room.PlayersCh.SendTo(Player.ChatId, strings.choose_player_to_kill, 
+                    Keyboard.NightMafiaTargetKeyboard(targets, Player.Id));
+                MafiaMessageId = message.MessageId;
+            }
+        }
+
+        public override async Task ApplyNightActionResult()
+        {
+            if (IsMafia)
+            {
+                Player.IsSpeaker = false;
+                if (MafiaTargetId != -2)
+                {
+                    if (MafiaTargetId == -1)
+                        await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_have_not_choosen_target);
+                    else MafiaTargetId = -1;
+                }
+            }
+        }
+
+        public override async Task SetMafiaTarget(long userId)
+        {
+            if (IsMafia)
+            {
+                if (userId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_skip_vote);
+                else
+                {
+                    if (!Room.Players.ContainsKey(userId))
+                        await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
+                    else
+                    {
+                        MafiaTargetId = userId;
+                        await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId,
+                            $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+                    }
+                }
+            }
+        }
         public WerewolfRole(GameRoom room, Player player) : base(room, player) { }
     }
 }