How it works
SL-QuickWheel is an interface layer. It never keeps its own copy of the player’s items: every time the wheel opens, it reads them from the inventory, and every action is delegated to that inventory’s own functions. This keeps the wheel consistent with everything else on your server, including hooks, logs and anticheat checks.
Detection
Section titled “Detection”With Config.Inventory = 'auto', the inventory is chosen in this order:
ox_inventory, if it is running, on any framework.- The QBCore inventory, on QBCore.
- The ESX inventory, on ESX.
- Native mode in any other case.
The framework is detected in the same way, checking qbx_core, then qb-core, then es_extended. Both can be set explicitly with Config.Inventory and Config.Framework.
Calls per inventory
Section titled “Calls per inventory”| ox_inventory | QBCore inventories | ESX inventory | |
|---|---|---|---|
| Read items | GetPlayerItems |
PlayerData.items |
loadout and inventory |
| Equip a weapon | useSlot, as its hotbar |
qb-weapons:client:UseWeapon |
Selects the weapon in hand |
| Use an item | useSlot |
qb-inventory’s UseItem |
ESX.UseItem |
| Give | giveItemToTarget |
RemoveItem and AddItem |
Player functions |
| Drop | RemoveItem and CustomDrop |
The inventory’s own drop | ESX pickup |
| Containers | GetInventory, CanCarryItem, RemoveItem, AddItem |
CreateInventory, GetInventory, CanAddItem, RemoveItem, AddItem |
Not available |
| Hotbar moves | swapItems, as its window |
RemoveItem and AddItem |
Not available |
With ox_inventory, equipping through useSlot means ox keeps managing ammunition, durability and its own checks. When Config.WeaponAnimations is false, its holster and draw animations are skipped so that switching is instant.
Server validation
Section titled “Server validation”Use, give, drop, take, store and hotbar moves go through server events that verify, before calling the inventory:
- that the amount is a whole number between 1 and 1,000,000;
- that the player really has that item in that slot;
- for Give, that the target exists, is not the player and is within
Config.GiveDistance; - for containers, that the player can reach it: an unlocked trunk nearby, a glovebox only from inside the vehicle, or a ground drop within a few metres, and that the items fit;
- a limit of one action every 300 ms per player.
If a check fails, nothing is moved. If a transfer fails halfway, for example because the destination is full, the item is returned to where it came from.
| File | Editable | Contents |
|---|---|---|
config.lua |
Yes | Every setting |
client/, server/, shared/ |
No (escrow) | Wheel logic and inventory adapters |
locales/ |
No (escrow) | English and Spanish texts |
html/ |
Compiled | The interface |