I was creating a game a couple months back, and I was now recently stumbling on how to make a leaderboard. Even though there are tutorials for global leaderboards, there were never tutorials on how to do it with PlayerGUI, so I would like to ask for the help of the developers of devforum, to please help me.
Script:
local DataStoreService = game:GetService("DataStoreService")
local RobuxLeaderboard = DataStoreService:GetOrderedDataStore("RobuxLeaderboard")
game.Players.PlayerAdded:Connect(function(player)
local playerGui = player:WaitForChild("PlayerGui")
local leaderboardScreenGui = playerGui:WaitForChild("LeaderboardScreenGui")
local leaderboardFrame = leaderboardScreenGui:WaitForChild("LBFrame")
local function UpdateLeaderboard()
local success, errorMessage = pcall(function()
local Data = RobuxLeaderboard:GetSortedAsync(false,5)
local RobuxPage = Data:GetCurrentPage()
for Rank, data in ipairs(RobuxPage) do
local username = game.Players:GetNameFromUserIdAsync(tonumber(data.key))
local Robux = data.value
local Name = username
print("1", Name, Robux)
if not leaderboardFrame.Holder:FindFirstChild(Name .. "LBFrame") then
local NewLBFrame = leaderboardFrame.Holder.Sample:Clone()
NewLBFrame.Name = Name .. "LBFrame"
NewLBFrame.NameLabel.Text = Name
NewLBFrame.Visible = true
NewLBFrame.CashLabel.Text = Robux
NewLBFrame.RankLabel.Text = "#"..Rank
NewLBFrame.Position = UDim2.new(0,0,NewLBFrame.Position.Y.Scale + (.08 * #leaderboardFrame.Holder:GetChildren()))
NewLBFrame.Parent = leaderboardFrame.Holder
print("2", "created", Name, Robux)
end
end
end)
if not success then
print(errorMessage)
end
end
while true do
for _, Player in pairs(game.Players:GetPlayers()) do
RobuxLeaderboard:SetAsync(Player.UserId, Player.Stats.Robux.Value)
end
for _, frame in pairs(leaderboardFrame.Holder:GetChildren()) do
frame:Destroy()
end
UpdateLeaderboard()
print("Updated!")
wait(30)
end
end)
Also, if you need a screenshot for where everything is in explorer, I will list it down below:
Thank you again for looking.