Im making a level-based game in which u can speedrun those levels and save them to a global leaderboard. However, the script I’m using right now works only for 1 level’s leaderboard and I don’t want to create 30 different scripts for 30 levels but im not sure how I can modify this one script to handle every leaderboard. Here is the code:
local datastoreservice = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local savetime = game.ReplicatedStorage.SaveTime
local gltimes = {}
local SpeedrunTimes = datastoreservice:GetOrderedDataStore("speedruntimes")
savetime.OnServerEvent:Connect(function(player, save, level)
if save == true then
gltimes[player.UserId] = player.playertimevalue.Value
player.playertimevalue:Destroy()
else
player.playertimevalue:Destroy()
end
end)
local function update()
local success, err = pcall(function()
local Data = SpeedrunTimes:GetSortedAsync(true, 10)
local TimesPage = Data:GetCurrentPage()
for rank, data in ipairs(TimesPage) do
local username = Players:GetNameFromUserIdAsync(tonumber(data.key))
local name = username
local Time = data.value
local onLB = false
for i, v in pairs(game.Workspace.Leaderboards.Leaderboard1.SurfaceGui.ScrollingFrame:GetChildren()) do
if v.ClassName == "Frame" then
if v.Player.Text == name then
onLB = true
break
end
end
end
if Time and onLB == false then
local newLB = game.ReplicatedStorage:WaitForChild("Sample"):Clone()
newLB.Player.Text = name
newLB.Time.Text = Time/1000
newLB.Position = UDim2.new(0,0,.5,0)
newLB.Parent = game.Workspace.Leaderboards.Leaderboard1.SurfaceGui.ScrollingFrame
end
end
end)
if success then
print("success")
else
error(err)
end
end
while true do
for _, player in pairs(game.Players:GetPlayers()) do
if gltimes[player.UserId] ~= nil then
SpeedrunTimes:SetAsync(player.UserId, gltimes[player.UserId]*1000)
end
end
for _, frame in pairs(game.Workspace.Leaderboards.Leaderboard1.SurfaceGui.ScrollingFrame:GetChildren()) do
if frame.ClassName == "Frame" and frame.Player.Text ~= "Player" then
frame:Destroy()
end
end
update()
wait(20)
end
So assuming I have the level in which the player speedran and the time they got is there any way to modify this script to handle every leaderboard?