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

How to I make that if a player dies, they get respawned to the lobby?

Basically, in my code, when someone dies during the round, they don't get respawned to the lobby. Here is my code:

-- Define variables

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local ServerStorage = game:GetService("ServerStorage")

local MapsFolder = ServerStorage:WaitForChild("Maps")

local Status = ReplicatedStorage:WaitForChild("Status")

local GameLength = 110

local reward = 25

-- Game loop

while true do
	
	Status.Value = "Waiting for enough players"
	
	repeat wait(1) until game.Players.NumPlayers >= 2
	
	Status.Value = "Get Ready..."
	
	wait(8)
	
	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 AvailbleMaps = MapsFolder:GetChildren()
	
	local ChosenMap = AvailbleMaps[math.random(#AvailbleMaps)]
	
	Status.Value = ChosenMap.Name.." Chosen"
	
	wait(3)
	
	local ClonedMap = ChosenMap:Clone()
	ClonedMap.Parent = workspace
	
	-- Teleport players to the map
	
	local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")
	
	if not SpawnPoints then
		print("SpawnPoints not found!")
	end
	
	local AvailbleSpawnPoints = SpawnPoints:GetChildren()
	
	for i, player in pairs(plrs) do
		if player then
			character = player.Character
			
			if character then
				-- Teleport them
				
				character:FindFirstChild("HumanoidRootPart").CFrame = AvailbleSpawnPoints[1].CFrame + Vector3.new(0,10,0)
				table.remove(AvailbleSpawnPoints,1)
				
				
				-- Give them a Hyperlaser Gun
				
				local HyperlaserGun = ServerStorage.HyperlaserGun:Clone()
				HyperlaserGun.Parent = player.Backpack
				
				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)
	
	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
					character.GameTag:Destroy()
				else
					if character:FindFirstChild("GameTag") then
						-- They are still alive
						print(player.Name.." is still alive")
					else
						-- They are dead
						table.remove(plrs,x)
						print(player.Name.." has been removed")
					end
				end
			else
				table.remove(plrs,x)
				print(player.Name.." has been removed")
			end
		end
		
		Status.Value = "There are "..i.." seconds remaining, and "..#plrs.." players alive"
		
		if #plrs == 1 then
			-- Last person standing
			Status.Value = "The winner is "..plrs[1].Name
			plrs[1].leaderstats.LaserBucks.Value = plrs[1].leaderstats.LaserBucks.Value + reward
			break
		elseif #plrs == 0 then
			Status.Value = "No one survived!"
			break
		elseif i == 0 then
			Status.Value = "Time is up!"
			break
		end
		
		wait(1)
	end
	
	print("End of game")
	
	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
			
			if player.Backpack:FindFirstChild("HyperlaserGun") then
				player.Backpack.HyperlaserGun:Destroy()
			end
			
			if character:FindFirstChild("HyperlaserGun") then
				character.HyperlaserGun:Destroy()
			end
		
		end
		
		player:LoadCharacter()
	end
	
	ClonedMap:Destroy()
	
	Status.Value = "Round ended"
	
	wait(2)
end

Here is the part where the script recognizes that someone died during the game:

	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
					character.GameTag:Destroy()
				else
					if character:FindFirstChild("GameTag") then
						-- They are still alive
						print(player.Name.." is still alive")
					else
						-- They are dead
						table.remove(plrs,x)
						print(player.Name.." has been removed")
					end
				end
			else
				table.remove(plrs,x)
				print(player.Name.." has been removed")
			end
		end

An early thanks to all.

1 comment

0

I HIGHLY recommend using teams for this usecase, it will make your life a lot easier.

1 answer

Im not sure where you want the players to spawn specifically but if you want them to spawn at the position they died at you could try this

local Players = game:GetService("Players")

-- A table of all the players' character cframe
local Positions = {}


Players.PlayerAdded:Connect(function(Player)
	Player.CharacterAdded:Connect(function(Character) 
		if Positions[Player] then
			local Root = Character:WaitForChild("HumanoidRootPart")
			Root.CFrame = Positions[Player] -- Teleport the player to the position he died at
			Positions[Player] = nil -- Remove the position
		end
	end)
	Player.CharacterDied:Connect(function(Character)
		local Root = Character:FindFirstChild("HumanoidRootPart")
		if Root then
			Positions[Player] = Root.CFrame -- Save the position
		end
	end)
end)

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