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

Why will this script that makes a button visible only work in studio?

Asked by
Txeer 46
4 years ago
Edited 4 years ago

I am trying to make a game but you need to complete quests to unlock the swords. When you complete a quest it will update a BoolValue and make the button to use the sword visible. You start off with the Starter Sword and the Holy Lightning Blade if you have the VIP gamepass. It is working fine in studio but it won't work in game.

View in studio

View in game

Script that creates the values and stores them once the player leaves:

local datastoreservice = game:GetService("DataStoreService")
local odata = datastoreservice:GetDataStore("show")
local Market = game:GetService("MarketplaceService")


game.Players.PlayerAdded:Connect(function(plr)
    local show = Instance.new("Folder", plr)
    show.Name = "show"

    local HLB = Instance.new("BoolValue", show)
    HLB.Name = "HLB"
    local MB = Instance.new("BoolValue", show)
    MB.Name = "MB"
    local NS = Instance.new("BoolValue", show)
    NS.Name = "NS"
    local SB = Instance.new("BoolValue", show)
    SB.Name = "SB"
    local SS = Instance.new("BoolValue", show)
    SS.Name = "SS"
    local STS = Instance.new("BoolValue", show)
    STS.Name = "STS"
    local WS = Instance.new("BoolValue", show)
    WS.Name = "WS"

    local dMB
    local dNS
    local dSB
    local dSS
    local dSTS
    local dWS

    pcall(function()

        dMB = odata:GetAsync(plr.UserId.."-dMB")
        dNS = odata:GetAsync(plr.UserId.."-dNS")
        dSB = odata:GetAsync(plr.UserId.."-dSB")
        dSS = odata:GetAsync(plr.UserId.."-dSS")
        dSTS = odata:GetAsync(plr.UserId.."-dSTS")
        dWS = odata:GetAsync(plr.UserId.."-dWS")

    end)

    if dMB ~= nil then

        if Market:UserOwnsGamePassAsync(plr.UserId, 7483219) then
            HLB.Value = true

        else

            HLB.Value = false
        end

        MB.Value = dMB
        NS.Value = dNS
        SB.Value = dSB
        SS.Value = dSS
        STS.Value = dSTS
        WS.Value = dWS

    else

        if Market:UserOwnsGamePassAsync(plr.UserId, 7483219) then

            HLB.Value = true

        else

            HLB.Value = false

        end

        MB.Value = false
        NS.Value = false
        SB.Value = false
        SS.Value = false
        STS.Value = true
        WS.Value = false

    end
end)

game.Players.PlayerRemoving:Connect(function(plr)

        local show = plr:FindFirstChild("show")
        local MB = show.MB
        local NS = show.NS
        local SB = show.SB
        local SS = show.SS
        local STS = show.STS
        local WS = show.WS  

        pcall(function()



        odata:SetAsync(plr.UserId.."-dMB", MB.Value)
        odata:SetAsync(plr.UserId.."-dNS", NS.Value)
        odata:SetAsync(plr.UserId.."-dSB", SB.Value)
        odata:SetAsync(plr.UserId.."-dSS", SS.Value)
        odata:SetAsync(plr.UserId.."-dSTS", STS.Value)
        odata:SetAsync(plr.UserId.."-dWS", WS.Value)



    end)
end)

For example: the script that makes the Holy Lightning Blade visible (its parent is the button):

local show = game.Players.LocalPlayer:WaitForChild("show")
local sHLB = show:WaitForChild("HLB")

sHLB.Changed:Connect(function()
    if sHLB.Value == true then
        script.Parent.Visible = true
    end
end)

So any ideas?

Answer this question