My leaderboard is missing one stat (StatPoints) and also will not count kills or deaths or anything. Here is the script.
--rbxsig%XYC6H9oKVLF//1itmbaGn5wI5a4YNtkf4beIsIVZsrT29WveOsrP4YfpYDED5Xa8A1oBA/5oDwtjy4/wlvl/DH0rigLCzfNVjszNya26GajrkOvCFifnNhOCVAOLBySGJ7z5gMoZR/XQjW5EO+K1zDWiQi5CLNwBOxOTMDLS8dU=%
--rbxassetid18966%
print("LinkedLeaderboard script version 5.00 loaded")
goldKey = "PlayerGold"
killsKey = "PlayerKills"
deathsKey = "PlayerDeaths"
XPKey = "PlayerXP"
statpointKey = "PlayerStatPoints"
lvlKey = "PlayerLevel"
game.Players.PlayerAdded:connect(function(player)
if player:WaitForDataReady() then
-- create leaderboard
local ls = Instance.new("IntValue")
ls.Name = "leaderstats"
ls.Parent = player
--create the score stat
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Parent = ls
gold.Value = player:LoadNumber(goldKey)
--create the score stat
local kills = Instance.new("IntValue")
kills.Name = "Kills"
kills.Parent = ls
kills.Value = player:LoadNumber(killsKey)
--create the score stat
local deaths = Instance.new("IntValue")
deaths.Name = "Deaths"
deaths.Parent = ls
deaths.Value = player:LoadNumber(deathsKey)
--create the score stat
local lvl = Instance.new("IntValue")
lvl.Name = "Level"
lvl.Parent = ls
lvl.Value = player:LoadNumber(lvlKey)
--create the score stat
local XP = Instance.new("IntValue")
XP.Name = "XP"
XP.Parent = ls
XP.Value = player:LoadNumber(xPKey)
--create the score stat
local statpoint = Instance.new("IntValue")
statpoint.Name = "StatPoints"
statpoint.Parent = ls
statpoint.Value = player:LoadNumber(statpointKey)
end
end)
game.Players.PlayerRemoving:connect(function(player)
if player:FindFirstChild("leaderstats") then
player:SaveNumber(goldKey, player.leaderstats.Gold.Value)
player:SaveNumber(killsKey, player.leaderstats.Kills.Value)
player:SaveNumber(deathsKey, player.leaderstats.Deaths.Value)
player:SaveNumber(statpointKey, player.leaderstats.StatPoints.Value)
player:SaveNumber(XPKey, player.leaderstats.XP.Value)
player:SaveNumber(lvlKey, player.leaderstats.Level.Value)
end
end)
function onxPChanged(player, XP, level)
if XPKey.Value>=lvlKey.Value * 50 then --XP needed to level up.
XPKey.Value = XPKey.Value - XP.Value --XP lost on level up.
lvlKey.Value = lvlKey.Value + 1 --Levels added on level up.
StatPointsKey.Value = StatPointsKey.Value + 1
end
end
function onLevelUp(player, XPKey, lvlKey)
if player.Character~=nil then
for i = 1,10 do
local fireworks = Instance.new("Part")
fireworks.Shape = "Ball" --Shape of XP points.
fireworks.formFactor = "Symmetric"
fireworks.Reflectance = 1 --How shiny?
fireworks.Transparency = 0 --How transparent?
fireworks.Size = Vector3.new(2,2,2)
fireworks.BrickColor = BrickColor.Random()
fireworks.CFrame = player.Character.Head.CFrame + Vector3.new(0,2,0)
fireworks.Parent = game.Workspace
game:GetService("Debris"):AddItem(fireworks, 2)
fireworks.Velocity = Vector3.new(math.random(-30,30),math.random(-30,30),math.random(-30,30))
end
end
local m = Instance.new("Hint")
m.Parent = game.Workspace
m.Text = "Level up!:"..player.Name.." is now level"..level.Value
wait(2) --How long well hint show?
m.Parent = nil
end
function onHumanoidDied(humanoid, player)
local stats = player:findFirstChild("leaderstats")
if stats ~= nil then
local deathsKey = stats:findFirstChild("Deaths")
deathsKey.Value = deathsKey.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 killsKey = stats:findFirstChild("Kills")
local goldKey = stats:findFirstChild("Gold")
local XPKey = stats:findFirstChild("XP")
if killer ~= player then
killsKey.Value = killsKey.Value + 1
goldKey.Value = goldKey.Value + 10
XPKey.Value = XPKey.Value + 10
else
killsKey.Value = killsKey.Value - 1
end
end
end
end
Also, in some games like Guest Defense, the money, xp, and health are in their own GUI. I was wonder if someone could teach me how to do that or point me in the right direction.
Thanks for the help but with your fix could you please tell me why it happened, what happened, how to prevent it in the future, and basically anything important that will help me become a better scripter because I REALLY REALLY want to master this. Thanks again mates :)!
