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

It says one of the two players (we tested) is the only person surviving?

Asked by 3 years ago

Work's perfectly fine the first time. In the 2nd time, it prints one of the 2 players is the only person surviving even though nobody died and ends the round.

function servercountdown()
    print("Server count down called.")
    -- Variables
    values = game:GetService('ReplicatedStorage').Values
    remote_events = game:GetService('ReplicatedStorage').RemoteEvents
    Countdown = remote_events.Countdown
    roundCountdown = remote_events.roundCountdown
    remoteRoundEnded = remote_events.roundEnded
    remoteRoundEndedPlr = remote_events.roundEndedPlr
    removeShopGUI = remote_events.removeShopGUI
    bringShopGUI = remote_events.bringShopGUI
    module = require(script.module)
    wait(1)
    interval = 1
    length = 30
    minimum = 0
    repeatdb = false
    coindb = false
    roundEnded = false


    roundDuration = values:FindFirstChild('roundDuration')
    roundMax = roundDuration.Value

    mapFolder = game:GetService('ReplicatedStorage').Maps

    -- Insert maps into table

    maps = {}

    for _,map in pairs(mapFolder:GetChildren()) do
        table.insert(maps,1,map)
    end

    print(#maps)

    -- Countdown script

    -- Intermission, round picking & teleporting
    wait(2)
    roundEnded = false
    if repeatdb == false then
        repeatdb = true
        for i = length,minimum,-1 do
            local intermissionTime = game:GetService('ReplicatedStorage').Values:WaitForChild('IntermissionTime')
            intermissionTime.Value = i
            Countdown:FireAllClients(i)
            wait(1)
            if roundEnded == true then
                break
            end
        end
        print("Intermission over!")
        wait(2)
        local map = maps[math.random(1,#maps)]

        map.Parent = workspace
        local players = game.Players:GetPlayers()
        module.TeleportAll(map.PrimaryPart)
        removeShopGUI:FireAllClients()

        for _,player in pairs(players) do
            inRound = Instance.new("BoolValue",player)
            inRound.Name = "InRound"
            inRound.Value = true
        end

        -- Round management, round ending, awarding
        for i = 120,0,-1 do
            wait(1)
            roundDuration.Value -= 1
            roundCountdown:FireAllClients(i)
            print(roundEnded)
            local plrcount = 0
            for _,player in pairs(game.Players:GetChildren()) do
                if player:FindFirstChild('InRound') then
                    if player.InRound.Value == true then
                        plrcount += 1
                        print(plrcount)
                        if plrcount == 0 then
                            print("The player count is 0!")
                        end
                    end
                end
            end
            local playertable = {}
            for _,player in pairs(game.Players:GetChildren()) do
                table.insert(playertable,1,player)
                print(#playertable)
                if plrcount == (#playertable-1) and coindb == false and roundEnded == false then
                    coindb = true
                    print("Round ended due to 1 player only named "..player.Name)
                    remoteRoundEndedPlr:FireAllClients(player)
                    player.leaderstats.Coins.Value += 10
                    game.ReplicatedStorage.Values.IntermissionTime.Value = 30
                    game.ReplicatedStorage.Values.roundDuration.Value = 120
                    workspace[player.Name].HumanoidRootPart.CFrame = workspace.SpawnLocation.CFrame
                    player.InRound:Destroy()
                    repeatdb = false
                    print("Round ended")
                    map.Parent = game.ReplicatedStorage.Maps
                    for _,gunplr in pairs(game.Players:GetChildren()) do
                        local lasergun = gunplr.Character:FindFirstChild("Laser Gun") or gunplr.Backpack:FindFirstChild("Laser Gun")
                        if not lasergun then
                            print("Laser gun not found, couldn't destroy.")
                        else
                            lasergun:Destroy()
                        end
                    end
                    roundEnded = true
                    coindb = false
                    repeatdb = false
                    playertable = {}
                    plrcount = 0
                    bringShopGUI:FireAllClients()
                    for _,player in pairs(game.Players:GetChildren()) do
                        if player.InRound then
                            player.InRound:Destroy()
                        end
                    end
                    break
                end
            end
            for _,player in pairs(game.Players:GetChildren()) do
                if player:WaitForChild("InRound") then
                    inRound = player.InRound
                    workspace[player.Name].Humanoid.Died:Connect(function()
                        inRound.Value = false
                        local lasergun = workspace:WaitForChild(player.Name):FindFirstChild("Laser Gun")
                        if lasergun then
                            workspace[player.Name].Humanoid:UnequipTools()
                        end
                        bringShopGUI:FireAllClients()
                    end)
                end
            end

            if roundDuration.Value == 110 then
                for _,player in pairs(game.Players:GetChildren()) do
                    if player:WaitForChild("InRound").Value == true then
                        local gunclone = game.ReplicatedStorage["Laser Gun"]:Clone()
                        gunclone.Parent = player.Backpack
                    end
                end
            end
            if roundDuration.Value == 0 then
                game.ReplicatedStorage.Values.IntermissionTime.Value = 30
                game.ReplicatedStorage.Values.roundDuration.Value = 120
                for _,player in pairs(players) do
                    if player.InRound then
                        player.InRound.Value = false
                        repeatdb = false
                        print("Round ended")
                        map.Parent = game.ReplicatedStorage.Maps
                        workspace[player.Name].HumanoidRootPart.CFrame = workspace.SpawnLocation.CFrame
                        roundEnded = true
                        for _,gunplr in pairs(game.Players:GetChildren()) do
                            local lasergun = gunplr.Character:FindFirstChild("Laser Gun") or gunplr.Backpack:FindFirstChild("Laser Gun")
                            if not lasergun then
                                print("Laser gun not found, couldn't destroy.")
                            else
                                lasergun:Destroy()
                            end
                        end
                        remoteRoundEnded:FireAllClients()
                        plrcount = 0
                        bringShopGUI:FireAllClients()
                        for _,player in pairs(game.Players:GetChildren()) do
                            if player.InRound then
                                player.InRound:Destroy()
                            end
                        end
                        break
                    end
                end
            end
        end

    end
end

servercountdown()

while wait() do

    if roundEnded == true then
        roundEnded = false
        wait(2)
        print("Restarting!")
        servercountdown()
    end

end

Answer this question