Tigran 4 anni fa
parent
commit
4b7d96c7a3

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

@@ -59,8 +59,8 @@ namespace MafiaTelegramBot.Game.GameRooms
                 var mafia = Players.Values.Where(player => player.GetRole() is Roles.Mafia).ToArray();
                 var don = Players.Values.FirstOrDefault(player => player.GetRole() is Roles.Don);
                 var message = strings.your_teammates;
-                if (don != null) message += $" \\({don.TurnOrder}\\) {don.NickName} - {roles.Don}";
-                message = mafia.Aggregate(message, (current, player) => current + $" \\({player.TurnOrder}\\) {player.NickName}");
+                if (don != null) message += $"\n\\({don.TurnOrder}\\) {don.NickName} - {roles.Don}";
+                message = mafia.Aggregate(message, (current, player) => current + $"\n\\({player.TurnOrder}\\) {player.NickName}");
                 await MafiaCh.Send(message);
                 var resetEvent = new ManualResetEvent(false);
                 var timer = new Timer
@@ -200,11 +200,11 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public async Task<Message> PutUpVote(long playerId, long targetId)
         {
-            var player = await UserDao.GetPlayerById(playerId);
-            VoteUpList.AddUnique(Players[targetId]);
+            var player = Players[playerId];
+            VoteUpList.AddUnique(player);
             if (playerId != targetId)
             {
-                var target = await UserDao.GetPlayerById(targetId);
+                var target = Players[targetId];
                 await PlayersCh.SendExcept(player.ChatId, $"{player.NickName} {strings.vote_to} {target.NickName}");
                 return await Bot.SendWithMarkdown2(player.ChatId, $"{strings.you_vote_player} {target.NickName}");
             }
@@ -216,22 +216,37 @@ namespace MafiaTelegramBot.Game.GameRooms
         {
             await Task.Run(async () =>
             {
-                foreach (var (_, player) in Players)
+                var aliveMafia = Players.Values.Where(p => p.GetRole() is Roles.Don or Roles.Mafia && p.IsAlive).ToList();
+                if (aliveMafia.Count == 0)
                 {
-                    player.CurrentRole = new NoneRole();
-                    player.IsPlaying = false;
-                    player.IsSpeaker = false;
-                    player.IsAlive = true;
+                    await PlayersCh.Send(strings.villagers_won, exceptDied: false);
+                    await PlayersCh.SendSticker(Stickers.Sticker["VillagerWins"], false);
                 }
+                else
+                {
+                    await PlayersCh.Send(strings.mafia_won, exceptDied: false);
+                    await PlayersCh.SendSticker(Stickers.Sticker["MafiaWins"], false);
+                }
+                var rolesMessage = strings.in_this_game_roles;
+                var sortedPLayers = Players.Values.ToList();
+                sortedPLayers.Sort((x, y) => x.TurnOrder - y.TurnOrder);
+                foreach (var player in sortedPLayers)
+                {
+                    rolesMessage += $"\n\\({player.TurnOrder}\\) {player.NickName} - {player.GetRoleName()}";
+                    player.ResetState();
+                }
+                await PlayersCh.Send(rolesMessage);
                 IsRunning = false;
                 IsDay = false;
                 _turnOrder.Clear();
+                Settings.Clear();
+                foreach (var (_, list) in PlayersRole) list.Clear();
                 if (!Players.ContainsKey(Owner.Id) || Players.Count == 0) new Task(async() => 
                     await RoomController.DissolveRoom(RoomEncrypter.GetCode(RoomName))).Start();
                 else
                 {
                     await Bot.SendWithMarkdown2(Owner.ChatId, strings.thanks_for_game, Keyboard.OwnerGameMenu);
-                    await PlayersCh.SendExcept(Owner.Id, strings.thanks_for_game, Keyboard.PlayerGameMenu);
+                    await PlayersCh.SendExcept(Owner.Id, strings.thanks_for_game, Keyboard.PlayerGameMenu, false);
                 }
             });
         }

+ 1 - 0
MafiaTelegramBot/Game/Player.cs

@@ -95,6 +95,7 @@ namespace MafiaTelegramBot.Game
 
         public void ResetState()
         {
+            CurrentRole = new NoneRole();
             IsAlive = true;
             IsSpeaker = false;
             IsPlaying = false;

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

@@ -668,5 +668,23 @@ namespace MafiaTelegramBot {
                 return ResourceManager.GetString("choose_player_to_kill", resourceCulture);
             }
         }
+        
+        internal static string villagers_won {
+            get {
+                return ResourceManager.GetString("villagers_won", resourceCulture);
+            }
+        }
+        
+        internal static string mafia_won {
+            get {
+                return ResourceManager.GetString("mafia_won", resourceCulture);
+            }
+        }
+        
+        internal static string in_this_game_roles {
+            get {
+                return ResourceManager.GetString("in_this_game_roles", resourceCulture);
+            }
+        }
     }
 }

+ 10 - 1
MafiaTelegramBot/Resources/strings.resx

@@ -208,7 +208,7 @@
         <value>Вы покинули игру</value>
     </data>
     <data name="your_teammates" xml:space="preserve">
-        <value>Ваши напарники:</value>
+        <value>Команда мафии на эту игру:</value>
     </data>
     <data name="first_day_message" xml:space="preserve">
         <value>Пока мирные жители спали, в городе завелась мафия. Город собрался на главной площади и жители решают, кто среди них предатель.</value>
@@ -330,4 +330,13 @@
     <data name="choose_player_to_kill" xml:space="preserve">
         <value>Выберите свою жертву</value>
     </data>
+    <data name="villagers_won" xml:space="preserve">
+        <value>Ура! Победили мирные жители...</value>
+    </data>
+    <data name="mafia_won" xml:space="preserve">
+        <value>Ура! Победила мафия...</value>
+    </data>
+    <data name="in_this_game_roles" xml:space="preserve">
+        <value>В этой игре участвовали:</value>
+    </data>
 </root>