Clothing, EUP, and asset policy
Clothing and EUP packs are some of the most requested additions to a server. They are also some of the easiest to do badly. A bad pack balloons your download size, eats streaming memory, and can put you on the wrong side of asset licensing. EUP means Emergency Uniform Pack: police, medical, fire, and other uniform variations for player models. This lesson builds one tiny streamed resource so you can see the mechanism for real, then teaches you how to keep packs fast and clean.
Build it
Make the resource folder
Inside your server's resources folder, create this layout. The stream/ folder name is not optional. FiveM scans any folder named exactly stream/ and auto-registers every asset file inside it.
resources/qu_stream_proof/
fxmanifest.lua
server.lua
stream/
Leave stream/ empty for the structural check. When you validate a real pack later, its valid .ydd, .ytd, .ymt, .ytyp, or other documented files go here. Renaming an empty text file to .ytyp does not create a valid asset and can produce a misleading or broken test.
Write fxmanifest.lua
The fxmanifest.lua is the resource's manifest: the file that tells FiveM what the resource is and what scripts to load. Open it and paste this:
fx_version 'cerulean'
game 'gta5'
server_script 'server.lua'
cerulean is just the name of the current manifest format version. No lua54 'yes' line is needed. When a real prop pack includes a .ytyp, copy the pack author's manifest entry, commonly data_file 'DLC_ITYP_REQUEST' 'stream/name.ytyp'. Do not add a data_file entry for a file that does not exist, and do not invent one for a clothing pack that does not ship a .ytyp.
Write the proof line
Open server.lua and paste this. It listens for the resource starting and prints one line confirming the stream/ folder went live:
AddEventHandler('onResourceStart', function(resourceName)
if resourceName ~= GetCurrentResourceName() then return end
print('[qu_stream_proof] resource started; validate real assets in the client')
end)
This print proves only that the server resource loaded. A server-side onResourceStart handler cannot prove that a client downloaded or rendered an asset. The resourceName check is a guard so the handler reacts only to this resource, not every resource on the server.
Start it
Open server.cfg and add this line. ensure is the command that starts a resource (and restarts it if it was already running):
ensure qu_stream_proof
Save, then run this in the txAdmin Live Console (the in-dashboard server terminal):
restart qu_stream_proof
Measure it in resmon
In your own FiveM client connected to the server, open the F8 console (the in-game developer console you open by pressing F8) and run:
strmem 1
Only use the streaming diagnostics after adding a valid, licensed asset. An empty folder has nothing meaningful to measure. strmem is a developer command. On a normal client it is blocked with Access denied / disabled in production mode. Relaunch FiveM with the launch arg set moo 31337 or a non-production update channel (same for resmon, strdbg, and strlist), then reconnect and run strmem 1. Use the official client-console reference linked below, and confirm the asset visually in game as well as in the diagnostics.
Keep reading the full lesson
Sign in to start, then unlock every step of this lesson and the full FiveM School with a membership.
- How it works
- If something went wrong
- What you can do now
- Try it yourself
The remainder of Clothing, EUP, and asset policy is available to FiveM School members.