BodyguardRole.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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 BodyguardRole : GameRoom.Role
  9. {
  10. public override Roles RoleKey => Roles.Bodyguard;
  11. public override async Task NightAction()
  12. {
  13. var targets = Room.Players.Values.Where(p => p.IsAlive && p.Id != Player.Id).ToList();
  14. var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_target_to_protect,
  15. Keyboard.NightChooseTargetKeyboard(targets, Player.Id));
  16. MessageId = message.MessageId;
  17. }
  18. public override async Task ApplyNightActionResult()
  19. {
  20. if (NightTargetId == -1)
  21. await Bot.EditMessageAsync(Player.ChatId, MessageId, strings.you_have_not_choosen_target);
  22. else
  23. {
  24. var target = Room.Players[NightTargetId];
  25. NightTargetId = -1;
  26. if (!target.IsAlive)
  27. {
  28. target.IsAlive = true;
  29. Player.IsAlive = false;
  30. }
  31. }
  32. }
  33. public override async Task SetNightTarget(long userId)
  34. {
  35. NightTargetId = userId;
  36. var target = Room.Players[userId];
  37. await Bot.SendWithMarkdown2(target.ChatId, strings.bodyguard_protected_you);
  38. await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
  39. }
  40. public BodyguardRole(GameRoom room, Player player) : base(room, player) { }
  41. }
  42. }