BodyguardRole.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using MafiaTelegramBot.Game.GameRooms;
  4. using MafiaTelegramBot.Models;
  5. using MafiaTelegramBot.Resources;
  6. using Telegram.Bot.Types;
  7. namespace MafiaTelegramBot.Game.GameRoles
  8. {
  9. public class BodyguardRole : GameRoom.Role
  10. {
  11. public override Roles RoleKey => Roles.Bodyguard;
  12. public override async Task NightAction()
  13. {
  14. var targets = Room.Players.Values.Where(p => p.IsAlive && p.Id != Player.Id).ToList();
  15. var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_target_to_protect,
  16. Keyboard.NightChooseTargetKeyboard(targets, Player.Id, true));
  17. MessageId = message.MessageId;
  18. }
  19. public override async Task ApplyNightActionResult()
  20. {
  21. if (NightTargetId == -1)
  22. await Bot.EditMessageAsync(Player.ChatId, MessageId, strings.you_have_not_choosen_target);
  23. else
  24. {
  25. var target = Room.Players[NightTargetId];
  26. NightTargetId = -1;
  27. if (!target.IsAlive)
  28. {
  29. target.IsAlive = true;
  30. Player.IsAlive = false;
  31. await Bot.SendWithMarkdown2(Player.ChatId, $"{strings.you_save_player} {target.NickName}");
  32. await Bot.SendWithMarkdown2(target.ChatId, strings.bodyguard_save_you);
  33. }
  34. }
  35. }
  36. public override async Task SetNightTarget(long userId)
  37. {
  38. NightTargetId = userId;
  39. var target = Room.Players[userId];
  40. await Bot.SendWithMarkdown2(target.ChatId, strings.bodyguard_protected_you);
  41. await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
  42. }
  43. public BodyguardRole(GameRoom room, Player player) : base(room, player) { }
  44. }
  45. }