ktoxktox docs
ktx_garages

Impound

Where a vehicle goes when it cannot be anywhere else.

Three cases end in the impound: the vehicle was destroyed, it was standing outside when the server stopped, or it came home to a garage with no free slot.

Config.Impound = {
    enabled = true,
    fee = 500,
    tryGarageFirst = false,
}

The row in ktx_garages_impound is the only answer to whether a vehicle is impounded. Next to it the vehicle stays flagged as stored with no garage on it, so no other script hands it out while it sits there.

None of that happens on ox_core. The table is not created and the restart sweep does not run, because the vehicles there are ox_core's own business. Set enabled = false on that framework and the lots stop being drawn as well.

Turning it off

With enabled = false a wrecked vehicle is left exactly as it is: out, in no garage. That is the state another impound script reads, so switching this off is how you hand the job over rather than lose it.

After a restart

tryGarageFirst decides what happens to vehicles that were out in the world. On, the last garage is tried first and only what does not fit goes to the impound. Off, everything that was out goes straight there.

The sweep only runs when nothing else brings the vehicles back. Config.PersistVehicles on skips it, and that is the value the resource ships with, so in a stock install the sweep does not run. On ox_core it never runs, whatever the setting says.

The two QBox convars are read only once Config.PersistVehicles is off. They decide whether the sweep steps aside anyway: with qbx:enableVehiclePersistence on true and qbx:vehiclePersistenceType on full, qbx_core brings the vehicles back itself and there is nothing left to do. With the switch off, or with the type on semi, which only respawns a deleted vehicle instead of bringing one back after a restart, the sweep runs.

On QBox the shipped combination leaves vehicles nobody picks up: the setting keeps the sweep out, and the convar, off in a stock install, keeps qbx_core out. See Problems.

The lots

Each entry is a place with a ped, a blip and its bays:

{
    coords = vector3(409.0, -1623.0, 29.29),
    heading = 233.0,
    spawns = {
        vector4(410.80, -1636.56, 28.88, 228.9),
        vector4(408.83, -1638.82, 28.88, 228.9),
    },
    label = "Los Santos Impound",
    blip = { enabled = true, sprite = 68, color = 5, scale = 0.8 },
}

label is the name of the blip on the map and the lot named in the message after a release. The prompt in front of the ped is the title from the language file and reads the same at every lot. spawns are the bays a released vehicle appears in, and a free one wins, so give a lot more than one bay.

fee is what a release costs. 0 makes it free.

From another resource

exports.ktx_garages:impoundVehicle(identifier, plate, reason)

See Hooks for the rest of them.