
Overview
A police bait-car system for FiveM where officers install a hidden chip into any civilian automobile, then remotely lock the doors, kill the engine, override steering, watch a live dashcam feed, and fire a dispatch alert the moment a suspect drives off. The chipped car looks identical to every other vehicle in the world — civilians have no visual or interaction tell, and the screwdriver removal flow returns identical "found nothing" messaging on clean vehicles, failed rolls, and rate-limited attempts so the removal item can't be weaponized as a free bait-car detector. Ships with two mutually-exclusive operating modes (Vue dashboard or handheld baitcar_remote item), a scripted-camera dashcam HUD with three-layer profile resolution, an F8 clip recorder with Fivemanage and Discord upload paths, and full audit logging across 20 event types. Framework-agnostic via o-link with optional oxide-police integration that routes dashcam clips into the MDT Video Storage tab.
Features
- Chip Deployment — Officer uses
baitcar_chipwhile seated in any automobile. Server re-verifies seating, rejects non-automobile types (bikes, boats, helis, planes), runs a cancellable progress bar, consumes the chip on completion, and sets theoxide:baitcarstatebag on the vehicle. - Deployment Guard Rails — Plate-uniqueness check rejects re-chipping active deployments,
MaxDeploymentsPerOfficercaps simultaneous deployments per character (default 3), and chip consumption only fires after every other gate passes. - Two Operating Modes —
UseRemoteController = truemakes thebaitcar_remoteitem the sole entry point (officer carries the device, subject to inventory loss-on-death and search).falseregisters a/baitcarcommand and adds a Bait Car radial submenu. - Vue Dashboard — Deployment list with plate, model, install timestamp, and live state (locked / engine / steering / speed limit / strobe / alarm / triggered), stat tiles, full action buttons, and the live event feed.
- Handheld Remote — Signal-strength bars derived from officer distance, live telemetry (speed, heading, street, zone, fuel, engine and body health, occupant list), and the same full action surface as the dashboard.
- Live Dashcam HUD — Scripted-camera overlay with three-layer profile resolution:
ByModel→ByClass→Default. Each field falls through layers independently. Camera tracks vehicle heading with configurable yaw bias, polls every 2500 ms to confirm scope, and auto-closes with a reason (feed_lost,chip_removed) when conditions fail. Optional timecycle modifier for a stylized CCTV look. - Server-Authoritative Remote Actions — Lock / unlock with 250 ms client-tick enforcement, engine kill / restore, four steering modes via
SetVehicleSteerBiaswith analog steer disabled, speed limiter atSpeedLimitMph(default 30 mph), strobe at configurable cadence, alarm with auto-restart, and one-shot horn pulse delivered via scoped statebag nonce so the bait-car netId is never broadcast globally. - Drive-Off Trigger — Detector watches
GetEntitySpeedagainstTriggerSpeedMps(default 8.0 m/s, ~29 km/h). When accumulated time over the threshold reachesTriggerDurationMs(default 1500 ms) and the engine is running, fires the configured dispatch alert througholink.dispatch.CreateAlert, optionally appliesFakeWantedLevel, toasts every authorized officer, and writes atriggeredaudit row. - Entry Alert — Separate lower-priority dispatch alert fires the first time a non-LEO sits in a chipped bait car, rate-limited per plate to one alert every 30 seconds. Skipped for LEOs.
- Civilian Counterplay —
screwdriverremoval flow with 12-second progress bar and configurable success chance (default 50%). The same "You search the vehicle but find nothing of value." message is returned for clean vehicles, failed rolls, rate-limited calls, and not-in-vehicle rejects — the removal item cannot be used as a detector. Successful removal returns the chip to the suspect's inventory. - Dashcam Clip Recording — F8 hotkey starts and stops the recorder while the dashcam is open. Auto-stops at 45 seconds. Uploads to Fivemanage (default) or Discord (capped at 25 MiB). Optional thumbnail capture. Metadata routes through
oxide-police'sSaveVideoRecordingexport so clips appear in the MDT Video Storage tab alongside bodycam clips. - Officer-Only Blips — Every active deployment renders a non-short-range map blip for authorized officers (sprite 225, color 5, label
Bait Car [<plate>]). Auto-attaches on login or job change, auto-clears on decommission or resource stop. - Live Event Feed — Every state change writes a row to
baitcar_eventsand broadcasts to every authorized-job client. The Vue dashboard subscribes and renders the feed in real time. Non-officers never receive the broadcast. - 20-Type Audit Log — Per-event audit table indexed by
officer_charid,plate, andevent_type. Tracksdeployed,lock,unlock,engine_off,engine_on, four steering modes, speed limit, strobe, alarm, horn,triggered,chip_removed, anddecommissioned. - Admin Dashcam Tuner —
/baitcardashcamtunelets admins nudge offsets, pitch, yaw bias, and FOV on the live camera, then produces a paste-readyByClass/ByModelLua snippet for the current vehicle. - Configurable Allowed Jobs —
AllowedJobsmaps job name to minimum grade for deploy access.DispatchJobsoptionally narrows or widens the alert-recipient list (e.g. include sheriff or EMS without granting deploy access).
Technical
- Framework: Framework Agnostic (QBCore, ESX, Qbox, Oxide via
o-link) - Dependencies: o-link, ox_lib, oxmysql
- Optional: oxide-police (MDT Video Storage routing), any o-link dispatch adapter (oxide-dispatch, ps-dispatch, cd_dispatch)
Oxide Bait Car by Oxide Studios