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

Regenerating parts once every 15 seconds?

Asked by 4 years ago
Edited 4 years ago

I am not skilled enough to do something like this so I used someone's free model. This script regenerates parts but there is 2 things I don't like about it. One is that when you touch the block, it regenerates the part every 0.1 second until you get off it. I put a wait before "regenerate()" and it was regenerating parts every 10 seconds which is what I want. However, if the player touches the block 5 times and walks away, it'll regenerate the parts every 10 seconds until it regenerates 5 times because that's how many times the player touched it. How can I make this that once the player touches the block it regenerates all parts and then waits 10 seconds before the player can touch the block again to regenerate?

model = script.Parent.Parent

backup = model:clone()
enabled = true

function regenerate()
    model:remove()
    model = backup:clone()
    model.Parent = game.Workspace
    model:makeJoints()
    script.Disabled = true
    wait(10)
    script.Disabled = false
end

function onHit(hit)
    if (hit.Parent:FindFirstChild("Humanoid") ~= nil) and enabled then
        regenerate()
    end
end

script.Parent.Touched:connect(onHit)

2 answers

Log in to vote
1
Answered by 4 years ago

You disabled the script, and then attempted to re-enable it in the same script. This wouldn't work because the script would be disabled, so it couldn't re-enable itself since it's disabled. Instead use a debounce. Also, I made the variables local and improved some stuff. Try this:

local model = script.Parent.Parent

local backup = model:Clone()
local enabled = true

local debounce = false

local function regenerate()
    if not debounce  then 
        debounce = true
        model:Destroy()
        model = backup:Clone()
        model.Parent = workspace
        model:MakeJoints()
        wait(10)
        debounce = false
    end
end

local function onHit(hit)
    if hit.Parent:FindFirstChildOfClass("Humanoid")  then
        regenerate()
    end
end

script.Parent.Touched:Connect(onHit)
Ad
Log in to vote
0
Answered by 4 years ago

Add a debounce to it, to prevent it from running.

Answer this question