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
