Leaderboard - Error

I made a leaderboard a while ago but now I’m getting errors with it and I can not find how to fix this problem this is the error I’m getting:
image

This is where the leaderboard and datastore scripts are and also the model “selected items”:
image

This error only happens when you make a new place and a few people did join the server or the server is older idk why this only happens then but when the server is new it doesn’t error once so I don’t know why this happens and I tried to fix it multiple times but this is the script that errors and it’s the script that controls the one of the leaderboards

local DataStoreService = game:GetService("DataStoreService")
local LevelLeaderBoard = DataStoreService:GetOrderedDataStore("Lvl_Data")

local function Update_Board1 ()
	local Success, MsgOrLevelPage = pcall(function()
		local ascending = false
		local numberToShow = 100
		local min = 1
		local max = 100000

		local Data = LevelLeaderBoard:GetSortedAsync(ascending, numberToShow, min, max)
		return Data:GetCurrentPage()
	end)

	if not Success then
		warn(MsgOrLevelPage)

	else
		for rank, Level in ipairs(MsgOrLevelPage) do
			local UserName = game.Players:GetNameFromUserIdAsync(tonumber(Level.key))
			local PName = UserName
			local Level = Level.value
			local isOnLeaderBoard = false

			for i, v in pairs(game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
				if v.PlayerName.Text == PName then
					isOnLeaderBoard = true
					v.Level.Text = Level
					v.Number.Text = rank .. '.'
					v.Position = UDim2.new(0, 0, v.Position.Y.Offset + (30 * #game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
					continue
				end
			end

			if Level > 0 and isOnLeaderBoard == false then
				local NewLbFrame = game.ReplicatedStorage:WaitForChild("LevelLeaderBoard"):Clone()
				NewLbFrame.PlayerName.Text = PName
				NewLbFrame.Level.Text = Level
				NewLbFrame.Number.Text = rank.."."
				NewLbFrame.Position = UDim2.new(0, 0, NewLbFrame.Position.Y.Scale + (0.011 * #game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
				if rank == 1 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(255, 238, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(255, 238, 0)
				elseif rank == 2 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(145, 145, 145)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(145, 145, 145)
				elseif rank == 3 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(113, 52, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(113, 52, 0)
				end
				NewLbFrame.Parent = game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder
			end
		end
	end
end

local function Update_Board2 ()
	local Success, MsgOrLevelPage = pcall(function()
		local ascending = false
		local numberToShow = 100
		local min = 1
		local max = 100000

		local Data = LevelLeaderBoard:GetSortedAsync(ascending, numberToShow, min, max)
		return Data:GetCurrentPage()
	end)

	if not Success then
		warn(MsgOrLevelPage)

	else
		for rank, Level in ipairs(MsgOrLevelPage) do
			local UserName = game.Players:GetNameFromUserIdAsync(tonumber(Level.key))
			local PName = UserName
			local Level = Level.value
			local isOnLeaderBoard = false

			for i, v in pairs(game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
				if v.PlayerName.Text == PName then
					isOnLeaderBoard = true
					v.Level.Text = Level
					v.Number.Text = rank .. '.'
					v.Position = UDim2.new(0, 0, v.Position.Y.Offset + (30 * #game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
					continue
				end
			end

			if Level > 0 and isOnLeaderBoard == false then
				local NewLbFrame = game.ReplicatedStorage:WaitForChild("LevelLeaderBoard"):Clone()
				NewLbFrame.PlayerName.Text = PName
				NewLbFrame.Level.Text = Level
				NewLbFrame.Number.Text = rank.."."
				NewLbFrame.Position = UDim2.new(0, 0, NewLbFrame.Position.Y.Scale + (0.011 * #game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
				if rank == 1 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(255, 238, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(255, 238, 0)
				elseif rank == 2 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(145, 145, 145)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(145, 145, 145)
				elseif rank == 3 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(113, 52, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(113, 52, 0)
				end
				NewLbFrame.Parent = game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder
			end
		end
	end
end

wait(5)
Update_Board1()
Update_Board2()

while true do
	wait(5)
	for _, player in pairs(game.Players:GetPlayers()) do
		LevelLeaderBoard:SetAsync(player.UserId, player.leaderstats.Lvl.Value)
	end

	for _, frame in pairs(game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
		frame:Destroy()
	end
	for _, frame in pairs(game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
		frame:Destroy()
	end

	Update_Board1()
	Update_Board2()

	wait(60)
end

If you could help me I would be really happy cause I can’t find the problem.

And yes this script controls 2 leaderboards at the same time so I needed to use less scripts in my game that’s why there are 2 functions.

You must be passing an incorrect userId (or malformed data) into the function.

1 Like

Idk how I would have done that the only thing I did do is give my self and other people an higher level in the game to acces everything in the game so we could test it.

So if what you said would be true how can I fix this cause I have no idea cause I’m still learning all this stuff and I don’t do a lot with Data and it’s hard for me.

Try printing “Level.key” the value which is being passed to the function.

1 Like

I’m getting this when I print it and this is also how i’ve done it.


Yeah, do you know why it’s -1?

No I don’t sorry I don’t really do a lot on scripting anymore.

You could skip it and see what happens with the next key.

local DataStoreService = game:GetService("DataStoreService")
local LevelLeaderBoard = DataStoreService:GetOrderedDataStore("Lvl_Data")

local function Update_Board1 ()
	local Success, MsgOrLevelPage = pcall(function()
		local ascending = false
		local numberToShow = 100
		local min = 1
		local max = 100000

		local Data = LevelLeaderBoard:GetSortedAsync(ascending, numberToShow, min, max)
		return Data:GetCurrentPage()
	end)

	if not Success then
		warn(MsgOrLevelPage)

	else
		for rank, Level in ipairs(MsgOrLevelPage) do
			if Level.key <= 0 then
				return
			end
			local UserName = game.Players:GetNameFromUserIdAsync(tonumber(Level.key))
			local PName = UserName
			local Level = Level.value
			local isOnLeaderBoard = false

			for i, v in pairs(game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
				if v.PlayerName.Text == PName then
					isOnLeaderBoard = true
					v.Level.Text = Level
					v.Number.Text = rank .. '.'
					v.Position = UDim2.new(0, 0, v.Position.Y.Offset + (30 * #game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
					continue
				end
			end

			if Level > 0 and isOnLeaderBoard == false then
				local NewLbFrame = game.ReplicatedStorage:WaitForChild("LevelLeaderBoard"):Clone()
				NewLbFrame.PlayerName.Text = PName
				NewLbFrame.Level.Text = Level
				NewLbFrame.Number.Text = rank.."."
				NewLbFrame.Position = UDim2.new(0, 0, NewLbFrame.Position.Y.Scale + (0.011 * #game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
				if rank == 1 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(255, 238, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(255, 238, 0)
				elseif rank == 2 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(145, 145, 145)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(145, 145, 145)
				elseif rank == 3 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(113, 52, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(113, 52, 0)
				end
				NewLbFrame.Parent = game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder
			end
		end
	end
end

local function Update_Board2 ()
	local Success, MsgOrLevelPage = pcall(function()
		local ascending = false
		local numberToShow = 100
		local min = 1
		local max = 100000

		local Data = LevelLeaderBoard:GetSortedAsync(ascending, numberToShow, min, max)
		return Data:GetCurrentPage()
	end)

	if not Success then
		warn(MsgOrLevelPage)

	else
		for rank, Level in ipairs(MsgOrLevelPage) do
			if Level.key <= 0 then
				return
			end
			local UserName = game.Players:GetNameFromUserIdAsync(tonumber(Level.key))
			local PName = UserName
			local Level = Level.value
			local isOnLeaderBoard = false

			for i, v in pairs(game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
				if v.PlayerName.Text == PName then
					isOnLeaderBoard = true
					v.Level.Text = Level
					v.Number.Text = rank .. '.'
					v.Position = UDim2.new(0, 0, v.Position.Y.Offset + (30 * #game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
					continue
				end
			end

			if Level > 0 and isOnLeaderBoard == false then
				local NewLbFrame = game.ReplicatedStorage:WaitForChild("LevelLeaderBoard"):Clone()
				NewLbFrame.PlayerName.Text = PName
				NewLbFrame.Level.Text = Level
				NewLbFrame.Number.Text = rank.."."
				NewLbFrame.Position = UDim2.new(0, 0, NewLbFrame.Position.Y.Scale + (0.011 * #game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
				if rank == 1 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(255, 238, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(255, 238, 0)
				elseif rank == 2 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(145, 145, 145)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(145, 145, 145)
				elseif rank == 3 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(113, 52, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(113, 52, 0)
				end
				NewLbFrame.Parent = game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder
			end
		end
	end
end

wait(5)
Update_Board1()
Update_Board2()

while true do
	wait(5)
	for _, player in pairs(game.Players:GetPlayers()) do
		LevelLeaderBoard:SetAsync(player.UserId, player.leaderstats.Lvl.Value)
	end

	for _, frame in pairs(game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
		frame:Destroy()
	end
	for _, frame in pairs(game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
		frame:Destroy()
	end

	Update_Board1()
	Update_Board2()

	wait(60)
end

Also just bare in mind that the value of the variable “Level” is being overridden inside the for loop itself.

The UserId is from clients which are created when doing a multiple player test.
image

image

They got saved as keys and when he’s trying to get their username it errors due to the UserId being invalid on the actual website.

Ye I did test it multiple times in studio with players but is there still a way to fix this?

When I had this problem I just made an If statement which checks if the UserId is above 0 and it seems to work pretty well.

So all I need to do is to check the key so “Level.key” and then check if its’ above 0 and if it is then it should do all the other stuff like it did before and if it is below 0 then it should do nothing am I right?

That was the solution I added into the above code.

if Level.key <= 0 then
	return
end

Your code didn’t work I got an error where you did put the “if Level.key <= 0 then” it did error on that part
image

Oh, wrap a tonumber() function around Level.key in both places. In fact, I’ll do it, one moment:

local DataStoreService = game:GetService("DataStoreService")
local LevelLeaderBoard = DataStoreService:GetOrderedDataStore("Lvl_Data")

local function Update_Board1 ()
	local Success, MsgOrLevelPage = pcall(function()
		local ascending = false
		local numberToShow = 100
		local min = 1
		local max = 100000

		local Data = LevelLeaderBoard:GetSortedAsync(ascending, numberToShow, min, max)
		return Data:GetCurrentPage()
	end)

	if not Success then
		warn(MsgOrLevelPage)

	else
		for rank, Level in ipairs(MsgOrLevelPage) do
			if tonumber(Level.key) <= 0 then
				return
			end
			local UserName = game.Players:GetNameFromUserIdAsync(tonumber(Level.key))
			local PName = UserName
			local Level = Level.value
			local isOnLeaderBoard = false

			for i, v in pairs(game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
				if v.PlayerName.Text == PName then
					isOnLeaderBoard = true
					v.Level.Text = Level
					v.Number.Text = rank .. '.'
					v.Position = UDim2.new(0, 0, v.Position.Y.Offset + (30 * #game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
					continue
				end
			end

			if Level > 0 and isOnLeaderBoard == false then
				local NewLbFrame = game.ReplicatedStorage:WaitForChild("LevelLeaderBoard"):Clone()
				NewLbFrame.PlayerName.Text = PName
				NewLbFrame.Level.Text = Level
				NewLbFrame.Number.Text = rank.."."
				NewLbFrame.Position = UDim2.new(0, 0, NewLbFrame.Position.Y.Scale + (0.011 * #game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
				if rank == 1 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(255, 238, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(255, 238, 0)
				elseif rank == 2 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(145, 145, 145)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(145, 145, 145)
				elseif rank == 3 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(113, 52, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(113, 52, 0)
				end
				NewLbFrame.Parent = game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder
			end
		end
	end
end

local function Update_Board2 ()
	local Success, MsgOrLevelPage = pcall(function()
		local ascending = false
		local numberToShow = 100
		local min = 1
		local max = 100000

		local Data = LevelLeaderBoard:GetSortedAsync(ascending, numberToShow, min, max)
		return Data:GetCurrentPage()
	end)

	if not Success then
		warn(MsgOrLevelPage)

	else
		for rank, Level in ipairs(MsgOrLevelPage) do
			if tonumber(Level.key) <= 0 then
				return
			end
			local UserName = game.Players:GetNameFromUserIdAsync(tonumber(Level.key))
			local PName = UserName
			local Level = Level.value
			local isOnLeaderBoard = false

			for i, v in pairs(game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
				if v.PlayerName.Text == PName then
					isOnLeaderBoard = true
					v.Level.Text = Level
					v.Number.Text = rank .. '.'
					v.Position = UDim2.new(0, 0, v.Position.Y.Offset + (30 * #game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
					continue
				end
			end

			if Level > 0 and isOnLeaderBoard == false then
				local NewLbFrame = game.ReplicatedStorage:WaitForChild("LevelLeaderBoard"):Clone()
				NewLbFrame.PlayerName.Text = PName
				NewLbFrame.Level.Text = Level
				NewLbFrame.Number.Text = rank.."."
				NewLbFrame.Position = UDim2.new(0, 0, NewLbFrame.Position.Y.Scale + (0.011 * #game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
				if rank == 1 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(255, 238, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(255, 238, 0)
				elseif rank == 2 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(145, 145, 145)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(145, 145, 145)
				elseif rank == 3 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(113, 52, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(113, 52, 0)
				end
				NewLbFrame.Parent = game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder
			end
		end
	end
end

wait(5)
Update_Board1()
Update_Board2()

while true do
	wait(5)
	for _, player in pairs(game.Players:GetPlayers()) do
		LevelLeaderBoard:SetAsync(player.UserId, player.leaderstats.Lvl.Value)
	end

	for _, frame in pairs(game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
		frame:Destroy()
	end
	for _, frame in pairs(game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
		frame:Destroy()
	end

	Update_Board1()
	Update_Board2()

	wait(60)
end
1 Like

For me when I tested return completely stopped the whole loop.
Now testing in studio I can confirm it ends the loop because it only gets as far as the return.
Here I’m checking for the name “Part2”. There’s 19 parts but it skips them because of the return.
This caused me a headache when I first tried making my leaderboard and used return.
image

return will stop the entire function, yes.

local DataStoreService = game:GetService("DataStoreService")
local LevelLeaderBoard = DataStoreService:GetOrderedDataStore("Lvl_Data")

local function Update_Board1 ()
	local Success, MsgOrLevelPage = pcall(function()
		local ascending = false
		local numberToShow = 100
		local min = 1
		local max = 100000

		local Data = LevelLeaderBoard:GetSortedAsync(ascending, numberToShow, min, max)
		return Data:GetCurrentPage()
	end)

	if not Success then
		warn(MsgOrLevelPage)

	else
		for rank, Level in ipairs(MsgOrLevelPage) do
			if tonumber(Level.key) >= 1 then
				local UserName = game.Players:GetNameFromUserIdAsync(tonumber(Level.key))
				local PName = UserName
				local Level = Level.value
				local isOnLeaderBoard = false

				for i, v in pairs(game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
					if v.PlayerName.Text == PName then
						isOnLeaderBoard = true
						v.Level.Text = Level
						v.Number.Text = rank .. '.'
						v.Position = UDim2.new(0, 0, v.Position.Y.Offset + (30 * #game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
						continue
					end
				end
			end

			if Level > 0 and isOnLeaderBoard == false then
				local NewLbFrame = game.ReplicatedStorage:WaitForChild("LevelLeaderBoard"):Clone()
				NewLbFrame.PlayerName.Text = PName
				NewLbFrame.Level.Text = Level
				NewLbFrame.Number.Text = rank.."."
				NewLbFrame.Position = UDim2.new(0, 0, NewLbFrame.Position.Y.Scale + (0.011 * #game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
				if rank == 1 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(255, 238, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(255, 238, 0)
				elseif rank == 2 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(145, 145, 145)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(145, 145, 145)
				elseif rank == 3 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(113, 52, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(113, 52, 0)
				end
				NewLbFrame.Parent = game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder
			end
		end
	end
end

local function Update_Board2 ()
	local Success, MsgOrLevelPage = pcall(function()
		local ascending = false
		local numberToShow = 100
		local min = 1
		local max = 100000

		local Data = LevelLeaderBoard:GetSortedAsync(ascending, numberToShow, min, max)
		return Data:GetCurrentPage()
	end)

	if not Success then
		warn(MsgOrLevelPage)

	else
		for rank, Level in ipairs(MsgOrLevelPage) do
			if tonumber(Level.key) >= 1 then
				local UserName = game.Players:GetNameFromUserIdAsync(tonumber(Level.key))
				local PName = UserName
				local Level = Level.value
				local isOnLeaderBoard = false

				for i, v in pairs(game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
					if v.PlayerName.Text == PName then
						isOnLeaderBoard = true
						v.Level.Text = Level
						v.Number.Text = rank .. '.'
						v.Position = UDim2.new(0, 0, v.Position.Y.Offset + (30 * #game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
						continue
					end
				end
			end

			if Level > 0 and isOnLeaderBoard == false then
				local NewLbFrame = game.ReplicatedStorage:WaitForChild("LevelLeaderBoard"):Clone()
				NewLbFrame.PlayerName.Text = PName
				NewLbFrame.Level.Text = Level
				NewLbFrame.Number.Text = rank.."."
				NewLbFrame.Position = UDim2.new(0, 0, NewLbFrame.Position.Y.Scale + (0.011 * #game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()), 0)
				if rank == 1 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(255, 238, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(255, 238, 0)
				elseif rank == 2 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(145, 145, 145)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(145, 145, 145)
				elseif rank == 3 then
					NewLbFrame.PlayerName.TextColor3 = Color3.fromRGB(113, 52, 0)
					NewLbFrame.Number.TextColor3 = Color3.fromRGB(113, 52, 0)
				end
				NewLbFrame.Parent = game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder
			end
		end
	end
end

wait(5)
Update_Board1()
Update_Board2()

while true do
	wait(5)
	for _, player in pairs(game.Players:GetPlayers()) do
		LevelLeaderBoard:SetAsync(player.UserId, player.leaderstats.Lvl.Value)
	end

	for _, frame in pairs(game.Workspace.Volcano_Island.Will_Never_Unload.leaderboards["LeaderBoard - Level"].LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
		frame:Destroy()
	end
	for _, frame in pairs(game.Workspace.Volcanic_Club.Will_Never_Unload.LeaderBoards.Level_LeaderBoard.LeaderBoard.Frame.MainFrame.Holder:GetChildren()) do
		frame:Destroy()
	end

	Update_Board1()
	Update_Board2()

	wait(60)
end

Here, I’ve changed the logic. The body of the loop is only ran if the ID is greater than or equal to 1.

1 Like

Thank you this worked I didn’t know how to fix this so both of you thank you for helping me!


Now I also understand how it worked so also thank you for that.

1 Like