Configuration
config.lua is bootstrap only. It holds what has to be decided before the database exists or the resource finishes loading:
- the language, framework, and target;
- who counts as an admin and who counts as police;
- the command names;
- where lot money is held;
- the fleet catalogue and job ladder;
- the item names, and a few physical tunings for the flatbed.
Changing anything in it needs a resource restart. Together with locales/*.lua, it is the only file you edit. Everything else in the resource is encrypted.
Everything else is a runtime setting. That covers fees, ped models, wear, opening hours, lifetimes, the store room, and the Public Job's balance. You edit them in-game in the Creator, with no restart, and they are stored in the imp_settings table. Their defaults are listed below.
Language
Config.Locale = 'en'
Every string a player reads comes from locales/<id>.lua. To translate:
- Copy
locales/en.luatolocales/<id>.lua. - In the copy, change
Locales['en']toLocales['<id>']. - Translate the right-hand side of each line.
- Set
Config.Locale = '<id>'. - Run
refreshandrestart vs-impoundjob.
Anything left untranslated falls back to English.
Framework, target and debug
Config.Framework = 'auto' -- 'auto' detects ESX / Qbox / QBCore; or 'esx' | 'qbox' | 'qbcore' | 'standalone'
Config.Target = 'ox_target' -- leave on ox_target: it is a hard dependency
Config.Debug = false -- console trace and visible target zones; keep false in production
Admin gate (who may open the Creator)
Config.CreatorAce = 'group.admin' -- ACE that passes the gate
Config.CreatorPermission = 'vs-impoundjob.creator' -- the resource's own ACE: Creator without full admin
Config.CreatorIds = { --[[ 'license:...', 'steam:...' ]] }
Config.AdminGroups = { 'admin', 'superadmin' } -- ESX groups / QBCore permissions that also pass
Config.CreatorCommand = 'impoundcreator'
The same gate covers /impound, /release, and every Creator action. Qbox admins are ACE-based, so they pass through Config.CreatorAce. There is no developer bypass switch.
Police and tow requests
Config.PoliceJobs = { 'police' } -- job names that may call a forced removal
Config.TowCommand = 'requesttow' -- the officer's command
Config.TowTarget = {
enabled = true, -- the "Request forced removal" option on cars
jobs = {}, -- extra jobs that may call one, e.g. { 'sheriff', 'parking' }
}
PoliceJobsis checked on the server for every request, job by job, so on Qbox an officer whose primary job is something else still counts.- An empty list refuses everybody but admins, so a typo cannot open tows to the whole server.
TowTarget.jobsapplies to the command as well as the target option.
Assistance calls
Config.CallCommand = 'chiama' -- the command ANY player runs to call a yard out
The default is Italian. Change it to a word your players will actually type, such as 'calltow'. See Towing: assistance calls.
Work points on the map
Config.PointBlips = true
Shows a lot's working points on the map to the people who work there, and nobody else:
- the truck bay;
- the impound point;
- the changing room;
- at a Public Job depot, the drop-off.
At a staffed lot "works there" means holding its job. At a depot it means being on a shift or wearing the overalls. The lot's own blip is always shown to everyone. Set it to false if you draw your own.
Compatibility
Config.Compat = {
qbTowJob = true,
esxGarage = nil,
}
qbTowJobis reserved for the stock tow-job compatibility layer. In 1.0.0 it changes nothing: the manifest'sprovide 'qbx_towjob'andprovide 'qb-towjob'always apply. See Dependencies.esxGarage(ESX only) names the garage an owned car goes back to when its lot is deleted and no previous garage was saved.- Left
nil, the script asks esx_garage for its garage list and uses the first one. - Set it if you run a garage script that does not export its list.
- Left
Lot money
Config.LotBank = 'internal' -- 'internal' | 'esx'
'internal' keeps balances in the imp_accounts table and needs no banking script. 'esx' uses esx_addonaccount society accounts named society_<job>, which you create yourself. There is deliberately no 'auto'. See Dependencies: lot money.
What a lot can buy
Config.FleetCatalogue is the boss terminal's fleet shop. Each entry:
| Field | Meaning |
|---|---|
role | 'tow' (has a tow arm), 'flatbed' (winch deck, flatbed3 only), or 'support' (cannot tow) |
model | Spawn name. An addon works if its resource is started. |
label, desc | What the shop shows |
price | What the lot pays |
tier | The accreditation tier required (a key of Config.AccreditationTiers). If left out, the first tier is used. |
startCond | Condition it is sold in, 0 to 100. If left out, 100. |
repairable | false means it can never be repaired, only sold. |
variants | A Config.FleetVariants ladder: which model is spawned at which condition |
rustBelow, rustFull, rustMax | The weathering ramp: clean at rustBelow, as weathered as rustMax from rustFull down |
Config.FleetVariants = {
recovery = {
{ at = 80, model = 'towtruck4' }, -- 80% and up: the clean one
{ at = 0, model = 'towtruck3' }, -- below 80%: the battered one
},
}
Config.AccreditationTiers = {
{ key = 'basic', label = 'Basic recovery', granted = true }, -- every lot holds it
{ key = 'heavy', label = 'Heavy recovery' }, -- earned, then licensed for a fee
}
Config.TowGadgetModels = { 'towtruck', 'towtruck2', 'towtruck3', 'towtruck4' }
Only models with a tow arm can tow. The game builds the arm, hook, and rope only for models with the tow_arm, tow_mount_a, and tow_mount_b bones. On anything else the truck drives up and does nothing. A role = 'tow' entry, and every rung of its variants ladder, must be in Config.TowGadgetModels (or carry towVerified = true), or it is dropped at boot with a console warning. Add a custom tow truck to that list only after checking it has the arm.
At least one tier must be granted, or a new lot can buy nothing. Keep Fleet.startingModel's tier a granted one too. A tier's key is also its database key, so renaming one after a lot has earned it forgets that accreditation. The fee and impound count for each tier are runtime settings.
The job ladder
Config.JobGrades = {
{ name = 'clerk', label = 'Yard Clerk', salary = 800, role = 'clerk' },
{ name = 'driver', label = 'Tow Driver', salary = 1100, role = 'driver' },
{ name = 'boss', label = 'Boss', salary = 1500, role = 'boss' },
}
These are written into the framework's own job grades when a staffed lot creates its job, so salary is the real paycheck figure when a lot's staff are paid by the framework. The last entry is the boss, and its name must stay 'boss' (ESX decides who is a boss from that name). Change the ladder before creating staffed lots.
The flatbed winch
Config.FlatbedWinch tunes the flatbed3 winch. The defaults are measured in game, so only change them if something looks wrong:
| Key | Default | Change it when |
|---|---|---|
mounts | two reels on the deck | The cable clips through the deck (raise z), or the two cables come out on the wrong sides (swap the two x values) |
carAnchor | x = 0.55, z = 0.25 | The cables meet the car too wide or at the wrong height |
carrySag | false | Only for a truck whose reels stand high |
kneelDistance | 0.6 | Hands go into the car (raise) or reach for air (lower) |
kneelSide, kneelTurn | 0.3, 25.0 | The cables pass through the kneeling ped |
straighten, straightenLookahead, straightenRate | true, 3.0, 18.0 | A crooked car should square up sooner (lower lookahead) or gentler (raise it) |
Wheel chocks
Config.Chocks = {
item = 'wheel_chock', -- must exist in ox_inventory
model = 'prop_air_chock_01', -- streamed with the resource
gap = 0.0,
offset = { x = 0.0, y = 0.0, z = 0.0 },
rotation = { x = 0.0, y = 0.0, z = 0.0 }, -- 180 on z turns them all round
inward = { left = 0.0, right = 0.0 },
}
Stock
Config.Stock = {
image = 'nui://ox_inventory/web/images/%s.png',
items = {
{ item = 'traffic_cone', label = 'Traffic Cone', cost = 25, icon = 'cone' },
{ item = 'wheel_chock', label = 'Wheel Chock', cost = 60 },
},
}
What the boss can order on the Stock page, at what cost per item, delivered to the store room. Each item must exist in ox_inventory. icon is only needed when the item's picture is not named after the item.
Traffic cones
Config.Cones = {
item = 'traffic_cone', -- must exist in ox_inventory with client.export 'vs-impoundjob.cone'
model = 'prop_roadcone02a',
anyone = false, -- true lets every player place them
}
Runtime settings
Edited in the Creator and stored in imp_settings. "Per lot" settings can be overridden for one lot. Prices marked owner are set by a lot's boss on the boss terminal.
| Setting | Default | Per lot |
|---|---|---|
| People | ||
| Receptionist / handover clerk ped | a_f_y_femaleagent / a_m_m_business_01 | |
| Fleet attendant / NPC tow driver ped | s_m_y_xmech_02 | |
| Job dispatcher ped | s_m_y_dockwork_01 | |
| Impound clerk ped | s_m_m_autoshop_01 | |
| Fleet | ||
| Vehicles a lot may own | 6 | Yes |
| Roadworthy above (condition) | 15 | Yes |
| Sell-back (% of purchase price) | 50 | Yes |
| Vehicle a new lot starts with | towtruck2, 40% | |
| Wear per shift / per car booked in / % of damage | 2 / 1 / 50 | Yes |
| Releases | ||
| Release fee | $500 | Yes (owner) |
| Late charge starts after (days) | 0 | Yes (owner) |
| Then add this per day held | $0 (off) | Yes (owner) |
| For at most this many days | 14 | Yes (owner) |
| Release fee per vehicle class | not set (uses the base fee) | Yes (owner) |
| Staff pay | ||
| Who pays the staff | Fixed (the framework) | Yes |
| A lot-paid payslip every (minutes) | 15 | |
| Pay per grade (when the lot pays) | from Config.JobGrades | Yes (owner) |
| Accreditation | ||
| Fleet tiers must be earned | On | |
| Heavy recovery: vehicles booked in / fee | 20 / $25,000 | |
| Yard | ||
| Unowned car stays for (minutes) | 45 | Yes |
| Tow gives up after (seconds) | 300 | Yes |
| Recovered car stays parked for (minutes, depots) | 30 | Yes |
| Store room | ||
| Storage slots / capacity (kg) | 40 / 100 | Yes |
| Opening hours (NPC-served lots) | ||
| Clock | Real time (the server's) | Yes |
| Open only during these hours | On, 08:00 to 20:00 | Yes |
| Public Job | ||
| Pay per call completed | $350 | Yes |
| First call / next call after | 25 s / 45 s | |
| Calls at least / car appears within | 500 m / 220 m | |
| Out of the truck for at most | 60 s (180 s at a scene) |
The Public Job's clocks, reputation rules, levels, truck ladder, and scenarios are listed on the Public Job page.
A few things are neither in config.lua nor in the Creator, and are fixed in this release: the Public Job's truck models and breakdown car list, the gas stations and workshops its calls use, the ped models in its scenes, the list of changing-room lockers, and the default work clothes. A lot's uniform can still be set in the Creator with Save my outfit.