Make your own leaderboard

The script

Eventually, you will find in any leaderboard script the following function “onPlayerEntered(newPlayer)” (or something similar). That is where the individual statistics for each player are made. function onPlayerEntered(newPlayer)

Below is where all the important CUSTOM bits are made. You can change almost all of it. The code is in the format local variableName = Instance.new("IntValue") variableName.Name = nameIWantToAppearOnScreen

The exception is the leaderstats variable.

	local stats = Instance.new("IntValue")
	stats.Name = "leaderstats"

You CANNOT change the “leaderstats” unless you don’t want the variables inside it displayed on the leaderboard. Note that the leaderstats variable itself doesn’t show up.

So, if you wanted money, you’d do:

	local money = Instance.new("IntValue")
	money.Name = "Money"
	money.Value = "0"
	money.Parent = stats

To access the money of, say “Bob”, you would use the command: game.Players.Bob.leaderstats.Money.Value = game.Players.Bob.leaderstats.Money.Value + 1 --increment Bob's money by 1.

You could continue to add more features, such as captures, points, mana, power, level, stage, minutes at place, etc. The rest of the script is below, but it is copied from the basic leaderboard.

	-- VERY UGLY HACK
	-- Will this leak threads?
	-- Is the problem even what I think it is (player arrived before character)?
	while true do
		if newPlayer.Character ~= nil then break end
		wait(5)
	end
	local humanoid = newPlayer.Character.Humanoid

Assigning of Events

If you want to, say, take away points every time the humanoid dies, you would need the following line: humanoid.Died:connect(function() onHumanoidDied(humanoid, newPlayer) end ) Also, any other event of the humanoid can be put here, along with any other events related to the new player that aren’t handled in any other script in your place. Just remember that the above line requires a special function “onHumanoidDied”, which is not in this script.

-- start to listen for new humanoid

The same applies to the following line:

	newPlayer.Changed:connect(function(property) onPlayerRespawn(property, newPlayer) end )
	stats.Parent = newPlayer --this part assigns the stats we made earlier to the player
end
game.Players.ChildAdded:connect(onPlayerEntered)

It is absolutely necessary for that part of the script to be present.

That should allow you to edit any leaderboard you like!

Complete leaderboard script

Here is an example of a complete leaderboard:

function onPlayerEntered(newPlayer)
	local stats = Instance.new("IntValue")
	stats.Name = "leaderstats"

	local c = Instance.new("IntValue")
	c.Name = "Money"
	c.Value = 0

	c.Parent = stats

	stats.Parent = newPlayer 

	newPlayer.Changed:connect(function (property)
		if (property == "Character") then
			onPlayerRespawned(newPlayer)
		end
	end)
end

game.Players.ChildAdded:connect(onPlayerEntered)

7 thoughts on “Make your own leaderboard

  1. How do you make description change if you, for example, have an obby and you want to change the values based on what level they went on last?

Leave a comment