DonRole.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using MafiaTelegramBot.Game.GameRooms;
  4. using MafiaTelegramBot.Resources;
  5. namespace MafiaTelegramBot.Game.GameRoles
  6. {
  7. public class DonRole : GameRoom.Role
  8. {
  9. public override Roles RoleKey => Roles.Don;
  10. public override int RankingCost { get; } = 30;
  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.Info.Id) || Room.IsExtended) && p.Info.Id != Player.Info.Id).ToList();
  27. var message = await Room.PlayersMessageChannel.SendTo(Player.Info, strings.choose_player_to_check_role, Keyboard.NightChooseTargetKeyboard(NightTargetList));
  28. MessageId = message.MessageId;
  29. message = await Room.PlayersMessageChannel.SendTo(Player.Info, strings.choose_player_to_kill, Keyboard.NightMafiaTargetKeyboard(alivePlayers));
  30. MafiaMessageId = message.MessageId;
  31. }
  32. else NightTargetId = -3;
  33. }
  34. public override async Task ApplyNightActionResult()
  35. {
  36. Player.IsSpeaker = false;
  37. if (NightTargetId != -2 && MafiaTargetId != -2 && NightTargetId != -3)
  38. {
  39. if (MafiaTargetId == -1) await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_have_not_choosen_target);
  40. else MafiaTargetId = -1;
  41. if (NightTargetId == -1) await SetRandomNightTarget();
  42. if(Room.Players.ContainsKey(NightTargetId))
  43. {
  44. var role = Room.Players[NightTargetId].GetRole() is Roles.Cop or Roles.Detective or Roles.Journalist
  45. ? Room.Players[NightTargetId].GetRoleName()
  46. : strings.not_cop;
  47. if (KnownRoles.ContainsKey(NightTargetId)) KnownRoles[NightTargetId] = role;
  48. else KnownRoles.Add(Room.Players[NightTargetId].Info.Id, role);
  49. await Room.PlayersMessageChannel.EditTo(Player.Info, MessageId,
  50. $"{strings.role_of_your_target} {Room.Players[NightTargetId].Info.NickName} - {role}");
  51. }
  52. else await Room.PlayersMessageChannel.EditTo(Player.Info, MessageId, strings.this_player_left_from_game);
  53. }
  54. }
  55. public override async Task SetNightTarget(long userId)
  56. {
  57. if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
  58. else
  59. {
  60. NightTargetId = userId;
  61. await Room.PlayersMessageChannel.EditTo(Player.Info, MessageId, $"{strings.you_choose_target} {Room.Players[NightTargetId].Info.NickName}");
  62. }
  63. }
  64. public override async Task SetMafiaTarget(long userId)
  65. {
  66. MafiaTargetId = userId;
  67. if (userId == -4) await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_skip_vote);
  68. else if(!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
  69. else await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, $"{strings.you_choose_target} {Room.Players[userId].Info.NickName}");
  70. }
  71. public DonRole(GameRoom room, Player player) : base(room, player) { }
  72. }
  73. }