Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Help with Leaderboards?

I am trying to make a leaderboard but it is not working. I followed the wiki but it is still not working. Here is what I got,

game.Players.PlayerAdded:connect(function(player)
	local leaderstats = Instance.new("Model", player)
	leaderstats.Name = "leaderstats"
	local t = Instance.new("IntValue", leaderstats)
	t.Name = "Time"
	t.Value = 0
	local kills = Instance.new("IntValue", leaderstats)
	kills.Name = "Kills"
	kills.Value = 0
	local death = Instance.new("IntValue", leaderstats)
	death.Name = "Deaths"
	death.Value = 0 
end)

while wait(1) do
	for _, Player in pairs(game.Players:GetPlayers()) do
		if Player:FindFirstChild("leaderstats") then
			Player.leaderstats.t.Value = Player.leaderstats.t.Value + 1
		end
	end
end

NOTE: this is a regular script(not local script) in players. Not in in workspace. I am also still trying to figure out in the wiki how to make the deaths and kills go up if they die or kill people. Help with that would be nice too. :)

1 comment

0

Well, looking at your script, in line 18, you tried to use the 't' variable. I would recommend just putting 'Time'. Also, you seem fairly new to scripting. Try studying the default leaderboard script provided in your Toolbox under the "Game Stuff" section.

1 answer

Well, if you want a new script (leaderboard) try this

print("TheBurford Cash Leaderboard loaded.")

function onHumanoidDied(humanoid, player) local stats = player:findFirstChild("leaderstats") if stats ~= nil then local deaths = stats:findFirstChild("WOs") deaths.Value = deaths.Value + 1

	local spend = stats:findFirstChild("Points")
	spend.Value = spend.Value - 0

	-- do short dance to try and find the killer

	local killer = getKillerOfHumanoidIfStillInGame(humanoid)

	handleKillCount(humanoid, player)
end

end

function onPlayerRespawn(property, player) -- need to connect to new humanoid

if property == "Character" and player.Character ~= nil then
	local humanoid = player.Character.Humanoid
		local p = player
		local h = humanoid
		humanoid.Died:connect(function() onHumanoidDied(h, p) end )
end

end

function getKillerOfHumanoidIfStillInGame(humanoid) -- returns the player object that killed this humanoid -- returns nil if the killer is no longer in the game

-- check for kill tag on humanoid - may be more than one - todo: deal with this
local tag = humanoid:findFirstChild("creator")

-- find player with name on tag
if tag ~= nil then
	
	local killer = tag.Value
	if killer.Parent ~= nil then -- killer still in game
		return killer
	end
end

return nil

end

function handleKillCount(humanoid, player) local killer = getKillerOfHumanoidIfStillInGame(humanoid) if killer ~= nil then local stats = killer:findFirstChild("leaderstats") if stats ~= nil then local kills = stats:findFirstChild("KOs") local earn = stats:findFirstChild("Points") if killer ~= player then kills.Value = kills.Value + 1 earn.Value = earn.Value + 100

		else
			kills.Value = kills.Value - 1
			earn.Value = earn.Value - 1
			
		end
	end
end

end


function Entered(player)

  if player:findFirstChild("leaderstats") ~= nil then
		player.leaderstats:remove()
  end

  stats = Instance.new("IntValue")
  stats.Parent = player
  stats.Name = "leaderstats"

	local kills = Instance.new("IntValue")
	kills.Name = "KOs"
	kills.Value = 0

	local deaths = Instance.new("IntValue")
	deaths.Name = "WOs"
	deaths.Value = 0

	kills.Parent = stats
	deaths.Parent = stats

  money = Instance.new("IntValue")
  money.Parent = stats
  money.Name = "Points"
  money.Value = 0 --How much you start out with change it to how much you want

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

	local humanoid = player.Character.Humanoid

	humanoid.Died:connect(function() onHumanoidDied(humanoid, player) end )

	-- start to listen for new humanoid
	player.Changed:connect(function(property) onPlayerRespawn(property, player) end )


	stats.Parent = player

end

game.Players.PlayerAdded:connect(Entered)

c = game.Players:GetChildren() for i=1, #c do Entered(c[i]) end

and to change the kills go higher find kills.Value = kills Ok Scripting Helper

This discussion is preserved as it was. New answers, comments, and votes are closed.