Admin Guide
Commands, permissions, the /baitcardashcamtune workflow, and operational notes for managing oxide-baitcar.
Commands, permissions, and operational notes for managing oxide-baitcar on a live server.
Commands
| Command | Description | Permission |
|---|---|---|
/baitcar | Opens the dashboard. Only registered when Config.UseRemoteController = false. Available to any player whose job matches Config.AllowedJobs. | Config.AllowedJobs (job check) |
/baitcardashcamtune | Server command. Sends oxide:baitcar:client:dashcamTuneOpen to the caller, which opens the dashcam tuner menu. | Admin (group.admin) |
/baitcar is intentionally not registered in the default configuration. In the default UseRemoteController = true mode the only entry point is the baitcar_remote inventory item, which is a deliberate design choice for the system. Switch UseRemoteController to false if you want the slash command and the radial entry.
/baitcardashcamtune
Server-side command available to any admin — anyone in the server's admin group (group.admin). The console operator can also run it without restrictions (FiveM treats source == 0 as the console).
Usage:
/baitcardashcamtuneParameters: none.
Behavior:
- Opens an
o-linkmenu listing everyConfig.Dashcam.ByModelentry plus one row per GTA vehicle class (using canonical models:blista,asea,baller,felon,dominator,ztype,banshee,adder,dubsta3,biff,towtruck,journey,taxi,police,barracks,hauler,formula). - A
Custom model…row prompts for a spawn name and tunes that model as aByModeloverride. - On selection, the tuner spawns the chosen model 5 m in front of the admin, freezes the admin, hides their ped, attaches the dashcam, and enters the live editing loop.
- On
Enter, copies a paste-readyConfig.Dashcam.<slot>.<key> = { offset = vec3(...), rotation = { pitch = ..., yawBias = ... }, fov = ... }snippet to the clipboard and despawns the test vehicle. - On
Backspace, discards the changes and despawns the test vehicle.
Live key bindings:
| Keys | Action |
|---|---|
W / S | Move offset forward / backward (Y axis) |
A / D | Move offset left / right (X axis) |
Q / E | Move offset up / down (Z axis) |
R / F | Pitch up / down (clamped to ±89°) |
← / → | Yaw bias left / right |
| Scroll up / down | FOV up / down (clamped to 1..130) |
Shift (hold) | Fine mode (movement / rotation / FOV deltas divided by 10) |
Enter | Save and copy snippet to clipboard |
Backspace | Cancel without saving |
Example clipboard output for a ByClass tune:
Config.Dashcam.ByClass.sedan = { offset = vec3(0.000, 0.747, 0.650), rotation = { pitch = -10.00, yawBias = 180.00 }, fov = 55.00 }For a ByModel tune:
Config.Dashcam.ByModel.sultan = { offset = vec3(0.000, 0.450, 0.650), rotation = { pitch = -10.00, yawBias = 180.00 }, fov = 55.00 }Paste the snippet into shared/config.lua under the appropriate table.
Permissions
oxide-baitcar uses two permission surfaces:
- Job-based (controlled by
Config.AllowedJobs). Officers whose job appears in this table at or aboveminGradecan deploy, see, and operate bait cars. Permission is re-evaluated onolink:client:playerReadyandolink:client:jobChanged, and again on resource restart for already-loaded players. There is noclock-in/on-dutygate — job membership alone is sufficient. - Admin-based for the dashcam tuner only.
Admin permission
The dashcam tuner (/baitcardashcamtune) is available to any admin. To make someone an admin, add them to the admin group and grant that group the admin ace in your server.cfg (the text file that tells your server which resources to start and holds your permission settings):
add_principal identifier.license:<their-license> group.admin
add_ace group.admin admin allowReplace <their-license> with the player's license identifier. If you already run QBCore, QBX, or ESX admins, no extra setup is needed — your existing framework admins pass automatically.
Granting the police job
The framework-specific path depends on your job system:
- QBCore / Qbox:
/setjob <id> police 0or use your boss-menu hire flow. - ESX:
/setjob <id> police 0or the equivalent built-in.
The default Config.AllowedJobs covers both police (lowercase) and LSPD. Set the entries to match your own department job names.
Operational Notes
Deployment state is in-memory
By design, the active deployment map is held in process memory (server/deployments.lua). It is not persisted to a database table and does not survive a resource restart.
Practical consequences:
- After restarting
oxide-baitcar(or the full server), the entity statebag is cleared on every previously-chipped vehicle. Officers see an empty deployment list and need to re-chip those vehicles. - This is intentional. Bait cars are short-lived operational fixtures; persisting them through restarts would leak abandoned deployments into the world indefinitely and add a stale-state cleanup problem.
- The
baitcar_eventsaudit log is persistent — restart history is preserved there even if the live deployment is gone.
If a chipped vehicle is destroyed or despawned, the statebag goes with it. There is no health monitor or auto-decommission step; the officer must clear the now-orphaned deployment row from the dashboard or remote.
Decommissioning
Officers decommission a deployment from the dashboard or remote (the Decommission button). This:
- Clears the
oxide:baitcarstatebag on the entity. - Removes the deployment from server memory.
- Writes a
decommissionedaudit row. - Broadcasts the change to every other authorized client.
There is no admin override command. If you need to clear an orphaned deployment that no officer is online to handle, restart the resource — every deployment is dropped.
Live event feed scope
The oxide:baitcar:client:event broadcast that powers the dashboard's live feed is sent only to clients whose job currently satisfies Config.AllowedJobs. Civilians never receive the broadcast, even when they are physically in scope of a bait car.