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

Why wont this killstreak script work?

Asked by 9 years ago

My killstreak script wont work

local Player = game.Players.LocalPlayer

Player.Killstreak.Changed:connect(function()
    if Player.Killstreak.Value >= 1 then
        game.ReplicatedStorage.AC130:Clone().Parent = Player.Backpack
    end
end)


The free model leader board I used is

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("WOs")
        local row = stats:findFirstChild("Streak")
        deaths.Value = deaths.Value + 1
        row.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("XP")
            local row = stats:findFirstChild("Streak")
            if killer ~= player then
                kills.Value = kills.Value + 100 + row.Value 
                wait(0.2)
                row.Value = row.Value + 1
            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 kills = Instance.new("IntValue")
        kills.Name = "XP"
        kills.Value = 0

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

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

        local row = Instance.new("IntValue")
        row.Name = "Streak"
        row.Value = 0

        kills.Parent = stats
        deaths.Parent = stats
                captures.Parent = stats
                row.Parent = stats

        -- VERY UGLY HACK
        -- Will this leak threads?
        -- Is the problem even what I think it is (player arrived before character)?
        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

    else

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

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

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

        local row = Instance.new("IntValue")
        row.Name = "Streak"
        row.Value = 0

        kills.Parent = stats
        deaths.Parent = stats
        row.Parent = stats

        -- VERY UGLY HACK
        -- Will this leak threads?
        -- Is the problem even what I think it is (player arrived before character)?
        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("Caps")
        if caps == nil then return end
        caps.Value = caps.Value + 1
        local h = player:findFirstChild("humanoid")
        h.MaxHealth = (h.MaxHealth * caps.Value) + 100

end


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


1 answer

Log in to vote
0
Answered by 9 years ago

I suggest that you should learn how to make your own leaderboard in the future (it isn't quite hard). You didn't give us any error, but from looking at the script you are looking a value inside the player that doesn't exist (Killstreak). You can fix it by using the code below, but the reason why it wouldn't work is because you must access the "leaderstats" then the "Killstreak" and you should really be going for "Streak" instead of "Killstreak".

repeat wait()
Player = game.Players.LocalPlayer
until (Player) and (Player.Character) --Make sure that we don't cause any errors


Player:WaitForChild("leaderstats").Streak.Changed:connect(function() --wait for leaderstats
    if Player.leaderstats.Streak.Value >= 1 then --if Streak is larger than or equal to 1 then
        game.ReplicatedStorage.AC130:Clone().Parent = Player.Backpack
    end
end)

If this works then consider it the answer and mark it as the answer!

0
It somehow didnt work supermarioworld323 45 — 9y
0
Do i use local or normal supermarioworld323 45 — 9y
0
LocalScript. YasuYoshida 171 — 9y
0
Crap :( it no work im trying to make a game called sharpshooters supermarioworld323 45 — 9y
Ad

Answer this question