The :connect method returns a RBXScriptSignal.
That signal has a :disconnect() method which stops it from listening. Thus your code would look something like this:
local loop = RunService.Heartbeat:connect(function(Step)
if keeploop then
script.Parent.MaterialPicker.Toolbar.Loader.Rotation = script.Parent.MaterialPicker.Toolbar.Loader.Rotation + 5
else
script.Parent.MaterialPicker.Toolbar.Loader.Rotation = 0
loop:disconnect()
end
end)
I have some more recommendations about improving this code.
Don't use coroutine.wrap when spawn is sufficient -- it's so much shorter, cleaner, and shows your intent better:
spawn(function()
wait(timspin)
keeploop = false
script.Parent.MaterialPicker.Toolbar.Loader.Visible = false
end)
even better, use delay instead of spawning something that waits:
delay(timespin, function()
keeploop = false
script.Parent.MaterialPicker.Toolbar.Loader.Visible = false
end)
instead of setting keeploop, you might as well just :disconnect the connection. You can also eliminate timeforspin since just the parameter works fine:
function mainmod:Spin(timeforspin)
script.Parent.MaterialPicker.Toolbar.Loader.Visible = true
local loop = RunService.Heartbeat:connect(function(Step)
script.Parent.MaterialPicker.Toolbar.Loader.Rotation = script.Parent.MaterialPicker.Toolbar.Loader.Rotation + 5
end)
delay(timeforspin, function()
loop:disconnect()
script.Parent.MaterialPicker.Toolbar.Loader.Rotation = 0
script.Parent.MaterialPicker.Toolbar.Loader.Visible = false
end)
end
Since you say it 5 times, you should just save script.Parent.MaterialPicker.ToolBar.Loader to a variable:
local gui = script.Parent.MaterialPicker.ToolBar.Loader
function mainmod:Spin(timeforspin)
gui.Visible = true
local loop = RunService.Heartbeat:connect(function(Step)
gui.Rotation = gui.Rotation + 5
end)
delay(timeforspin, function()
loop:disconnect()
gui.Rotation = 0
gui.Visible = false
end)
end
1 comment
Thanks dude, You're great!