DameRole.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using MafiaTelegramBot.Game.GameRooms;
  4. using MafiaTelegramBot.Models;
  5. using MafiaTelegramBot.Resources;
  6. namespace MafiaTelegramBot.Game.GameRoles
  7. {
  8. public class DameRole : GameRoom.Role
  9. {
  10. public override Roles RoleKey => Roles.Dame;
  11. public override async Task NightAction()
  12. {
  13. NightTargetId = -1;
  14. Player.IsSpeaker = true;
  15. var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
  16. NightTargetList = alivePlayers.Where(p=> p.CanBeBlockedDay).ToList();
  17. var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_block,
  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) await SetRandomNightTarget();
  32. if(Room.Players.ContainsKey(NightTargetId))
  33. {
  34. Room.Players[NightTargetId].IsBlocked = true;
  35. Room.Players[NightTargetId].CanBeBlockedDay = false;
  36. await Room.PlayersCh.SendTo(NightTargetId, strings.dame_block_you);
  37. }
  38. }
  39. }
  40. public override async Task SetNightTarget(long userId)
  41. {
  42. if (!Room.Players.ContainsKey(userId)) await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
  43. else
  44. {
  45. NightTargetId = userId;
  46. await Room.PlayersCh.EditTo(Player.Id, MessageId, $"{strings.you_choose_target} {Room.Players[NightTargetId].NickName}");
  47. }
  48. }
  49. public override async Task SetMafiaTarget(long userId)
  50. {
  51. if(userId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_skip_vote);
  52. else
  53. {
  54. if (!Room.Players.ContainsKey(userId)) await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
  55. else
  56. {
  57. MafiaTargetId = userId;
  58. await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId,
  59. $"{strings.you_choose_target} {Room.Players[MafiaTargetId].NickName}");
  60. }
  61. }
  62. }
  63. public DameRole(GameRoom room, Player player) : base(room, player) { }
  64. }
  65. }