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

This leaderboard script removes KOs, but it doesn't remove WOs when a player ties.. Help?

Asked by
Irvene 5
10 years ago

I've encountered an error with the links to the players if they both die. It's supposed to not give them any deaths or kills, if they tie, but it just doesn't give them kills and gives them both a death. Help?

stands = {}
CTF_mode = false


function onHumanoidDied(humanoid, player)
    local stats = player:findFirstChild("leaderstats")
    if stats ~= nil then
        local deaths = stats:findFirstChild("Wipeouts")
        deaths.Value = deaths.Value + 1
            if deaths.Value>10 then
            player.TeamColor=BrickColor.new("White")
            end 

        -- 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)
    wait(0.1) -- Give it time to check for a tie. Doesn't always happen immediately.
    local killer = getKillerOfHumanoidIfStillInGame(humanoid)
    if killer ~= nil then
        if killer.Character and killer.Character:findFirstChild("Humanoid") then
           local tieCheck = getKillerOfHumanoidIfStillInGame(killer.Character:findFirstChild("Humanoid"))
           if tieCheck then return end
           local stats = killer:findFirstChild("leaderstats")
           if stats ~= nil then
               local kills = stats:findFirstChild("KOs")
               if killer ~= player then
                   kills.Value = kills.Value + 1

               else
                   kills.Value = kills.Value - 1

               end
            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

        -- 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

        stats.Parent = newPlayer

    else

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

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

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

        kills.Parent = stats
        deaths.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("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)

This is the area edited; 1

function handleKillCount(humanoid, player)
    wait(0.1) -- Give it time to check for a tie. Doesn't always happen immediately.
    local killer = getKillerOfHumanoidIfStillInGame(humanoid)
    if killer ~= nil then
        if killer.Character and killer.Character:findFirstChild("Humanoid") then
           local tieCheck = getKillerOfHumanoidIfStillInGame(killer.Character:findFirstChild("Humanoid"))
           if tieCheck then return end
           local stats = killer:findFirstChild("leaderstats")
           if stats ~= nil then
               local kills = stats:findFirstChild("KOs")
               if killer ~= player then
                   kills.Value = kills.Value + 1

               else
                   kills.Value = kills.Value - 1

               end
            end
        end
    end
end

2

function onHumanoidDied(humanoid, player)
    local stats = player:findFirstChild("leaderstats")
    if stats ~= nil then
        local deaths = stats:findFirstChild("Wipeouts")
        deaths.Value = deaths.Value + 1
            if deaths.Value>10 then
            player.TeamColor=BrickColor.new("White")
            end 

        -- do short dance to try and find the killer

          local killer = getKillerOfHumanoidIfStillInGame(humanoid)

        handleKillCount(humanoid, player)
    end
end
0
Anyone help please.. Irvene 5 — 10y

Answer this question