So, I have this round script and it works fine, but I want the player to respawn at one of the spawns when dead, instead of respawning in the lobby.

The round system goes like this...

  • Intermission countdown begins

  • A map or a specific map is chosen

  • Players are teleported to a spawn by their "HumanoidRootParts". The spawn that was picked for that player is then removed from a table so it doesn't get called again.

The problem here is that I'm not sure as to how they would respawn at one of spawns when dead. I've tried doing this by using the same lines of code which teleports them to the spawns, but rather this happens repetitively and the player respawns at nearly all the spawns. This shouldn't be happening, and should only happen once. After around 10 seconds, I get an error in the output which states "ServerScriptService.RoundScript: 132: attempt to index nil with CFrame". Why is this happening? Is this because both the spawn functions are interfering? Additionally, it seems to be repetitive almost in like a loop, because my output keeps printing the relative print that fallows this spawning function, e.g "has been removed(*10). Is there any more efficient way to do this, I feel like I'm missing something here. I've been stuck on this for sometime and have not found any way to solve it. This is my first post and any help would greatly appreciable. Thankyou!

This is the round script,

	-- Define Variables
	
	local ReplicatedStorage = game:GetService("ReplicatedStorage")
	
	local ServerStorage = game:GetService("ServerStorage")
	
	local MapsFolder = ServerStorage:WaitForChild("Maps")
	
	local Status = ReplicatedStorage:WaitForChild("Status")
	
	local GameLength = 240
	
	local cashreward = 25

	local gemsreward = 5
	
	local trophiesreward = 25

	local TweenService = game:GetService("TweenService")

    local statustextlabel = game.StarterGui.Status.TextLabel

	-- Game Loop
	
	while true do
	
	    Status.Value = "Waiting for enough Players"
		
		repeat wait(1) until #game:GetService('Players'):GetPlayers() >= 1
	
	    Status.Value = "Intermission"
	 
	    wait(10)
	
	    local plrs = {}
	
	    for i, player in pairs(game.Players:GetPlayers())do
	        if player then
	        table.insert(plrs,player) -- Add each player into plrs table
	   end
	end
	
	wait(2)
	
	local AvailableMaps = MapsFolder:GetChildren()
	    
	local ChosenMap = AvailableMaps[math.random(1,#AvailableMaps)]
	
	Status.Value = " Teleporting to "..ChosenMap.Name..""
	
	local ClonedMap = ChosenMap:Clone()
	ClonedMap.Parent = workspace
	wait(2)
	
	-- Teleport players to the map
	
	local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")
	
	if not SpawnPoints then
	    print("Spawnpoints not found!")
	end
	
	local AvailableSpawnPoints = SpawnPoints:GetChildren()
	
	for i, player in pairs(plrs)do
	    if player then
	        character = player.Character
	
	        if character then
	            -- Teleport them
	            
	            character:FindFirstChild("HumanoidRootPart").CFrame = AvailableSpawnPoints[1].CFrame + Vector3.new(0,5,0)
				 table.remove(AvailableSpawnPoints,1)
				
	            -- Give them a sword 
	       		local equipped = game.ServerStorage.PlayerData[player.Name].Equipped
				
				if equipped.Value ~= "" then
					local weapon = game.ServerStorage.Items[equipped.Value]:Clone()
					weapon.Parent = player.Backpack
				else
					local Sword = ServerStorage.Sword:Clone()
	            	Sword.Parent = player.Backpack
				end
			
				local equipped2 = game.ServerStorage.PlayerData[player.Name].Equipped2

				if equipped2.Value ~= "" then
					local weapon2 = game.ServerStorage.Items[equipped2.Value]:Clone()
					weapon2.Parent = player.Backpack
				else
					local Gun1 = ServerStorage.Gun1:Clone()
					Gun1.Parent = player.Backpack
				end
	        
	            local GameTag = Instance.new("BoolValue")
	            GameTag.Name = "GameTag"
	            GameTag.Parent = player.Character
	
	        else
	            -- There is no character
	            if not player then
	                table.remove(plrs,i)
	end
	end
	end
	end
	
	
	Status.Value = "Get ready to play!"
    wait(2)
    
	Status.Value = "Be the last one standing, you only have one chance!"
	wait(2)
	
	for i = GameLength,0,-1 do
	
	for x, player in pairs(plrs)do
	if player then
	
	 	character = player.Character
				 	
		if not character then
	     -- Left the game
		table.remove(plrs,x)
	 else
	 if character:FindFirstChild("GameTag")then
	     -- They are still alive
	     print(player.Name.." is still in the game!")
	else
		-- They are dead				
		character:FindFirstChild("HumanoidRootPart").CFrame = AvailableSpawnPoints[2].CFrame + Vector3.new(0,5,0)
		table.remove(AvailableSpawnPoints,2)
		print(player.Name.." has been removed!")	
	end	
	end																
	else 								
		print(player.Name.." has been removed!")	
	end
	end				
				
		Status.Value = "There are "..i.." seconds remaining, and "..#plrs.." players left"
		
		
		if plrs[1].leaderstats.Kills.Value >= 30 then
	    -- Last person standing    
	    Status.Value = "The winner is "..plrs[1].Name
	    plrs[1].leaderstats.Coins.Value = plrs[1].leaderstats.Coins.Value + cashreward
		plrs[1].leaderstats.Gems.Value = plrs[1].leaderstats.Gems.Value + gemsreward 
		plrs[1].leaderstats.Trophies.Value = plrs[1].leaderstats.Trophies.Value + trophiesreward
			
		break
	 elseif #plrs == 0 then
	    Status.Value = "Nobody won!"
	    break
	 elseif i == 0 then
	    Status.Value = "Time up!"
	    break	
		end	
		
	    wait(1)
	end
	
	print("End of game")
	
	wait(2)
	
	for i, player in pairs(game.Players:GetPlayers()) do
	    character = player.Character
	
	    if not character then
	    -- Ignore them
	 	else
		
		     if character:FindFirstChild("GameTag") then
		         character.GameTag:Destroy()
			end
		
			for _, tool in pairs(player.Backpack:GetChildren()) do
				if tool:FindFirstChild("Price") then
					tool:Destroy()
				end
			end
			
			for _, tool in pairs(character:GetChildren()) do
				if tool:FindFirstChild("Price") then
					tool:Destroy()
				end
			end
			
		end
		
		player:LoadCharacter()
	end
		
	ClonedMap:Destroy()
		
	Status.Value = "Game ended"  
	 
	wait(2)
end