integrations/. All of them are escrow_ignore’d, so you can edit them without re-uploading the asset. Pick the system you want with Config.<thing>.System, or set it to 'auto' and the resource picks the first installed one.
If your script isn’t on the list, every adapter has a Config.*Fn override hook — point it at a function and the resource calls yours instead of the built-in branch.
Target
Used for the salesperson eye-target. Auto-detected from the running resource list.| System | Where it wires |
|---|---|
ox_target | exports.ox_target:addLocalEntity(ped, { ... }) |
qb-target | exports['qb-target']:AddTargetEntity(ped, ...) |
qtarget | exports.qtarget:AddTargetEntity(ped, ...) |
Config.Interaction = 'textui'.
TextUI
The proximity[E] hint, used when target isn’t available or Config.Interaction = 'textui'.
| System | Adapter |
|---|---|
ox_lib | lib.showTextUI / lib.hideTextUI |
qb | exports['qb-core']:DrawText |
esx | TriggerEvent('esx:showAdvancedNotification', ...) |
native | Built-in DrawText3D over the ped |
Notifications
| System | Adapter |
|---|---|
ox_lib | lib.notify |
qb | QBCore:Notify event |
esx | esx:showNotification |
okok | okokNotify:Alert |
native | BeginTextCommandThefeedPost |
Config.NotifyFn:
Config.NotifyLegacy = function(...) form from older versions still works — the bridge unwraps it at runtime.
Vehicle keys
Hands the new vehicle’s keys to the player after purchase.| System | How keys are given |
|---|---|
qb-vehiclekeys | TriggerEvent('vehiclekeys:client:SetOwner', plate) |
wasabi_carlock | server exports.wasabi_carlock:GiveKey(src, plate) |
qs-vehiclekeys | server event qs-vehiclekeys:server:GiveKeys |
mk_vehiclekeys | client exports['mk_vehiclekeys']:AddKey(vehicle), falls back to qb-vehiclekeys compat |
t1ger_keys | server event t1ger_keys:addNew |
jaksam (vehicles_keys) | client event vehicles_keys:setOwner |
none | Do nothing — useful when a paid script wires keys via DB triggers. |
Config.KeyExport = function(...) form from older versions still works.
Fuel
Sets the spawn fuel level on the new vehicle.| System | How fuel is set |
|---|---|
none | Only the native fuel level is set. |
ox_fuel / lj-fuel | Entity(vehicle).state.fuel = level (statebag — the correct API for both). |
LegacyFuel | exports.LegacyFuel:SetFuel(vehicle, level) |
cdn-fuel | exports['cdn-fuel']:SetFuel(vehicle, level) |
ps-fuel | exports['ps-fuel']:SetFuel(vehicle, level) |
rcore_fuel | exports.rcore_fuel:setFuel(vehicle, level) |
Garage / persistence
Writes the new vehicle to whichever table the framework expects. Any garage script that reads from that table picks it up automatically — there is no per-garage API to call.| Framework | Target table | Compatible garages |
|---|---|---|
| ESX | owned_vehicles | esx_garage, esx_advancedgarage, wasabi_advgarage, cgarage, loaf_garage, brutal_advancedgarage, etc. |
| QBCore | player_vehicles | qb-garages, jg-advancedgarages, okokGarage, cd_garage, qs-advancedgarages, etc. |
| Qbox | player_vehicles via exports.qbx_vehicles:CreatePlayerVehicle when present, else the QB-style direct insert. |
DefaultGarage just needs to be a garage name that exists in your garage script’s config. For non-standard schemas:
stored-only, then bare-minimum — so most ESX garages work without a custom hook.
Custom purchase gate
To gate buying on a custom condition (an in-game licence item, a Discord role, a quest flag…):Custom plate generator
Config.Purchase.PlatePrefix, PlateLength, and UpperPlate).
