ExtendedGameRoom.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using MafiaTelegramBot.Resources;
  5. namespace MafiaTelegramBot.Game.GameRooms
  6. {
  7. public class ExtendedGameRoom : GameRoom
  8. {
  9. public override bool IsExtended { get; protected set; } = true;
  10. public Dictionary<Roles, int> CustomRoomSettings = new();
  11. public override Dictionary<Roles, List<Player>> PlayersRole { get; set; } = new()
  12. {
  13. //passive roles
  14. [Roles.Elder] = new List<Player>(),
  15. [Roles.Fool] = new List<Player>(),
  16. [Roles.Villager] = new List<Player>(),
  17. //Active roles
  18. [Roles.Hooker] = new List<Player>(),
  19. [Roles.Parasite] = new List<Player>(),
  20. [Roles.Mafia] = new List<Player>(),
  21. [Roles.Don] = new List<Player>(),
  22. [Roles.Dame] = new List<Player>(),
  23. [Roles.Cop] = new List<Player>(),
  24. [Roles.Journalist] = new List<Player>(),
  25. [Roles.Detective] = new List<Player>(),
  26. [Roles.Lawyer] = new List<Player>(),
  27. [Roles.Bodyguard] = new List<Player>(),
  28. [Roles.Doctor] = new List<Player>(),
  29. [Roles.Necromancer] = new List<Player>(),
  30. [Roles.Werewolf] = new List<Player>(),
  31. };
  32. protected override async Task<ResultCode> ReadSettings()
  33. {
  34. return await Task.Run(() =>
  35. {
  36. var rolesCount = CustomRoomSettings.Values.Sum();
  37. if (rolesCount != Players.Count) return ResultCode.RolesNotEqualPlayers;
  38. Settings = CustomRoomSettings.ToDictionary(k=>k.Key, k=>k.Value);
  39. return ResultCode.CodeOk;
  40. });
  41. }
  42. public async Task InitSettings()
  43. {
  44. await Task.Run(() =>
  45. {
  46. CustomRoomSettings.Add(Roles.Villager, Players.Count);
  47. CustomRoomSettings.Add(Roles.Cop, 1);
  48. if (Players.Count != 8) CustomRoomSettings.Add(Roles.Doctor, 1);
  49. if (Players.Count % 3 == 0)
  50. CustomRoomSettings.Add(Roles.Mafia, Players.Count/3);
  51. else
  52. {
  53. CustomRoomSettings.Add(Roles.Mafia, Players.Count/3 -1);
  54. CustomRoomSettings.Add(Roles.Don, 1);
  55. }
  56. foreach (var (key, value) in CustomRoomSettings)
  57. {
  58. if (key != Roles.Villager)
  59. CustomRoomSettings[Roles.Villager] -= value;
  60. }
  61. if (CustomRoomSettings[Roles.Mafia] < 1) CustomRoomSettings.Remove(Roles.Mafia);
  62. if (CustomRoomSettings[Roles.Villager] < 1) CustomRoomSettings.Remove(Roles.Villager);
  63. });
  64. }
  65. }
  66. }