Problem: The code is for a round system, and has a variable which is used to determine if there are enough players in the game. The variable uses two other variables, the amount of players in the game and the minimum number of players needed to start a round, and makes sure the amount of players is greater than or equal to the minimum number of players needed. Since the minimum number of players is set to 2, when only one person joins the variable will correctly print "false". However, when there are 2 players, it keeps printing "true" and "false", and keeps printing that.
Solutions tried so far: There were no devforum topics about this. A solution that was attempted was to move the variables outside of the player added event on the script, but instead it kept printing false instead, even when there were 2 people.
Code (Is a Script):
--Variables local ServerScriptService = game:GetService("ServerScriptService") local runService = game:GetService("RunService") local players = game:GetService("Players") local replicatedStorage = game:GetService("ReplicatedStorage") local events = replicatedStorage:WaitForChild("Events") local roundEvent = events:WaitForChild("RoundEvent") local StatusEvent = events:WaitForChild("StatusEvent") local values = replicatedStorage:WaitForChild("Values") local ServerModules = ServerScriptService:WaitForChild("Modules") local Maps = require(replicatedStorage:WaitForChild("Modules"):WaitForChild("MapsModule")) local VoteFunction = replicatedStorage:WaitForChild("Events"):WaitForChild("VoteFunction") --Values local intermissionTime = 1 local mapVotingTime = 15 local roundStatus = values:WaitForChild("RoundStatus") local Map1 = nil local Map2 = nil local Map3 = nil local currentMap = nil local Votes = { Map1Votes = 0; Map2Votes = 0; Map3Votes = 0 } roundStatus.Changed:Connect(function(val) StatusEvent:FireAllClients(val) end) VoteFunction.OnServerInvoke = function(plr, mapVoteName) Votes[mapVoteName] += 1 print(Votes[mapVoteName]) return Votes[mapVoteName] end local function onPlayerEvent(player) --Dependent values local playerAmount = #players:GetPlayers() local minimumPlayerAmount = 2 local enoughPlayers = playerAmount >= minimumPlayerAmount print(player) game:GetService("RunService").Heartbeat:Connect(function() print(enoughPlayers) end) print(enoughPlayers) print(playerAmount) local function roundTimer() while enoughPlayers do for i = intermissionTime, 0, -1 do roundStatus.Value = "Intermission: "..i task.wait(1) end roundStatus.Value = intermissionTime for i = mapVotingTime, 0, -1 do roundStatus.Value = "Voting: "..i task.wait(1) end roundStatus.Value = mapVotingTime end end local timerCO = coroutine.wrap(roundTimer) if enoughPlayers then roundEvent:FireAllClients(enoughPlayers, minimumPlayerAmount, playerAmount) timerCO() else local function waitingForPlayers() local playersNeeded = minimumPlayerAmount - playerAmount if playersNeeded == 1 then roundStatus.Value = "Not enough players to start a round. "..playersNeeded.." more player needed." else roundStatus.Value = "Not enough players to start a round. "..playersNeeded.." more players needed." end end waitingForPlayers() end end players.PlayerAdded:Connect(onPlayerEvent) players.PlayerRemoving:Connect(onPlayerEvent)
tanks for taking time
- boxy