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`
