Skip to content

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.

With Config.Inventory = 'auto', the inventory is chosen in this order:

  1. ox_inventory, if it is running, on any framework.
  2. The QBCore inventory, on QBCore.
  3. The ESX inventory, on ESX.
  4. 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.

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.

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