So I keep getting an error telling me "Main" is not part of the playergui. I added a line of code to the main script to tell it to wait until it is but it still gives me that error each time. Its like the script is running faster than the startergui can put the gui "Main" in the player
local PlayerBase = game:GetService("Players")
PlayerBase.PlayerAdded:connect(function(PlayerUI)
repeat wait() until PlayerUI.PlayerGui:WaitForChild("Main")
end)
--// Tables
winners = {}
--// Modules
Settings = require (script.Settings)
--// Game Variables
Intermission = Settings.Intermission
GameTime = Settings.GameTime
--// Functions
function ChangeText(Text)
local Players = game.Players:GetPlayers()
for i = 1, #Players do
Players[i].PlayerGui.Main.Time.Text = Text
end
end
function Winners(Text)
local Players = game.Players:GetPlayers()
for i = 1, #Players do
Players[i].PlayerGui.Main.YouWin.Text = Text
end
end
function GetMap()
local Maps = game.ReplicatedStorage.Maps:GetChildren()
local PickMap = math.random(1, #Maps)
local SelectedMap = Maps[PickMap]:Clone()
SelectedMap.Name = 'Map'
SelectedMap.Parent = game.Workspace
end
function RemoveMap()
if game.Workspace:FindFirstChild('Map') then
game.Workspace.Map:Remove()
end
end
function Alive()
local Players = game.Players:GetPlayers()
for i = 1, #Players do
Players[i].Alive.Value = true
end
end
--// Main Script
game:GetService("Players").PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(char)
local hum = char:WaitForChild("Humanoid")
hum.Died:Connect(function()
if game.Workspace.GameActive.Value == true and player.Playing.Value == true then
player.PlayerGui.Main.YouLose.Text = ('Darn! Try Again!')
player.Alive.Value = false
player.Playing.Value = false
wait(1.5)
player.PlayerGui.Main.YouLose.Text = ('')
else
player.Alive.Value = false
player.Playing.Value = false
end
end)
end)
end)
while true do
for i = Intermission, 0, -1 do
ChangeText('Intermission: ' ..i)
wait(1)
end
local Players = game.Players:GetPlayers()
for i = 1, #Players do
Players[i].Playing.Value = true
end
Alive()
wait()
GetMap()
wait()
ChangeText('Loading Map')
wait(1)
ChangeText('Loading Map.')
wait(1)
ChangeText('Loading Map..')
wait(1)
ChangeText('Loading Map...')
wait(2)
ChangeText('Loaded')
wait()
game.Workspace.GameActive.Value = true
local Players = game.Players:GetPlayers()
for i = 1, #Players do
if Players[i].Playing.Value == true and Players[i].Alive.Value == true then
local Spawn = game.Workspace.Map.Spawns.Spawn
Players[i].Character.HumanoidRootPart.CFrame = CFrame.new(Spawn.Position)
Spawn:remove()
Players[i].Character.Humanoid.WalkSpeed = 0
end
end
for i = 5, 0, -1 do
ChangeText('Game Starting In: ' ..i)
wait(1)
end
local Players = game.Players:GetPlayers()
for i = 1, #Players do
if Players[i].Playing.Value == true then
Players[i].Character.Humanoid.WalkSpeed = 16
end
end
ChangeText('Begin!')
game.Workspace.AllowEntry.Value = true
wait(1)
for i = GameTime, 0, -1 do
ChangeText('Time Remaining: ' ..i)
wait(1)
ChangeText('GAME OVER')
end
local Players = game.Players:GetPlayers()
for i = 1, #Players do
if Players[i].Playing.Value == true and Players[i].Alive.Value == true then
table.insert(winners, 1, Players[i].Name)
Players[i].leaderstats.Coins.Value = Players[i].leaderstats.Coins.Value + 5
Players[i].leaderstats.Wins.Value = Players[i].leaderstats.Wins.Value + 1
Players[i].Character:BreakJoints()
Players[i].Playing.Value = false
Players[i].PlayerGui.Main.YouWin.Text = ('You Win! +5 Coins!')
wait(5)
end
end
RemoveMap()
game.Workspace.GameActive.Value = false
game.Workspace.AllowEntry.Value = false
for i,v in pairs (winners) do print(v)
end
wait(4)
end

2 comments
Try putting the repeat at the very top so none of the code will even run without it.
(Assuming your game is FE) If this is in a script then the client's PlayerGui is empty from the server