How do i add the Loading GUI That actually loads assets like Murder Mystery 2 who have the LOADING GUI That actually loads assets?
Well we can use the contenprovider service to help us get a number of how many assets are remaining.
Make a new local script and put it inside startergui, Lets setup our variables inside the script, Im assuming that inside startergui you have a screengui named "ScreenGui" inside which you have a Frame named "Frame" and a TextLabel named "TextLabel",
local gui = script.Parent.ScreenGui --change this if you need to local text = gui.Frame.TextLabel --change this if you need to
Lets setup our variable for the service
local cp = Game:GetService("ContentProvider")
We can find how many assets are left to load by getting RequestQueueSize of the service.
We want it so that while the RequestQueueSize is still more than 0 then we want to show how many assets are left in our text label
while cp.RequestQueueSize > 0 do text.Text="Assets Remaining: "..cp.RequestQueueSize.."" wait(.5) end
Lets put everything together,
local gui = script.Parent.ScreenGui --change this if you need to local text = gui.Frame.TextLabel --change this if you need to local cp = Game:GetService("ContentProvider") while cp.RequestQueueSize > 0 do text.Text="Assets Remaining: "..cp.RequestQueueSize.."" wait(.5) end
We can also add assets we want to load in by using :Preload() of the service
local assets = {2253543, 2434541, 5133543, 2423433} --Ids to load for _, asset in ipairs(assets) do cp:Preload("http://www.roblox.com/asset/?id=" .. asset) end
^ they created a table will ids inside and then made a loop to add each id to the assets to preload.
Lets add this to our complete script,
local gui = script.Parent.ScreenGui --change this if you need to local text = gui.Frame.TextLabel --change this if you need to local cp = Game:GetService("ContentProvider") local assets = {2253543, 2434541, 5133543, 2423433} --Ids to load for _, asset in ipairs(assets) do cp:Preload("http://www.roblox.com/asset/?id=" .. asset) end while cp.RequestQueueSize > 0 do text.Text="Assets Remaining: "..cp.RequestQueueSize.."" wait(.5) end
But if you reset the startergui will be reset and this this will replay so lets prevent this from happening, Inside StarterGui there is a bool called ResetPlayerGuiOnSpawn, Turn that off and it won't reset :)
If you have any questions please ask me, Hope you found this useful :D
The ContentProvider service
local cp = game:GetService("ContentProvider") local partsToLoad = cp.RequestQueueSize while cp.RequestQueueSize > 0 do wait(1) print("Loaded "..partsToLoad-cp.RequestQueueSize.." out of "..partsToLoad) end
This is one way i found to do it, Even though the one above is more efficient.
--[[This should be a local script inside the textlabel that will show the assets loading]]-- local workspaceassets = game.Workspace:GetChildren() local replcatedastorageassets = game.ReplicatedStorage:GetChildren() local serverscriptserviceassets = game.ServerScriptService:GetChildren() local startguiassets = game.StarterGui:GetChildren() local numberofassets = #workspaceassets + #replcatedastorageassets + #serverscriptserviceassets + #startguiassets while wait() do for x = numberofassets,0,-1 do wait(0.5) script.Parent.Text = "Assets Left To Load: "..x end script.Parent.Text = "All "..numberofassets.." Have Been Loaded!" wait(1) script.Parent.Visible = false script.Parent.Parent.Parent:Destroy() end