CopRole.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using MafiaTelegramBot.Game.GameRooms;
  4. using MafiaTelegramBot.Resources;
  5. namespace MafiaTelegramBot.Game.GameRoles
  6. {
  7. public class CopRole : GameRoom.Role
  8. {
  9. public override Roles RoleKey => Roles.Cop;
  10. public override async Task NightAction()
  11. {
  12. NightTargetList = Room.Players.Values.Except(KnownRoles).Where(p => p.IsAlive).ToList();
  13. var message = await Room.PlayersCh.SendTo(Player.ChatId, strings.choose_player_to_check_role,
  14. Keyboard.NightChooseTargetKeyboard(NightTargetList, Player.Id));
  15. MessageId = message.MessageId;
  16. }
  17. public override async Task ApplyNightActionResult()
  18. {
  19. if (NightTargetId != -2)
  20. {
  21. if (NightTargetId == -1)
  22. {
  23. NightTargetId = NightTargetList[Utilities.Rnd.Next(NightTargetList.Count)].Id;
  24. await Room.PlayersCh.EditTo(Player.Id, MessageId,
  25. $"{strings.automatically_choosed_target} {Room.Players[NightTargetId].NickName}");
  26. }
  27. var user = Room.Players[NightTargetId];
  28. NightTargetId = -1;
  29. KnownRoles.Add(user);
  30. var role = user.GetRole() is Roles.Don or Roles.Mafia
  31. ? roles.Mafia
  32. : roles.Villager;
  33. await Room.PlayersCh.EditTo(Player.Id, MessageId,
  34. $"{strings.role_of_your_target} {user.NickName} - {role}");
  35. }
  36. }
  37. public override async Task SetNightTarget(long userId)
  38. {
  39. NightTargetId = userId;
  40. await Room.PlayersCh.EditTo(Player.Id, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
  41. }
  42. public CopRole(GameRoom room, Player player) : base(room, player) { }
  43. }
  44. }