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

Can someone help me with a leaderboard problem please?

I have been trying all kinds of different code to get the leaderboard to compare the infamy from the killer to the guy that died.

but nothing I have tried is working.

right now I have 3 tabs.

kills, deaths, and infamy

when someone kills someone the program should compare the killers infamy with the one whom died and compare it to his own.

if the infamy.value is 0 it will add 100

if the infiny.value is less than the one who died it should take the infamy value from the one who died and times it by .5 and add that figure to the killers infamy.

but nothing is working. I cant figure out how to get the if statement to looking the other persons stats.

can someone help me please. this is the code that I am playing around with.

print("LinkedLeaderboard script version 5.00 loaded")

stands = {}
CTF_mode = false


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

		-- 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("Kills")
			local infamy = stats:findFirstChild ("Infamy")
			
			
			if killer ~= player then
				kills.Value = kills.Value + 1
				
				local upgrade = player:findFirstChild("leaderstats")
				local increase = upgrade.stats:findFirstChild ("Infamy")
								
				if infamy.Value < increase or infamy.Value == 0 then

					infamy.Value = infamy.Value + 100
				
				else
					
					infamy.Value = ((increase* .5)+ infamy.Value)
				
				end
								
			else
				kills.Value = kills.Value - 1
				
			end
		end
	end
end




-----------------------------------------------



function findAllFlagStands(root)
	local c = root:children()
	for i=1,#c do
		if (c[i].className == "Model" or c[i].className == "Part") then
			findAllFlagStands(c[i])
		end
		if (c[i].className == "FlagStand") then
			table.insert(stands, c[i])
		end
	end
end

function hookUpListeners()
	for i=1,#stands do
		stands[i].FlagCaptured:connect(onCaptureScored)
	end
end

function onPlayerEntered(newPlayer)

	if CTF_mode == true then

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

		local captures = Instance.new("IntValue")
		captures.Name = "Captures"
		captures.Value = 0


		captures.Parent = stats
		
		while true do
			if newPlayer.Character ~= nil then break end
			wait(5)
		end

		stats.Parent = newPlayer

	else

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

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

		local deaths = Instance.new("IntValue")
		deaths.Name = "Deaths"
		deaths.Value = 0
		
		local infamy = Instance.new("IntValue")
		infamy.Name = "Infamy"
		infamy.Value = 0

		kills.Parent = stats
		deaths.Parent = stats
		infamy.Parent = stats

		while true do
			if newPlayer.Character ~= nil then break end
			wait(5)
		end

		local humanoid = newPlayer.Character.Humanoid

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

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


		stats.Parent = newPlayer

	end

end


function onCaptureScored(player)

		local ls = player:findFirstChild("leaderstats")
		if ls == nil then return end
		local caps = ls:findFirstChild("Captures")
		if caps == nil then return end
		caps.Value = caps.Value + 1

end


findAllFlagStands(game.Workspace)
hookUpListeners()
if (#stands > 0) then CTF_mode = true end
game.Players.ChildAdded:connect(onPlayerEntered)








1 comment

0

at the same time , i just added a few more tabs, Experience, class, gold, and silver, but only 4 of them show up. How can i get all of them to show and move them around the way i want? I have been looking on the intenet all day with no results.

1 answer

Line 15 is there for no reason.

line 43:

local killer = tag.Value 
if killer.Parent ~= nil then -- This checks if the Value "killer" no longer has a parent
	return killer
end

killer is NOT the Userdata of the killer. I am assuming it's just the name of the Killer. If you want to find the killer, you are going to have to find them:

for a, v in pairs(game.Players:GetPlayers()) do
	if v.Name == tag.Value then
		print("This is our killer")
	end
end

Otherwise, good job with your formatting and naming. I can tell you are an experienced programmer.

Also, there is no way to customize the Roblox default leaderboard. You COULD make your own. I made one to suit my style, which I could give to you if you want.

Hope you get the desired outcome :)

EDIT Line 187 game.Players.ChildAdded:connect(onPlayerEntered) should be changed to game.Players.PlayerAdded:connect(onPlayerEntered)

On line 163, use newPlayer.CharacterAdded to listen for when a player respawns

Remove lines 153-156 because they are unnecessary

Send me the latest version of your leaderboard after you fix it up the best you can

3 comments

0

that would be great i could use it to design one i like, you know something to go off of.... i dont know how you can get it to me, but me email is arnoldray007@yahoo.com

0

as well, the problem i was having is that the code will not check the infamy of the dead guy and the infamy of the killer, and change it. if the killer has less infamy then the dead guy the infamy should increase to .5 times what the dead guy has if the dead guy has less or none, the killers infamy should change by 100. that code portion is not working.

0

Re-edit your script the best you can, then send it to me

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