Config = {}
--[[
‼️ IMPORTANT TIP‼️
Use the /drugs_admin command to configure labs, drugs, locations and everything else
]]
-- Debug
-- Enable or disable debug mode, this will print debug messages to console
Config.Debug = false
Config.DebugLevel = {
'INFO',
'CRITICAL',
'SUCCESS',
'ERROR',
'DEBUG',
}
-- Locale
-- Locale for translations (locales/[locale].lua)
Config.Locale = 'en'
-- [[[[[[ WARNING ]]]]]]]
-- THIS configuration is automatic, you don't need to configure this at all. Change unless you really have to.
-- [[[[[[ WARNING ]]]]]]]
-- Framework
-- Framework.AUTO_DETECT = automatic detection
-- Framework.ESX = es_extended
-- Framework.QBCore = qb-core
-- Framework.QBX = qbx_core
-- Framework.Standalone = standalone
Config.Framework = Framework.AUTO_DETECT
-- Inventory systems
-- Inventory.AUTO_DETECT = automatic detection
-- Inventory.OX = ox_inventory
-- Inventory.QB = qb-inventory
-- Inventory.QS = qs-inventory
-- Inventory.MF = mf-inventory
-- Inventory.PS = ps-inventory
-- Inventory.LJ = lj-inventory
-- Inventory.CORE = core_inventory
-- Inventory.CHEZZA = inventory
-- Inventory.CODEM = codem-inventory
-- Inventory.ORIGEN = origen_inventory
-- Inventory.TGIANN = tgiann-inventory
-- Inventory.EXRP = exrp_inventory
-- Inventory.NONE = no inventory
Config.Inventory = Inventory.AUTO_DETECT
-- Database
-- Database.AUTO_DETECT = automatic detection
-- Database.OX = oxmysql
-- Database.MYSQL_ASYNC = mysql-async
-- Database.GHMATTI = ghmattimysql
Config.Database = Database.AUTO_DETECT
-- Target systems
-- Target.AUTO_DETECT = automatic detection
-- Target.OX = ox_target
-- Target.QB = qb-target
-- Target.Q = qtarget
-- Target.NONE = no target (marker/ped interaction)
Config.Target = Target.AUTO_DETECT
-- Gang systems
-- Gangs.AUTO_DETECT = automatic detection
-- Gangs.QBCore = qb-core
-- Gangs.RCORE = rcore_gangs
-- Gangs.NONE = no gangs
Config.Gangs = Gangs.AUTO_DETECT
-- Dispatch systems
-- Dispatch.AUTO_DETECT = automatic detection
-- Dispatch.CODESIGN = cd_dispatch
-- Dispatch.CODEM = codem-dispatch
-- Dispatch.CORE = core_dispatch
-- Dispatch.DUSA = dusa_dispatch
-- Dispatch.EMERGENCY = emergencydispatch
-- Dispatch.ORIGEN = origen_police
-- Dispatch.QUASAR = qs-dispatch
-- Dispatch.RCORE = rcore_dispatch
-- Dispatch.TK = tk_dispatch
-- Dispatch.NONE = no dispatch
Config.Dispatch = Dispatch.AUTO_DETECT
-- Lab entry point
-- LAB_ENTRY.MARKER = marker
-- LAB_ENTRY.TARGET = target system of your choice
Config.DrugLabEntryPoint = LAB_ENTRY.MARKER
-- Markers
-- https://docs.fivem.net/docs/game-references/markers/
Config.Markers = {
Type = 20,
Size = vector3(0.5, 0.5, 0.5),
Color = vector4(255, 187, 0, 100),
}
-- Lab blips
-- Sprites: https://docs.fivem.net/docs/game-references/blips/
-- Colors: https://docs.fivem.net/docs/game-references/blips/#blip-colors
Config.LabBlips = {
Enabled = true,
farm = {
Sprite = 496,
Color = 25,
Scale = 0.8,
Label = 'Weed Farm',
ShortRange = true,
},
lab = {
Sprite = 499,
Color = 5,
Scale = 0.8,
Label = 'Meth Lab',
ShortRange = true,
},
lockup = {
Sprite = 497,
Color = 1,
Scale = 0.8,
Label = 'Cocaine Lockup',
ShortRange = true,
},
}
-- Harvest Area
Config.HarvestArea = {
WaitTime = 1000,
}
-- Open menu key
Config.OpenMenuKey = 'E'
-- Action UI
-- bottom
-- top
Config.ActionUI = {
Position = 'bottom',
}
-- Growing
Config.Growing = {
Weed = {
GrowthInterval = 5000, -- 5 seconds between growth ticks
}
}
-- Dispatch alerts
Config.DispatchAlerts = {
DrugUse = {
Enabled = true,
Radius = 30.0,
ChanceByScumminess = {
[0] = 70, -- Rich area: high chance
[1] = 55,
[2] = 40,
[3] = 25,
[4] = 10,
[5] = 0, -- Poor area: nobody cares
},
}
}
-- Commands
Config.Commands = {
Admin = "drugs_admin",
CheckAddiction = "drugs_addiction"
}
-- Drug-specific configurations for location-based production
Config.DrugLocationSettings = {
meth = {
interactionKey = 'E',
interactionDistance = 2.0,
drugType = 'METH',
labType = 'lab'
},
coke = {
interactionKey = 'E',
interactionDistance = 2.0,
drugType = 'COKE',
labType = 'lockup'
},
weed_processing = {
interactionKey = 'E',
interactionDistance = 2.5,
drugType = 'WEED_PROCESSING',
labType = 'weed_processing'
}
}
-- Framework admin groups
Config.FrameworkAdminGroups = {
[Framework.ESX] = { 'superadmin', 'admin' },
[Framework.QBCore] = { 'god', 'admin' },
}
-- Routing buckets
Config.Bucket = {
Default = 0,
Min = 1000,
Max = 5000,
}
-- Missions
Config.Missions = {
PaymentAccount = 'money', -- ‼️ IMPORTANT ‼️ esx has money, qbcore has cash. bank is same on both frameworks
-- If true, unsold items will be returned to the player's stash
-- If false, they will be deleted
ReturnUnsoldItemsToStash = false,
Multipliers = {
mobile_delivery = 1.0,
plane_delivery = 1.5,
},
MaxDropOffLocations = 10,
-- Purchasable missions
Purchasable = {
Enabled = true,
PurchaseAccount = 'money', -- 'money' or 'bank' ‼️ IMPORTANT ‼️ esx has money, qbcore has cash
Missions = {
plane_delivery = {
price = 25000,
},
mobile_delivery = {
price = 15000,
},
boat_delivery = {
price = 20000,
},
instant = {
price = 10000,
},
}
}
}
-- Street deals
Config.StreetDeals = {
Enabled = true,
SaleMultiplier = 0.9,
RandomRefusalChance = 0.3,
-- Each zone has a budget for deals. If player exceeds it, they will be refused automartically
BudgetByScumminess = {
[0] = { min = 500, max = 1500 }, -- richest
[1] = { min = 400, max = 1200 },
[2] = { min = 300, max = 800 },
[3] = { min = 200, max = 600 },
[4] = { min = 150, max = 400 },
[5] = { min = 100, max = 300 }, -- poorest
},
-- Peds can have a chance to attack a player when they make a deal
AttackChanceByScumminess = {
[0] = 0.03, -- richest
[1] = 0.05,
[2] = 0.10,
[3] = 0.15,
[4] = 0.20,
[5] = 0.25, -- poorest
},
-- Each zone can accept different types of drugs. For example, rich areas love coke but do not want meth
DrugZoneAcceptance = {
weed = { [0] = 0.15, [1] = 0.30, [2] = 0.60, [3] = 0.80, [4] = 0.95, [5] = 1.00 },
meth = { [0] = 0.05, [1] = 0.15, [2] = 0.40, [3] = 0.70, [4] = 0.90, [5] = 1.00 },
coke = { [0] = 1.00, [1] = 0.85, [2] = 0.60, [3] = 0.40, [4] = 0.20, [5] = 0.10 },
},
-- When player is attacked by the ped, can ped use a weapon?
GiveWeaponToPed = true,
WeaponTypes = {
'WEAPON_KNIFE',
'WEAPON_PISTOL',
'WEAPON_COMBATPISTOL',
'WEAPON_SWITCHBLADE',
},
-- Skill progression system
SkillSystem = {
Enabled = true,
-- Tiers: Rookie → Apprentice → Dealer → Professional → Veteran → Kingpin
Tiers = {
{ minDeals = 0, maxDeals = 9, name = "Rookie", level = 0 },
{ minDeals = 10, maxDeals = 24, name = "Apprentice", level = 1 },
{ minDeals = 25, maxDeals = 49, name = "Dealer", level = 2 },
{ minDeals = 50, maxDeals = 99, name = "Professional", level = 3 },
{ minDeals = 100, maxDeals = 249, name = "Veteran", level = 4 },
{ minDeals = 250, maxDeals = nil, name = "Kingpin", level = 5 },
},
AttackReduction = {
[0] = 0.00, -- Rookie
[1] = 0.15,
[2] = 0.30,
[3] = 0.45,
[4] = 0.60,
[5] = 0.75, -- Kingpin
},
RefusalReduction = {
[0] = 0.00, -- Rookie
[1] = 0.10,
[2] = 0.20,
[3] = 0.35,
[4] = 0.50,
[5] = 0.70, -- Kingpin
},
PoliceDispatchReduction = {
[0] = 0.00, -- Rookie
[1] = 0.10,
[2] = 0.25,
[3] = 0.40,
[4] = 0.60,
[5] = 0.80, -- Kingpin
},
-- Chance a police will be called after te deal is done
BasePoliceDispatchChance = 0.20,
ShowLevelUpNotification = true,
},
}
-- Lab robbery
-- When lab does not have security upgrade, there is a chance of theft or progress reset
Config.LabRobbery = {
Enabled = true,
Chance = 2, -- % chance of robbery
}
-- Addiction system
Config.AddictionSystem = {
Enabled = true,
WithdrawalThreshold = 20, -- Level required before withdrawals can happen
WithdrawalTimeLimit = 5000, -- ms before withdrawal starts (60000 * 5 = 5 minutes)
DecayInterval = 30000, -- How often addiction decays in ms
DecayMin = 3, -- Minimum addiction decay per tick
DecayMax = 15, -- Maximum addiction decay per tick
DrugStrength = {
weed = 10,
meth = 25,
coke = 15,
}
}
-- Special props that can be added in labs using admins
Config.SpecialProps = {
{ model = 'bkr_prop_coke_press_01b', label = 'Brick Press' },
{ model = 'rds_barell_mixer', label = 'Coke barell mixer' },
{ model = 'rds_meth_oven', label = 'Coke oven' },
{ model = 'rds_meth_washer', label = 'Coke washer' },
}
-- Instant sale
Config.InstantSale = {
BaseCompletionTime = 10800000, -- 3 hours in milliseconds
Multiplier = 0.8, -- 80% of base price
DealerModels = {
'g_m_y_mexgang_01',
'g_m_y_mexgoon_01',
'g_m_y_mexgoon_02',
'g_m_y_mexgoon_03',
'g_m_y_lost_01',
'g_m_y_lost_02',
'g_m_y_lost_03',
},
}
-- Shops
Config.Shops = {
LabDealer = {
DealerModels = {
'g_m_y_mexgang_01',
'g_m_y_mexgoon_01',
'g_m_y_mexgoon_02',
'g_m_y_mexgoon_03',
'g_m_y_lost_01',
'g_m_y_lost_02',
'g_m_y_lost_03',
},
},
Supplier = {
DealerModels = {
'g_m_y_mexgang_01',
'g_m_y_mexgoon_01',
'g_m_y_mexgoon_02',
'g_m_y_mexgoon_03',
'g_m_y_lost_01',
'g_m_y_lost_02',
'g_m_y_lost_03',
},
},
}
-- World lab - labs outside the IPL
Config.WorldLab = {
ProximityRadius = 50.0, -- meters, activation range
ProximityHysteresis = 10.0, -- extra meters before deactivation
PollInterval = 1000, -- ms between proximity checks
}