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

Why does it return nil from ordereddatastore eventhough the value exists?

Asked by
Yuuwa0519 197
4 years ago
Edited 4 years ago

In my game, I have this global leaderboard system. The Part setting the value works fine including saving and getting the data, however, always throws a nil when it comes to update() function. I tried to debug but I still can`t figure out. Any Helps will be great. Thankyou.

local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")

local GlobalWins = DataStoreService:GetOrderedDataStore("playerWins")


local Pages = GlobalWins:GetSortedAsync(false, 10)
local Data = Pages:GetCurrentPage()


local leaderScreen1 = workspace.globalLeaderBoard.screen.SurfaceGui1
local template = leaderScreen1.template
local leaderScreen2 = workspace.globalLeaderBoard.screen.SurfaceGui2
local template2 = leaderScreen1.template

local function giveFolders(player)
    print("starting winGive")
    if player then
        local dataFolder = player:WaitForChild(player.Name.."dataFolder")
        local winValue = Instance.new("NumberValue",dataFolder)
        winValue.Name = "Wins"
        winValue.Parent = dataFolder
        local winDataRetrive
        local success, result = pcall(function()
            winDataRetrive =  GlobalWins:GetAsync(player.UserId)
        end)
        if success then
            winValue.Value = tonumber(winDataRetrive) --returns correct value
            print(tonumber(winDataRetrive)) -- nvm. This also returned the correct Value.
        else
            warn(result)
        end
    end
end
local function saveData(player)
    if player then
        local dataFolder = player:FindFirstChild(player.Name.."dataFolder")
        local winValue = dataFolder:FindFirstChild("Wins")
        if winValue then
            local success, result = pcall(function()
                return GlobalWins:UpdateAsync(player.UserId,function()
                    return winValue.Value
                end)
            end)
            if success then
                print("Saved Value")
                print(winValue.Value)
            else
                warn(result)
            end
        end
    end
end

game.Players.PlayerAdded:Connect(function(plr)
    print("Detected")
    if plr then
        giveFolders(plr)
    end
end)
game.Players.PlayerRemoving:Connect(function(plr)
    if plr then
        saveData(plr)
    end
end)

local function update()
    for i, v in pairs(leaderScreen1.MainFrame:GetChildren()) do
        if v:IsA("Frame") then
            v:Destroy()
        end
        for i, v in pairs(leaderScreen2.MainFrame:GetChildren()) do
            if v:IsA("Frame") then
                v:Destroy()
            end
        end
        for i,v in pairs(Data) do
            local username = Players:GetNameFromUserIdAsync(v.key)
            local value = v.Value
            local newTemplate = template:Clone()
            newTemplate.Name = username
            newTemplate.frameName.Text = tostring(username)
            newTemplate.frameValue.Text = tostring(value)
            newTemplate.Visible = true
            newTemplate.Parent = leaderScreen1.MainFrame
        end
        for i,v in pairs(Data) do
            local username = Players:GetNameFromUserIdAsync(v.key)
            local value = tonumber(v.Value)
            print(tostring(value))
            local newTemplate = template2:Clone()
            newTemplate.Name = username
            newTemplate.frameName.Text = tostring(username) 
            newTemplate.frameValue.Text = tostring(value)
            newTemplate.Visible = true
            newTemplate.Parent = leaderScreen2.MainFrame
        end
        wait(60*3)
    end
end

update()

spawn(function()
    while true do
        update()
    end     
end)

By the way, the actual script where it updates the point is in different place(in same game) and that also works totally fine.

0
Alternatively, I used the method of getting value from GetAsync(v.key), which somehow works. However, I am still looking for the solution to this script. Thanks for all your help Yuuwa0519 197 — 4y

Answer this question