All configuration lives in the config/ folder. Each file covers one area, so you only edit what you need:
| File | What it controls |
|---|
config/main.lua | Brand, framework, job gates, contract economy, repair pricing |
config/locations.lua | Depot locations, garage and trailer spawn slots, delivery points |
config/cargo.lua | The full list of loads and their ADR / fragile / valuable / illegal flags |
config/dealership.lua | Trucks for sale, prices, stats, images, level requirements |
config/leveling.lua | XP curve, distance caps, per-tier money and XP bonuses |
config/drivers.lua | NPC driver pool, hire costs, profit rates, fuel consumption |
config/loans.lua | Loan plans, interest, repayment period, level-based limits |
config/party.lua | Crew pricing, member caps, delivery bonuses |
config/main.lua
Brand
Config.Brand = {
name = 'NEX Trucking',
short = 'Trucking',
tagline = 'Logistics. Power. Profit.',
primary = '#ffffff', -- UI accent color; any hex works
danger = '#ff5d5d',
logo = 'https://...' -- HTTPS image URL; nil/'' = text tile
}
primary recolors the whole UI (chips, buttons, glow, gradients) and the depot markers. Dark hues are automatically lifted to stay readable on the dark backdrop.
Framework and account
Config.Framework = 'auto' -- 'auto' | 'esx' | 'qb' | 'qbox'
Config.Account = 'bank' -- framework account used for deposits/withdrawals
Integrations
Config.UseOxTarget = false -- false = marker + keypress fallback
Config.UseOxInventory = true -- reserved for future cargo items
Config.UseOxLibNotify = true -- ox_lib notifications
Config.UseOxTarget is false by default. Set it to true (and run ox_target) to get target zones on the depot and trailers instead of markers.
Job gates
Config.AllowedJobs = { } -- empty = anyone can open the dashboard
Config.PoliceJobs = { 'police' } -- jobs allowed to inspect trailers
Feature toggles
Config.DisableLoans = false
Config.DisableDrivers = false -- also hides the Recruit and My Drivers pages
Config.CreateTables = true -- run SQL bootstrap at start
Contracts
Config.Contracts = {
cancelKey = 167, -- F6 (hold 2s to cancel a delivery)
inspectCargoSeconds = 5, -- police inspection duration
generation = {
cooldownMinutes = 5, -- generator interval
perInterval = 5, -- contracts per track per interval
maxActive = 30, -- cap per track; oldest are pruned
maxIllegal = 5, -- cap on illegal contracts per track
},
economy = {
pricePerKm = { min = 150, max = 350 },
multipliers = {
freight = 1.2, -- applied to freight contracts
illegal = 1.8, -- applied to illegal cargo
},
},
urgent = {
chancePercent = 10, -- chance a contract is flagged urgent
secondsPerKm = 90, -- time budget per kilometre
rewardPenaltyPct = 20, -- bonus penalty when late
},
fragile = {
minHealthPercent = 70, -- trailer health floor
rewardPenaltyPct = 20, -- bonus penalty below the floor
},
rental = {
availableTrucks = { 'hauler', 'packer', 'blacktop', 'brickades', 'vetirs' },
mustReturnTruck = true,
},
}
Selling, repairs, and logging
Config.SellPriceMultiplier = 0.7 -- trucks sell for 70% of purchase price
Config.RepairPrice = { -- cost per 1% damage per part
engine = 75,
body = 40,
transmission = 50,
wheels = 25,
fuel = 5, -- cost per 1% of missing fuel
}
Config.WebhookURL = '' -- Discord webhook for logs ('' = disabled)
config/locations.lua
Config.TruckerLocations ships with one depot (main_depot) at the LSIA freight yard. Each depot needs a menu point (where the dashboard opens), garage slots (truck spawns), trailer slots, and a blip (default sprite 478, color 25, scale 0.7). Copy the block to add more depots.
Config.DeliveryLocations is a single shared pool of 170+ vector4 drop-off points across Los Santos and Blaine County. The contract generator picks from this list at random — add or remove entries freely.
Crew deliveries spawn one truck and trailer per member, so a depot can only host crews up to the smaller of its garage and trailer slot counts (5 with the default depot).
config/cargo.lua
Every load is one line: trailer model, display name, ADR class, and fragile / valuable / illegal flags.
load('tanker2', 'Kerosene', 3, 0, 0, 0),
load('docktrailer', 'Smuggled ivory', 0, 1, 1, 1),
ADR classes: 0 none, 1 explosives, 2 flammable gas, 3 flammable liquid, 4 flammable solid, 5 toxic, 6 corrosive. A player needs an ADR Certification skill level at or above the cargo’s class to take the job.
config/dealership.lua
Nine trucks keyed by spawn name. Each entry sets label, price, displayed engine / transmission / hp specs, image, driverBonus (extra % earnings when assigned to an NPC driver), and requiredLevel. The default range runs from the vetirs (price = 25000, requiredLevel = 0) to the phantom3 (price = 180000, requiredLevel = 30).
config/leveling.lua
Config.DistanceSkill = { -- max delivery distance (km) per Range level
[0] = 6, [1] = 6.5, [2] = 7, [3] = 7.5, [4] = 8, [5] = 8.5, [6] = 99,
}
Config.RequiredXP = { [1] = 1000, --[[ ... ]] [36] = 100000 }
Config.ExpGain = 2.0 -- XP per km as % of metres (2 km = 40 XP)
Config.Bonus defines per-tier money and XP bonuses for the distance, valuable, fragile, fast, and illegal skills — money bonuses run 2–12% across tiers 1–6 by default.
Only ever increase Config.RequiredXP values on a live server. Decreasing them causes players to skip skill point grants.
config/drivers.lua
Config.Drivers = {
cooldownMinutes = 20, -- a new hireable driver spawns every 20 min
maxActive = 20, -- max unhired drivers at once
maxPerLevel = { [0] = 1, [10] = 2, [20] = 3, [30] = 4 },
hiringCost = { min = 50, max = 100, percentPerSkill = 25 },
}
Config.DriverJobs = {
cooldownMinutes = 30, -- profit cycle interval
fuelConsumption = { min = 2, max = 8 },
profit = { min = 200, max = 350, percentPerSkill = 15 },
earnWhileOffline = false, -- true = owners earn even while offline
}
config/loans.lua
Config.MaxLoanPerLevel = { [0] = 40000, [10] = 100000, [20] = 150000, [30] = 200000 }
Config.Loans = {
paymentIntervalHours = 24,
plans = {
{ amount = 20000, interestPct = 17, days = 15 },
{ amount = 50000, interestPct = 22, days = 20 },
{ amount = 150000, interestPct = 30, days = 25 },
{ amount = 200000, interestPct = 35.5, days = 20 },
},
}
Loans debit the trucking wallet, not the player’s bank. If a daily payment can’t be covered, the player goes bankrupt and all their trucking data is wiped — see Player usage.
config/party.lua
Config.Party = {
createPrice = 5000, -- one-time cost to create a crew
perMemberPrice = 100, -- cost per seat
maxMembers = 10,
moneyBonusPercent = 2, -- bonus money per delivery
expBonusPercent = 2, -- bonus XP per delivery
onlyLeaderStarts = true, -- only the leader can start crew deliveries
}
Locales
Strings live in locales/*.json and load through ox_lib. Pick the language with the ox:locale convar — see Installation.