Impound Job Configuration

•10 min read

View Impound Job Script in the WXMAPS store

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:

  1. Copy locales/en.lua to locales/<id>.lua.
  2. In the copy, change Locales['en'] to Locales['<id>'].
  3. Translate the right-hand side of each line.
  4. Set Config.Locale = '<id>'.
  5. Run refresh and restart 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' }
}
  • PoliceJobs is 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.jobs applies 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,
}
  • qbTowJob is reserved for the stock tow-job compatibility layer. In 1.0.0 it changes nothing: the manifest's provide 'qbx_towjob' and provide '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.

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:

FieldMeaning
role'tow' (has a tow arm), 'flatbed' (winch deck, flatbed3 only), or 'support' (cannot tow)
modelSpawn name. An addon works if its resource is started.
label, descWhat the shop shows
priceWhat the lot pays
tierThe accreditation tier required (a key of Config.AccreditationTiers). If left out, the first tier is used.
startCondCondition it is sold in, 0 to 100. If left out, 100.
repairablefalse means it can never be repaired, only sold.
variantsA Config.FleetVariants ladder: which model is spawned at which condition
rustBelow, rustFull, rustMaxThe 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:

KeyDefaultChange it when
mountstwo reels on the deckThe cable clips through the deck (raise z), or the two cables come out on the wrong sides (swap the two x values)
carAnchorx = 0.55, z = 0.25The cables meet the car too wide or at the wrong height
carrySagfalseOnly for a truck whose reels stand high
kneelDistance0.6Hands go into the car (raise) or reach for air (lower)
kneelSide, kneelTurn0.3, 25.0The cables pass through the kneeling ped
straighten, straightenLookahead, straightenRatetrue, 3.0, 18.0A 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.

SettingDefaultPer lot
People
Receptionist / handover clerk peda_f_y_femaleagent / a_m_m_business_01
Fleet attendant / NPC tow driver peds_m_y_xmech_02
Job dispatcher peds_m_y_dockwork_01
Impound clerk peds_m_m_autoshop_01
Fleet
Vehicles a lot may own6Yes
Roadworthy above (condition)15Yes
Sell-back (% of purchase price)50Yes
Vehicle a new lot starts withtowtruck2, 40%
Wear per shift / per car booked in / % of damage2 / 1 / 50Yes
Releases
Release fee$500Yes (owner)
Late charge starts after (days)0Yes (owner)
Then add this per day held$0 (off)Yes (owner)
For at most this many days14Yes (owner)
Release fee per vehicle classnot set (uses the base fee)Yes (owner)
Staff pay
Who pays the staffFixed (the framework)Yes
A lot-paid payslip every (minutes)15
Pay per grade (when the lot pays)from Config.JobGradesYes (owner)
Accreditation
Fleet tiers must be earnedOn
Heavy recovery: vehicles booked in / fee20 / $25,000
Yard
Unowned car stays for (minutes)45Yes
Tow gives up after (seconds)300Yes
Recovered car stays parked for (minutes, depots)30Yes
Store room
Storage slots / capacity (kg)40 / 100Yes
Opening hours (NPC-served lots)
ClockReal time (the server's)Yes
Open only during these hoursOn, 08:00 to 20:00Yes
Public Job
Pay per call completed$350Yes
First call / next call after25 s / 45 s
Calls at least / car appears within500 m / 220 m
Out of the truck for at most60 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.