I made a leaderstat that shows when people joined and it does update but it doesn’t add the people anymore:
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local FirstJoinDS = DataStoreService:GetOrderedDataStore("FirstJoinLeaderboard")
local leaderboard = game.Workspace.LeaderboardSince -- Ensure this part is set up correctly
-- Save the first join time if not already saved
Players.PlayerAdded:Connect(function(player)
local success, data = pcall(function()
return FirstJoinDS:GetAsync(player.UserId)
end)
if success and data == nil then
-- Save current time as their first join
pcall(function()
FirstJoinDS:SetAsync(player.UserId, os.time())
end)
print(player.Name .. " first join time saved.")
end
end)
-- Function to update leaderboard
local function updateLeaderboards()
local success, err = pcall(function()
local data = FirstJoinDS:GetSortedAsync(true, 10) -- true = oldest players first
local page = data:GetCurrentPage()
print("Updating leaderboard...")
for rank, entry in ipairs(page) do
local userId = tonumber(entry.key)
local joinTimestamp = entry.value
local userName = Players:GetNameFromUserIdAsync(userId)
local isOnLeaderboard = false
-- Check if already on leaderboard
for _, frame in pairs(leaderboard.SurfaceGui.Holder:GetChildren()) do
if frame:IsA("Frame") and frame.Player.Text == userName then
isOnLeaderboard = true
break
end
end
-- If not already added, add the player
if not isOnLeaderboard then
local newFrame = game.ReplicatedStorage.LeaderboardFrame:Clone()
-- Player Name
newFrame.Player.Text = userName
newFrame.Player.Position = UDim2.new(0, 400, 0, 0) -- Adjusting position
newFrame.Player.TextScaled = true
newFrame.Player.TextWrapped = true
newFrame.Player.TextXAlignment = Enum.TextXAlignment.Left
-- **HIDE Avatar Completely in Script**
newFrame.Player.avatar.Visible = false -- Hides the avatar image
-- Date formatting: Shorter format for date
newFrame.Stat.Text = os.date("%d.%m.%y", joinTimestamp)
newFrame.Stat.TextScaled = true
newFrame.Stat.TextWrapped = true
newFrame.Stat.TextXAlignment = Enum.TextXAlignment.Left
newFrame.Stat.Position = UDim2.new(0, 415, 0, 0) -- Adjust date position
-- Rank
newFrame.Rank.Text = "#" .. rank
newFrame.Rank.Position = UDim2.new(0, 50, 0, 0) -- Adjust position of rank
newFrame.Rank.TextScaled = true
newFrame.Rank.TextWrapped = true
newFrame.Rank.TextXAlignment = Enum.TextXAlignment.Left
-- Optional: Color coding top 3
if rank == 1 then
newFrame.Player.TextColor3 = Color3.new(1, 0.705882, 0.227451)
elseif rank == 2 then
newFrame.Player.TextColor3 = Color3.new(0.721294, 0.721279, 0.721279)
elseif rank == 3 then
newFrame.Player.TextColor3 = Color3.new(0.736507, 0.487678, 0.259174)
end
-- Parent the frame
newFrame.Parent = leaderboard.SurfaceGui.Holder
print("Added " .. userName .. " to leaderboard")
end
end
end)
if not success then
warn("Failed to update leaderboard: " .. err)
end
end
-- Loop to refresh leaderboard
while true do
-- Clear previous frames
for _, frame in pairs(leaderboard.SurfaceGui.Holder:GetChildren()) do
if frame:IsA("Frame") then
frame:Destroy()
end
end
-- Refresh leaderboard
updateLeaderboards()
wait(30) -- Refresh rate
end