Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Help with Leaderboards?

Asked by 10 years ago

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

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. Shawnyg 4330 — 10y

1 answer

Log in to vote
0
Answered by 9 years ago

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~

Ad

Answer this question