123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using System.Linq;
- using System.Threading.Tasks;
- using MafiaTelegramBot.Game.GameRooms;
- using MafiaTelegramBot.Resources;
- namespace MafiaTelegramBot.Game.GameRoles
- {
- public class DonRole : GameRoom.Role
- {
- public override Roles RoleKey => Roles.Don;
- public override int RankingCost { get; } = 30;
-
- private int _color = 2;
- public override int ColorRole
- {
- get => _color;
- set => _color = (int) value;
- }
- public override async Task NightAction()
- {
- NightTargetId = -1;
- MafiaTargetId = -1;
- if (Player.IsAlive)
- {
- Player.IsSpeaker = true;
- var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).ToList();
- NightTargetList = alivePlayers
- .Where(p => p.IsAlive && (!KnownRoles.ContainsKey(p.Info.Id) || Room.IsExtended) && p.Info.Id != Player.Info.Id).ToList();
- var message = await Room.PlayersMessageChannel.SendTo(Player.Info, strings.choose_player_to_check_role, Keyboard.NightChooseTargetKeyboard(NightTargetList));
- MessageId = message.MessageId;
- message = await Room.PlayersMessageChannel.SendTo(Player.Info, strings.choose_player_to_kill, Keyboard.NightMafiaTargetKeyboard(alivePlayers));
- MafiaMessageId = message.MessageId;
- }
- else NightTargetId = -3;
- }
- public override async Task ApplyNightActionResult()
- {
- Player.IsSpeaker = false;
- if (NightTargetId != -2 && MafiaTargetId != -2 && NightTargetId != -3)
- {
- if (MafiaTargetId == -1) await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_have_not_choosen_target);
- else MafiaTargetId = -1;
- if (NightTargetId == -1) await SetRandomNightTarget();
- if(Room.Players.ContainsKey(NightTargetId))
- {
- var role = Room.Players[NightTargetId].GetRole() is Roles.Cop or Roles.Detective or Roles.Journalist
- ? Room.Players[NightTargetId].GetRoleName()
- : strings.not_cop;
- if (KnownRoles.ContainsKey(NightTargetId)) KnownRoles[NightTargetId] = role;
- else KnownRoles.Add(Room.Players[NightTargetId].Info.Id, role);
- await Room.PlayersMessageChannel.EditTo(Player.Info, MessageId,
- $"{strings.role_of_your_target} {Room.Players[NightTargetId].Info.NickName} - {role}");
- }
- else await Room.PlayersMessageChannel.EditTo(Player.Info, MessageId, strings.this_player_left_from_game);
- }
- }
- public override async Task SetNightTarget(long userId)
- {
- if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
- else
- {
- NightTargetId = userId;
- await Room.PlayersMessageChannel.EditTo(Player.Info, MessageId, $"{strings.you_choose_target} {Room.Players[NightTargetId].Info.NickName}");
- }
- }
- public override async Task SetMafiaTarget(long userId)
- {
- MafiaTargetId = userId;
- if (userId == -4) await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_skip_vote);
- else if(!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
- else await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, $"{strings.you_choose_target} {Room.Players[userId].Info.NickName}");
- }
-
- public DonRole(GameRoom room, Player player) : base(room, player) { }
- }
- }
|