My while true do script gets stuck

This is my script

while true do
	
	local TaggedDebounceCooldown = false
	local Players = game:GetService("Players")


	for i = 30, 0, -1 do
		game.Workspace.GuiValues.StatusText.Value = "starting round: "..i.."s"
		wait(1)
	end
	game.Workspace.Values.InRound.Value = true
	local pickedPlayer = Players:GetPlayers()[math.random(#Players:GetPlayers())]
	pickedPlayer = Players:GetPlayers()[math.random(#Players:GetPlayers())]
	print(pickedPlayer)


	for _, player in pairs(game.Players:GetPlayers()) do

		local HasBeenTagged = Instance.new("BoolValue", player)
		HasBeenTagged.Name = "HasBeenTagged"
		HasBeenTagged.Value = false
		
			
		
		player:WaitForChild("PlayerTeam").Value = "Blue"
			
		pickedPlayer:WaitForChild("PlayerTeam").Value = "Red"

		
	end


	local PeopleAlive = Instance.new("IntValue", game.Workspace.Values)
	local playerCount = #game.Players:GetPlayers()

	PeopleAlive.Value = playerCount
	PeopleAlive.Name = "PeopleAlive"
	PeopleAlive.Value = PeopleAlive.Value - 1 -- Only for tagger




	game.Workspace:WaitForChild(pickedPlayer.Name).Humanoid.WalkSpeed = 35
	game.Workspace.GuiValues.StatusText.Value = pickedPlayer.Name.." is the freezer"

	for _, player in pairs(game.Players:GetPlayers()) do
		local oldCharacter = player.Character
		local morphModel = game.ReplicatedStorage.BlueTeam.Rig
		local newCharacterRed = morphModel:Clone()

		newCharacterRed.HumanoidRootPart.Anchored = false
		newCharacterRed:SetPrimaryPartCFrame(oldCharacter.PrimaryPart.CFrame)
		newCharacterRed.Name = player.Name
		player.Character = newCharacterRed
		newCharacterRed.Parent = workspace
		game.Workspace.Values.InRound.Value = false

	end

	local oldCharacter = pickedPlayer.Character
	local morphModel = game.ReplicatedStorage.RedTeam.Tager
	local newCharacterRed = morphModel:Clone()

	newCharacterRed.HumanoidRootPart.Anchored = false
	newCharacterRed:SetPrimaryPartCFrame(oldCharacter.PrimaryPart.CFrame)
newCharacterRed.Name = pickedPlayer.Name
	pickedPlayer.Character = newCharacterRed
	newCharacterRed.Parent = workspace
	
	for _, player in pairs(game.Players:GetPlayers()) do
		game.Workspace:WaitForChild(player.Name).Humanoid.WalkSpeed = 35

	end

	for i = 0, 0, -0.1 do
		-- i = start, end, addition
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText2.TextTransparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText2.UIStroke.Transparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText1.TextTransparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText1.UIStroke.Transparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText.TextTransparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText.UIStroke.Transparency = i


		wait(0.3)
	end
	wait(2)


	-- The variable I will be equal to 0 at the start every time the for loop runs 0.1 will be added until it hits 1
	for i = 0, 1, 0.1 do
		-- i = start, end, addition
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText2.TextTransparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText2.UIStroke.Transparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText1.TextTransparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText1.UIStroke.Transparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText.TextTransparency = i
		pickedPlayer.PlayerGui.ScreenGui.YouAreScreen.YouAreText.UIStroke.Transparency = i


		wait(0.1)
	end

	-- Everything under here will run after the for loop has ended.
	wait(0.1)

	wait(1)
	
	

	game.Workspace:WaitForChild(pickedPlayer.Name).HitBox.Touched:Connect(function(Hit)
		if Hit.Parent:FindFirstChild("Humanoid") then
			if Hit.Parent.Name == pickedPlayer.Name then

			else
				if game.Players:WaitForChild(Hit.Parent.Name).HasBeenTagged.Value == false then
					print(Hit.Parent.Name.." got Tagged by tagger")
					Hit.Parent.Humanoid.WalkSpeed = 0
					Hit.Parent.HitBox.Transparency = 0.5
					PeopleAlive.Value = PeopleAlive.Value - 1
					game.Players:WaitForChild(Hit.Parent.Name):WaitForChild("HasBeenTagged").Value = true
				end


				




			end

		end
	end)

	for i = 80, 0, -1 do
		
		**if PeopleAlive.Value == 0 then**
**			game.Workspace.GuiValues.StatusText.Value = "Tagger won"**
**			**
**			for _, player in pairs(game.Players:GetPlayers()) do**
**				local oldCharacter = player.Character**
**				local morphModel = game.ReplicatedStorage.NormalTeam.Rig**
**				local newCharacterRed = morphModel:Clone()**

**				newCharacterRed.HumanoidRootPart.Anchored = false**
**				newCharacterRed:SetPrimaryPartCFrame(oldCharacter.PrimaryPart.CFrame)**
**				newCharacterRed.Name = player.Name**
**				player.Character = newCharacterRed**
**				newCharacterRed.Parent = workspace**
**				game.Workspace.Values.InRound.Value = false**

**			end**

***After this but of code above it gets stuck because the if ends and so it stop when the script need to to repeat ***

				

			
			
		end

		game.Workspace.GuiValues.StatusText.Value = "round ends: "..i.."s"
		wait(1)

end

	if PeopleAlive.Value >= 1 then
		game.Workspace.GuiValues.StatusText.Value = "Players won"
		wait(3)

	end
	
	for _, player in pairs(game.Players:GetPlayers()) do
		local oldCharacter = player.Character
		local morphModel = game.ReplicatedStorage.NormalTeam.Rig
		local newCharacterRed = morphModel:Clone()

		newCharacterRed.HumanoidRootPart.Anchored = false
		newCharacterRed:SetPrimaryPartCFrame(oldCharacter.PrimaryPart.CFrame)
		newCharacterRed.Name = player.Name
		player.Character = newCharacterRed
		newCharacterRed.Parent = workspace
		game.Workspace.Values.InRound.Value = false

	end
	
	
	for _, player in pairs(game.Players:GetPlayers()) do
		game.Workspace:WaitForChild(player.Name).Humanoid.WalkSpeed = 35

		game.Players:WaitForChild(player.Name):WaitForChild("HasBeenTagged").Value = false
		player:WaitForChild("PlayerTeam").Value = "Normal"
	end


end

Any errors in your Output window?

Because the script is so long I’d start by putting prints before each if check so you can see where your script is being stopped.

For example say you had this in your code:

if x = 1 then
    --code

Now when you are wondering why that section of code isn’t running you can put:

print("line 15 of script, x = ", x) -- or whatever the line number is in your script
if x = 1 then
    --code

What this does is tells you the value of x and if it isn’t what you expect it to be then you need to troubleshoot the section of code that sets x.

You can do this before each if check to allow you to see how all the variables are working in your code.

its getting stopped here

	for i = 80, 0, -1 do
		
		if PeopleAlive.Value == 0 then
			game.Workspace.GuiValues.StatusText.Value = "Tagger won"
			
			for _, player in pairs(game.Players:GetPlayers()) do
				local oldCharacter = player.Character
				local morphModel = game.ReplicatedStorage.NormalTeam.Rig
				local newCharacterRed = morphModel:Clone()

				newCharacterRed.HumanoidRootPart.Anchored = false
				newCharacterRed:SetPrimaryPartCFrame(oldCharacter.PrimaryPart.CFrame)
				newCharacterRed.Name = player.Name
				player.Character = newCharacterRed
				newCharacterRed.Parent = workspace
				game.Workspace.Values.InRound.Value = false

			end

				

			
			break
			
		end

		game.Workspace.GuiValues.StatusText.Value = "round ends: "..i.."s"
		wait(1)

end

Because I am checking if everyone has been tagged and if so this happens but it stops the while true do script form repeating and starting a new round.

for i = 80, 0, -1 do
		print(i, "PeopleAlive.Value = ", PeopleAlive.Value)
		if PeopleAlive.Value == 0 then
        --code

        print("breaking")
        break

Will tell you the values of i and PeopleAlive help you troubleshoot where it’s failing.

1 Like

thanks let me try that i will get back to you when i try that