Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

What is wrong with this script?(debounces and coroutines)

I am trying to make a function that moves all the players once an event happens, the function worked fine until I put a debounce in, then suddenly 2-3 players from the table would not be moved. I believe this is due to my use of coroutines, can think of reasons why this is happening?

jailed is a table of players, the players are meant to have the for loop done to them (remove/change their table, move their characters etc) but some of the people in the jailed table are left out as soon as I added in the debounce.

function jailbreak(player)
	if jbdb == true then
		jbdb = false
		lastman = nil
		someoneDied = false
		game.Lighting.FogEnd = 100000000
		numJb = numJb + 1
		for i,v in pairs(criminals) do
			if v.Character and v.Character.Humanoid and v.Character.Humanoid.Health > 0 and v.Character.Head and (unlock.Position - v.Character.Head.Position).magnitude < 80 then
				v.Character:MoveTo(currentMap.CopSpawns:GetChildren()[math.random(1,6)].Position)
			end
		end
		for i,v in pairs(jailed) do
			stopSpec:FireClient(v)
			if v.Character and v.Character.Torso and v.Character.Humanoid and v.Character.Humanoid.Health > 0 then
				makeCriminal(v)
				wait()
				v.Character:MoveTo(currentMap.CopSpawns:GetChildren()[math.random(1,6)].Position)
				local CopNum = v:FindFirstChild("CopNum")
				CopNum.Value = defaultJail
				if v.Character.Torso then
					local spar = Instance.new("Sparkles",v.Character.Torso)
					coroutine.wrap(function()
						wait(8)
						if v and v.Character and v.Character.Humanoid then
							v.Character.Humanoid.WalkSpeed = 16
							spar:remove()
						end	
					end)()
				end
				v.Character.Humanoid.WalkSpeed = 40
			end		
		end
		for i,v in pairs(criminals) do
			Restrictions:FireClient(v,false,Restrs)
		end
		if player and player.Character and player.Character.Humanoid then
			player.Character:MoveTo(currentMap.CopSpawns:GetChildren()[math.random(1,6)].Position)
			local CopNum = player:FindFirstChild("CopNum")
			CopNum.Value = defaultJail
			local spar = Instance.new("Sparkles",player.Character)
			player.Character.Humanoid.WalkSpeed = 40
			coroutine.wrap(function()
				wait(8)
				player.Character.Humanoid.WalkSpeed = 16
				spar:remove()
			end)()
		end	
		Event:FireAllClients("Jailbreak")
		coroutine.wrap(function()
			wait(38)
			jbdb = true
			if someoneDied and #criminals > 0 and #jailed > 0 then
				for i,v in pairs(criminals) do
					Restrictions:FireClient(v,"clear",Restrs)
				end	
				someoneDied = false
			else
				numJb = 0	
			end
		end)()
	end	
end

4 comments

1

A warning: and v.Character.Torso will cause an error, not be false false, when there is no humanoid. Use :FindFirstChild("Torso") instead.

0

Thanks. A small update: I added a print to the iteration of the jailed table so that every time it changes i,v it prints the contents of the table. I can confirm that the entire table is there but it cuts short

0

Update: No matter how many people there are in the table it always works on all of them EXCEPT ONE (ie. 2 people and one moves, 6 people and 5 move)

0

I fixed this by repeating the same loop 3 seconds later, but I'm still interested in the issue with this script (if there even is one, maybe im just stupid)

1 answer

This discussion is preserved as it was. New answers, comments, and votes are closed.