DonRole.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using MafiaTelegramBot.CustomCollections.Extensions;
  4. using MafiaTelegramBot.Game.GameRooms;
  5. using MafiaTelegramBot.Models;
  6. using MafiaTelegramBot.Resources;
  7. namespace MafiaTelegramBot.Game.GameRoles
  8. {
  9. public class DonRole : GameRoom.Role
  10. {
  11. public override Roles RoleKey => Roles.Don;
  12. public override async Task NightAction()
  13. {
  14. Player.IsSpeaker = true;
  15. var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
  16. NightTargetList = alivePlayers.Except(KnownRoles).ToList();
  17. var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_check_role,
  18. Keyboard.NightChooseTargetKeyboard(NightTargetList, Player.Id));
  19. MessageId = message.MessageId;
  20. message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_kill,
  21. Keyboard.NightMafiaTargetKeyboard(alivePlayers, Player.Id));
  22. MafiaMessageId = message.MessageId;
  23. }
  24. public override async Task ApplyNightActionResult()
  25. {
  26. Player.IsSpeaker = false;
  27. if (NightTargetId != -2 && MafiaTargetId != -2)
  28. {
  29. if (MafiaTargetId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_have_not_choosen_target);
  30. else MafiaTargetId = -1;
  31. if (NightTargetId == -1)
  32. {
  33. NightTargetId = NightTargetList[Utilities.Rnd.Next(NightTargetList.Count)].Id;
  34. await Room.PlayersCh.EditTo(Player.Id, MessageId,
  35. $"{strings.automatically_choosed_target} {Room.Players[NightTargetId].NickName}");
  36. }
  37. if(!Room.Players.ContainsKey(NightTargetId)) await Room.PlayersCh.EditTo(Player.Id, MessageId, strings.this_player_left_from_game);
  38. else
  39. {
  40. KnownRoles.Add(Room.Players[NightTargetId]);
  41. var role = Room.Players[NightTargetId].GetRole() is Roles.Cop
  42. ? roles.Cop
  43. : roles.Villager;
  44. await Room.PlayersCh.EditTo(Player.Id, MessageId,
  45. $"{strings.role_of_your_target} {Room.Players[NightTargetId].NickName} - {role}");
  46. NightTargetId = -1;
  47. }
  48. }
  49. }
  50. public override async Task SetNightTarget(long userId)
  51. {
  52. if (!Room.Players.ContainsKey(userId)) await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
  53. else
  54. {
  55. NightTargetId = userId;
  56. await Room.PlayersCh.EditTo(Player.Id, MessageId, $"{strings.you_choose_target} {Room.Players[NightTargetId].NickName}");
  57. }
  58. }
  59. public override async Task SetMafiaTarget(long userId)
  60. {
  61. if(userId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_skip_vote);
  62. else
  63. {
  64. if (!Room.Players.ContainsKey(userId)) await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
  65. else
  66. {
  67. MafiaTargetId = userId;
  68. await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId,
  69. $"{strings.you_choose_target} {Room.Players[MafiaTargetId].NickName}");
  70. }
  71. }
  72. }
  73. public DonRole(GameRoom room, Player player) : base(room, player) { }
  74. }
  75. }