Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I fix this intermission system issue? Where did I go wrong?

Asked by 4 years ago

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.

Answer this question