Hello, I was told here earlier about coroutines and I'm trying to use one so that each individual player can reload at the same time without the wait(reloadtime) getting in the way.

A solution offered to me was to change the bottom line to reloadevent.OnServerEvent:Connect(coroutine.wrap(reload)) but that threw a dead coroutine error every time, so I made the coroutine within the reload function. However, this seems to be bypassing the intended effect because now there is no error but the coroutine is ineffective.

I am really just totally lost.

local function reload(player, gun)
	
	local a = coroutine.wrap(function() --make coroutine locally so its unique each time
	
		local active = gun.gunstats.Active
		if active.Value == true and reloaddebounce == false then
			reloaddebounce = true
			local reloadtime = gun.gunstats.Reloadtime
			local magammo = gun.gunstats.Mag
			local maximum = gun.gunstats.Maximum
			local reloadtick = 0
			if magammo.Value < maximum.Value and tick() - reloadtick >= reloadtime.Value then --cant reload when full
				
				reloadtick = tick()
				
				changetoreload:FireClient(player)
				changecursortoreload:FireClient(player)
					
					magammo.Value = 0
				
				gun.phalanx.Magazine.Transparency = 1	
				gun.Handle.Reloadsound:Play()
					
					wait(reloadtime.Value)
				
				reloaddebounce = false
				gun.phalanx.Magazine.Transparency = 0
					
					magammo.Value = maximum.Value

			end
		end	
	end)
	a()
end
reloadevent.OnServerEvent:Connect(reload)