Installation

Welcome to the Quasar Inventory installation guide, here you can learn how to completely install our asset, following each step we will achieve a clean and fluid installation where you will not find any problems, as long as the documentation has been completed in full.

If you do not have programming experience, we recommend that you read each step completely without skipping any lines, since all documentation is important and should not be ignored under any circumstances. If you have a trusted developer, you can install this quickly, easily and safely if you complete this documentation step by step.

If at the end of this documentation you still have any problems, review each step again, after having checked that everything is correct, you can obtain more information about common errors in the Common Problems section within this same documentation to seek help independently.


Asset download

To find the asset, you must have made the purchase using your own keymaster account. Otherwise, you can use the transfer system to move the asset to a different keymaster account.

If you need to make an update you must also do this step again, download the asset and you will get the complete update.

Once the purchase is made on our official website, you will receive your asset directly in your keymaster, in your own panel you can download the asset and install it following the following documentation.

If you have more problems regarding Fivem Escrow, accounts or asset startup errors you can go here and see if any of them match your case, since Escrow requires some basic things for its operation, such as your keymaster account, your licensekey , etc.

pageFiveM Asset Escrow System

Asset dependencies

This asset has some dependencies that are completely mandatory and important for the operation of the asset. If you do not have these dependencies, your asset will probably start and have some error or message in its command console.


Asset positioning

Correctly position the assets by following this step, if something goes wrong you will probably get errors about exports not found, do not skip this step.

We always recommend starting each asset package within a folder for correct organization. In this example we will start the [inventory] folder where the entire downloaded package will be inside along with its dependencies.

The order of positioning of the assets is extremely important, since the order of the exports is important to avoid receiving errors about exports not found.

In this case, Quasar Inventory is the brain of your server, therefore it should always be started under your Framework, but never under other scripts, since exports need the asset to be started before the assets that use its exports .

-- You should not start any assets on top of this
ensure es_extended or qb-core
ensure [inventory]

-- Other scripts or dependencies will be started below
ensure [standalone]
ensure [jobs]

Database

As explained in the previous step, wiping your server is imminent in case you have used another inventory than the original qbcore one, therefore these steps are completely mandatory and you should not alter this step.

Do not rename your previous SQL or columns to adapt them to this system, use the complete database without making use of edits in your old databases.

In your localhost or heidisql database you must execute this sql, with this we will automatically eliminate the existing tables and columns and replace them with the current ones from Quasar Inventory. If you want to edit something in these events, you can do so but at your own risk, do not forget to fully read the notices above this message.

Database for esx

For the esx side we need to completely empty the players' inventory, both in their personal inventory and in the other storage systems. Completely install this event in your database, if any are missing you probably have errors.

UPDATE `users` SET `inventory` = '[]' WHERE identifier IS NOT NULL;
ALTER TABLE `users` ADD IF NOT EXISTS `metadata` mediumtext 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;
Database for qbcore

The database for qbcore is simply based on editing the stashes, glovebox and trunks, players can keep their items and weapons in their inventory.

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;

Framework Modifications

In case your inventory is not saved after a server restart, please completely download your framework version instead of editing it yourself, as these are fragile with incorrect modifications and can cause critical problems.

Always use a version equal to the version of your server and in case of modern es_extended legacy, you can choose to try to upgrade if your other assets allow it. We always recommend using everything fully updated and the latest version of each framework, but if your version is lower, respect it by using the same version below or by contacting your trusted developer to upgrade your entire server.

Available frameworksLinks to mods and download

qb-core 1.2.6 old

qb-core 1.2.6 new

es_extended 1.2

es_extended 1.7.5

es_extended 1.8.5

es_extended 1.9.2

es_extended 1.9.3

es_extended 1.9.4

es_extended 1.10.1

es_extended 1.10.2

es_extended 1.10.4

es_extended 1.10.5


Clothing system and its items

If you decide not to use this system, in config.lua you can disable Config.Clothing.

For this system to work completely and not give you thousands of clothes in your clothing system, go to Features Guide after finishing the documentation to add the exports of said system to your clothing store.

Quasar Inventory integrates a very complete clothing system, which we can configure completely from config.lua using the following configurables.

Config.Clothing = true -- Disable clothing system, this will disable the button too
Config.EnableScreenPed = false -- Disable the zoom pad and put it on your screen
Config.TakePreviousClothes = true -- Set whether you want previous clothes to go to your inventory or be removed

If you use esx, you can ignore this step, since the clothing items will be included in your qs-inventory/shared/items.lua. But if you are a qbcore user, continue this step.

For the clothing system to work and not have errors when opening the inventory, we must add our items in qb-core/shared/items.lua. The items will be below.

Clothing items for qbcore (if you are esx, ignore this step)

Add the following items to qb-core/shared/items.lua, remember that if you have downloaded our already modified qb-core, these changes are already made.

['tshirt'] 						 = {['name'] = 'tshirt', 						['label'] = 'T-shirt', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'tshirt.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Tshirt'},
['torso'] 						 = {['name'] = 'torso', 						['label'] = 'Torso', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'torso.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Torso'},
['arms'] 						 = {['name'] = 'arms', 							['label'] = 'Arms', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'arms.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Arms'},
['jeans'] 						 = {['name'] = 'jeans', 						['label'] = 'Jeans', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'jeans.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Jeans'},
['shoes'] 						 = {['name'] = 'shoes', 						['label'] = 'Shoes', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'shoes.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Shoes'},
['mask'] 						 = {['name'] = 'mask', 							['label'] = 'Mask', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'mask.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Mask'},
['ears'] 						 = {['name'] = 'ears', 							['label'] = 'Ears', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'ears.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Ears'},
['glasses'] 					         = {['name'] = 'glasses', 						['label'] = 'Glasses', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'glasses.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Glasses'},
['helmet'] 						 = {['name'] = 'helmet', 						['label'] = 'Helmet', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'helmet.png', 			['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Helmet'},
['bag'] 						 = {['name'] = 'bag', 							['label'] = 'Bag', 					['weight'] = 0, 		['type'] = 'item', 		['image'] = 'bag.png', 				['unique'] = true, 		['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = 'Bag'},

In case of using the most modern qbcore, we can apply the following.

tshirt                       = { name = 'tshirt', label = 'T-shirt', weight = 0, type = 'item', image = 'tshirt.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Tshirt' },
torso                        = { name = 'torso', label = 'Torso', weight = 0, type = 'item', image = 'torso.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Torso' },
arms                         = { name = 'arms', label = 'Arms', weight = 0, type = 'item', image = 'arms.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Arms' },
jeans                        = { name = 'jeans', label = 'Jeans', weight = 0, type = 'item', image = 'jeans.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Jeans' },
shoes                        = { name = 'shoes', label = 'Shoes', weight = 0, type = 'item', image = 'shoes.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Shoes' },
mask                         = { name = 'mask', label = 'Mask', weight = 0, type = 'item', image = 'mask.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Mask' },
ears                         = { name = 'ears', label = 'Ears', weight = 0, type = 'item', image = 'ears.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Ears' },
glasses                      = { name = 'glasses', label = 'Glasses', weight = 0, type = 'item', image = 'glasses.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Glasses' },
helmet                       = { name = 'helmet', label = 'Helmet', weight = 0, type = 'item', image = 'helmet.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Helmet' },
bag                          = { name = 'bag', label = 'Bag', weight = 0, type = 'item', image = 'bag.png', unique = true, useable = true, shouldClose = true, combinable = nil, description = 'Bag' },

Basic asset configuration

We do not recommend editing frameworks unnecessarily, since almost all assets depend exclusively on your framework and exports on the name of your framework. Otherwise and if you edited your framework, read these steps carefully.

If you still require more open codes for the configuration, you can check within client/custom and server/custom to adapt the asset to your personal taste.

Please expand each part to see information about the configuration of the asset, this way you will understand the general operation of the asset on the framework and editable files side.

Basic framework configuration

The asset will work automatically if your framework is called es_extended or qb-core, it will automatically detect if any of them are started. In case your framework has been renamed, you can modify it in config.lua to edit the name of your framework.

Advanced framework configuration

If your framework is completely modified, both in events and name, you should access client/custom/framework or server/custom/framework to adapt the native events of your framework to the codes you have created. If this step doesn't work, we ask that you ask your framework modifier or trusted developer for help.

Keybind configuration

If you require a modification to the keys, before doing this please review the Register Key Mapping step before continuing, since the system is very specific and is explained very simply in this section. This is the same case for all Quasar Store assets.

More general settings

This asset contains multiple configurations within the config folder. But you can also access more open source and configurations within client/custom or server/custom. We do not recommend using these configurations if you do not have the basics of programming.


Item and weapon configuration

For more information on consumable, decay or combinable items, wait until you finish the documentation and check the Features Guide tabs, you will find everything there.

This step varies depending on your framework, please follow the examples below to have a clean integration of the items. Do not skip this step since in the case of esx the system will completely change for the use of metadata in said framework.

Item and weapon system in esx

To configure the items on the esx framework side, you will no longer use the SQL system to store your items, now the entire items table will have a configurable file within your inventory folder, in shared/items.lua. The system is very simple and comes with multiple examples so you can guide yourself, but you can make use of improvements that you will find in the Features Guide of this same documentation.

The items will be registered in the following way to perform a basic execution:

['bread'] = {
    ['name'] = 'bread', -- The same name we selected before
    ['label'] = 'Bread', -- The label that will be displayed in your inventory
    ['weight'] = 50, -- The weight of the item in your inventory
    ['type'] = 'item', -- Select if it's an item or a weapon
    ['image'] = 'bread.png', -- The name of your image (html/img)
    ['unique'] = false, -- Choose whether it is stackable or not
    ['usable'] = true, -- If this item can be used or not
    ['shouldClose'] = false, -- Will inventory close after using it or not
    ['combinable'] = nil, -- Ignore this step, more information in Features Guides
    ['description'] = 'Description of the bread' -- Description of the item
},
Item and weapon system in qbcore

For the qbcore system we will simply use qb-core/shared/items.lua to execute items as we were doing before installing Quasar Inventory, nothing will change in the case of the integration of items and weapons in qbcore.


Do you want more information, snippets or prizes?

This does not end here, once the installation is complete, we invite you to spend some time with other customers or ask for help in our official community where you can access, chat, open a ticket or obtain exclusive community prizes. We are waiting for you there to continue the adventure!

Please note that you can ask for help whenever you want by following our business hours or enjoy virtual support with our AI. But always respect other customers or community supports to maintain a stable communication order.

Please, before opening a ticket or claim, read the documentation completely to obtain all the basic knowledge before having a hold on ticket.

Last updated