This part should create a localscript and gui in ReplicatedFirst.
local Loading = Instance.new("LocalScript") Loading.Name = "Loading" Loading.Parent = game.ReplicatedFirst local Main = Instance.new("ScreenGui") Main.Name = "Main" Main.Parent = Loading Main.ZIndexBehavior = Enum.ZIndexBehavior.Sibling local Image = Instance.new("ImageLabel") Image.Name = "Image" Image.Parent = Main Image.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Image.BorderColor3 = Color3.fromRGB(0, 0, 0) Image.BorderSizePixel = 0 Image.Size = UDim2.new(1, 0, 1, 0) local Label = Instance.new("TextLabel") Label.Name = "Label" Label.Parent = Image Label.BackgroundColor3 = Color3.fromRGB(0, 0, 0) Label.BackgroundTransparency = 0.500 Label.BorderColor3 = Color3.fromRGB(0, 0, 0) Label.BorderSizePixel = 0 Label.Position = UDim2.new(0.25, 0, 0.8, 0) Label.Size = UDim2.new(0.5, 0, 0.1, 0) Label.Font = Enum.Font.Highway Label.Text = "Loading . . ." Label.TextColor3 = Color3.fromRGB(0, 0, 0) Label.TextScaled = true Label.TextSize = 15 Label.TextWrapped = true
This part goes inside the loading script in ReplicatedFirst. It will do the 'loading...' until the player has a BoolValue inside them with the name 'Loaded' and it's value is true.
local Players = game:GetService("Players"); local ReplicatedFirst = game:GetService("ReplicatedFirst"); ReplicatedFirst:RemoveDefaultLoadingScreen(); local Player = Players.LocalPlayer; local PlayerGui = Player:WaitForChild("PlayerGui"); local Loading = script.Loading; script.Parent = PlayerGui; local dot = 0; repeat wait(1) if dot == 0 then Loading.Image.Label.Text = "Loading"; dot = 1; elseif dot == 1 then Loading.Image.Label.Text = "Loading ."; dot = 2; elseif dot == 2 then Loading.Image.Label.Text = "Loading . ."; dot = 3; else Loading.Image.Label.Text = "Loading . . ."; dot = 0; end until Player:FindFirstChild("Loaded") and Player:FindFirstChild("Loaded").Value == true;
5 seconds after a player joins, the loading gui will stop. [Script in ServerScriptService]
game.Players.PlayerAdded:Connect(function(player) wait(5) local a = Instance.new("BoolValue", player) a.Name = "Loaded" a.Value = player end)
You can make a ScreenGui with a frame inside(Rename the screen GUI to "LoadingScreen"). Set the frame's offsets to 0 and scale 1 (on both X and Y) and center the frame. Then add a text label and change it's text to "Loading Game, please wait"(or whatever you want). And if you want the Gui to disappear after something happened(for example Player joined the game) You can do it by using a script similar to this(script should be in ServerScriptService)
local Frame = game.Players.LocalPlayer.PlayerGui.LoadingScreen.Frame Frame.Visible = true game.Players.PlayerAdded:Connect(function(player) -- script runs when the player joins wait(10) --change 10 to whatever time you want the loading to take in seconds Frame.Visible = false end)
Hope this helped.