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. :)
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~