123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using MafiaTelegramBot.Resources;
- namespace MafiaTelegramBot.Game.GameRooms
- {
- public class ExtendedGameRoom : GameRoom
- {
- public override bool IsExtended { get; protected set; } = true;
- public Dictionary<Roles, int> CustomRoomSettings = new();
- public Dictionary<int, int> Min = new Dictionary<int, int>
- {
- [1] = 1,
- [2] = 1,
- [3] = 1,
- [4] = 1,
- [5] = 1,
-
- [6] = 2,
- [7] = 2,
- [8] = 2,
- [9] = 2,
- [10] = 3,
- [11] = 3,
- [12] = 4,
- [13] = 4,
- [14] = 4,
- [15] = 5,
- [16] = 5
- },
- Max = new Dictionary<int, int>
- {
- [1] = 1,
- [2] = 2,
- [3] = 3,
- [4] = 4,
- [5] = 5,
-
- [6] = 2,
- [7] = 2,
- [8] = 3,
- [9] = 3,
- [10] = 3,
- [11] = 4,
- [12] = 4,
- [13] = 4,
- [14] = 5,
- [15] = 5,
- [16] = 5
- };
- public override Dictionary<Roles, List<Player>> PlayersRole { get; set; } = new()
- {
- //passive roles
- [Roles.Elder] = new List<Player>(),
- [Roles.Fool] = new List<Player>(),
- [Roles.Villager] = new List<Player>(),
- //Active roles
- [Roles.Hooker] = new List<Player>(),
- [Roles.Mafia] = new List<Player>(),
- [Roles.Don] = new List<Player>(),
- [Roles.Dame] = new List<Player>(),
- [Roles.Bodyguard] = new List<Player>(),
- [Roles.Doctor] = new List<Player>(),
- [Roles.Necromancer] = new List<Player>(),
- [Roles.Cop] = new List<Player>(),
- [Roles.Journalist] = new List<Player>(),
- [Roles.Detective] = new List<Player>(),
- [Roles.Lawyer] = new List<Player>(),
- [Roles.Werewolf] = new List<Player>(),
- [Roles.Parasite] = new List<Player>(),
- };
- protected override async Task<ResultCode> ReadSettings()
- {
- return await Task.Run(() =>
- {
- var rolesCount = CustomRoomSettings.Values.Sum();
- var blackRolesCount = CustomRoomSettings.Count(pair => pair.Key
- is Roles.Dame or Roles.Don or Roles.Werewolf or Roles.Lawyer);
- if (CustomRoomSettings.ContainsKey(Roles.Mafia)) blackRolesCount += CustomRoomSettings[Roles.Mafia];
- if (rolesCount != Players.Count) return ResultCode.RolesNotEqualPlayers;
- if (blackRolesCount < Min[Players.Count]) return ResultCode.NotEnoughMafia;
- if (blackRolesCount > Max[Players.Count]) return ResultCode.TooMuchMafia;
- Settings = CustomRoomSettings.ToDictionary(k=>k.Key, k=>k.Value);
- return ResultCode.CodeOk;
- });
- }
- public async Task InitSettings()
- {
- await Task.Run(() =>
- {
- CustomRoomSettings.Add(Roles.Villager, Players.Count);
- CustomRoomSettings.Add(Roles.Cop, 1);
- if (Players.Count != 8) CustomRoomSettings.Add(Roles.Doctor, 1);
- if (Players.Count % 3 == 0)
- CustomRoomSettings.Add(Roles.Mafia, Players.Count/3);
- else
- {
- CustomRoomSettings.Add(Roles.Mafia, Players.Count/3 -1);
- CustomRoomSettings.Add(Roles.Don, 1);
- }
- foreach (var (key, value) in CustomRoomSettings)
- {
- if (key != Roles.Villager)
- CustomRoomSettings[Roles.Villager] -= value;
- }
- if (CustomRoomSettings[Roles.Mafia] < 1) CustomRoomSettings.Remove(Roles.Mafia);
- if (CustomRoomSettings[Roles.Villager] < 1) CustomRoomSettings.Remove(Roles.Villager);
- });
- }
- }
- }
|