Coroutine only works once

Hello there! I am currently trying to figure out the issues to my problem, but I cant wrap my head around it.

repeat wait() until game.Players.LocalPlayer.Character

local plr   	 = game.Players.LocalPlayer
local char  	 = plr.Character or plr.CharacterAdded:Wait()
local hum   	 = char.Humanoid
local hrp   	 = char:WaitForChild("HumanoidRootPart")

local effects = {}

local RepStorage = game:GetService("ReplicatedStorage")
local ParticlesFolder = RepStorage:WaitForChild("Particles")

local shockwave = ParticlesFolder.shockwave

local groundShockwave = coroutine.create(function()
	local clone = shockwave:Clone()
	clone.Parent = hrp


function effects.Shockwave()

return effects

It is in a module script, whenever I call the function, it works for the first time it gets called, then it just breaks.
Any help is appreciated!

Just use task.spawn

local function SpawnFunc(text)

task.spawn(SpawnFunction, text)

As shown on the coroutine | Roblox Creator Documentation page, you can use a while loop to accomplish this. Here’s the example they provided:

-- This function repeats a word every time its coroutine is resumed
local function repeatThis(word)
	local repetition = ""
	while true do
		-- Do one repetition then yield the result
		repetition = repetition .. word

Then you can use either coroutine.create or coroutine.wrap to create the thread. Again, using the example code they provided, here’s an example of using coroutine.create with the above function:

local repetitionCoro = coroutine.create(repeatThis)
print(coroutine.resume(repetitionCoro, "Hello"))  -- true, Hello
print(coroutine.resume(repetitionCoro))           -- true, HelloHello
print(coroutine.resume(repetitionCoro))           -- true, HelloHelloHello

And here’s an example of using it with coroutine.wrap:

local f = coroutine.wrap(repeatThis)
print(f("Hello"))  -- Hello
print(f())         -- HelloHello
print(f())         -- HelloHelloHello
1 Like