Custom DLC packs: cars & clothes
Add-on cars, clothes and other game content are shipped as DLC packs, the same way as on
RAGE:MP. Each pack is one dlc.rpf.
Where to put them
client_packages/
└─ game_resources/
└─ dlcpacks/
├─ mycars/
│ └─ dlc.rpf
└─ myclothes/
└─ dlc.rpf
Any folder in dlcpacks/ with a dlc.rpf is picked up automatically when the server starts.
You do not need to list packs in conf.json. On start the log shows what is served:
dlcpacks: serving 2 DLC file(s), 466 MB (streamed from disk)
How packs reach players
- When the server starts, it hashes each pack once. The hashes are kept in
clientfile-hashes.cache, so unchanged packs are not re-hashed on the next start. - The launcher downloads the packs before the game starts, over HTTP on port + 1.
- When the game starts, the client mounts the packs straight from the launcher's download cache, so each pack is stored only once on disk.
- Players download only the packs that changed since their last visit.
Packs are encrypted in transit (per-session AES-256-GCM) and on the player's disk, and their names are masked, so players cannot simply copy your content out of their game folder.
Limits
| What | Limit |
|---|---|
| Custom vehicles | 300+ per server (the vehicle model pool is raised; the archive table has 8192 slots) |
| Clothing | 600+ drawables per component; drawable ids above 255 are sent correctly |
| One pack over the game connection | ~31 MB. Bigger packs are always delivered by the launcher |
Changing packs while the server runs
GTA cannot load a new DLC pack into a running game, so:
- A player who is in game when a pack changes sees a message explaining that the game has to restart. The game then closes cleanly, about 15 seconds later.
- On the next start the launcher downloads the new pack and the game loads it.
- Players who were not connected get it on their next start.
Change big packs during a maintenance window, not at peak time.
Using the content in scripts
Use the model and drawable ids exactly as on RAGE:MP:
// server
const veh = mp.vehicles.new(mp.joaat('18performante'), player.position);
player.setClothes(11, 400, 0, 0); // a top with drawable id 400 from your pack
// client
mp.players.local.setComponentVariation(11, 400, 0, 0);
Tips
- Keep cars and clothes in separate packs, so a clothing update does not make everyone download your cars again.
- A pack with errors in its
content.xml/setup2.xmlcan stop the game from starting. Test a new pack locally before you put it on the live server.