How Integrations Work#
A loading screen runs before any framework has loaded the player, so Loading Screen Creator asks very little of the rest of your server. Each framework has a small, open bridge in custom/, and only two things go through it: who is an admin, and how to show a notification.
Framework | Detected by | Admin check | Notifications |
|---|---|---|---|
ESX |
| The player's group against | ox_lib if running, otherwise ESX's own |
QBCore · Qbox |
| The framework's permission check, for each group in | ox_lib if running, otherwise |
qs-core |
| The player's group against | qs-interface, then ox_lib, then ESX's |
Standalone | Nothing found | ACE only | ox_lib if running, otherwise the chat |
The ACE (
command.loadingcreator) works on every framework; the groups are an extra route on top. And if a notification system fails, the message falls back to the chat, so an admin is never left without an answer.
Multicharacter and Spawn Selectors#
The loading screen is built to hand the player straight to the next screen, with no gap of empty world in between. That needs whatever comes next to say when it is ready.
Multicharacter#
Nothing to configure. Multicharacter closes the loading screen the moment character selection is ready, and because it is listed in Config.HandoffResources, the safety ceiling rises to three minutes while it runs — a slow PC can need that long to stream the character scene.
Any other multicharacter or spawn selector#
Close the screen, client side, from the point where your own interface is ready. Either line works:
exports['qs-loadingscreen']:CloseLoadingScreen()
-- or, without a hard dependency on the resource
TriggerEvent('qs-loadingscreen:fadeOut')If your resource needs more than 45 seconds on a slow PC before it can take over, add it to the list so it gets the longer ceiling:
Config.HandoffResources = { 'qs-multicharacter', 'my-multicharacter' }A resource that calls FiveM's own ShutdownLoadingScreenNui works as well. Loading Screen Creator notices that the player has loaded — through esx:playerLoaded, QBCore:Client:OnPlayerLoaded or the isLoggedIn state bag — and stops talking to a screen that is already gone.
Overriding Detection#
The framework is detected the first time it is needed, by looking for a started resource from Config.Frameworks. Set Config.Framework to skip detection — worth doing when two frameworks run at once, or yours has been renamed:
-- Auto, the default
Config.Framework = false
-- Forced
Config.Framework = 'qb' -- 'esx' · 'qb' · 'qs' · 'standalone'
-- Which resource maps to which folder in custom/
Config.Frameworks = {
['qs-core'] = 'qs',
['es_extended'] = 'esx',
['qb-core'] = 'qb',
['qbx_core'] = 'qb',
}Adding a Framework#
Supporting a framework that is not listed takes one folder. The surface is small on purpose: the resource only needs to know whether someone is an admin and how to show them a message.
Copy the closest folder
Duplicate
custom/esx(orqb,qs,standalone) and give it any name, for examplecustom/myframework.Fill in the two files
The server file answers who is an admin; the client file shows a message. Replace the calls to
my-corewith your framework's own:lua -- custom/myframework/server.lua local framework = {} function framework:getGroup(source) return exports['my-core']:GetPlayerGroup(source) end function framework:isAdmin(source, groups) local group = self:getGroup(source) for _, allowed in ipairs(groups) do if group == allowed then return true end end return false end return frameworklua -- custom/myframework/client.lua local framework = {} function framework:notify(message, kind) -- kind is 'error' or nil exports['my-core']:Notify(message, kind or 'inform') end return frameworkPoint the config at it
Set
Config.Framework = 'myframework', or add your core resource toConfig.Frameworksso it is detected on its own. Restart the resource.
Languages#
The creator ships in 41 languages in locales/: Arabic, Bulgarian, Bengali, Catalan, Czech, Danish, German, Greek, English, Spanish, Estonian, Persian, Finnish, French, Hebrew, Hindi, Croatian, Hungarian, Indonesian, Italian, Japanese, Korean, Lithuanian, Latvian, Malay, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Swedish, Swahili, Thai, Turkish, Ukrainian, Urdu, Vietnamese and Chinese.
Set it in the config, or once in server.cfg for every Quasar resource at the same time:
-- shared/config.lua
Config.Locale = 'es'# server.cfg
setr qs:locale "es"A key missing from a translation falls back to English. The language covers the creator; what the loading screen itself says is whatever you type into the theme, in any language you like.



