12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using System.Linq;
- using System.Threading.Tasks;
- using MafiaTelegramBot.Game.GameRooms;
- using MafiaTelegramBot.Resources;
- namespace MafiaTelegramBot.Game.GameRoles
- {
- public class WerewolfRole : GameRoom.Role
- {
- public override Roles RoleKey => Roles.Werewolf;
- public bool IsMafia = false;
-
- private int _color = 1;
- public override int ColorRole
- {
- get => _color;
- set => _color = (int) value;
- }
- public override async Task NightAction()
- {
- MafiaTargetId = -1;
- if (Player.IsAlive)
- {
- if (IsMafia)
- {
- Player.IsSpeaker = true;
- var targets = Room.Players.Values.Where(p => p.IsAlive).ToList();
- var message = await Room.PlayersCh.SendTo(Player.ChatId, strings.choose_player_to_kill,
- Keyboard.NightMafiaTargetKeyboard(targets, Player.Id));
- MafiaMessageId = message.MessageId;
- }
- }
- else MafiaTargetId = -3;
- }
- public override async Task ApplyNightActionResult()
- {
- if (IsMafia && NightTargetId != -3)
- {
- Player.IsSpeaker = false;
- if (MafiaTargetId == -1)
- await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_have_not_choosen_target);
- }
- }
- public async Task TransformToMafia()
- {
- if (IsMafia) return;
- ColorRole = 2;
- IsMafia = true;
- var mafiaList = Room.Players.Values.Where(p => p.GetRole() is Roles.Don or Roles.Mafia or Roles.Dame).ToDictionary(p=>p.Id, p => p.GetRoleName());
- foreach (var player in mafiaList)
- {
- Room.Players[player.Key].CurrentRole.KnownRoles.Add(Player.Id, Player.GetRoleName());
- KnownRoles.Add(player.Key, player.Value);
- }
- var mafia = Room.Players.Values.Where(player => player.GetRole() is Roles.Mafia).ToArray();
- var don = Room.Players.Values.FirstOrDefault(player => player.GetRole() is Roles.Don);
- var dame = Room.Players.Values.FirstOrDefault(player => player.GetRole() is Roles.Dame);
- var message = strings.your_teammates;
- if (don != null) message += $"\n({don.TurnOrder}) {don.NickName} - {roles.Don}";
- if (dame != null) message += $"\n({dame.TurnOrder}) {dame.NickName} - {roles.Dame}";
- message = mafia.Aggregate(message, (current, player) => current + $"\n({player.TurnOrder}) {player.NickName}");
- await Room.PlayersCh.SendTo(Player.Id, message);
- }
- public override async Task SetMafiaTarget(long userId)
- {
- if (IsMafia)
- {
- if (userId == -1) await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId, strings.you_skip_vote);
- else
- {
- if (!Room.Players.ContainsKey(userId))
- await Room.PlayersCh.SendTo(Player.Id, strings.this_player_left_from_game);
- else
- {
- MafiaTargetId = userId;
- await Room.PlayersCh.EditTo(Player.Id, MafiaMessageId,
- $"{strings.you_choose_target} {Room.Players[userId].NickName}");
- }
- }
- }
- }
- public WerewolfRole(GameRoom room, Player player) : base(room, player) { }
- }
- }
|