So should I just return to my old script?
This happens when use Studio local server test.
Just do print(variable_that_has_player_name)
?
Yes, also your issue is that in a local test your userId will be -1 I’ll fix your code:
local dss = game:GetService("DataStoreService")
local coinsLead = dss:GetOrderedDataStore("coinsLead")
local holder = workspace:WaitForChild("Map"):WaitForChild("Town Square"):WaitForChild("Leaderboards"):WaitForChild("Leaderboard1"):WaitForChild("Backdrop"):WaitForChild("SurfaceGui"):WaitForChild("Holder")
local function updateLeaderboard()
local success, err = pcall(function()
local data = coinsLead:GetSortedAsync(false, 5)
local coinsPage = data:GetCurrentPage()
for rank, data in pairs(coinsPage) do
print(data.key)
if data.key > 0 then
local name = game.Players:GetNameFromUserIdAsync(data.key)
local coins = data.value
local isOnLeaderboard = false
for i, v in pairs(holder:GetChildren()) do
if v.Player.Text == name then
isOnLeaderboard = true
break
end
end
if coins and isOnLeaderboard == false then
local newLbFrame = game.ReplicatedStorage:WaitForChild("LeaderboardFrame"):Clone()
newLbFrame.PlayerTL.Text = name
newLbFrame.CoinsTL.Text = coins
newLbFrame.RankTL.Text = "#" .. rank
newLbFrame.Position = UDim2.new(0,0,newLbFrame.Position.Y.Scale + (.08 * #holder:GetChildren()), 0)
newLbFrame.Parent = holder
end
end
end
end)
if not success then
warn(err)
end
end
while true do
wait(5)
for _, player in pairs(game.Players:GetPlayers()) do
coinsLead:SetAsync(player.UserId, player.leaderstats.Coins.Value)
end
for _, frame in pairs(holder:GetChildren()) do
frame:Destroy()
end
updateLeaderboard()
print("Leaderboard updated")
wait(120)
end
When I first used it it made an error saying I couldn’t compare a string with a number so I fixed it with tonumber() but then I ran into another error but I can’t see where it is coming from.
"Player is not a valid member of Frame “Workspace.Map.Town Square.Leaderboards.Leaderboard1.Backdrop.SurfaceGui.Holder.LeaderboardFrame”
Code currently:
local dss = game:GetService("DataStoreService")
local coinsLead = dss:GetOrderedDataStore("coinsLead")
local holder = workspace:WaitForChild("Map"):WaitForChild("Town Square"):WaitForChild("Leaderboards"):WaitForChild("Leaderboard1"):WaitForChild("Backdrop"):WaitForChild("SurfaceGui"):WaitForChild("Holder")
local function updateLeaderboard()
local success, err = pcall(function()
local data = coinsLead:GetSortedAsync(false, 5)
local coinsPage = data:GetCurrentPage()
for rank, data in pairs(coinsPage) do
if tonumber(data.key) > 0 then
local name = game.Players:GetNameFromUserIdAsync(data.key)
local coins = data.value
local isOnLeaderboard = false
for i, v in pairs(holder:GetChildren()) do
if v.Player.Text == name then
isOnLeaderboard = true
break
end
end
if coins and isOnLeaderboard == false then
local newLbFrame = game.ReplicatedStorage:WaitForChild("LeaderboardFrame"):Clone()
newLbFrame.PlayerTL.Text = name
newLbFrame.CoinsTL.Text = coins
newLbFrame.RankTL.Text = "#" .. rank
newLbFrame.Position = UDim2.new(0,0,newLbFrame.Position.Y.Scale + (.08 * #holder:GetChildren()), 0)
newLbFrame.Parent = holder
end
end
end
end)
if not success then
warn(err)
end
end
while true do
wait(5)
for _, player in pairs(game.Players:GetPlayers()) do
coinsLead:SetAsync(player.UserId, player.leaderstats.Coins.Value)
end
for _, frame in pairs(holder:GetChildren()) do
frame:Destroy()
end
updateLeaderboard()
print("Leaderboard updated")
wait(120)
end
The TextLabel ‘Player’ likely doesn’t exist.
How would I fix this? I followed a tutorial on youtube so I don’t have full understanding of this.
Should fix the issue:
local dss = game:GetService("DataStoreService")
local coinsLead = dss:GetOrderedDataStore("coinsLead")
local holder = workspace:WaitForChild("Map"):WaitForChild("Town Square"):WaitForChild("Leaderboards"):WaitForChild("Leaderboard1"):WaitForChild("Backdrop"):WaitForChild("SurfaceGui"):WaitForChild("Holder")
local function updateLeaderboard()
local success, err = pcall(function()
local data = coinsLead:GetSortedAsync(false, 5)
local coinsPage = data:GetCurrentPage()
for rank, data in pairs(coinsPage) do
if tonumber(data.key) > 0 then
local name = game.Players:GetNameFromUserIdAsync(data.key)
local coins = data.value
local isOnLeaderboard = false
for i, v in pairs(holder:GetChildren()) do
if v.PlayerTL.Text == name then
isOnLeaderboard = true
break
end
end
if coins and isOnLeaderboard == false then
local newLbFrame = game.ReplicatedStorage:WaitForChild("LeaderboardFrame"):Clone()
newLbFrame.PlayerTL.Text = name
newLbFrame.CoinsTL.Text = coins
newLbFrame.RankTL.Text = "#" .. rank
newLbFrame.Position = UDim2.new(0,0,newLbFrame.Position.Y.Scale + (.08 * #holder:GetChildren()), 0)
newLbFrame.Parent = holder
end
end
end
end)
if not success then
warn(err)
end
end
while true do
wait(5)
for _, player in pairs(game.Players:GetPlayers()) do
coinsLead:SetAsync(player.UserId, player.leaderstats.Coins.Value)
end
for _, frame in pairs(holder:GetChildren()) do
frame:Destroy()
end
updateLeaderboard()
print("Leaderboard updated")
wait(120)
end
Oh just noticed. I’m not sure if this is due to previous issues when testing but my friend is in #3 when there isn’t any #2. There hasn’t been anybody who else who played the game besides me and my friend.
local dss = game:GetService("DataStoreService")
local coinsLead = dss:GetOrderedDataStore("coinsLead")
local holder = workspace:WaitForChild("Map"):WaitForChild("Town Square"):WaitForChild("Leaderboards"):WaitForChild("Leaderboard1"):WaitForChild("Backdrop"):WaitForChild("SurfaceGui"):WaitForChild("Holder")
local function updateLeaderboard()
local success, err = pcall(function()
local data = coinsLead:GetSortedAsync(false, 5)
local coinsPage = data:GetCurrentPage()
local rank = 0
for _, data in pairs(coinsPage) do
if tonumber(data.key) > 0 then
rank += 1
local name = game.Players:GetNameFromUserIdAsync(data.key)
local coins = data.value
local isOnLeaderboard = false
for i, v in pairs(holder:GetChildren()) do
if v.PlayerTL.Text == name then
isOnLeaderboard = true
break
end
end
if coins and isOnLeaderboard == false then
local newLbFrame = game.ReplicatedStorage:WaitForChild("LeaderboardFrame"):Clone()
newLbFrame.PlayerTL.Text = name
newLbFrame.CoinsTL.Text = coins
newLbFrame.RankTL.Text = "#" .. rank
newLbFrame.Position = UDim2.new(0,0,newLbFrame.Position.Y.Scale + (.08 * #holder:GetChildren()), 0)
newLbFrame.Parent = holder
end
end
end
end)
if not success then
warn(err)
end
end
while true do
wait(5)
for _, player in pairs(game.Players:GetPlayers()) do
coinsLead:SetAsync(player.UserId, player.leaderstats.Coins.Value)
end
for _, frame in pairs(holder:GetChildren()) do
frame:Destroy()
end
updateLeaderboard()
print("Leaderboard updated")
wait(120)
end
you saved my whole problem thanks alot