Browse Source

Parasite achievement fix, add next and prev button

Tigran 4 years ago
parent
commit
86fd575b52

+ 20 - 13
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -231,7 +231,8 @@ namespace MafiaTelegramBot.Game.GameRooms
                     .ToList();
                 if (votes.Count == 0)
                 {
-                    var allMafiaVotes = Players.Values.Where(p => p.CurrentRole.MafiaTargetId is -1 or -2 or -3).Distinct().ToList();
+                    var allMafiaVotes = Players.Values.Where(p => p.CurrentRole.ColorRole == 2 && p.IsAlive
+                        && p.CurrentRole.MafiaTargetId is -1 or -2 or -4).Distinct().ToList();
                     if (allMafiaVotes.Count == 1)
                     {
                         mafiaNotAgree = allMafiaVotes[0].CurrentRole.MafiaTargetId switch
@@ -503,23 +504,26 @@ namespace MafiaTelegramBot.Game.GameRooms
                         }
                     }
                     
-                    var villagerTeam = players.Where(p => p.CurrentRole.ColorRole == 1 && p.GetRole() != Roles.Lawyer).Select(p => p.Id);
-                    var mafiaTeam = players.Where(p => p.CurrentRole.ColorRole == 2 || p.GetRole() == Roles.Lawyer).Select(p => p.Id);
+                    var villagerTeam = players.Where(p => p.CurrentRole.ColorRole == 1 && p.GetRole() != Roles.Lawyer).Select(p => p.Id).ToList();
+                    var mafiaTeam = players.Where(p => p.CurrentRole.ColorRole == 2 || p.GetRole() == Roles.Lawyer).Select(p => p.Id).ToList();
                     
                     foreach (var player in players)
                     {
                         if (aliveMafia == 0)
                         {
-                            if(player.CurrentRole.ColorRole == 1 && player.CurrentRole.RoleKey != Roles.Lawyer)
+                            if(player.CurrentRole.ColorRole == 1 && player.GetRole() != Roles.Lawyer)
                             {
                                 UpdateWins(player);
                                 player.HookerRoleAchievementEvent();
-                                player.ParasiteRoleAchievementEvent(villagerTeam.ToList());
+                                await player.ParasiteRoleAchievementEvent(villagerTeam.ToList());
                                 player.WerewolfRoleAchievementEvent(1);
                             }
-                            else if (player.CurrentRole.ColorRole == 2)
-                                player.WerewolfRoleAchievementEvent(2, true);
-                            else player.ResetParasiteProgress();
+                            else
+                            {
+                                if (player.CurrentRole.ColorRole == 2)
+                                    player.WerewolfRoleAchievementEvent(2, true);
+                                player.ResetParasiteProgress();
+                            }
                         }
                         else
                         {
@@ -527,12 +531,15 @@ namespace MafiaTelegramBot.Game.GameRooms
                             {
                                 UpdateWins(player);
                                 player.HookerRoleAchievementEvent();
-                                player.ParasiteRoleAchievementEvent(mafiaTeam.ToList());
+                                await player.ParasiteRoleAchievementEvent(mafiaTeam.ToList());
                                 player.WerewolfRoleAchievementEvent(2);
                             }
-                            else if (player.CurrentRole.ColorRole == 1) 
-                                player.WerewolfRoleAchievementEvent(1, true);
-                            else player.ResetParasiteProgress();
+                            else
+                            {
+                                if (player.CurrentRole.ColorRole == 1)
+                                    player.WerewolfRoleAchievementEvent(1, true);
+                                player.ResetParasiteProgress();
+                            }
                         }
 
                         if (player.CurrentRole.ColorRole == 3)
@@ -542,7 +549,7 @@ namespace MafiaTelegramBot.Game.GameRooms
                                 player.HookerRoleAchievementEvent();
                                 UpdateWins(player);
                             }
-                            else player.ResetParasiteProgress();
+                            player.ResetParasiteProgress();
                         }
                         
                         if (player.CurrentRole.RoleKey == Roles.Cop)

+ 7 - 3
MafiaTelegramBot/Game/Player.cs

@@ -327,12 +327,12 @@ namespace MafiaTelegramBot.Game
             }
         }
         
-        public void ParasiteRoleAchievementEvent(List<long> team)
+        public async Task ParasiteRoleAchievementEvent(List<long> team)
         {
             
             if (!OpenedRoles.Parasite)
             {
-                Task.Run(async() =>
+                await Task.Run(async() =>
                 {
                     team.Remove(Id);
                     if (Achievements.PlayerWinTeam == "")
@@ -353,7 +353,9 @@ namespace MafiaTelegramBot.Game
                         {
                             Achievements.PlayerWinTeam = BuildString(firstCross);
                             if (Achievements.PlayerWinTeamTwo == "")
+                            {
                                 Achievements.PlayerWinTeamTwo = BuildString(team);
+                            }
                             else
                             {
                                 var secondTeam = Achievements.PlayerWinTeamTwo.Split('|').Select(long.Parse).ToList();
@@ -374,7 +376,9 @@ namespace MafiaTelegramBot.Game
 
             string BuildString(List<long> list)
             {
-                var result = list.Aggregate("", (current, id) => current + (id + '|'));
+                if (list.Count == 0) return "";
+                var result = "";
+                foreach (var item in list) result += $"{item}|";
                 return result.Remove(result.Length - 1);
             }
         }

+ 2 - 1
MafiaTelegramBot/Models/Inlines/ConnectToPublicRoomQuery.cs

@@ -12,9 +12,10 @@ namespace MafiaTelegramBot.Models.Inlines
         protected override async Task<Message> Execute(Update update)
         {
             await DeletePreviousMessage(ChatId, update.CallbackQuery.Message.MessageId);
+            var data = update.CallbackQuery.Data.Split('|');
             var rooms = await RoomController.GetPublicRooms();
             if (rooms.Count == 0) return await Bot.SendWithMarkdown2(ChatId, strings.public_rooms_are_not_exist);
-            return await Bot.SendWithMarkdown2(ChatId, strings.rooms, Keyboard.RoomsKeyboard(rooms, UserId));
+            return await Bot.SendWithMarkdown2(ChatId, strings.rooms, Keyboard.RoomsKeyboard(rooms, UserId, int.Parse(data[2])));
         }
     }
 }

+ 22 - 5
MafiaTelegramBot/Resources/Keyboard.cs

@@ -48,8 +48,8 @@ namespace MafiaTelegramBot.Resources
         {
             return new(new[]
             {
-                InlineKeyboardButton.WithCallbackData(strings._public, $"{callbackPublic}|{userId}"),
-                InlineKeyboardButton.WithCallbackData(strings._private, $"{callbackPrivate}|{userId}"),
+                InlineKeyboardButton.WithCallbackData(strings._public, $"{callbackPublic}|{userId}|0"),
+                InlineKeyboardButton.WithCallbackData(strings._private, $"{callbackPrivate}|{userId}|0"),
             });
         }
 
@@ -110,10 +110,14 @@ namespace MafiaTelegramBot.Resources
             return new(InlineKeyboardButton.WithCallbackData(strings.change_name, $"{Callback.ChangeNickName}|{userId}"));
         }
 
-        public static InlineKeyboardMarkup RoomsKeyboard(List<GameRoom> rooms, long userId)
+        public static InlineKeyboardMarkup RoomsKeyboard(List<GameRoom> rooms, long userId, int page)
         {
-            var inlineButtons = new InlineKeyboardButton[rooms.Count][];
-            for (var i = 0; i < rooms.Count && i < Constants.MAX_SHOWING_ROOMS; ++i) // buttons
+            var previousButton = page != 0;
+            var nextButton = rooms.Count > (page + 1) * 10;
+            var buttonsCount = rooms.Count >= (page + 1) * 10 ? 10 : rooms.Count - page*10;
+            if (previousButton || nextButton) buttonsCount++;
+            var inlineButtons = new InlineKeyboardButton[buttonsCount][];
+            for (var i = 0 + page * 10; i < rooms.Count && i < Constants.MAX_SHOWING_ROOMS * (page + 1); ++i) // buttons
             {
                 var s = rooms[i].IsExtended ? "Р" : "C";
                 inlineButtons[i] = new []
@@ -123,6 +127,19 @@ namespace MafiaTelegramBot.Resources
                     $"{Callback.ConnectToSelectedRoom}|{userId}|{RoomEncrypter.GetCode(rooms[i].RoomName)}")
                 };
             }
+            if (previousButton && nextButton) inlineButtons[buttonsCount - 1] = new[]
+            {
+                InlineKeyboardButton.WithCallbackData(strings.previous, $"{Callback.ConnectToPublicRoom}|{userId}|{page-1}"),
+                InlineKeyboardButton.WithCallbackData(strings.further, $"{Callback.ConnectToPublicRoom}|{userId}|{page+1}"),
+            };
+            else if (previousButton) inlineButtons[buttonsCount - 1] = new[]
+            {
+                InlineKeyboardButton.WithCallbackData(strings.previous, $"{Callback.ConnectToPublicRoom}|{userId}|{page-1}"),
+            };
+            else if (nextButton) inlineButtons[buttonsCount - 1] = new[]
+            {
+                InlineKeyboardButton.WithCallbackData(strings.further, $"{Callback.ConnectToPublicRoom}|{userId}|{page+1}"),
+            };
             return new InlineKeyboardMarkup(inlineButtons);
         }
 

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

@@ -1136,5 +1136,17 @@ namespace MafiaTelegramBot {
                 return ResourceManager.GetString("you_can_use", resourceCulture);
             }
         }
+        
+        internal static string further {
+            get {
+                return ResourceManager.GetString("further", resourceCulture);
+            }
+        }
+        
+        internal static string previous {
+            get {
+                return ResourceManager.GetString("previous", resourceCulture);
+            }
+        }
     }
 }

+ 6 - 0
MafiaTelegramBot/Resources/strings.resx

@@ -564,4 +564,10 @@
     <data name="you_can_use" xml:space="preserve">
         <value>Теперь вы можете использовать эту роль в расширенной игре</value>
     </data>
+    <data name="further" xml:space="preserve">
+        <value>Далее</value>
+    </data>
+    <data name="previous" xml:space="preserve">
+        <value>Назад</value>
+    </data>
 </root>