Browse Source

Fast games complete

Tigran 4 years ago
parent
commit
e6d9e6f53f

+ 9 - 16
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -1,4 +1,3 @@
-using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
 using System.Threading;
 using System.Threading;
@@ -115,11 +114,7 @@ namespace MafiaTelegramBot.Game.GameRooms
         private bool GameNotEnded()
         private bool GameNotEnded()
         {
         {
             var playersCount = Players.Values.Count(p => p.IsAlive);
             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 && PlayersRole[Roles.Werewolf][0].IsAlive
-                && ((WerewolfRole)PlayersRole[Roles.Werewolf][0].CurrentRole).IsMafia) mafiaCount++;
+            var mafiaCount = Players.Values.Count(p => p.IsAlive && p.CurrentRole.ColorRole is 2);
             var villagersCount = playersCount - mafiaCount;
             var villagersCount = playersCount - mafiaCount;
             return villagersCount > mafiaCount && mafiaCount > 0;
             return villagersCount > mafiaCount && mafiaCount > 0;
         }
         }
@@ -142,25 +137,23 @@ namespace MafiaTelegramBot.Game.GameRooms
             discussionEnded.WaitOne();
             discussionEnded.WaitOne();
 
 
             var turnsCount = _turnOrder.Count;
             var turnsCount = _turnOrder.Count;
-            Player toEndQueue = null;
             for (var i = 0; i < turnsCount; ++i)
             for (var i = 0; i < turnsCount; ++i)
             {
             {
                 var player = _turnOrder.Dequeue();
                 var player = _turnOrder.Dequeue();
                 if (!Players.ContainsKey(player.Id)) continue;
                 if (!Players.ContainsKey(player.Id)) continue;
-                if (!player.IsBlocked && player.IsAlive && Owner != null)
+                if (!player.IsBlocked && player.IsAlive)
                 {
                 {
                     await PlayersMessageChannel.Send($"{strings.now_turn} ({player.TurnOrder}) {player.NickName}");
                     await PlayersMessageChannel.Send($"{strings.now_turn} ({player.TurnOrder}) {player.NickName}");
-                    if (TimerEnabled) await Bot.SendWithMarkdown2(player.ChatId, strings.you_turn_say);
-                    await player.CurrentRole.SpeakAction(Constants.DAY_SPEAK_INTERVAL);
+                    if (Owner != null)
+                    {
+                        if (TimerEnabled) await Bot.SendWithMarkdown2(player.ChatId, strings.you_turn_say);
+                        await player.CurrentRole.SpeakAction(Constants.DAY_SPEAK_INTERVAL);
+                    }
                     if (Players.ContainsKey(player.Id)) await player.CurrentRole.VotingAction(VoteUpList.Count == 0);
                     if (Players.ContainsKey(player.Id)) await player.CurrentRole.VotingAction(VoteUpList.Count == 0);
                 }
                 }
-                else if (Owner == null) await player.CurrentRole.VotingAction(VoteUpList.Count == 0);
-
-                if (toEndQueue != null) _turnOrder.Enqueue(player);
-                else toEndQueue = player;
+                _turnOrder.Enqueue(player);
             }
             }
-
-            _turnOrder.Enqueue(toEndQueue);
+            _turnOrder.Enqueue(_turnOrder.Dequeue());
         }
         }
 
 
         private async Task NightPhase()
         private async Task NightPhase()

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

@@ -53,6 +53,8 @@ namespace MafiaTelegramBot.Game.GameRooms
                     user.CurrentRole = Role.GetNewRoleInstance(next, this, user);
                     user.CurrentRole = Role.GetNewRoleInstance(next, this, user);
                     _turnOrder.Enqueue(user);
                     _turnOrder.Enqueue(user);
                 }
                 }
+
+                await SendRolesToUsers();
                 await PlayersMessageChannel.UpdateList(Players.Values);
                 await PlayersMessageChannel.UpdateList(Players.Values);
                 await MafiaMessageChannel.UpdateList(Players.Values);
                 await MafiaMessageChannel.UpdateList(Players.Values);
             });
             });

+ 1 - 0
MafiaTelegramBot/Models/Bot.cs

@@ -90,6 +90,7 @@ namespace MafiaTelegramBot.Models
                 new GiveToSelectedQuery(),
                 new GiveToSelectedQuery(),
                 new GiveRoleQuery(),
                 new GiveRoleQuery(),
                 new GiveToAllQuery(),
                 new GiveToAllQuery(),
+                new ContinueQuery(),
             };
             };
         }
         }
         
         

+ 0 - 1
MafiaTelegramBot/Models/Commands/StartGameCommand.cs

@@ -21,7 +21,6 @@ namespace MafiaTelegramBot.Models.Commands
             var result = await Bot.SendWithMarkdown2(owner.ChatId, strings.game_process_started);
             var result = await Bot.SendWithMarkdown2(owner.ChatId, strings.game_process_started);
             var resultCode = await room.Prepare();
             var resultCode = await room.Prepare();
             if (resultCode != ResultCode.CodeOk) return await Utilities.GetResultCodeMessage(resultCode, ChatId);
             if (resultCode != ResultCode.CodeOk) return await Utilities.GetResultCodeMessage(resultCode, ChatId);
-            await room.SendRolesToUsers();
             room.Start();
             room.Start();
             return result;
             return result;
         }
         }

+ 28 - 0
MafiaTelegramBot/Models/Inlines/ContinueQuery.cs

@@ -0,0 +1,28 @@
+using System.Threading.Tasks;
+using MafiaTelegramBot.Controllers;
+using MafiaTelegramBot.CustomCollections.Extensions;
+using MafiaTelegramBot.DataBase.EntityDao;
+using MafiaTelegramBot.Game;
+using MafiaTelegramBot.Game.GameRooms;
+using MafiaTelegramBot.Resources;
+using Telegram.Bot.Types;
+
+namespace MafiaTelegramBot.Models.Inlines
+{
+    public class ContinueQuery : Query
+    {
+        protected override Callback Name => Callback.Continue;
+        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);
+            if (room is FastGameRoom r)
+            {
+                r.ContinuePlayers.AddUnique(user);
+                return await Bot.EditMessageAsync(ChatId, update.CallbackQuery.Message.MessageId, strings.you_continued_the_game);
+            }
+            return await Bot.SendWithMarkdown2(ChatId, strings.unexpected_error);
+        }
+    }
+}

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

@@ -21,7 +21,6 @@ namespace MafiaTelegramBot.Models.Inlines
             var result = await Bot.SendWithMarkdown2(owner.ChatId, strings.game_process_started);
             var result = await Bot.SendWithMarkdown2(owner.ChatId, strings.game_process_started);
             var resultCode = await room.Prepare();
             var resultCode = await room.Prepare();
             if (resultCode != ResultCode.CodeOk) return await Utilities.GetResultCodeMessage(resultCode, ChatId);
             if (resultCode != ResultCode.CodeOk) return await Utilities.GetResultCodeMessage(resultCode, ChatId);
-            await room.SendRolesToUsers();
             room.Start();
             room.Start();
             return result;
             return result;
         }
         }

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

@@ -1412,5 +1412,11 @@ namespace MafiaTelegramBot {
                 return ResourceManager.GetString("continue", resourceCulture);
                 return ResourceManager.GetString("continue", resourceCulture);
             }
             }
         }
         }
+        
+        internal static string you_continued_the_game {
+            get {
+                return ResourceManager.GetString("you_continued_the_game", resourceCulture);
+            }
+        }
     }
     }
 }
 }

+ 3 - 0
MafiaTelegramBot/Resources/strings.resx

@@ -702,4 +702,7 @@
     <data name="continue" xml:space="preserve">
     <data name="continue" xml:space="preserve">
         <value>Продолжить</value>
         <value>Продолжить</value>
     </data>
     </data>
+    <data name="you_continued_the_game" xml:space="preserve">
+        <value>Вы остались в комнате</value>
+    </data>
 </root>
 </root>