I have made an intermission system, and it works when it’s only one player, however, when there are two+ players, it gets stuck on intermission after the first round.
Server:
local DSS = game:GetService("DataStoreService")
local TotalWinsStore = DSS:GetDataStore("BETAWins")
local TotalKillsStore = DSS:GetDataStore("BETAKills")
local TimeLeft = 20
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local GUIChanger = ReplicatedStorage:WaitForChild("GUIChanger")
local GUIChangerTwo = ReplicatedStorage:WaitForChild("GUIChangerB")
local GUIChangerThree = ReplicatedStorage:WaitForChild("GUIChangerC")
wait(1)
game.Players.PlayerAdded:Connect(function(p)
local leaderstats = Instance.new("Folder", p)
leaderstats.Name = "leaderstats"
local TotalWins = Instance.new("IntValue", leaderstats)
TotalWins.Name = "Wins"
TotalWins.Value = 0
local TotalKills = Instance.new("IntValue", leaderstats)
TotalKills.Name = "Total Kills"
TotalKills.Value = 0
local RoundKills = Instance.new("IntValue", leaderstats)
RoundKills.Name = "Round Kills"
RoundKills.Value = 0
local Playing = Instance.new("BoolValue", p)
Playing.Name = "Playing"
Playing.Value = false
local data
local dataII
local success, errormessage = pcall(function()
data = TotalWinsStore:GetAsync(p.UserId.."-wins")
dataII = TotalKillsStore:GetAsync(p.UserId.."-kills")
end)
if success then
p.leaderstats["Wins"].Value = data
p.leaderstats["Total Kills"].Value = dataII
print("Data saved!")
else
warn(errormessage)
print("Error while loading data!")
end
end)
game.Players.PlayerRemoving:Connect(function(p)
local success, errormessage = pcall(function()
TotalWinsStore:SetAsync(p.UserId.."-wins", p.leaderstats["Wins"].Value)
TotalKillsStore:SetAsync(p.UserId.."-kills", p.leaderstats["Total Kills"].Value)
end)
if success then
print("Success!")
else
warn(errormessage)
print("Error while saving data!")
end
end)
while true do
repeat
wait(1)
TimeLeft = TimeLeft - 1
GUIChanger:FireAllClients(TimeLeft)
until TimeLeft == 0
wait(2)
for i,v in pairs(game.Players:GetPlayers()) do
spawna = game.Workspace.A
spawnb = game.Workspace.B
spawnc = game.Workspace.C
spawnd = game.Workspace.D
spawne = game.Workspace.E
local spawns = {spawna, spawnb, spawnc, spawnd, spawne}
local random = math.random(1, #spawns)
local picked = spawns[random]
v.Playing.Value = true
v.Character.HumanoidRootPart.Position = picked.Position
wait(0.1)
end
GUIChangerTwo:FireAllClients()
local alldead = false
while alldead == false do
wait()
local allpdead = true
for i,v in pairs(game.Players:GetPlayers()) do
if v.Playing.Value == true and v.Character.Humanoid.Health > 0 then
allpdead = false
end
end
if allpdead then
alldead = true
break
end
end
function higherScoreThan(playerA, playerB)
return playerA.leaderstats.Score.Value > playerB.leaderstats.Score.Value
end
local players = {}
for _, player in pairs(game.Players:GetPlayers()) do
if player:FindFirstChild("leaderstats") and player.leaderstats:FindFirstChild("Round Kills") then
table.insert(players, player)
end
end
table.sort(players, higherScoreThan)
if players[1] then
local Winner = players[1].Name
GUIChangerThree:FireAllClients(Winner)
players[1].leaderstats["Wins"].Value = players[1].leaderstats["Wins"].Value + 1
end
for i,v in pairs(game.Players:GetPlayers()) do
v.leaderstats["Total Kills"].Value = v.leaderstats["Total Kills"].Value + v.leaderstats["Round Kills"].Value
wait(0.5)
v.leaderstats["Round Kills"].Value = 0
end
wait(6)
TimeLeft = 20
end
Client:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local GUIChanger = ReplicatedStorage:WaitForChild("GUIChanger")
local GUIChangerTwo = ReplicatedStorage:WaitForChild("GUIChangerB")
local GUIChangerThree = ReplicatedStorage:WaitForChild("GUIChangerC")
local function Change(TimeLeft)
local TextLabel = game.Players.LocalPlayer.PlayerGui.Intermission.TextFrame.TextLabel
TextLabel.Text = " - Intermission ("..TimeLeft..") - "
end
local function ChangeTwo()
local TextLabel = game.Players.LocalPlayer.PlayerGui.Intermission.TextFrame.TextLabel
TextLabel.Text = " - Round in Progress - "
end
local function ChangeThree(Winner)
local TextLabel = game.Players.LocalPlayer.PlayerGui.Intermission.TextFrame.TextLabel
TextLabel.Text = " - Round Winner: "..Winner.." - "
end
GUIChanger.OnClientEvent:Connect(Change)
GUIChangerTwo.OnClientEvent:Connect(ChangeTwo)
GUIChangerThree.OnClientEvent:Connect(ChangeThree)
No errors.