Configuration Reference
Per-key reference for every setting in oxide-baitcar's shared/config.lua.
Complete reference for every key in shared/config.lua. Defaults below match the shipped file.
Config File: shared/config.lua
Global
| Key | Type | Default | Description |
|---|---|---|---|
Config.Debug | boolean | false | Reserved flag for debug branches. The structured olink.logger.Debug calls in the source fire regardless of this flag; their visibility is governed by oxide-logger's sinks, not this key. |
Permissions
| Key | Type | Default | Description |
|---|---|---|---|
Config.AllowedJobs | table | { police = { minGrade = 0 }, LSPD = { minGrade = 0 } } | Map of jobName -> { minGrade = N }. Members of these jobs at or above minGrade can deploy chips, see deployments, open the dashcam, operate the remote, and receive the officer event feed. Names must exactly match your framework's job names. |
Config.MaxDeploymentsPerOfficer | number | 3 | Maximum simultaneous active deployments per character id. Officers hitting the cap cannot install a new chip until they decommission one or a civilian removes one. |
Config.AllowedJobs = {
police = { minGrade = 0 },
LSPD = { minGrade = 0 },
}
Config.MaxDeploymentsPerOfficer = 3Items
| Key | Type | Default | Description |
|---|---|---|---|
Config.ChipItem | string | 'baitcar_chip' | Inventory item consumed when an officer installs a chip. Also the item returned to a suspect's inventory if they successfully roll the search. |
Config.RemovalToolItem | string | 'screwdriver' | Item the civilian uses from inventory to roll for chip removal. The item must be registered as usable in the customer's inventory framework. Used outside a vehicle, it silently no-ops; used inside any seat of any vehicle, it runs the search progress bar. Most servers already ship a screwdriver — reuse it by leaving this default, or point at any item you already register. |
Config.UseRemoteController | boolean | true | When true, the /baitcar command is not registered and the radial submenu is not added; the baitcar_remote item is the only entry point. When false, /baitcar opens the dashboard and the radial entry is registered. |
Config.RemoteControllerItem | string | 'baitcar_remote' | The usable inventory item that opens the remote controller view. Only meaningful when UseRemoteController = true. |
Config.ChipItem = 'baitcar_chip'
Config.RemovalToolItem = 'screwdriver'
Config.UseRemoteController = true
Config.RemoteControllerItem = 'baitcar_remote'Civilian Removal
| Key | Type | Default | Description |
|---|---|---|---|
Config.RemovalDurationMs | number | 12000 | Duration of the civilian search progress bar in milliseconds. The bar is cancellable; movement and combat are disabled while it runs. |
Config.RemovalSuccessChance | number | 0.5 | Probability 0..1 that a civilian's search roll succeeds and removes the chip. Failed rolls return the same ambiguous "found nothing" message as a non-bait vehicle, so civilians can't tell the two apart. |
Config.RemovalDurationMs = 12000
Config.RemovalSuccessChance = 0.5Drive-Off Trigger
| Key | Type | Default | Description |
|---|---|---|---|
Config.TriggerSpeedMps | number | 8.0 | Minimum vehicle speed in meters per second for the drive-off accumulator to count. 8.0 m/s is roughly 29 km/h or 18 mph. |
Config.TriggerDurationMs | number | 1500 | Time in milliseconds the vehicle must continuously stay above TriggerSpeedMps (with engine running, suspect in the driver seat) before the trigger fires. One-shot per deployment. |
Config.FakeWantedLevel | number | 3 | Wanted level applied to the suspect on trigger via SetPlayerWantedLevel. Set to 0 to disable. |
Config.TriggerSpeedMps = 8.0
Config.TriggerDurationMs = 1500
Config.FakeWantedLevel = 3Remote Actions
| Key | Type | Default | Description |
|---|---|---|---|
Config.SpeedLimitMph | number | 30 | Cap (in mph) applied to the vehicle when the speed limiter is engaged. Converted to m/s internally. |
Config.HornDurationMs | number | 1500 | Duration of a single horn pulse in milliseconds. |
Config.StrobeIntervalMs | number | 150 | Cadence of the headlight strobe toggle in milliseconds. Lower values flash faster. |
Config.SteeringBias | number | 1.0 | Intensity (0..1) applied by SetVehicleSteerBias when steering mode is left or right. 1.0 is full lock; lower values produce a softer pull. |
Config.SpeedLimitMph = 30
Config.HornDurationMs = 1500
Config.StrobeIntervalMs = 150
Config.SteeringBias = 1.0Install
| Key | Type | Default | Description |
|---|---|---|---|
Config.InstallDurationMs | number | 4000 | Length of the chip install progress bar in milliseconds. The bar uses the mini@repair / fixing_a_ped animation, disables car / move / combat controls, and is cancellable. |
Config.InstallDurationMs = 4000Entry Dispatch
A dispatch alert fires the first time a non-LEO sits in a bait car, before they drive off and trip the trigger threshold. The alert routes through the same olink.dispatch.CreateAlert adapter as the trigger alert (and respects Config.DispatchJobs), so every responder in the recipient job list sees it — not just the deploying officer.
| Key | Type | Default | Description |
|---|---|---|---|
Config.NotifyOfficerOnEntry | boolean | true | Master switch for entry alerts. Set to false to disable. Entry alerts are rate-limited to one broadcast per plate every 30 seconds, and LEOs sitting in a bait car never trigger one. |
Config.EntryDispatch.code | string | '10-66' | Dispatch code shown in the entry alert. |
Config.EntryDispatch.title | string | 'Bait Car Entry' | Alert title. |
Config.EntryDispatch.icon | string | 'fas fa-car-side' | Font Awesome icon. |
Config.EntryDispatch.priority | number | 3 | Adapter-specific priority. Defaulted lower than Config.Dispatch.priority since the suspect may still walk away without stealing. |
Config.EntryDispatch.blip | table | { sprite = 225, color = 5, scale = 0.9 } | Blip parameters forwarded to the adapter for the entry alert's map blip. |
Config.NotifyOfficerOnEntry = true
Config.EntryDispatch = {
code = '10-66',
title = 'Bait Car Entry',
icon = 'fas fa-car-side',
priority = 3,
blip = { sprite = 225, color = 5, scale = 0.9 },
}Dispatch
Config.Dispatch is the payload forwarded to olink.dispatch.CreateAlert when a bait car is triggered. The exact in-game presentation depends on your dispatch adapter (ps-dispatch, cd_dispatch, oxide-dispatch, etc.).
| Key | Type | Default | Description |
|---|---|---|---|
Config.Dispatch.code | string | '10-16' | Dispatch code shown in the alert. |
Config.Dispatch.title | string | 'Bait Car Triggered' | Alert title. |
Config.Dispatch.icon | string | 'fas fa-car-burst' | Font Awesome icon used by adapters that render alert icons. |
Config.Dispatch.priority | number | 2 | Adapter-specific priority. Most adapters use 1 (highest) through 3. |
Config.Dispatch.blip | table | { sprite = 225, color = 1, scale = 1.1 } | Blip parameters forwarded to the adapter for the alert's map blip. |
The alert also receives the bait car's plate, model, and coords automatically. Recipient jobs default to the keys of Config.AllowedJobs and can be overridden via Config.DispatchJobs below.
Config.Dispatch = {
code = '10-16',
title = 'Bait Car Triggered',
icon = 'fas fa-car-burst',
priority = 2,
blip = { sprite = 225, color = 1, scale = 1.1 },
}| Key | Type | Default | Description |
|---|---|---|---|
Config.DispatchJobs | table or nil | nil | Optional override for the recipient job list. When nil or empty, alerts go to every job in Config.AllowedJobs. Set this to broadcast to extra responders (sheriff, EMS) without granting them deploy access, or to narrow alerts to a subset of deploy-authorized jobs. |
-- Example: broadcast to sheriff and state troopers too, without letting them deploy.
Config.DispatchJobs = { 'police', 'LSPD', 'sheriff', 'sast' }Officer Blip
Config.OfficerBlip controls the map blip drawn on each active deployment for authorized officers.
| Key | Type | Default | Description |
|---|---|---|---|
Config.OfficerBlip.sprite | number | 225 | GTA blip sprite id. |
Config.OfficerBlip.color | number | 5 | GTA blip color id. |
Config.OfficerBlip.scale | number | 0.9 | Blip scale. |
Config.OfficerBlip.label | string | 'Bait Car' | Label prefix. The plate is appended as <label> [<plate>]. |
Config.OfficerBlip = {
sprite = 225,
color = 5,
scale = 0.9,
label = 'Bait Car',
}Recording
Config.Recording governs the dashcam clip recorder. The entire pipeline is gated on oxide-police being started; without it every value here is moot.
| Key | Type | Default | Description |
|---|---|---|---|
Config.Recording.enabled | boolean | true | Master switch. When false, the F8 hotkey does nothing and the recorder is never mounted. |
Config.Recording.hotkey | string | 'F8' | Default keybind for +baitcar_record (registered through RegisterKeyMapping). Players can rebind it in the FiveM keybinding menu. |
Config.Recording.maxDurationS | number | 45 | Hard cap (in seconds) on a single clip. The recorder auto-stops at this duration. |
Config.Recording.provider | string | 'fivemanage' | 'fivemanage' or 'discord'. Anything other than 'discord' falls back to Fivemanage. For Fivemanage, the credential is the FIVEMANAGE_MEDIA_API_KEY convar set in your server.cfg (the same key oxide-police uses for mugshots and bodycam) — not an oxide-police config file. For the full walkthrough, see the oxide-police guide: Setting up FiveManage media uploads. |
Config.Recording.videoBitrate | number | 600000 | Target video bitrate in bits per second. |
Config.Recording.discordMaxBytes | number | 25 * 1024 * 1024 (~25 MiB) | Maximum upload size in bytes when provider = 'discord'. Clips larger than this are rejected. |
Config.Recording.thumbnail | table | { enabled = true, captureSeconds = 1.0, quality = 0.7 } | Thumbnail capture settings. captureSeconds is the offset from the start of the clip; quality is the JPEG quality (0..1). |
Config.Recording = {
enabled = true,
hotkey = 'F8',
maxDurationS = 45,
provider = 'fivemanage',
videoBitrate = 600000,
discordMaxBytes = 25 * 1024 * 1024,
thumbnail = { enabled = true, captureSeconds = 1.0, quality = 0.7 },
}Dashcam
Config.Dashcam defines the scripted camera attached to a bait car during dashcam playback. Profile resolution is layered: for each field (fov, offset, rotation), the value is taken from ByModel[modelName], falling through to ByClass[className], then to Default.
Universal keys
| Key | Type | Default | Description |
|---|---|---|---|
Config.Dashcam.exitKeys | table | { 200, 177 } | List of control ids that close the dashcam. 200 is FrontendPause (Esc) and 177 is FrontendCancel (Backspace). |
Config.Dashcam.pollIntervalMs | number | 2500 | How often (in milliseconds) the dashcam re-validates the feed is still alive (entity exists, in scope, still flagged). |
Config.Dashcam.timecycleEffect | string | '' | Timecycle modifier applied during playback. Empty string disables. 'CAMERA_secuirity' (yes, the misspelling is the native id) produces a grainy CCTV look. |
Config.Dashcam.timecycleStrength | number | 0.2 | Strength of the timecycle modifier, 0..1. |
Config.Dashcam.tabletAnimation | boolean | true | Plays a tablet-holding animation on the officer watching the dashcam, so nearby players see them operating a device instead of standing idle. Upper-body only and works in vehicles. Set to false to disable. |
Default profile
| Key | Type | Default | Description |
|---|---|---|---|
Config.Dashcam.Default.fov | number | 55.0 | Field of view in degrees. |
Config.Dashcam.Default.offset | vec3 | vec3(0.0, 0.45, 0.65) | Position offset from the vehicle entity (x = right, y = forward, z = up). |
Config.Dashcam.Default.rotation | table | { pitch = -10.0, yawBias = 180.0 } | Pitch and yaw bias in degrees. yawBias is added to the vehicle heading every frame so the camera tracks the car as it turns. |
Per-class profiles
Config.Dashcam.ByClass is keyed by GTA vehicle class name. The shipped defaults cover every standard vanilla class (compact, sedan, suv, coupe, muscle, sportsclassic, sports, super, offroad, industrial, utility, van, service, emergency, military, commercial, openwheel). Each profile is a table with the same shape as Default. Fields you omit fall through to Default.
Per-model overrides
Config.Dashcam.ByModel is keyed by lowercase spawn name. Use it for add-on models or for stock models whose class profile doesn't sit well. The shipped file includes a single example:
Config.Dashcam.ByModel = {
['sultan'] = { offset = vec3(0.0, 0.45, 0.65) },
}Tune in-game with /baitcardashcamtune. The tuner copies a paste-ready Config.Dashcam.ByModel.<name> = { ... } or Config.Dashcam.ByClass.<class> = { ... } snippet to your clipboard. See Admin for the full tuner workflow.
Next Steps
Installation Guide
Step-by-step setup for oxide-baitcar — dependencies, SQL, per-framework item registration, and verification.
Features
Feature reference for oxide-baitcar — deployment, dashboard, remote, dashcam, remote actions, trigger detection, civilian search, recording, audit log, and officer blips.