Dependencies
Dependencies
ML Inventory installs inside your own ox_inventory folder, which the install renames ml_inventory.
Required
ox_lib gives both resources their client and server callbacks. The inventory registers its hold actions and item wheel keybinds through it. Both manifests declare it. Get it from github.com/communityox/ox_lib.
oxmysql is the database driver both resources load. The download carries no SQL file: your existing ox_inventory tables are used unchanged, and ML Clothing creates ml_invadmin_audit and ml_clothing_stash_props on first start.
ox_inventory is your own copy. The download contains no ox_inventory file, so you install into the folder you already run, or into a fresh copy from github.com/overextended/ox_inventory. Tested on 2.47.7 through 2.47.9; releases outside that range have not been checked.
ML Clothing reaches the framework through ml_bridge: player identity, item calls, permission checks and notifications all pass through it. The inventory does not use it. Get it from portal.cfx.re.
ML Clothing is the second resource in the package. The clothing slots, the bag stashes, the armor plates and the admin panel come from it. Started alone, the inventory keeps slots 11 to 25 reserved and empty and the panel command does not exist.
The inventory needs OneSync on and server artifact 6116 or newer. Its manifest declares both, so an older artifact or a server with OneSync off refuses to start the resource.
ox_inventory is the work of Overextended, published under the GNU General Public License v3. ML Inventory adds files to the ox_inventory folder and ships none of ox_inventory's own.
Server config load order
1ensure oxmysql
2ensure ox_lib
3ensure ml_bridge
4ensure ml_inventory
5ensure ml_clothingThe ml_inventory line is your ox_inventory folder after the install: what used to read ensure ox_inventory now reads ensure ml_inventory. Keep the folder named ml_inventory, or leave it named ox_inventory: ML Clothing looks the inventory up under those two names only, and reads its item definitions, its images and its config files from whichever it finds. The resource also answers to the name ox_inventory. Third-party scripts keep calling exports.ox_inventory unchanged, and that alias satisfies the ox_inventory dependency ML Clothing declares.
After you copy the folders in, run refresh and then ensure, or restart the server. A file added to a resource that is already running is not picked up by restart on its own.
Framework setup
1setr inventory:framework "qbx"
2
3ensure qb-core
4ensure oxmysql
5ensure ox_lib
6ensure ml_bridge
7ensure ml_inventory
8ensure ml_clothinginventory:framework, defaultesx. Sets which framework layer ox_inventory loads and which database tables it reads player and vehicle inventories from. Accepted values:esx,nd,ox,qbx.
qbx is the correct value on a qb-core server. It selects the qb-core layer ML Inventory adds and points ox_inventory at the players and player_vehicles tables qb-core uses.
1setr inventory:framework "qbx"
2
3ensure qbx_core
4ensure oxmysql
5ensure ox_lib
6ensure ml_bridge
7ensure ml_inventory
8ensure ml_clothinginventory:framework, defaultesx. Sets which framework layer ox_inventory loads and which database tables it reads player and vehicle inventories from. Accepted values:esx,nd,ox,qbx.
1setr inventory:framework "esx"
2
3ensure es_extended
4ensure oxmysql
5ensure ox_lib
6ensure ml_bridge
7ensure ml_inventory
8ensure ml_clothinginventory:framework, defaultesx. Sets which framework layer ox_inventory loads and which database tables it reads player and vehicle inventories from. Accepted values:esx,nd,ox,qbx.
1ensure oxmysql
2ensure ox_lib
3ensure ml_bridge
4ensure ml_inventory
5ensure ml_clothingML Clothing resolves standalone through ml_bridge. The inventory half does not: ox_inventory reads inventory:framework for both its framework layer and its player and vehicle table names, and it accepts esx, nd, ox and qbx only. Keep that convar on the framework your copy already runs, with that framework resource started. On any other value the inventory never reads or writes player inventories.
ml_bridge resolves the framework at runtime, so there is no framework option to set in shared/config.lua. The inventory follows the framework layer of the copy it installs into, selected by inventory:framework. When qb-core is running and that convar reads anything other than qbx, the server prints a warning at boot with the exact line to add.
Optional
Appearance scripts
No appearance script is a dependency. ML Clothing checks for one at start, in this order: 4bit_appearance, illenium-appearance, bl_appearance, codem-appearance (also under its crm-appearance name), fivem-appearance, qb-clothing. The first one started is the one it uses. An illenium-appearance folder that exposes the 4bit API is treated as 4bit_appearance.
With illenium-appearance, bl_appearance, 4bit_appearance or codem-appearance, what the player wears is written back into that script on its own save path, so the outfit survives outside the inventory.
fivem-appearance and qb-clothing are detected, but nothing is written back into them: worn clothing lives in the clothing slots as items, which is also what happens when no appearance script is started at all.
The other direction, turning an outfit saved in an appearance menu into inventory items, is one call added inside the appearance script. See Clothing Integration.
ml_autocapture
The Clothing tab of the admin panel has a button that opens the capture studio of ml_autocapture, a separate resource that is not part of this package. When ml_autocapture is not started, the button answers with an error notification. The catalog, the item list, the image list and giving clothing to a player do not go through it.
The catalog the Clothing tab lists is fetched over HTTP.
1Config.ClothingCatalogUrl = 'http://127.0.0.1:3960/api/catalog'Config.ClothingCatalogUrl, default'http://127.0.0.1:3960/api/catalog'. Endpoint the Clothing tab reads its catalog from. That endpoint is not part of the package: when it answers with anything other than 200, the tab shows an empty catalog.
ox_target
ox_target is used only when your ox_inventory runs in target mode.
1setr inventory:target trueinventory:target, defaultfalse. Opens stashes and shops from anox_targetzone instead of a marker.
In that mode a stash created in the admin panel carries the zone length, width, heading, label and icon you set, and its zone is rebuilt when you save the stash while the server runs. With target mode off, stashes and shops use their marker and ox_target is not called.