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

Have a stat only go down one time when the block is touched?

Asked by
Djinous 45
8 years ago

I have a kill script here that when the parent is touched, it kills the player, resets their streak, and sets their willpower down by 1. However, when the player touches it and dies, their body parts repeat the script x number of times, making the willpower stat going far lower than what it should be. How can I remedy this?

function onTouch(part) 
    local humanoid = part.Parent:FindFirstChild("Humanoid")
    local player = game.Players:playerFromCharacter(part.Parent)
    if (humanoid ~= nil) then
        humanoid.Health = 0
        player.leaderstats.Streak.Value = 0
        player.leaderstats.Willpower.Value = player.leaderstats.Willpower.Value - 1
    end 
end
script.Parent.Touched:connect(onTouch)

1 answer

Log in to vote
1
Answered by 8 years ago

You can make a debounce.

local debounce = {};
function onTouch(part) 
    local humanoid = part.Parent:FindFirstChild("Humanoid")
    local player = game.Players:playerFromCharacter(part.Parent)
    if player then -- Changed to not cause issues with NPCs
        if debounce[player] then return end;
        debounce[player] = true;
        humanoid.Health = 0
        player.leaderstats.Streak.Value = 0
        player.leaderstats.Willpower.Value = player.leaderstats.Willpower.Value - 1
        player.CharacterAdded:wait();
        debounce[player] = false
    end 
end
script.Parent.Touched:connect(onTouch)

How does it work?
When a Player touches it, it saves that the Player touched it and kills the associated Humanoid. It then waits until the Player respawns, and then lets the script run again for the player. This means that it can not be triggered multiple times in a single death.

0
Thank you! Djinous 45 — 8y
Ad

Answer this question