How Integrations Work#
Advanced Inventory looks at what is already running when it starts and adapts to it. Everything framework- or third-party-specific lives in small, open bridge files under client/custom/ and server/custom/, so nothing else in the resource needs to know which scripts you run.
Layer | Supported | Without it |
|---|---|---|
Framework |
| Required. There is no standalone mode. |
Database |
| Required. |
Appearance |
| Clothing items still work, but outfits changed through the clothing slots are not saved to an appearance script. |
Target |
| Points show a marker and an [E] prompt; vending machines and dumpsters open with the inventory key. |
Notifications & progress bars |
| ox_lib notifications and progress bars. |
3D prompts |
| The game's own 3D text. |
Phone |
| Quick slots and the wheel are not paused while a phone is open. |
Voice |
| No Voice tab in the pause-menu settings. |
Ambulance (ESX) |
| Death is read from the player's state and health. |
Detection only sees resources that are already started. Keep the framework, the appearance script and the target above
ensure qs-inventoryinserver.cfg. If you renamed your core resource, add its new name to the list at the top ofconfig/config.lua.
Scripts Written for ox_inventory or qb-inventory#
Most resources keep working without a single edit: Advanced Inventory answers the exports they already call on the other inventories, replaces QBCore's player item methods, and fires the item events ESX and qb-inventory scripts listen for.
Scripts that call | Answered |
|---|---|
|
|
|
|
|
|
|
|
QBCore player methods |
|
Item events |
|
On QBCore, qb-inventory is stopped on its own if it starts (Stop qb-inventory automatically, on by default) and qb-weapons is always stopped — the inventory does its job. For new code, and for items that carry metadata, call exports['qs-inventory'] directly; Commands and Exports lists everything.
Clothing, Target and Interface#
Appearance scripts#
When a player closes the inventory after changing clothes through the clothing slots, the outfit is saved through their appearance script, so it survives a relog:
Script | How the outfit is saved |
|---|---|
| Through illenium's own appearance save. |
| Its current-skin save. |
| Through skinchanger and |
| Straight into its |
The other way round works with any of them: clothes changed in a clothing shop or appearance menu are picked up by the clothing slots within a second or two. Another clothing script can react to a piece being taken off through the client events clothes:takeOff<Piece> fired from the slots' hand buttons.
Target#
Switch on Use target (ox_target / qb-target) in /inventoryconfig → General and restart the inventory. Stashes, shops, benches and sell points become box zones, and vending machines and dumpsters become model options, each with its own icon. ox_target is reached through its qtarget compatibility; Show target zones draws the zones so you can check their size.
Notifications, progress bars and prompts#
With qs-interface running, notifications, progress bars and the HUD toggle go through it; otherwise ox_lib takes over. With qs-textui, the [E] prompts at points are drawn by it instead of the game's 3D text. Both are wired in client/custom/framework/, where any other notification or progress resource can be dropped in.
Other Resources#
Resource | What happens |
|---|---|
| The quick slots and the wheel pause while a phone is open, removed phones are handled by the phone, and a phone's card shows its number. |
| Its key, lockpick, plate and tracker items ship in the item list; a key's card shows its plate and model. |
| Job stashes, safes and armories open as inventory stashes, and its player search opens the inventory's search. |
| Takes over throwing when Throw items with jonska-itemthrowing is on in Interaction. |
| Takes over placing when Place items with kq_placeable_items is on in Interaction. The panel shows whether the resource is installed. |
| The K9 can sniff player inventories, trunks and gloveboxes through two exports that appear only while it runs. |
| ID cards and licences given by an admin get um-idcard's metadata. |
| Adds radio volume, call volume and mic clicks to the pause-menu settings. |
Discord Logs#
Item activity can be posted to Discord as embeds, one webhook per category, in server/custom/webhook/webhook.lua. A category left empty is simply not sent, and the console lists the empty ones on start as Missing webhooks.
Category | What goes there |
|---|---|
| Gives from the creator and the give commands, imports and anti-dupe alerts. |
| Shop purchases, sales at sell points, and items crafted. |
| Items given between players and trades, and items taken from another player. |
| Items moved in and out of each kind of storage. |
| Bags created on the ground, and items moved between inventories. |
| Requests the server refused as tampered, such as a negative amount. |
-- server/custom/webhook/webhook.lua
Webhooks = {
admin = 'https://discord.com/api/webhooks/...',
bought = 'https://discord.com/api/webhooks/...',
robbery = 'https://discord.com/api/webhooks/...',
exploit = '', -- empty: not sent
}
Token = 'YOUR_DISCORD_BOT_TOKEN' -- only for avatars in the pause menuType testwebhooks in the server console to post a test to every category and see which ones Discord accepted. Logs are queued per webhook and respect Discord's rate limits, so a busy server never stalls on them.
Security Options#
/inventoryconfig → Security holds server-side checks against modified clients. They ship in the most compatible position — strict checks off, old client events allowed — so scripts written for older versions keep working. Each one applies the moment it is saved; switch them on one at a time and check your other scripts still behave.
Option | Default | What it closes |
|---|---|---|
Only the inventory the server opened | Off | Items can only move into the inventory the server opened for that player. Scripts that open inventories with the client event need it off. |
Trunks and gloveboxes by distance | Off | A trunk opens only next to its vehicle, a glovebox only from inside it. Needs OneSync. |
Searching players by distance | Off | Searching or robbing needs the other player within 4 m. Admins are exempt. |
Ground bags by distance · Garbage bins by distance | Off | Bags and dumpsters can only be used within 6 m. |
Sell lists from the server · Crafting tables from the server | Off | Sell points and benches use the server's prices and recipes, never ones sent by the client. |
Block client-only inventory types | Off | Attachment crafting (and the traphouse outside QBCore) cannot be opened from the client. |
Strict ammo | Off | Ammo only goes up by the ammo items the server actually removed. |
Weapon quality only goes down | Off | A client can lower a weapon's quality but never raise it. |
Custom crafting from the client | On | Lets scripts open a crafting menu with recipes sent by the client. |
Container saves from the client | On | Allows the old |
Read any stash | On |
|
XP from the client · Quest progress from the client | On |
|
One more lives in General (advanced): Server-only shops refuses shops whose items and prices come from a player's game. Creator shops keep working; other scripts then open shops with the server exports CreateShop and OpenShop.
The Add-ons in the Package#
The [dlc] folder holds four optional resources that build on the inventory. Each one is independent: ensure only the ones you want, after qs-inventory, and keep their folder names.
qs-armor — bulletproof vests
Using an armor or heavyarmor item plays an animation and a 5-second bar, gives 50 or 100 armour and puts the vest on the character. /resetarmor takes it off. Armour is saved and comes back after a relog or a respawn. ESX and QBCore (Qbox included).
Everything is in shared/config.lua: the bar durations, the armour each item gives, the vest drawables for men and women, and the command name. Languages: en, es, de, it.
qs-licenses — ID card and licence counters
Three counters on the map: an ID card ($150), a weapons licence ($10) and a driving licence ($10). Walk to the marker, press E, confirm and wait for the bar; the card is paid from the bank and carries the player's name, birth date and gender. Using it shows it to players within 2.5 m, card in hand.
Counters are a list in shared/config.lua — item, label, price, time, position, blip, and an optional job. Other scripts can hand out a licence directly with the client event qs-licenses:client:Target. Languages: en, es.
qs-weapondraw — draw and holster animations
Drawing or putting away a weapon from the inventory plays a proper animation: a quick draw when the character wears holster clothing, the slower intimidation draw otherwise. Holstered pistols swap the holster to its full or empty look, and firing is blocked until the animation ends.
config.lua lists the weapons it animates, the holster weapons and the holster clothing; add your add-on weapons there. fastDrawWhenOnBody gives the quick draw to weapons shown on the body by qs-weaponsonback.
qs-weaponsonback — weapons on the body
Long guns a player carries but is not holding are shown on their back or body — to everyone — with their attachments and tints. config.lua sets each weapon's bone, offset and rotation, so add-on weapons can be placed exactly. It exports IsWeaponShownOnBody(weaponHash) for other scripts. ESX and QBCore.
Open Files for Developers#
Supporting another framework add-on, notification system or clothing script is a matter of editing the matching bridge — nothing else in the inventory refers to them by name.
Folder | What is there |
|---|---|
| Player data, money, admin checks, notifications, progress bars, prompts, hunger and thirst, death checks — per framework. |
| How the outfit is saved, per appearance script. |
| Target zones for sell points, benches, vending machines and dumpsters. |
| Opening inventories, robbery, using weapons, selling, crafting, the built-in usable items (ID cards, ammo, attachments), the admin commands and the integrations above. |
| The ox_inventory and qb-inventory compatibility exports. |
Languages#
41 complete translations ship in locales/, admin panels included. Pick one with setr qs:locale "<code>" in server.cfg — shared by every Quasar resource — or in /inventoryconfig → General → Language. To change a wording, edit that language's .json file and restart the inventory.



