I am having a problem with respawning a player when it dies. as sometimes the player spawn outside the map like this picture.
I think this problem started when I use ClonedMap:Destroy() after the game ended thus making the player respawning off the map.
is there any script that I can use to prevent the player from respawning off the map after it dies or when the maps changes?
here is the full code.
local PointsService = game:GetService("PointsService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local MapsFolder = ServerStorage:WaitForChild("Maps")
local Status = ReplicatedStorage:WaitForChild("Status")
local GameLength = 150
local reward = 50
while true do
Status.Value = "waiting for players"
repeat wait(1) until game.Players.NumPlayers >= 2
Status.Value = "intermission"
wait(10)
local plrs = {}
for i, player in pairs(game.Players:GetPlayers()) do
if player then
table.insert(plrs,player)
end
end
wait(2)
local AvailableMaps = MapsFolder:GetChildren()
local ChosenMap = AvailableMaps[math.random(1,#AvailableMaps)]
Status.Value = ChosenMap.Name.." Chosen"
local ClonedMap = ChosenMap:Clone()
ClonedMap.Parent = workspace
local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")
if not SpawnPoints then
print ("spawnpoint not founds!")
end
local AvailableSpawnPoints = SpawnPoints:GetChildren()
for i, player in pairs(plrs) do
if player then
character = player.Character
if character then
character:FindFirstChild("HumanoidRootPart").CFrame = AvailableSpawnPoints[1].CFrame + Vector3.new(0,20,0)
table.remove(AvailableSpawnPoints,1)
local Sword = ServerStorage.Sword:Clone()
Sword.Parent = player.Backpack
local GameTag = Instance.new("BoolValue")
GameTag.Name = "GameTag"
GameTag.Parent = player.Character
else
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
table.remove(plrs,x)
else
if character:FindFirstChild("GameTag") then
print(player.Name.." is still in the game!")
else
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 left"
if #plrs == 1 then
Status.Value = "the winner is "..plrs[1].Name
plrs[1].leaderstats.Bucks.Value = plrs[1].leaderstats.Bucks.Value + reward
break
elseif #plrs == 0 then
Status.Value = "nobody won"
break
elseif i == 0 then
Status.Value = "Time up"
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
else
if character:FindFirstChild("GameTag") then
character.GameTag:Destroy()
end
if player.Backpack:FindFirstChild("Sword") then
player.Backpack.Sword:Destroy()
end
if player.Backpack:FindFirstChild("Sword") then
character.Sword:Destroy()
end
end
player:LoadCharacter()
end
ClonedMap:Destroy()
Status.Value = "Game Ended"
wait(2)
end

2 comments
Maybe You can have the players respawn in a remote area then CFraming thier root parts into your desired location may work.
Set the CFrame of the HumanoidRootPart to a part at your spawn map.