I'm trying to make my own squid game in roblox. So I searched up a tutorial for that and did it. That works. But then I thought "huh, I should add a intermission". So I searched a tutorial for that and then I plugged it into my original script. Then though, the intermission just loops. Anyways here's the code (p.s. i'm a beginner, so expect a rookie mistake)

Main Server Script

local TweenService = game:GetService("TweenService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local Map = game.Workspace.Map
local Bacon = Map.Bacon
local TimerUI = Map.Timer.UI
local InRound = game.ReplicatedStorage.InRound
local Status = game.ReplicatedStorage.Status
local LobbySpawn = game.Workspace.LobbySpawn
local MapSpawn = Map.MapSpawn

local Round_Duration_Seconds = 10
local Intermition_Duration_Seconds = 5

local IsRedLight = ReplicatedStorage.IsRedLight
local SavedPlayerPositions = {} -- Logs all player positions on red light
local SpinTweenInfo = TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut)

local OriginalHeadCFrame = Bacon.Head.CFrame

local GreenLightHead = TweenService:Create(Bacon.Head, SpinTweenInfo, {
	CFrame = OriginalHeadCFrame
})

local RedLightHead = TweenService:Create(Bacon.Head, SpinTweenInfo, {
	CFrame = OriginalHeadCFrame * CFrame.Angles(0,math.rad(180),0)
})

function DressCharacterInSuit(Character)
	for _, Object in pairs(Character:GetChildren()) do
		if Object:IsA("Shirt") or Object:IsA("Pants") or Object:IsA("ShirtGraphic") then
			Object:Destroy()
		end
	end
	
	local Shirt = Instance.new("Shirt")
	Shirt.ShirtTemplate = "rbxassetid://7597521537"
	Shirt.Parent = Character
	
	local Pants = Instance.new("Pants")
	Pants.PantsTemplate = "rbxassetid://7597288954"
	Pants.Parent = Character
end

function SecondsToTimestamp(Seconds)
	Seconds = math.max(Seconds,0)
	
	local Minutes = tostring(math.floor(Seconds / 60))
	local LeftOverSeconds = tostring(Seconds % 60)
	
	if #LeftOverSeconds == 1 then
		LeftOverSeconds = "0"..LeftOverSeconds
	end
	return tostring(Minutes)..":"..LeftOverSeconds
end

function LogPlayerPositions(Players)
	for _, Player in pairs(Players) do
		if Player.Character then
			local HumanoidRootPart = Player.Character:FindFirstChild("HumanoidRootPart")
			if HumanoidRootPart then
				SavedPlayerPositions[Player] = HumanoidRootPart.Position
			end
		end
	end
end

function IntermissionTimer()
	while wait() do
		for i = Intermition_Duration_Seconds, 1, -1 do
			InRound.Value = false
			wait(1)
			Status.Value = "Intermission - ".. i .." seconds left"
		end
	end
end

InRound.Changed:Connect(function()
	if InRound.Value == true then
		for _, Player in pairs(game.Players:GetChildren()) do
			local Char = Player.Character
			Char.HumanoidRootPart.CFrame = MapSpawn.CFrame
		end
	else
		for _, Player in pairs(game.Players:GetChildren()) do
			local Char = Player.Character
			Char.HumanoidRootPart.CFrame = LobbySpawn
		end
	end
end)

function StartGame()
	
	InRound.Value = true
	GreenLightHead:Play()
	IsRedLight.Value = false
	SavedPlayerPositions = {}
	
	local PlayersInRound = Players:GetPlayers()
	local Winners = {}
	local SpinDelay = 5
	local LastSpin = tick()
	local EndTouch
	
	for _, Player in pairs(PlayersInRound) do
		Player:LoadCharacter()
		DressCharacterInSuit(Player.Character)
	end
	
	EndTouch = Map.EndBarrier.Touched:Connect(function(Toucher)
		if not Toucher or not Toucher.Parent then
			return
		end
		
		local TouchChar = Toucher.Parent
		local TouchPlayer = Players:GetPlayerFromCharacter(TouchChar)
		
		if TouchPlayer then
			table.insert(Winners, TouchPlayer)
			local PlayerIndex = table.find(PlayersInRound,TouchPlayer)
			if PlayerIndex then
				table.remove(PlayersInRound,PlayerIndex)
			end
		end
	end)
	
	for i = Round_Duration_Seconds, 0, -1 do
		TimerUI.TimeLabel.Text = SecondsToTimestamp(i)
		
		if IsRedLight.Value then
			-- Store positions of players, check if they've moved	
			for Player, SavedPosition in pairs(SavedPlayerPositions) do
				if Player.Character then
					local HumanoidRootPart = Player.Character:FindFirstChild("HumanoidRootPart")
					if HumanoidRootPart then
						if (HumanoidRootPart.Position - SavedPosition).Magnitude >= 1 then
							Player.Character:BreakJoints() -- Kill the player
							SavedPlayerPositions[Player] = nil
							-- Remove player from the round table
							local PlayerIndex = table.find(PlayersInRound, Player)
							if PlayerIndex then
								table.remove(PlayersInRound, PlayerIndex)
							end
						end
					end
				end
			end
		end
		
		if tick()-LastSpin >= SpinDelay then -- Has 5 seconds gone since the last turn
			if IsRedLight.Value == true then
				-- Make it green
				IsRedLight.Value = false
				GreenLightHead:Play()
			else 
				-- Make it red
				IsRedLight.Value = true
				RedLightHead:Play()
				
				LogPlayerPositions(PlayersInRound)
			end
			LastSpin = tick()
			SpinDelay = SpinDelay * 0.9 -- Make it spin faster each time
		end
		
		if #PlayersInRound == 0 then
			break
		end
		
		task.wait(1) -- Countdown Delay
		
	end
	
	-- Well, GAME OVER
	EndTouch:Disconnect()
	
	print("Round Over!")
end

-- Main Game Loop
while true do
	IntermissionTimer() -- Start the Intermission
	StartGame() -- Start the Game
end

Player GUI Script

local Player = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local Label = script.Parent.LightStatus
local Status = game.ReplicatedStorage.Status

Status.Changed:Connect(function()
	Label.TextColor3 = Color3.fromRGB(255, 255, 255)
	Label.Text = Status.Value

end)

ReplicatedStorage.IsRedLight.Changed:Connect(function(IsRedLight)
	if IsRedLight then
		Label.Text = "Red Light"
		Label.TextColor3 = Color3.fromRGB(255, 0, 0)
	else
		Label.Text = "Green Light"
		Label.TextColor3 = Color3.fromRGB(0, 255, 0)
	end
end)

1 comment

0

remove the while wait do on line 70 and also set in round value to true!