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.
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)