DonRole.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 DonRole : GameRoom.Role
  9. {
  10. public override Roles RoleKey => Roles.Don;
  11. private int _color = 2;
  12. public override int ColorRole
  13. {
  14. get => _color;
  15. set => _color = (int) value;
  16. }
  17. public override async Task NightAction()
  18. {
  19. NightTargetId = -1;
  20. MafiaTargetId = -1;
  21. if (Player.IsAlive)
  22. {
  23. Player.IsSpeaker = true;
  24. var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
  25. NightTargetList = alivePlayers
  26. .Where(p => p.IsAlive && (!KnownRoles.ContainsKey(p.Id) || Room.IsExtended)).ToList();
  27. var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_check_role,
  28. Keyboard.NightChooseTargetKeyboard(NightTargetList, Player.Id));
  29. MessageId = message.MessageId;
  30. message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_kill,
  31. Keyboard.NightMafiaTargetKeyboard(alivePlayers, Player.Id));
  32. MafiaMessageId = message.MessageId;
  33. }
  34. else NightTargetId = -3;
  35. }
  36. public override async Task ApplyNightActionResult()
  37. {
  38. Player.IsSpeaker = false;
  39. if (NightTargetId != -2 && MafiaTargetId != -2 && NightTargetId != -3)
  40. {
  41. if (MafiaTargetId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_have_not_choosen_target);
  42. else MafiaTargetId = -1;
  43. if (NightTargetId == -1) await SetRandomNightTarget();
  44. if(Room.Players.ContainsKey(NightTargetId))
  45. {
  46. var role = Room.Players[NightTargetId].GetRole() is Roles.Cop or Roles.Detective or Roles.Journalist
  47. ? Room.Players[NightTargetId].GetRoleName()
  48. : roles.Villager;
  49. if (KnownRoles.ContainsKey(NightTargetId)) KnownRoles[NightTargetId] = role;
  50. else KnownRoles.Add(Room.Players[NightTargetId].Id, role);
  51. await Room.PlayersCh.EditTo(Player.Id, MessageId,
  52. $"{strings.role_of_your_target} {Room.Players[NightTargetId].NickName} - {role}");
  53. }
  54. else await Room.PlayersCh.EditTo(Player.Id, MessageId, strings.this_player_left_from_game);
  55. }
  56. }
  57. public override async Task SetNightTarget(long userId)
  58. {
  59. if (!Room.Players.ContainsKey(userId)) await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
  60. else
  61. {
  62. NightTargetId = userId;
  63. await Room.PlayersCh.EditTo(Player.Id, MessageId, $"{strings.you_choose_target} {Room.Players[NightTargetId].NickName}");
  64. }
  65. }
  66. public override async Task SetMafiaTarget(long userId)
  67. {
  68. MafiaTargetId = userId;
  69. if (userId == -4) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_skip_vote);
  70. else if(!Room.Players.ContainsKey(userId)) await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
  71. else await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
  72. }
  73. public DonRole(GameRoom room, Player player) : base(room, player) { }
  74. }
  75. }