84 lines
2.0 KiB
Lua
84 lines
2.0 KiB
Lua
--!native
|
|
--!optimize 2
|
|
|
|
local Players = game:GetService("Players")
|
|
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
|
|
|
local LoadingScreen = require(ReplicatedStorage.Client.LoadingScreen)
|
|
local ModLoader = require(ReplicatedStorage.Shared.ModLoader)
|
|
local ChunkManager = require(ReplicatedStorage.Shared.ChunkManager)
|
|
local PlacementManager = require(ReplicatedStorage.Shared.PlacementManager)
|
|
|
|
local Bootstrap = {}
|
|
|
|
local started = false
|
|
|
|
local function ensureFlag(name: string)
|
|
local objects = ReplicatedStorage:WaitForChild("Objects")
|
|
local existing = objects:FindFirstChild(name)
|
|
if existing and existing:IsA("BoolValue") then
|
|
return existing
|
|
end
|
|
local ready = Instance.new("BoolValue")
|
|
ready.Name = name
|
|
ready.Value = true
|
|
ready.Parent = objects
|
|
return ready
|
|
end
|
|
|
|
local contentProvider = game:GetService("ContentProvider")
|
|
|
|
local function waitForGameLoaded()
|
|
if game:IsLoaded() then
|
|
return
|
|
end
|
|
game.Loaded:Wait()
|
|
end
|
|
|
|
function Bootstrap.start()
|
|
if started then
|
|
return
|
|
end
|
|
started = true
|
|
|
|
contentProvider:PreloadAsync(game:GetDescendants())
|
|
|
|
ensureFlag("ClientReady")
|
|
local screen = LoadingScreen.mount()
|
|
|
|
screen.setStatus("Connecting...")
|
|
screen.setDetail("Waiting for server")
|
|
screen.setProgress(0.2)
|
|
|
|
task.wait(1)
|
|
|
|
waitForGameLoaded()
|
|
|
|
local modsFolder = ReplicatedStorage:WaitForChild("Mods")
|
|
local totalMods = #modsFolder:GetChildren()
|
|
local modProgressWeight = 0.6
|
|
|
|
ModLoader.loadModsC(function(index, total, modInstance, success)
|
|
total = total > 0 and total or math.max(totalMods, 1)
|
|
local ratio = index / total
|
|
screen.setStatus(`Modloading progress: {index}/{total}`)
|
|
screen.setDetail(`Loading {modInstance.Name}`)
|
|
screen.setProgress(0.05 + ratio * modProgressWeight)
|
|
if not success then
|
|
screen.setDetail(`Failed loading {modInstance.Name}; continuing`)
|
|
end
|
|
end)
|
|
|
|
ensureFlag("CSMLLoaded") -- needed
|
|
|
|
screen.setStatus("Joining world...")
|
|
screen.setDetail("Syncing with server")
|
|
screen.setProgress(0.7)
|
|
|
|
task.wait(0.5)
|
|
|
|
screen.close()
|
|
end
|
|
|
|
return Bootstrap
|