DameRole.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. private int _color = 2;
  12. public override double ColorRole
  13. {
  14. get => _color;
  15. set => _color = (int) value;
  16. }
  17. public override async Task NightAction()
  18. {
  19. NightTargetId = -1;
  20. Player.IsSpeaker = true;
  21. var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
  22. NightTargetList = alivePlayers.Where(p=> p.CanBeBlockedDay && p.Id != Player.Id).ToList();
  23. var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_block,
  24. Keyboard.NightChooseTargetKeyboard(NightTargetList, Player.Id));
  25. MessageId = message.MessageId;
  26. message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_kill,
  27. Keyboard.NightMafiaTargetKeyboard(alivePlayers, Player.Id));
  28. MafiaMessageId = message.MessageId;
  29. }
  30. public override async Task ApplyNightActionResult()
  31. {
  32. Player.IsSpeaker = false;
  33. if (NightTargetId != -2 && MafiaTargetId != -2)
  34. {
  35. if (MafiaTargetId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_have_not_choosen_target);
  36. else MafiaTargetId = -1;
  37. if (NightTargetId == -1) await SetRandomNightTarget();
  38. if(Room.Players.ContainsKey(NightTargetId))
  39. {
  40. Room.Players[NightTargetId].IsBlocked = true;
  41. Room.Players[NightTargetId].CanBeBlockedDay = false;
  42. await Room.PlayersCh.SendTo(NightTargetId, strings.dame_block_you);
  43. await Room.PlayersCh.SendExcept(NightTargetId, $"{strings.dame_block_player} " +
  44. $"({Room.Players[NightTargetId].TurnOrder}) " +
  45. $"{Room.Players[NightTargetId].NickName}." +
  46. $"{strings.player_cant_talk_and_vote}");
  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 override async Task Kill()
  74. {
  75. if (Room.PlayersRole.ContainsKey(Roles.Werewolf)
  76. && Room.PlayersRole[Roles.Werewolf].Count == 1)
  77. await ((WerewolfRole) Room.PlayersRole[Roles.Werewolf][0].CurrentRole).TransformToMafia();
  78. await base.Kill();
  79. }
  80. public DameRole(GameRoom room, Player player) : base(room, player) { }
  81. }
  82. }