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

How to to make working Global Leaderboard system and DataStore?

Asked by 5 years ago

I have this global leaderboard inside my game that displays the top 10 players with the highest amount of currency in the game (Like Tokens). Aswell as having a DataStore system that saves different In-Game values for each player (Like Gems or EXP). Though it is not working for me...

This is my Global Leaderboard script

local CashODS = game:GetService("DataStoreService"):GetOrderedDataStore("ShowingValues")

local function Handler()
    local Success, Err = pcall(function()
        local Data = CashODS:GetSortedAsync(false, 5)
        local CashPage = Data:GetCurrentPage()
        for Rank, Data in ipairs(CashPage) do
            local Name = Data.key
            local Cash = Data.value
            local NewObj = game.ReplicatedStorage:WaitForChild("lbFrame"):Clone()
            NewObj.Player.Text = Name
            NewObj.Cash.Text = Cash
            NewObj.Rank.Text = "#"..Rank
            NewObj.Position = UDim2.new(0, 0, NewObj.Position.Y.Scale + (0.09 * #game.Workspace.GlobalLeaderboard.lbGUI.Holder:GetChildren()), 0)
            NewObj.Parent = game.Workspace.GlobalLeaderboard.lbGUI.Holder
        end
    end)
    if not Success then
        error(Err)
    end
end

while true do
    wait(60)
    for _,Player in pairs(game.Players:GetPlayers()) do
        CashODS:SetAsync(Player.Name, Player.leaderstats.RampTokens.Value)
    end
    for _,v in pairs(game.Workspace.GlobalLeaderboard.lbGUI.Holder:GetChildren()) do
        if v.Name == "lbFrame" then
            v:Destroy()
        end
    end
    Handler()
end


This is my DataStore script

local DS = game:GetService("DataStoreService"):GetDataStore("ShowingValues")

game.Players.PlayerAdded:connect(function(player)
 local key = "key-"..player.userId

    local leaderstats = Instance.new("Folder",player)
    leaderstats.Name = "leaderstats"

 --Folder made for storing player values that don't wanna be seen from other players
    local hiddenstats = Instance.new("Folder", leaderstats)
    hiddenstats.Name = "hiddenstats"

local Level = Instance.new("IntValue", leaderstats)
Level.Name = "Level"
Level.Value = 1

local RampTokens = Instance.new("IntValue", leaderstats) --Currency I want to show on the Global Leaderboard
RampTokens.Name = "RampTokens"
RampTokens.Value = 1000

local EXP = Instance.new("IntValue", hiddenstats)
EXP.Name = "EXP"
EXP.Value = 10

 local save = DS:GetAsync(key)
 if save then
  EXP.Value = save[1]
  Level.Value = save[2]
  EXP.Parent = hiddenstats
 else
  local load = {EXP.Value, Level.Value}
  DS:SetAsync(key,load)
 end
end)

game.Players.PlayerRemoving:connect(function(player)
 local EXP =  player.leaderstats.hiddenstats:FindFirstChild("EXP")
 local Level = player.leaderstats:FindFirstChild("Level")
 EXP.Parent = player.leaderstats
 local key = "key-"..player.userId
 local load = {EXP.Value, Level.Value}
 print("Doing")
 DS:SetAsync(key,load)
end)

How would I change the scripts so that I would work? Any help appreciated :)

0
you're checking for a datastore in one but an ordereddatastore in the other User#22604 1 — 5y

Answer this question