MafiaRole.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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 MafiaRole : GameRoom.Role
  8. {
  9. public override Roles RoleKey => Roles.Mafia;
  10. private int _color = 2;
  11. public override double ColorRole
  12. {
  13. get => _color;
  14. set => _color = (int) value;
  15. }
  16. public override async Task NightAction()
  17. {
  18. Player.IsSpeaker = true;
  19. var targets = Room.Players.Values.Where(p => p.IsAlive).ToList();
  20. var message = await Room.PlayersCh.SendTo(Player.ChatId, strings.choose_player_to_kill,
  21. Keyboard.NightMafiaTargetKeyboard(targets, Player.Id));
  22. MafiaMessageId = message.MessageId;
  23. }
  24. public override async Task ApplyNightActionResult()
  25. {
  26. Player.IsSpeaker = false;
  27. if (MafiaTargetId != -2)
  28. {
  29. if (MafiaTargetId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_have_not_choosen_target);
  30. else MafiaTargetId = -1;
  31. }
  32. }
  33. public override async Task SetMafiaTarget(long userId)
  34. {
  35. if(userId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_skip_vote);
  36. else
  37. {
  38. if(!Room.Players.ContainsKey(userId)) await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
  39. else
  40. {
  41. MafiaTargetId = userId;
  42. await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
  43. }
  44. }
  45. }
  46. public override async Task Kill()
  47. {
  48. if (Room.PlayersRole.ContainsKey(Roles.Werewolf)
  49. && Room.PlayersRole[Roles.Werewolf].Count == 1)
  50. await ((WerewolfRole) Room.PlayersRole[Roles.Werewolf][0].CurrentRole).TransformToMafia();
  51. await base.Kill();
  52. }
  53. public MafiaRole(GameRoom room, Player player) : base(room, player) { }
  54. }
  55. }