How Integrations Work#
Miner Job talks to other resources through small bridge files — client/framework/ and server/framework/ for the framework and the inventory, client/target.lua for targeting. Those files are left open so you can adapt them; everything else is detected at start or switched in config.lua.
Layer | Supported | Without it |
|---|---|---|
Framework |
| Required — money, jobs and identities come from it. |
Inventory |
| Falls back to the framework's inventory. |
Target |
| Key presses with on-screen prompts. |
Text UI |
| The script's own 3D text and hint box. |
Outfits | ESX | Set |
Party |
| Crews are built from the panel's own invitations. |
Job money |
| Mission pay goes straight to the player's cash. |
Quests |
| Off unless |
Database |
| Required. |
Frameworks#
Config.Framework is filled in automatically: esx when es_extended is started, qb for qb-core and qbx_core. Leave the line as it is. If your core has a different resource name, adapt the bridge files in client/framework/ and server/framework/ — they hold every call the job makes to the framework: identifier, job name, money, items and usable items.
Topic | ESX | QBCore / Qbox |
|---|---|---|
Identifier |
|
|
Money paid and charged |
|
|
Job registration | Automatic, in | By hand, in |
Job change |
|
|
Inventories#
Every read and write of an item goes to the inventory that is actually running, not to the one a config string names. That matters on ESX with qs-inventory: the framework's own item calls write to a table qs-inventory never reads, so the job talks to qs-inventory directly instead.
Inventory | Pickaxe durability |
|---|---|
| Stored in the item's metadata, visible on the slot. |
| Kept by the job. The pickaxe still wears, breaks and is removed. |
Config.InventoryPickaxe = true -- false = the pickaxe is a prop, no item at all
Config.InventoryPickaxeScript = "qs" -- "ox" or "qs"; only breaks the tie if both run
Config.QuasarInventory = false -- true on qs-inventory: locks it during the outfit changePickaxes are registered as usable items on start, so using one from the inventory takes it out or puts it away. The item lists are on Inventory Items.
Target and Prompts#
With a target resource the manager, the rocks, the conveyor and the furnace get third-eye options — Mine Ore, Deposit Ore, Open Furnace and so on.
Config.Target = true
Config.TargetScript = "ox" -- "ox" for ox_target, "qb" for qb-targetWith Config.Target = false (the default) everything is a key press near the object. Config.Drawtext = true shows floating "Press E" labels — drawn by qs-textui when it is running — and false uses a hint box instead.
Config.Target = false
Config.Drawtext = true
Config.DrawOutline = false -- outline the ore rocks so they stand outNotifications#
By default the job shows its own notifications, styled like its panel. To use your server's notification resource, set Config.DefaultNotifications = false and fill in SendTextMessage in config.lua — it receives the text and info, error or success:
Config.DefaultNotifications = false
function SendTextMessage(msg, type)
lib.notify({ description = msg, type = type })
endKey hints such as "Put pickaxe in belt" always use the script's own hint box.
The Miner Outfit#
With Config.Clothing = true the player changes into the outfit at the top of config/clothing.lua when a mission starts and back into their own clothes when it ends or is abandoned. One outfit per sex, using skinchanger component names:
male = {
["arms"] = 65,
["tshirt_1"] = 59, ["tshirt_2"] = 1,
["torso_1"] = 5, ["torso_2"] = 2,
["pants_1"] = 9, ["pants_2"] = 4,
["shoes_1"] = 0, ["shoes_2"] = 0,
["helmet_1"] = 145, ["helmet_2"] = 1,
},On ESX it loads through skinchanger and restores through esx_skin; on QBCore through qb-clothing. For another clothing resource, edit ToggleJobClothes in the same file — a commented illenium-appearance line is already there.
Quasar Resources#
qs-party — crews from a real party
When qs-party is started, everyone in the leader's party joins the mission crew, up to Config.MaxPartyMembers, alongside anyone invited from the panel. Nothing to configure.
qs-job-management — mission pay through the job
When qs-job-management is started, mission money is paid through its AddJobMoney for the miner job instead of straight into the player's cash. Shop sales and prizes are still paid in cash.
qs-inventory — quests and the clothing lock
Config.QuasarInventoryQuests = true creates two qs-inventory quests when a player loads — Mining Progress (advanced on every level up) and Mining Crew. Config.QuasarInventory = true locks the inventory's clothing while the outfit changes.
qs-textui — 3D prompts
When qs-textui is started, the floating "Press E" labels are drawn by it, so they match the rest of your Quasar resources.
An NPC manager — shop and leaderboard
The job has one ped, the manager. If you want a separate seller or a leaderboard board somewhere else, spawn it with your NPC manager and call exports['qs-minerjob']:openSellMenu() or exports['qs-minerjob']:openLeaderboard() from it.
Discord Logs#
Off by default. Paste a webhook URL, switch Enabled on and choose the events. Each event takes true (the shared URL), false (off), or a URL of its own — so money can go to a staff channel and missions to a public one. A failed send never blocks a payout.
Config.Webhooks = {
Enabled = true,
Url = 'https://discord.com/api/webhooks/...',
Name = 'qs-minerjob',
Avatar = '',
Timestamp = true,
Events = {
MissionStarted = true,
MissionFinished = true,
MissionAbandoned = true,
MoneyPaid = 'https://discord.com/api/webhooks/staff-channel',
ExperienceGiven = true,
RichVein = true,
Tournament = true,
ConfigChanged = true, -- who changed what in /mineradmin
},
}Languages#
Ten languages ship in config/translations.lua: en, es, fr, de, pt, it, ru, tr, nl and cn. Every line in game and in the panel comes from there, including the guide, the achievement names and the currency symbol.
Config.Language = "es"To change a line, edit only the text between the quotes. To add a language, copy the whole ['en'] block, give it a new key, translate it and select it with Config.Language. A key missing from your language shows the key itself, so copy the full block rather than part of it.



