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

I keep getting a message saying 'end' expected (to close 'while' at line 17) near '<eof>', help??

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 = 60

local reward = 25

--Game Loop

while true do

Status.Value = "Waiting for enough 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)-- Add each player into plrs table

end

end

wait (2)

local AvaliableMaps = MapsFolder:GetChildren()

local ChosenMap = AvaliableMaps[math.random(1,#AvaliableMaps)]

Status.Value = ChosenMap.Name.." Chosen"

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 AvaliableSpawnPoints = SpawnPoints:GetChildren()

for i, player in pairs(plrs) do

if player then

character = player.Character

if character then

--Teleport them

character:FindFirstChild("HumanoidRootPart").CFrame = AvaliableSpawnPoints[1].CFrame

table.remove(AvaliableSpawnPoints,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 = "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

else

if character:FindFirstChild("GameTag") then

--Still alive

print (player.name.." is still in the game!")

else

--They are dead

table.remove(plrs, x)

print(player.name.." has been eliminated!")

end

end

else

table.remove(plrs, x)

print(player.name.." has been eliminated!")

end

end

Status.Value = "There are "..i.." seconds remaining, and "..#plrs.." players left"

if #plrs == 1 then

--last person standing

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's 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()

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

2 comments

0

Please fix code formatting

0

Please, use the button in the editor that lets you post code. It is way too hard to read this.

2 answers

As xXCyberProXx said, you need a closing end to close your while loop.

Here's the formatted code, with an end added on line 145.

-- 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 = 25

-- Game Loop
while true do
  Status.Value = "Waiting for enough 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)--Add each player into plrs table
    end
  end

  wait (2)

  local AvaliableMaps = MapsFolder:GetChildren()
  local ChosenMap = AvaliableMaps[math.random(1,#AvaliableMaps)]

  Status.Value = ChosenMap.Name.." Chosen"

  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 AvaliableSpawnPoints = SpawnPoints:GetChildren()

  for i, player in pairs(plrs) do
    if player then
      character = player.Character
      if character then
        --Teleport them
        character:FindFirstChild("HumanoidRootPart").CFrame = AvaliableSpawnPoints[1].CFrame
        table.remove(AvaliableSpawnPoints,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 = "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
        else
          if character:FindFirstChild("GameTag") then
            --Still alive
            print (player.name.." is still in the game!")
          else
            --They are dead
            table.remove(plrs, x)
            print(player.name.." has been eliminated!")
          end
        end
      else
        table.remove(plrs, x)
        print(player.name.." has been eliminated!")
      end
    end

    Status.Value = "There are "..i.." seconds remaining, and "..#plrs.." players left"

    if #plrs == 1 then
      --last person standing
      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’s 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()

        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
end

1 comment

0

Thank you for making the code readable. Indentation is a powerful tool that actually helps avoid these kinds of issues.

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