Installation

Welcome to the Quasar Miner Job 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.

For compatibility and security reasons, we request that WinSCP be used mandatorily to manage the script files instead of FileZilla. WinSCP offers greater stability and better integration with our work environment, ensuring a more efficient handling of assets and minimizing issues related to file transfers. We appreciate your cooperation in ensuring a better experience for everyone.

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.

FiveM Asset Escrow System

Asset dependencies

To use this asset you must have gamebuild version 2802 or higher. If you do not comply with this step, you may not have the interiors of the garages.

How to update the game build to version 2802?

This is a very simple step, we will directly access the artifacts for Windows or Linux, depending on our type of server. We will download it and replace it with the artifacts from our server.

Once this step was done, they added sv_enforceGameBuild 2802 in your server.cfg, make sure you don't have another convar with the same name or another version.

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.

For the correct execution of the asset, we will put the asset and its dependencies inside a folder called [banking], then we will execute it completely using ensure as in the example.

The starting order is not very important in this asset, but just in case we will leave the basics so as not to receive general errors when using it. Always respect the framework and inventory above this asset.

-- First we will start the cores, never below
ensure es_extended or qb-core

-- The inventory should be executed above
ensure [inventory]

-- Run qs-minerjob here along with its dependencies
ensure [minerjob] -- Add props inside the this folder!

Database

Do not start the asset without having completely installed the database and items.

This system includes a database that will work for qbcore and esx in the same way.

Database for esx
INSERT INTO `jobs` (name, label) VALUES
    ('miner','Miner')
;

INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES
    ('miner',0,'novice','Novice',10,'{}','{}')
;

CREATE TABLE IF NOT EXISTS `qs_miner` (
    `identifier` VARCHAR(46) NOT NULL COLLATE 'utf8mb4_general_ci',
    `level` INT(10) UNSIGNED NOT NULL DEFAULT '1',
    `experience` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `total_experience` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `total_earnings` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `season_experience` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `season_earnings` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `daily_experience` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `daily_earnings` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    PRIMARY KEY (`identifier`) USING BTREE
)
ENGINE=InnoDB
COLLATE='utf8mb4_general_ci'
;

CREATE TABLE IF NOT EXISTS `qs_miner_resets` (
    `identifier` VARCHAR(46) NOT NULL COLLATE 'utf8mb4_general_ci',
    `last_daily_reset` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `last_season_reset` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`identifier`) USING BTREE
)
ENGINE=InnoDB
COLLATE='utf8mb4_general_ci'
;

CREATE TABLE IF NOT EXISTS `qs_miner_rewards` (
    id INT AUTO_INCREMENT PRIMARY KEY,
    identifier VARCHAR(255) NOT NULL,
    reward_type VARCHAR(50) NOT NULL,
    reward_amount INT NOT NULL
)
ENGINE=InnoDB
COLLATE='utf8mb4_general_ci'
;

CREATE TABLE IF NOT EXISTS `qs_miner_leaderboard_winners` (
    id INT AUTO_INCREMENT PRIMARY KEY,
    position INT NOT NULL,
    identifier VARCHAR(255) NOT NULL,
    reward_amount INT NOT NULL,
    reward_type VARCHAR(10) NOT NULL,
    UNIQUE KEY (position, reward_type)
)
ENGINE=InnoDB
COLLATE='utf8mb4_general_ci'
;
Database for qbcore
CREATE TABLE IF NOT EXISTS `qs_miner` (
    `identifier` VARCHAR(46) NOT NULL COLLATE 'utf8mb4_general_ci',
    `level` INT(10) UNSIGNED NOT NULL DEFAULT '1',
    `experience` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `total_experience` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `total_earnings` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `season_experience` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `season_earnings` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `daily_experience` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `daily_earnings` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    PRIMARY KEY (`identifier`) USING BTREE
)
ENGINE=InnoDB
COLLATE='utf8mb4_general_ci'
;

CREATE TABLE IF NOT EXISTS `qs_miner_resets` (
    `identifier` VARCHAR(46) NOT NULL COLLATE 'utf8mb4_general_ci',
    `last_daily_reset` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `last_season_reset` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`identifier`) USING BTREE
)
ENGINE=InnoDB
COLLATE='utf8mb4_general_ci'
;

CREATE TABLE IF NOT EXISTS `qs_miner_rewards` (
    id INT AUTO_INCREMENT PRIMARY KEY,
    identifier VARCHAR(255) NOT NULL,
    reward_type VARCHAR(50) NOT NULL,
    reward_amount INT NOT NULL
)
ENGINE=InnoDB
COLLATE='utf8mb4_general_ci'
;

CREATE TABLE IF NOT EXISTS `qs_miner_leaderboard_winners` (
    id INT AUTO_INCREMENT PRIMARY KEY,
    position INT NOT NULL,
    identifier VARCHAR(255) NOT NULL,
    reward_amount INT NOT NULL,
    reward_type VARCHAR(10) NOT NULL,
    UNIQUE KEY (position, reward_type)
)
ENGINE=InnoDB
COLLATE='utf8mb4_general_ci'
;

Items configuration

Asegurate de añadir los items acorde a tu framework, es decir qbcore o esx.

Este asset requiere de algunos items para su funcionamiento. Añadalos en consecuencia a su inventario. Si usted usa otro inventario pero no esta enlistado aqui, puede añadirlas manualmente con los ejemplos que leeras a continuacion.

esx_inventory
INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
('coal_ore', 'Coal Ore', 1, 0, 1),
('flint', 'Flint', 1, 0, 1),
('sulfur_chunk', 'Sulfur Chunk', 1, 0, 1),
('gold_nugget', 'Gold Nugget', 1, 0, 1),
('gold_dust', 'Gold Dust', 1, 0, 1),
('quartz_crystal', 'Quartz Crystal', 1, 0, 1),
('emerald_crystal', 'Emerald Crystal', 1, 0, 1),
('beryl_chunk', 'Beryl Chunk', 1, 0, 1),
('green_garnet', 'Green Garnet', 1, 0, 1),
('ruby_crystal', 'Ruby Crystal', 1, 0, 1),
('corundum_chunk', 'Corundum Chunk', 1, 0, 1),
('pink_sapphire', 'Pink Sapphire', 1, 0, 1),
('amethyst_geode', 'Amethyst Geode', 1, 0, 1),
('purple_quartz', 'Purple Quartz', 1, 0, 1),
('clear_crystal', 'Clear Crystal', 1, 0, 1),
('diamond_crystal', 'Diamond Crystal', 1, 0, 1),
('graphite_chunk', 'Graphite Chunk', 1, 0, 1),
('blue_diamond', 'Blue Diamond', 1, 0, 1);
qs-inventory or qb-inventory
    -- Coal Items
    ['coal_ore'] = {
        ['name'] = 'coal_ore',
        ['label'] = 'Coal Ore',
        ['weight'] = 250,
        ['type'] = 'item',
        ['image'] = 'coal_ore.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A piece of coal ore.'
    },

    ['flint'] = {
        ['name'] = 'flint',
        ['label'] = 'Flint',
        ['weight'] = 150,
        ['type'] = 'item',
        ['image'] = 'flint.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A sharp piece of flint.'
    },

    ['sulfur_chunk'] = {
        ['name'] = 'sulfur_chunk',
        ['label'] = 'Sulfur Chunk',
        ['weight'] = 200,
        ['type'] = 'item',
        ['image'] = 'sulfur_chunk.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A chunk of sulfur.'
    },

    -- Gold Items
    ['gold_nugget'] = {
        ['name'] = 'gold_nugget',
        ['label'] = 'Gold Nugget',
        ['weight'] = 250,
        ['type'] = 'item',
        ['image'] = 'gold_nugget.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A small nugget of gold.'
    },

    ['gold_dust'] = {
        ['name'] = 'gold_dust',
        ['label'] = 'Gold Dust',
        ['weight'] = 150,
        ['type'] = 'item',
        ['image'] = 'gold_dust.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A pinch of gold dust.'
    },

    ['quartz_crystal'] = {
        ['name'] = 'quartz_crystal',
        ['label'] = 'Quartz Crystal',
        ['weight'] = 200,
        ['type'] = 'item',
        ['image'] = 'quartz_crystal.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A clear quartz crystal.'
    },

    -- Emerald Items
    ['emerald_crystal'] = {
        ['name'] = 'emerald_crystal',
        ['label'] = 'Emerald Crystal',
        ['weight'] = 250,
        ['type'] = 'item',
        ['image'] = 'emerald_crystal.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A radiant emerald crystal.'
    },

    ['beryl_chunk'] = {
        ['name'] = 'beryl_chunk',
        ['label'] = 'Beryl Chunk',
        ['weight'] = 200,
        ['type'] = 'item',
        ['image'] = 'beryl_chunk.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A chunk of beryl.'
    },

    ['green_garnet'] = {
        ['name'] = 'green_garnet',
        ['label'] = 'Green Garnet',
        ['weight'] = 150,
        ['type'] = 'item',
        ['image'] = 'green_garnet.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A precious green garnet.'
    },

    -- Ruby Items
    ['ruby_crystal'] = {
        ['name'] = 'ruby_crystal',
        ['label'] = 'Ruby Crystal',
        ['weight'] = 250,
        ['type'] = 'item',
        ['image'] = 'ruby_crystal.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A brilliant ruby crystal.'
    },

    ['corundum_chunk'] = {
        ['name'] = 'corundum_chunk',
        ['label'] = 'Corundum Chunk',
        ['weight'] = 200,
        ['type'] = 'item',
        ['image'] = 'corundum_chunk.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A chunk of corundum.'
    },

    ['pink_sapphire'] = {
        ['name'] = 'pink_sapphire',
        ['label'] = 'Pink Sapphire',
        ['weight'] = 150,
        ['type'] = 'item',
        ['image'] = 'pink_sapphire.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A delicate pink sapphire.'
    },

    -- Amethyst Items
    ['amethyst_geode'] = {
        ['name'] = 'amethyst_geode',
        ['label'] = 'Amethyst Geode',
        ['weight'] = 250,
        ['type'] = 'item',
        ['image'] = 'amethyst_geode.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A beautiful amethyst geode.'
    },

    ['purple_quartz'] = {
        ['name'] = 'purple_quartz',
        ['label'] = 'Purple Quartz',
        ['weight'] = 200,
        ['type'] = 'item',
        ['image'] = 'purple_quartz.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A piece of purple quartz.'
    },

    ['clear_crystal'] = {
        ['name'] = 'clear_crystal',
        ['label'] = 'Clear Crystal',
        ['weight'] = 150,
        ['type'] = 'item',
        ['image'] = 'clear_crystal.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A clear and pristine crystal.'
    },

    -- Diamond Items
    ['diamond_crystal'] = {
        ['name'] = 'diamond_crystal',
        ['label'] = 'Diamond Crystal',
        ['weight'] = 250,
        ['type'] = 'item',
        ['image'] = 'diamond_crystal.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'An exquisite diamond crystal.'
    },

    ['graphite_chunk'] = {
        ['name'] = 'graphite_chunk',
        ['label'] = 'Graphite Chunk',
        ['weight'] = 200,
        ['type'] = 'item',
        ['image'] = 'graphite_chunk.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A chunk of graphite.'
    },

    ['blue_diamond'] = {
        ['name'] = 'blue_diamond',
        ['label'] = 'Blue Diamond',
        ['weight'] = 150,
        ['type'] = 'item',
        ['image'] = 'blue_diamond.png',
        ['unique'] = false,
        ['useable'] = false,
        ['shouldClose'] = true,
        ['combinable'] = nil,
        ['description'] = 'A rare and valuable blue diamond.'
    },

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.

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.

Last updated