Exemplo n.º 1
0
        public static void GeneratePlayerRoles()
        {
            if (RoundManager.GetAllAlivePlayers().Count < Main.Config.MinimumPlayers)
            {
                RoundManager.StopRound();
                return;
            }

            Random          rng     = new Random();
            List <CSteamID> tickets = new List <CSteamID>();

            RoundManager.GetAllPlayers().ForEach(p =>
            {
                tickets.Add(p.SteamID);
            });

            int traitorCount   = (int)Math.Floor(RoundManager.GetAllPlayers().Count / 4.0);
            int detectiveCount = (int)Math.Floor(RoundManager.GetAllPlayers().Count / 8.0);

            if (traitorCount == 0)
            {
                traitorCount = 1;
            }
            if (detectiveCount == 0)
            {
                detectiveCount = 1;
            }

            GroupInfo oldTraitorGroup = GroupManager.getGroupInfo((CSteamID)1);

            if (!(oldTraitorGroup is null))
            {
                UnityThread.executeCoroutine(DeleteTraitorGroup());
            }

            UnityThread.executeCoroutine(CreateTraitorGroup());

            for (var i = 0; i < traitorCount; i++)
            {
                CSteamID selectedTraitor = tickets[rng.Next(tickets.Count)];

                TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(selectedTraitor);
                if (tttPlayer is null)
                {
                    return;
                }

                tttPlayer.SetRole(PlayerRole.TRAITOR);
                tttPlayer.SendMessageUnsafe("You are a <color=#C72D35>Traitor</color>");

                UnityThread.executeCoroutine(SetSteamGroupEnumerator(tttPlayer.SteamID));

                InterfaceManager.SendUIEffectUnsafe(8499, 8490, tttPlayer.SteamID, true);
                InterfaceManager.SendUIEffectTextUnsafe(8490, tttPlayer.SteamID, true, "RoleValue", "TRAITOR");

                tickets.RemoveAll(x => x == selectedTraitor);
            }

            for (var i = 0; i < detectiveCount; i++)
            {
                CSteamID selectedDetective = tickets[rng.Next(tickets.Count)];

                TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(selectedDetective);
                tttPlayer.SetRole(PlayerRole.DETECTIVE);
                tttPlayer.SendMessageUnsafe("You are a <color=#2263A9>Detective</color>");
                tttPlayer.AddItemUnsafe(10);

                InterfaceManager.SendUIEffectUnsafe(8496, 8490, tttPlayer.SteamID, true);
                InterfaceManager.SendUIEffectTextUnsafe(8490, tttPlayer.SteamID, true, "RoleValue", "DETECTIVE");

                tickets.RemoveAll(x => x == selectedDetective);
            }

            tickets.ToList().ForEach(steamID =>
            {
                TTTPlayer tttPlayer = PlayerManager.GetTTTPlayer(steamID);
                tttPlayer.SetRole(PlayerRole.INNOCENT);
                tttPlayer.SendMessageUnsafe("You are a <color=#24B938>Innocent</color>");

                InterfaceManager.SendUIEffectUnsafe(8497, 8490, tttPlayer.SteamID, true);
                InterfaceManager.SendUIEffectTextUnsafe(8490, tttPlayer.SteamID, true, "RoleValue", "INNOCENT");

                tickets.RemoveAll(x => x == steamID);
            });
        }