So I'm making a sword fight game. After defeating the other players, the last player standing doesn't get teleported back to the lobby, and the game doesn't get ready for the next round, and the status bar gui forever says (Playername) won! I've tested this in a real game with friends, the output doesn't say anything wrong, and the script is in ServerScriptStorage.
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 = 60
local reward = 1
--Game loop (Plrs = Players)
while true do
Status.Value = "Waiting for players"
repeat wait(1) until game.Players.NumPlayers >= 2
Status.Value = "Intermission"
wait(30)
local plrs = {}
for i, player in pairs(game.Players:GetPlayers()) do
if player then
table.insert(plrs,player) --Add each player into Players table
end
end
wait(5)
local AvailableMaps = MapsFolder:GetChildren()
local ChosenMap = AvailableMaps[math.random(1,#AvailableMaps)]
Status.Value = ChosenMap.Name.." Chosen"
local ClonedMap = ChosenMap:Clone()
ClonedMap.Parent = workspace
--Teleport Players to map
local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")
if not SpawnPoints then
print("Map 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,10,0)
table.remove(AvailableSpawnPoints,1)
--Give them a sword
local Sword = ServerStorage.Sword:Clone()
Sword.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 = "Game Starting..."
wait(5)
for i = GameLength,0,-1 do
for x, player in pairs(plrs) do
if player then
character = player.Character
if not character then
--Left Game or something
table.remove(plrs,x)
else
if character:FindFirstChild("GameTag") then
--They are still alive
print(player.Name.." is still alive.")
else
--They are ded
table.remove(plrs,x)
print(player.Name.." has died!")
end
end
else
table.remove(plrs,x)
print(player.Name.." has died!")
end
end
Status.Value = "Time left: "..i.." seconds. | Players alive: "..#plrs.."."
if #plrs == 1 then
--Last Player Stading
Status.Value = plrs[1].Name.." won!"
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's up!"
break
end
wait(1)
end
print("Game has ended.")
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
if player.Backpack:FindFirstChild("Sword") then
player.Backpack.Sword:Destroy()
end
if character:FindFirstChild("Sword") then
character.Sword:Destroy()
end
end
player:LoadCharacter()
end
ClonedMap:Destroy()
Status.Value = "Game ended."
wait(2)
end
