Before You Begin#
Before installing Weapon Skin Creator, make sure your server meets the minimum requirements. Three things are mandatory; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
oxmysql | Required | Database access. The tables create themselves. |
ox_lib | Required | Callbacks, keybinds and prompts. |
OneSync | Required | Skins follow each player through state bags. |
Framework | Optional | ESX, QBCore or Qbox — auto-detected. Standalone works for trying it out; nothing is charged. |
Inventory | Optional | ox_inventory or qs-inventory let a skin belong to one exact gun, by its serial. Without one, a skin belongs to the weapon type. |
Target | Optional | ox_target, qtarget or qb-target. Without one, shops use an on-screen prompt and a key. |
qs-textui / qs-interface | Optional | Nicer prompts, progress bars and HUD hiding. ox_lib is used otherwise. |
Everything framework- or third-party-specific sits behind a small bridge file, and the resource picks the right one by looking at what is already running:
Layer | Detected |
|---|---|
Framework | es_extended → esx · qb-core → qb · qbx_core → qb · none → standalone |
Inventory | ox_inventory · qs-inventory · none → standalone |
Target | ox_target → qtarget → qb-target |
Prompts | qs-textui → ox_lib text UI |
Every optional integration degrades silently. If a resource is missing, that feature simply stands down — nothing errors. Integrations has the details and how to pin one by hand.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Downloading Weapon Skin Creator#
After purchasing Weapon Skin Creator, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Weapon Skin Creator.
After extracting the download, you should have the following folder:
[weaponskin-creator]/
├── qs-weaponskin-creator/ -- the script
├── qs-weaponskin-pool/ -- the shells skins are drawn on, pre-built
├── qs-weaponskin-data/ -- YOUR data, filled on the first start
└── [sql]/ -- the schema, only for importing by handResource | What it is |
|---|---|
| The script: the studio, shops, the skin inventory and the admin panel. Sends clients about 50 MB, almost all of it the studio's weapon textures. |
| A thin shell of every supported weapon, one set per slot, that a skin is painted on. Ships pre-built: there is nothing to generate. About 135 MB of stream files, delivered per weapon the first time a client sees one. |
| Your server's data: stored pictures, finished skin textures and the addon weapons you add. The creator fills it, writes its manifest and starts it. |
Do not rename the three folders. The creator finds the pool and the data resource by name, and every export is called through
qs-weaponskin-creator.
Installing the Resource#
Move the whole [weaponskin-creator] folder into your server's resources directory. It can live anywhere inside it:
resources/
└── [weaponskin-creator]/
├── qs-weaponskin-creator/
├── qs-weaponskin-pool/
└── qs-weaponskin-data/Then open your server.cfg, add the five add_ace lines, and make sure every dependency — and everything it should detect — starts before the three resources, in this order:
# Lets Weapon Skin Creator bring addon weapons online without a restart
add_ace resource.qs-weaponskin-creator command.ensure allow
add_ace resource.qs-weaponskin-creator command.start allow
add_ace resource.qs-weaponskin-creator command.stop allow
add_ace resource.qs-weaponskin-creator command.restart allow
add_ace resource.qs-weaponskin-creator command.refresh allow
ensure oxmysql
ensure ox_lib
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Inventory, target and prompts (optional)
ensure ox_inventory
ensure ox_target
ensure qs-textui
ensure qs-weaponskin-pool
ensure qs-weaponskin-data
ensure qs-weaponskin-creatorThe loading order matters. Detection only sees resources that are already started, so a framework or inventory that starts after Weapon Skin Creator is not found and that part runs standalone. The order relative to other weapon packs does not matter: the pool patches no weapon metadata, so there is nothing to conflict with.
Why the add_ace lines#
When an admin adds an addon weapon, the creator rewrites qs-weaponskin-data and asks the server to rescan its resources — that is how a new weapon reaches every client without a restart. FiveM only lets a resource run those commands with permission. Until the lines are in, the server console lists the missing ones every 10 seconds; pasting them straight into the console applies them immediately.
On the very first start,
ensure qs-weaponskin-dataprints Couldn't find resource. That is expected: the folder has no manifest until the creator writes one during that start and launches the resource itself.
The Database#
There is no SQL file to import. Weapon Skin Creator creates its own tables on the first start, all prefixed qs_weaponskin_, and migrates them by itself on every start after that. [sql]/database.sql is the same schema, for owners who prefer to import it by hand.
Tables | Hold |
|---|---|
players · skins · equipped · entitlements | Each player, the skins they own, which skin is on which weapon or gun, and extra inventory slots. |
transactions · trades | Every payment a player made, and every gift and trade. |
designs · shares · uploads | Saved designs, share codes and stored pictures. |
catalog · moderation | Admin-published skins and the review queue. |
shops · shop_ranks · shop_workers | The shops, their ranks and their staff. |
shop_transactions · shop_stock · shop_orders · shop_shifts | Each till's ledger, supplies, supply orders and shift history. |
tebex_transactions · tebex_spent · tebex_pending | Every store grant, used transaction ids, and grants waiting for an offline player. |
settings | Every setting you changed from its default — one row each. |
Back up
qs-weaponskin-datatogether with the database. Skin rows point at picture files in that folder and addon weapons keep their codes there, so one without the other is half a backup.
Claiming Admin Access#
The admin panel — /weaponskincreator — is where shops are placed, the catalog is published and the server is configured, so it is behind an admin check. Who counts as an admin depends on your framework:
The player's group must be in Config.AdminGroups in config/config.lua. Give yourself one of these groups the usual ESX way, or add your own staff groups to the list:
Config.AdminGroups = { 'admin', 'superadmin', 'god' }The player needs the QBCore god or admin permission, or the command ace. Config.AdminGroups is not used here.
add_principal identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx qbcore.godAny player with the command ace is an admin:
add_ace group.admin command allow
add_principal identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx group.adminAdmins also pass every shop permission, are told when skins wait for review, and can run the restricted console commands in game. The server console always counts as an admin.
Configuring the Resource#
Almost nothing is configured in files. Prices, commands, the studio camera, the workbench, shops and payroll, how skins are shown and delivered, images, moderation, Tebex and the language all live in the in-game Settings — changed live and stored in your database. The files are for plumbing:
File | Contents |
|---|---|
| Framework and inventory detection, the money accounts players pay with, the ESX admin groups, and the names of the pool and data resources. |
| Your own fonts and gallery designs, the image host allowlist and the Tebex package map. Never touched by an update. |
| Discord logging, one URL per category. |
| The framework bridges: identifiers, money and the admin check. |
| The inventory and target adapters. |
| Every text, including the Settings panel, in 41 languages. |
The values worth reviewing first:
-- config/config.lua
Config.MoneyTypes = { -- the accounts a player can pay with
{ name = 'money', label = 'Cash' },
{ name = 'bank', label = 'Bank' },
}
Config.AdminGroups = { 'admin', 'superadmin', 'god' } -- ESX staff groupsThe language can be set for every Quasar resource at once with setr qs:locale "es" in server.cfg; a language picked in Settings → General overrides it.
Config.Debuginconfig/config.luais replaced by the panel at start. Extra console output is switched in game: Settings → General → Debug logging.
Verifying the Installation#
Restart your server and read the console. A healthy start ends with the startup checks:
[INFO] Successfully loaded the framework. esx
add_ace permissions found — everything that needs them is enabled.
pool: ready (61 weapons)
[qs-weaponskin-creator] all 12 startup checks passed.If a check fails it is printed with a ✗ and what to do about it — Common Errors goes through each one. The checks run once, at start, and only appear in the server console.
Then join your server and work through the first loop:
Create a shop
/weaponskincreator→ Shops → +. Name it, draw the shop area, place the NPC and the workbench, and Save. Usage walks through every field.Make a skin
Walk up to the NPC and press E for the Skin studio. Pick a finish, drop a sticker on the weapon, press Review & pay and pay.
Look at it
The skin is already on your weapon, and on it for everyone who can see you.
/skinsopens your skin inventory and/inspectshows it off.
Nothing needs a restart from here on. Every price, shop, permission and feature is edited in game; the few settings that need a restart — the command names — are marked in the panel.



