How to fix my leadeboards only showing one value?

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve? Keep it simple and clear!

I am attempting to make my leaderboards show global data of every player.

  1. What is the issue? Include screenshots / videos if possible!

The leaderboards only show the -R values and not any other values on the leaderboard and I get no error.

  1. What solutions have you tried so far? Did you look for solutions on the Developer Hub?

I have looked everywhere and cannot find a similar problem. I also made the script print out the values before settting them and it showed the correct amount but still didnt show when I got the values. I would prefer this to be solved fast as i just released my game and having broken leaderboards makes it look bad. Thanks :slight_smile:

here is my code:


local MainODS = game:GetService("DataStoreService"):GetOrderedDataStore("OpenBetaODS-1")

local leaderboards = workspace.leaderboards

local function Abbreviate(number)
	if number <= 1000 then
		return number	
	elseif number >= 1e45 then
		return string.format("%.1fQu", number/1e45)
	elseif number >= 1e42 then
		return string.format("%.1fTr", number/1e42)
	elseif number >= 1e39 then
		return string.format("%.1fD", number/1e39)
	elseif number >= 1e36 then
		return string.format("%.1fU", number/1e36)
	elseif number >= 1e33 then
		return string.format("%.1fDe", number/1e33)
	elseif number >= 1e30 then
		return string.format("%.1fN", number/1e30)
	elseif number >= 1e27 then
		return string.format("%.1fO", number/1e27)
	elseif number >= 1e24 then
		return string.format("%.1fSe", number/1e24)
	elseif number >= 1e21 then
		return string.format("%.1fS", number/1e21)
	elseif number >= 1e18 then
		return string.format("%.1fQt", number/1e18)
	elseif number >= 1e15 then
		return string.format("%.1fQ", number/1e15)
	elseif number >= 1e12 then
		return string.format("%.1fT", number/1e12)
	elseif number >= 1e9 then
		return string.format("%.1fB", number/1e9)
	elseif number >= 1e6 then
		return string.format("%.1fM", number/1e6)
	elseif number >= 1e3 then
		return string.format("%.1fK", number/1e3)
	end
end

local function ConvertToHMS(Seconds)
	local function Format(Int)
		return string.format("%02i", Int)
	end

	local Minutes = (Seconds - Seconds%60)/60
	Seconds = Seconds - Minutes*60
	local Hours = (Minutes - Minutes%60)/60
	Minutes = Minutes - Hours*60
	return Format(Hours)..":"..Format(Minutes)..":"..Format(Seconds)
end


local function UpdateLeaderboards()
	local pages = MainODS:GetSortedAsync(false, 35)
	local data = pages:GetCurrentPage()
	
	local rankE = 0
	local rankT = 0
	local rankR = 0
	
	for _,v in pairs(leaderboards:GetChildren()) do
		for _,v in pairs(v.UI.Holder:GetChildren()) do
			if v:IsA("Frame") then
				v:Destroy()
			end
		end
	end
	
	if data then
		for _,v in pairs(data) do
			local splitString = string.split(v.key, "-")
			if splitString[2] == "E" then
				
				rankE = rankE + 1
			
				local clone = game.ServerStorage.LeaderboardTemplate:Clone()
				clone.Parent = leaderboards.EggsHatched.UI.Holder
				clone.Amount.Text = Abbreviate(v.value)
				clone.Rank.Text = "#"..rankE
				
				local Content, isReady = game.Players:GetUserThumbnailAsync(splitString[1], Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
				clone:WaitForChild("PlayerIcon").Image = Content
			elseif splitString[2] == "T" then
				rankT = rankT + 1
				
				local clone = game.ServerStorage.LeaderboardTemplate:Clone()
				clone.Parent = leaderboards.TimePlayed.UI.Holder
				clone.Amount.Text = ConvertToHMS(v.value)
				clone.Rank.Text = "#"..rankT
				
				local Content, isReady = game.Players:GetUserThumbnailAsync(splitString[1], Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
				clone:WaitForChild("PlayerIcon").Image = Content
			elseif splitString[2] == "R" then
				rankR = rankR + 1
				
				local clone = game.ServerStorage.LeaderboardTemplate:Clone()
				clone.Parent = leaderboards.MostRebirths.UI.Holder
				clone.Amount.Text = Abbreviate(v.value)
				clone.Rank.Text = "#"..rankR
				
				local Content, isReady = game.Players:GetUserThumbnailAsync(splitString[1], Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
				clone:WaitForChild("PlayerIcon").Image = Content
			end
		end
	end
end


UpdateLeaderboards()
while wait(30) do
	for _,player in pairs(game.Players:GetPlayers()) do
		if player then
			MainODS:SetAsync(player.UserId.."-E", player:WaitForChild("EggsOpened").Value)
			wait(2)
			MainODS:SetAsync(player.UserId.."-T", player:WaitForChild("TimePlayed").Value)
			wait(2)
			MainODS:SetAsync(player.UserId.."-R", player:WaitForChild("TotalRebirths").Value)
			wait(2)
			UpdateLeaderboards()			
		end
	end
end
1 Like