QB / ESX
Agency-Minerjob
Enhanced mining job for FiveM with multi-framework and multi-inventory auto-detection. Features 100-level skill progression with XP, dynamic economy with real-time price fluctuations, and interactive skill checks via ox_lib. Supports 6 ore types (stone, coal, silver, copper, diamond, emerald) with framework-adapted selling menus.

01 Configuration
Complete config.lua for Agency-Minerjob. All options documented via inline comments.
Config = Config or {}
-- Framework Configuration
Config.Framework = 'auto' -- Choose between 'qb-core', 'esx', or 'auto' for automatic detection
-- 'auto' = Automatic detection (recommended)
-- 'qb-core' = Force QB-Core
-- 'esx' = Force ESX
-- Inventory System Configuration
Config.InventorySystem = 'auto' -- Choose between 'ox', 'esx', 'qb', or 'auto'
-- 'auto' = Automatic detection based on available resources (recommended)
-- 'ox' = ox_inventory (works with both QB-Core and ESX)
-- 'esx' = ESX default inventory
-- 'qb' = QB-Core default inventory
-- Auto-Detection Function (do not edit unless you know what you're doing)
function Config.DetectFramework()
if GetResourceState('qb-core') == 'started' then
return 'qb-core'
elseif GetResourceState('es_extended') == 'started' then
return 'esx'
else
print('[Agency-Minerjob] WARNING: No supported framework detected! Please configure manually.')
return 'qb-core' -- Default fallback
end
end
function Config.DetectInventory()
if GetResourceState('ox_inventory') == 'started' then
return 'ox'
elseif GetResourceState('qb-core') == 'started' then
return 'qb'
elseif GetResourceState('es_extended') == 'started' then
return 'esx'
else
print('[Agency-Minerjob] WARNING: No supported inventory system detected! Using QB-Core default.')
return 'qb' -- Default fallback
end
end
-- Notification System Configuration
Config.UseAgencyNotify = true -- Use Agency-Notify system (recommended for better notifications)
-- Localization Configuration
Config.Locale = 'de' -- Available: 'en', 'de', 'fr', 'es'
-- Mining Configuration
Config.GiveItemProbability = 100 -- Probability to get an item (0-100%) - Always give items
Config.MinItems = 1 -- Minimum items to give
Config.MaxItems = 2 -- Maximum items to give
-- Drop chance configuration (per item type) - Base chances at level 1
Config.DropChances = {
stone = 100, -- 100% chance to get stone
coal = 70, -- 85% chance to get coal
silver = 50, -- 70% chance to get silver
copper = 30, -- 50% chance to get copper
diamond = 5, -- 25% chance to get diamond
emerald = 10 -- 1% chance to get emerald
}
-- Mining Skill System
Config.SkillSystem = {
enabled = true,
maxLevel = 100,
xpPerMining = 8, -- Base XP per successful mining (reduced)
xpBonusPerLevel = 1.5, -- Additional XP per level (slower bonus growth)
-- XP required for each level (steeper exponential growth for longer progression)
xpFormula = function(level)
return math.floor(120 * (level ^ 1.8))
end,
-- Balanced probability system - always totals exactly 100%
-- Base chances at level 1 (must total 100%)
baseDropChances = {
stone = 60.0, -- Most common
coal = 25.0, -- Common
silver = 10.0, -- Uncommon
copper = 4.0, -- Rare
diamond = 0.8, -- Very rare
emerald = 0.2 -- Legendary (0.2% at start)
},
-- How much each item's chance changes per level
-- Positive = increases, Negative = decreases
chanceChangePerLevel = {
stone = -0.4, -- Decreases by 0.4% per level
coal = -0.2, -- Decreases by 0.2% per level
silver = -0.1, -- Decreases by 0.1% per level
copper = 0.2, -- Increases by 0.2% per level
diamond = 0.3, -- Increases by 0.3% per level
emerald = 0.2 -- Increases by 0.2% per level
},
-- Minimum and maximum bounds for each item
chanceBounds = {
stone = {min = 20.0, max = 60.0}, -- Always common, but not overwhelming
coal = {min = 10.0, max = 35.0}, -- Stays reasonably common
silver = {min = 8.0, max = 25.0}, -- Moderate range
copper = {min = 4.0, max = 20.0}, -- Can become quite common at high levels
diamond = {min = 0.8, max = 15.0}, -- Significant growth potential
emerald = {min = 0.2, max = 10.0} -- Rare but can become decent chance
}
}
-- Item configuration (weights are ignored - only drop chances from SkillSystem are used)
Config.Items = {
{item = 'stone', min = 1, max = 3},
{item = 'coal', min = 1, max = 2},
{item = 'silver', min = 1, max = 2},
{item = 'copper', min = 1, max = 1},
{item = 'diamond', min = 1, max = 1},
{item = 'emerald', min = 1, max = 1}
}
-- Price ranges for each item (min to max)
Config.PriceRanges = {
stone = {min = 250, max = 500},
coal = {min = 500, max = 1000},
silver = {min = 1000, max = 2000},
copper = {min = 2000, max = 3000},
diamond = {min = 3000, max = 5000},
emerald = {min = 8000, max = 10000}
}
-- Dynamic pricing configuration
Config.DynamicPricing = {
enabled = true,
updateIntervalMinutes = 10, -- How often prices update (in minutes)
priceFluctuationPercent = 20 -- How much prices can change per update (percentage)
}
Config.DrawMarkers = {
Distance = 10.0,
Type = 2,
Size = {x = 1.0, y = 1.0, z = 0.5},
Color = {r = 255, g = 255, b = 255}, -- White color
}
Config.CoolDoownForEachRock = 20 -- Cooldown so you can't mine the same stone, you need to wait this seconds
Config.RockBlips = {
sprite = 443,
scale = 0.6,
colour = 64,
}
Config.RockSkillCheck = {
difficulty = 'easy', -- easy, medium, hard
repeatTimes = 3, -- Always 3 skill checks for one reward
}
Config.MiningZones = {
DavisQuartz = {
ped = {
model = 'a_m_m_bevhills_01',
coords = vec4(2956.95, 2744.58, 43.56, 286.29),
spriteBlip = 207, -- Changed to buyer icon
scaleBlip = 1.2,
colourBlip = 66, -- Changed to buyer color (green)
},
rocksPositions = {
vec3(2951.82, 2769.76, 39.03),
vec3(2969.16, 2777, 38.43),
vec3(2973.73, 2775.26, 38.20),
vec3(2939.3174, 2772.4861, 39.2743),
vec3(2929.4849, 2788.7048, 39.9077),
vec3(2926.4578, 2794.9302, 40.7668),
vec3(2938.4460, 2811.3911, 42.5717),
vec3(2944.6978, 2817.5015, 42.7257),
vec3(2947.3318, 2819.3782, 42.6823),
vec3(2954.8787, 2819.8843, 42.5190),
vec3(2991.0737, 2777.8633, 43.2770),
vec3(2998.4082, 2759.3228, 42.9451),
vec3(2983.3010, 2761.8564, 42.7899),
vec3(2953.4241, 2756.1313, 43.5224),
vec3(2943.8330, 2742.7700, 43.3738),
vec3(2929.8323, 2761.1487, 44.7036)
}
}
}
-- Removed SellZones - now the miner NPC is also the buyer