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

CommandDescriptionPermission
/baitcarOpens the dashboard. Only registered when Config.UseRemoteController = false. Available to any player whose job matches Config.AllowedJobs.Config.AllowedJobs (job check)
/baitcardashcamtuneServer 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:

/baitcardashcamtune

Parameters: none.

Behavior:

  • Opens an o-link menu listing every Config.Dashcam.ByModel entry 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 a ByModel override.
  • 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-ready Config.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:

KeysAction
W / SMove offset forward / backward (Y axis)
A / DMove offset left / right (X axis)
Q / EMove offset up / down (Z axis)
R / FPitch up / down (clamped to ±89°)
/ Yaw bias left / right
Scroll up / downFOV up / down (clamped to 1..130)
Shift (hold)Fine mode (movement / rotation / FOV deltas divided by 10)
EnterSave and copy snippet to clipboard
BackspaceCancel 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:

  1. Job-based (controlled by Config.AllowedJobs). Officers whose job appears in this table at or above minGrade can deploy, see, and operate bait cars. Permission is re-evaluated on olink:client:playerReady and olink:client:jobChanged, and again on resource restart for already-loaded players. There is no clock-in / on-duty gate — job membership alone is sufficient.
  2. 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):

server.cfg
add_principal identifier.license:<their-license> group.admin
add_ace group.admin admin allow

Replace <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 0 or use your boss-menu hire flow.
  • ESX: /setjob <id> police 0 or 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_events audit 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:baitcar statebag on the entity.
  • Removes the deployment from server memory.
  • Writes a decommissioned audit 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.

Next Steps