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

Game round loop? script is not repeating

Hello.

I recently started making a round-based game called 'Jeff'. But after 1 round, my script doesn't return to the start (picking a map, killer etc) it just loops the gameplay. Can somebody help me?

There is a normal script and a module script, both in server script service

Normal script:

while true do
--repeat wait() until game.Players.NumPlayers >= 2 

local IntermissionRoundRemote = game.ReplicatedStorage:WaitForChild("IntermissionFrame")
local LightningOfKiller = game.ReplicatedStorage:WaitForChild("LightningOfJeff")
local Round = require(script:WaitForChild("Intermission"))

while wait() do

Round.Intermission()
Round.Calibrate()
game.ReplicatedStorage.Status.Value = "Game starting soon!"

wait(2.5)

Round.ChooseTheJeff()

wait(2.5)

Round.ChooseTheMap()

wait(1)

game.ReplicatedStorage.Status.Value = "Map loaded!"

wait(2.5)

game.ReplicatedStorage.Status.Value = "Intermission..."
game.Workspace.GameMusic.Boom:Play()

wait(2.5)

IntermissionRoundRemote:FireAllClients(game.Players:GetChildren())

Round.StartTheGame()

wait(3)

local PLRS = {}

for i, v in pairs(game.Players:GetChildren()) do
	if v then
		table.insert(PLRS, v)
		
		if v.Name == game.ReplicatedStorage.KillerName.Value then
			table.remove(PLRS, i)
		end
	end
end

local function toMS(s)
    return ("i:i"):format(s/60%60, s%60)
end

	for Countdown = 180,0,-1 do
		game.ReplicatedStorage.Status.Value = toMS(Countdown).." left!"
		wait(1)
		
		if #PLRS == 0 then
			game.ReplicatedStorage.Status.Value = "All Players have died!"
			
			wait(2)
			
			for i, Song in pairs(game.Workspace.GameMusic:GetChildren()) do
												if Song then
													Song:Stop()
												end
											end
											
											game.ReplicatedStorage.LightningOfJeffBack:FireClient(game.Players:FindFirstChild(game.ReplicatedStorage.KillerName.Value))
			
			for i, v in pairs(game.Players:GetChildren()) do
				if v then
					v:LoadCharacter()
					
					game.Players:FindFirstChild(game.ReplicatedStorage.KillerName.Value).leaderstats.Money.Value = game.Players:FindFirstChild(game.ReplicatedStorage.KillerName.Value).leaderstats.Money.Value + 50
					
					v.Character.HumanoidRootPart.CFrame = game.Workspace.MenuTeleportPart.CFrame + Vector3.new(0, 10, 0)
					
					if game.Workspace:FindFirstChild("Store") then
						game.Workspace.Store:Destroy()
					end
					
					if game.Workspace:FindFirstChild("Forest") then
						game.Workspace.Forest:Destroy()
					end

break
					
				else
					
					if Countdown == 0 then
						
						game.ReplicatedStorage.Status.Value = "Time's up!"
						
						wait(2)
						
						for i, Song in pairs(game.Workspace.GameMusic:GetChildren()) do
												if Song then
													Song:Stop()
												end
											end
											
											game.ReplicatedStorage.LightningOfJeffBack:FireClient(game.Players:FindFirstChild(game.ReplicatedStorage.KillerName.Value))
						
						for i, v in pairs(game.Players:GetChildren()) do
							if v then
								v:LoadCharacter()
								
							v.Character.HumanoidRootPart.CFrame = game.Workspace.MenuTeleportPart.CFrame + Vector3.new(0, 10, 0)
							
							if game.Workspace:FindFirstChild("Store") then
						game.Workspace.Store:Destroy()
					end
					
					if game.Workspace:FindFirstChild("Forest") then
						game.Workspace.Forest:Destroy()
					end

								break
							else
								if not game.Players:FindFirstChild(game.ReplicatedStorage.KillerName.Value) then
									
									game.ReplicatedStorage.Status.Value = "Killer has left!"
									
									for i, Song in pairs(game.Workspace.GameMusic:GetChildren()) do
												if Song then
													Song:Stop()
												end
											end
									
									wait(2)
									
									for i, v in pairs(game.Players:GetChildren()) do
										if v then
											v:LoadCharacter()
											
											v.Character.HumanoidRootPart.CFrame = game.Workspace.MenuTeleportPart.CFrame + Vector3.new(0, 10, 0)
											
											if game.Workspace:FindFirstChild("Store") then
						game.Workspace.Store:Destroy()
					end
					
					if game.Workspace:FindFirstChild("Forest") then
						game.Workspace.Forest:Destroy()
					end
break
										
									else
										if #PLRS >= 0 and Countdown == 0 then
											
											game.ReplicatedStorage.Status.Value = "Killer didn't kill every player!"
											
											for i, Song in pairs(game.Workspace.GameMusic:GetChildren()) do
												if Song then
													Song:Stop()
												end
											end	
											wait(3)
											
											for i, v in pairs(PLRS) do
												if v then
													v.leaderstats.Money.Value = v.leaderstats.Money.Value + 50
													
													game.ReplicatedStorage.LightningOfJeffBack:FireClient(game.Players:FindFirstChild(game.ReplicatedStorage.KillerName.Value))
													
													for i, x in pairs(game.Players:GetChildren()) do
														if x then
															
															x.Character.HumanoidRootPart.CFrame = game.Workspace.MenuTeleportPart.CFrame + Vector3.new(0, 10, 0)
												
												
												if game.Workspace:FindFirstChild("Store") then
						game.Workspace.Store:Destroy()
					end
					
					if game.Workspace:FindFirstChild("Forest") then
						game.Workspace.Forest:Destroy()
					end
												
												break
												
														end
													end
												end
											end
											
										end
									end
									
								end
							end
						end
					end
				end
			end
		end
	end
	
	for FreeTime = 20,0,-1 do
		game.ReplicatedStorage.Status.Value = "Waiting for new mission! "..FreeTime
		wait(1)
	end
	end
	
end
end

Module script (Inside of normal script)

local module = {}

local KillerChosen
local KillerInWorkspace 
local MapChosen
local PLRS = {}

local LightningOfKiller = game.ReplicatedStorage.LightningOfJeff

function module.Calibrate()
	for i, v in pairs(game.Players:GetChildren()) do
		if v then
			table.insert(PLRS, v)
		end
	end
end

function module.Intermission()
	for i = 20,0,-1 do
		game.Workspace.GameMusic.Tick:Play()
		game.ReplicatedStorage.Status.Value = "Game starting in "..i.." seconds!"
		wait(1)
	end
end

function module.ChooseTheJeff()
	
	game.ReplicatedStorage.Status.Value = "Choosing the killer..."
	
	wait(2.5)	
	local Jeff = PLRS[math.random(1,#PLRS)]
	
	if Jeff ~= nil then
		game.ReplicatedStorage.Status.Value = "The killer is "..Jeff.Name.."!"
		
		KillerChosen = Jeff
		
		for i, PLRSONE in pairs(PLRS) do
			if PLRSONE == Jeff then
				table.remove(PLRS, i)
			end
		end

	else
		game.ReplicatedStorage.Status.Value = "The killer"..Jeff.Name.." left!"
		
		game.ReplicatedStorage.KillerName.Value = ""
		Jeff = ""
		KillerChosen = ""
	end
	
	game.ReplicatedStorage.KillerName.Value = KillerChosen.Name
	
end

function module.ChooseTheMap()
	
	game.ReplicatedStorage.Status.Value = "Choosing the map..."
	
	wait(2.5)
	
	local Maps = game.ServerStorage.Maps:GetChildren()
	
	local ChosenMap = Maps[math.random(1,#Maps)]
	
	if ChosenMap ~= nil then
		game.ReplicatedStorage.Status.Value = "The map is "..ChosenMap.Name.."!"
		
		MapChosen = ChosenMap
	else
		game.ReplicatedStorage.Status.Value = "Failed to choose the map..."
	end
	
	wait(2)
	
	game.ReplicatedStorage.Status.Value = "Waiting for map to load..."
	
	ChosenMap.Parent = workspace
		
	wait(1)
	
end

function module.StartTheGame()
	
	game.ReplicatedStorage.Status.Value = "Teleporting survivors on the map"
	
	for i, v in pairs(PLRS) do
		if v then
			local HRP = v.Character:FindFirstChild("HumanoidRootPart")
			
			if not HRP then
				table.remove(PLRS, i)
			end
			
			local Spawners = MapChosen:FindFirstChild("SpawnPoints"):GetChildren()
			
			if Spawners then
				HRP.CFrame = Spawners[1].CFrame + Vector3.new(0, 6, 0)
				table.remove(Spawners, 1)
			end
		end
	end
	
	KillerChosen.Character["Body Colors"].HeadColor = BrickColor.White()
	KillerChosen.Character["Body Colors"].LeftArmColor = BrickColor.White()
	KillerChosen.Character["Body Colors"].RightArmColor = BrickColor.White()
	KillerChosen.Character["Body Colors"].LeftLegColor = BrickColor.White()
	KillerChosen.Character["Body Colors"].RightLegColor = BrickColor.White()
	KillerChosen.Character["Body Colors"].TorsoColor = BrickColor.White()
	KillerChosen.Character.Head.face.Texture = game.ServerStorage.JeffFace.Value
	KillerChosen.Character.Shirt.ShirtTemplate = game.ServerStorage.JeffShirt.Value
	KillerChosen.Character.Pants.PantsTemplate = game.ServerStorage.JeffPants.Value
	
	wait(2.5)
	
	for Countdown = 15,0,-1 do
		game.ReplicatedStorage.Status.Value = "Hide! The killer will be here in "..Countdown.." seconds!"
		wait(1)
	end
	
	game.ReplicatedStorage.Status.Value = "Hide! The killer is coming!"
	
	wait(2.5)
	
	local Songs = {game.Workspace.GameMusic.Music1, game.Workspace.GameMusic.Music2, game.Workspace.GameMusic.Music3, game.Workspace.GameMusic.Music4}
	
	local ChosenGameSong = Songs[math.random(1,#Songs)]
	ChosenGameSong:Play()
	
	if not KillerChosen then
		game.ReplicatedStorage.Status.Value = "The killer has left! Reojoin the game because im an idiot and i dont know what do i do :DDDD"
	else
		KillerChosen.Character:FindFirstChild("HumanoidRootPart").CFrame = MapChosen.KillerSpawn.CFrame + Vector3.new(0, 6, 0)
		local ClonedKnife = game.ServerStorage.Knife:Clone()
		
		ClonedKnife.Parent = KillerChosen.Backpack
		
		game.ReplicatedStorage.Status.Value = "The killer is on the map!"
	end
	
	LightningOfKiller:FireClient(KillerChosen)
	
end

return module

Thank you

1 comment

0

Wouldn't you need more than 1 player to test this. That might be the problem. I honestly didn't read through the whole script, but try testing your game in a server test to see if it works.

1 answer

✓ Accepted answer

Put a end) at the last line of each of those, that might help

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