Ad
Still have questions? Join our Discord server and get real time help.
Log in to vote
1

Leaking Threads? How could i prevent it?

Asked by
kingdom5 4777 Trusted Snack Break Moderation Voter Community Moderator
4 years ago

At the moment this will leak threads, how could I end the loop if the player is no longer in the game so that the script does not break.

Also I need to manually add the gui because of the way I will be using it so I cannot change this part!!

function onPlayerRespawn(property, plr)
        while true do
            if plr.Character ~= nil then break end
            wait(5)
        end
    print("Given gui")
    Workspace.ScreenGui:Clone().Parent = plr.PlayerGui
end

function onPlayerEntered(plr)
        while true do
            if plr.Character ~= nil then break end
            wait(5)
        end
        print("plr Added")
        Workspace.ScreenGui:Clone().Parent = plr.PlayerGui 
        plr.CharacterAdded:connect(function(property) onPlayerRespawn(property, plr) end)
end
game.Players.PlayerAdded:connect(onPlayerEntered)

Fixed

function onPlayerRespawn(property, plr)
        while plr and plr.Parent do
            if plr.Character then break end
            wait(1) --In my opinion, five seconds is too much. I'd just do wait(). It's up to you if you wan't to change that.
        end
        if not (plr and plr.Parent) then return end
    print("Given gui")
    if game.Workspace.FilteringEnabled then
        game.Workspace.FilteringEnabled = false
        wait(1)
        Workspace.ScreenGui:Clone().Parent = plr.PlayerGui
        wait(1)
        game.Workspace.FilteringEnabled = true
    else
        game.Workspace.FilteringEnabled = true
    end

end

function onPlayerEntered(plr)
        print("plr Added")
        plr.CharacterAdded:connect(function(property) onPlayerRespawn(property, plr) end)
end
game.Players.PlayerAdded:connect(onPlayerEntered)

1 answer

Log in to vote
1
Answered by
2eggnog 955 Moderation Voter
4 years ago

Your current script will copy the gui twice. But anyways, here is how you would stop the loop and end the function if the player is no longer in the game.

function onPlayerRespawn(property, plr)
        while plr and plr.Parent do
            if plr.Character then break end
            wait(5) --In my opinion, five seconds is too much. I'd just do wait(). It's up to you if you wan't to change that.
        end
        if not (plr and plr.Parent) then return end
    print("Given gui")
    Workspace.ScreenGui:Clone().Parent = plr.PlayerGui
end

function onPlayerEntered(plr)
        print("plr Added")
        plr.CharacterAdded:connect(function(property) onPlayerRespawn(property, plr) end)
end
game.Players.PlayerAdded:connect(onPlayerEntered)

Also, I'm not sure where the property variable is coming from. It's undefined, unless this isn't the entire script.

0
Thanks for the help, i also added filtering so that the new gui is sent to the client kingdom5 4777 — 4y
Ad

Answer this question