Installation

Quasar Advanced Inventory is a next-generation system for FiveM featuring a sleek grid-based interface, drag & drop management, quickbars, and realistic mechanics such as weight, slots, and item durability. It includes advanced features for shops, stashes, and drops, offering a fully modular and optimized experience for smooth and immersive gameplay.


Download Script

To download the assets needed for this script, you must access the official Cfx.re portal, where all assets purchased through Tebex are managed.

  1. Go to the following link: 🔗 https://portal.cfx.re/assets/granted-assets

  2. Log in with the same Cfx.re account you used to make the purchase.

  3. In the list of granted assets, find and download the following:

    • Advanced Inventory [new]


Download Dependencies

This script requires some mandatory dependencies to function correctly. Make sure to download and extract them inside your server’s main directory, keeping their original folder structure intact.


Framework Modifications

This script requires specific framework modifications to work properly with ESX, QBCORE or QBOX. You can either apply the provided commits manually or, for a faster and safer setup, download our pre-edited framework versions directly from the links below:

If you’re looking for other framework versions or commits, you can find them all here:


Remove Other Scripts

This script may cause conflicts or errors if you use other inventory systems on your server. Common examples include esx_inventory, esx_shops, esx_weaponshop, qb-inventory, qb-shops, qb-weapons, or other similar inventory scripts. It’s strongly recommended to remove them completely before installation to prevent compatibility or functionality issues.


Server.cfg Placement

The inventory script must always start immediately after es_extended or qb-core, never before. Make sure to place it directly below them in your server.cfg, ensuring all core dependencies are fully loaded first to avoid potential errors or malfunctioning features.


Database Setup

This script includes an essential database required for its operation. You must import it before starting your server, preferably using HeidiSQL or any other manager compatible with MariaDB/MySQL.

ESX
UPDATE `users` SET `inventory` = '[]' WHERE identifier IS NOT NULL;
ALTER TABLE `users` ADD IF NOT EXISTS `metadata` mediumtext DEFAULT NULL;
ALTER TABLE `users` ADD IF NOT EXISTS `inventory_skill` TEXT NULL DEFAULT NULL;

DROP TABLE IF EXISTS `inventory_glovebox`;
CREATE TABLE IF NOT EXISTS `inventory_glovebox` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `plate` varchar(255) DEFAULT NULL, 
  `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, 
  PRIMARY KEY (`plate`), 
  KEY `id` (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1;

DROP TABLE IF EXISTS `inventory_stash`;
CREATE TABLE IF NOT EXISTS `inventory_stash` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `stash` varchar(255) DEFAULT NULL, 
  `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, 
  PRIMARY KEY (`stash`), 
  KEY `id` (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1;

DROP TABLE IF EXISTS `inventory_trunk`;
CREATE TABLE IF NOT EXISTS `inventory_trunk` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `plate` varchar(255) DEFAULT NULL, 
  `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, 
  PRIMARY KEY (`plate`), 
  KEY `id` (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1;

DROP TABLE IF EXISTS `inventory_metadata`;
CREATE TABLE IF NOT EXISTS `inventory_metadata` (
  `id` INT(11) NOT NULL AUTO_INCREMENT, 
  `identifier` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', 
  `data` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', 
  PRIMARY KEY (`id`) USING BTREE
) COLLATE = 'utf8mb4_unicode_ci' ENGINE = InnoDB;

DROP TABLE IF EXISTS `inventory_clothes`;
CREATE TABLE IF NOT EXISTS `inventory_clothes` (
  `id` INT(11) NOT NULL AUTO_INCREMENT, 
  `identifier` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci', 
  `items` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', 
  PRIMARY KEY (`identifier`) USING BTREE, 
  INDEX `id` (`id`) USING BTREE
) COLLATE = 'utf8mb4_general_ci' ENGINE = InnoDB AUTO_INCREMENT = 6;

DROP TABLE IF EXISTS `inventory_quests`;
CREATE TABLE `inventory_quests` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`owner` VARCHAR(80) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`title` VARCHAR(80) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`description` MEDIUMTEXT NOT NULL COLLATE 'utf8mb3_general_ci',
	`reward` INT(11) NOT NULL DEFAULT '0',
	`requiredLevel` INT(11) NOT NULL DEFAULT '0',
	`default` TINYINT(1) NOT NULL DEFAULT '0',
	`status` VARCHAR(50) NOT NULL DEFAULT 'active' COLLATE 'utf8mb3_general_ci',
	`progress` INT(11) NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`) USING BTREE,
	UNIQUE INDEX `name_owner` (`name`, `owner`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;
QBCORE
ALTER TABLE `players` ADD IF NOT EXISTS `inventory_skill` TEXT NULL DEFAULT NULL;

DROP TABLE IF EXISTS `inventory_glovebox`;
CREATE TABLE IF NOT EXISTS `inventory_glovebox` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `plate` varchar(255) DEFAULT NULL, 
  `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, 
  PRIMARY KEY (`plate`), 
  KEY `id` (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1;

DROP TABLE IF EXISTS `inventory_stash`;
CREATE TABLE IF NOT EXISTS `inventory_stash` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `stash` varchar(255) DEFAULT NULL, 
  `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, 
  PRIMARY KEY (`stash`), 
  KEY `id` (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1;

DROP TABLE IF EXISTS `inventory_trunk`;
CREATE TABLE IF NOT EXISTS `inventory_trunk` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `plate` varchar(255) DEFAULT NULL, 
  `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, 
  PRIMARY KEY (`plate`), 
  KEY `id` (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1;

DROP TABLE IF EXISTS `inventory_metadata`;
CREATE TABLE IF NOT EXISTS `inventory_metadata` (
  `id` INT(11) NOT NULL AUTO_INCREMENT, 
  `identifier` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', 
  `data` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', 
  PRIMARY KEY (`id`) USING BTREE
) COLLATE = 'utf8mb4_unicode_ci' ENGINE = InnoDB;

DROP TABLE IF EXISTS `inventory_clothes`;
CREATE TABLE IF NOT EXISTS `inventory_clothes` (
  `id` INT(11) NOT NULL AUTO_INCREMENT, 
  `identifier` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci', 
  `items` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', 
  PRIMARY KEY (`identifier`) USING BTREE, 
  INDEX `id` (`id`) USING BTREE
) COLLATE = 'utf8mb4_general_ci' ENGINE = InnoDB AUTO_INCREMENT = 6;


DROP TABLE IF EXISTS `inventory_quests`;
CREATE TABLE `inventory_quests` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`owner` VARCHAR(80) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`title` VARCHAR(80) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`description` MEDIUMTEXT NOT NULL COLLATE 'utf8mb3_general_ci',
	`reward` INT(11) NOT NULL DEFAULT '0',
	`requiredLevel` INT(11) NOT NULL DEFAULT '0',
	`default` TINYINT(1) NOT NULL DEFAULT '0',
	`status` VARCHAR(50) NOT NULL DEFAULT 'active' COLLATE 'utf8mb3_general_ci',
	`progress` INT(11) NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`) USING BTREE,
	UNIQUE INDEX `name_owner` (`name`, `owner`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;

Item Management

This step is very important and should not be skipped. It explains how to add, edit, or delete items correctly depending on your framework.

In Quasar scripts, items are not managed with SQL databases. Instead, they are stored directly in configuration files, making it easier to organize and modify them without using any external tools.

  • If you use ESX, in the shared/items.lua file.

  • If you use QBCORE, in the shared/items.lua file.

If you notice that some items do not work in QBCORE, your items file may be corrupted or outdated. You can fix it by downloading the updated version from our GitHub and replacing your current file with it.


Add clothing as items

If you used the recommended items.lua for QBCORE in the previous step, the clothing items are already included and you don’t need to add anything else.

To ensure the clothing system works fully (without flooding your store with unnecessary items), read the Features Guide after finishing this documentation. It explains how to add the required exports to your clothing shop for seamless integration.

Clothing system options (config.lua):

  • Config.Clothing: enable/disable the clothing system (disables the button too when off).

  • Config.EnableScreenPed: show the preview ped on screen instead of the zoom pad.

  • Config.TakePreviousClothes: decide whether previous clothes go to the inventory or are removed.

Clothing items for QBCORE (if you use ESX ignore this step)
tshirt = {
    ['name'] = 'tshirt',
    ['label'] = 'T-shirt',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'tshirt.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
torso = {
    ['name'] = 'torso',
    ['label'] = 'Torso',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'torso.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
arms = {
    ['name'] = 'arms',
    ['label'] = 'Arms',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'arms.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
jeans = {
    ['name'] = 'jeans',
    ['label'] = 'Jeans',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'jeans.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
shoes = {
    ['name'] = 'shoes',
    ['label'] = 'Shoes',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'shoes.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
mask = {
    ['name'] = 'mask',
    ['label'] = 'Mask',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'mask.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
ears = {
    ['name'] = 'ears',
    ['label'] = 'Ears',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'ears.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
glasses = {
    ['name'] = 'glasses',
    ['label'] = 'Glasses',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'glasses.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
helmet = {
    ['name'] = 'helmet',
    ['label'] = 'Helmet',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'helmet.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
bag = {
    ['name'] = 'bag',
    ['label'] = 'Bag',
    ['weight'] = 0,
    ['type'] = 'item',
    ['image'] = 'bag.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A nice piece of clothing'
},
chain = {
    ['name'] = 'chain',
    ['label'] = 'Chain',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'goldchain.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['rare'] = 'epic',
    ['description'] = 'It is very fragile, watch out'
},
vest = {
    ['name'] = 'vest',
    ['label'] = 'Vest',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'vest.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['rare'] = 'epic',
    ['description'] = 'Body Armor'
},
bracelets = {
    ['name'] = 'bracelets',
    ['label'] = 'Bracelets',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'bracelets.png',
    ['unique'] = true,
    ['useable'] = true,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['rare'] = 'epic',
    ['description'] = 'It is very fragile, watch out'
},
watch = {
    ['name'] = 'watch',
    ['label'] = 'Watch',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'rolex.png',
    ['unique'] = false,
    ['useable'] = false,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['rare'] = 'epic',
    ['description'] = 'It is very fragile, watch out'
}