Features
Feature-by-feature reference for oxide-police — departments, MDT, custody, evidence, fleet, armory, field tools, and more.
Feature reference organised by domain. Each section maps to a server module under server/modules/.
Departments and Stations
Departments are the top-level organisation unit. Each department has a name (matching the framework job name), a label, a treasury balance, jail stripping rules, and a list of grades.
Stations live under departments and define physical locations where officers clock in and access services.
| Concept | Where it lives | Configured via |
|---|---|---|
| Department record | police_departments row | /padmin |
| Grade matrix | police_department_grades | /padmin |
| Station | police_stations row | /padmin |
| Per-station services | JSON columns on police_stations | /padmin |
Per-station services that can be enabled / placed:
- Clock-in zone
- Armory (with grade-restricted loadouts)
- Personal locker (where officers apply uniforms)
- Boss menu point
- Evidence locker
- Evidence lab
- Mugshot booth (camera + photo positions, set in
/padmin→ Detention Mugshot) - Booking desk, holding cells, jail cell, and release point (set in
/padmin→ Detention Holding) - Station bell
- Trash bin
- Firearm registration desk (civilian-facing)
Garages are created on the Fleet screens and can be attached to a station.
Several of these service types support multiple points per station — clock-in, armory, boss menu, evidence locker, evidence lab, and personal locker can each have more than one access point placed in /padmin. Stations created before this support continue to work: a single legacy point is read as a one-entry list automatically, with no database migration required.
Officers, Hiring, and Duty
Officers are characters hired into a department at a specific grade. Hiring writes the assignment to police_officers, syncs the framework job, and assigns a badge number.
- Hire via
/phire <serverID> <deptName> <gradeRank>or the boss panel. - Fire via
/pfire <serverID> [deptName]or the boss panel. - Boss panel is available to grades flagged
is_boss = true(opened from in-station ox_target) and lets bosses promote, demote, fire, set salary, and view payroll.
The officer roster also tracks framework job changes. When a player's framework job is set to a police department's name (by an external job/management script), they are automatically hired, transferred, or grade-synced into that department's roster, just like /phire. Clearing their job to unemployed removes them from the roster. Switching to a different, non-department job does not remove them, so multi-job setups that swap the active job back and forth will not accidentally fire officers.
Multiple departments per officer (optional). With Config.AllowMultiDepartment = true (shared/config.lua), a character can hold an enrollment in several departments at once, each with its own badge, callsign, grade, and pay. Their active department follows whichever police job they currently have selected, and duty, the boss panel, the MDT, and field tools all act on that active department; switching to a non-police job drops police access without losing any enrollment. This is also what lets Oxide Police integrate with multi-job menus such as g-multijob (see the ESX setup guide). With the setting off (the default), a character belongs to one department and hiring into a second transfers them, exactly as before.
Duty is a separate state. Officers must be hired into a department AND clocked in at a station to access armory, garage, MDT, evidence, and field tools.
- Clock in at a station's clock-in zone (a third-eye / targeting prompt).
- Clocking out removes any applied uniform and stops payroll accrual.
- By default (
Config.RequireStationClockIn = true) duty can only be toggled at a station's clock-in zone, and the/dutycommand and the duty toggle inside the police radial menu are disabled. - Set
Config.RequireStationClockIn = falseto allow toggling duty from anywhere. The/dutycommand (restricted to hired officers) and the duty toggle then become available; the toggle appears as the first item in the police actions menu (Config.ActionMenuKey, defaultF2, titled "Police"), and off-duty officers can open the menu to clock in — all other actions still require being on duty./dutyclocks in at the first station configured in the officer's department.
MDT
The MDT (/mdt) is the primary on-duty interface. Officers must be on duty and meet Config.MDT.permissions.accessMdt to open it. Set Config.MDT.allowOffDuty = true to let hired officers open and use the MDT while off duty (the accessMdt minimum grade still applies). When Config.MDT.useItem = true, the MDT is opened by using the Config.MDT.itemName item (default police_tablet) instead of the /mdt command.
Tabs:
| Tab | Function |
|---|---|
| Dashboard | Recent activity feed, KPI tiles, on-duty officer count, live officer map |
| Dispatch | Live alerts feed, respond / close (requires oxide-dispatch and Config.MDT.dispatchEnabled) |
| Persons | Search citizens; the person profile shows identity, vehicles, criminal record, active warrants, evidence, mugshots, and licenses, and lets officers grant / revoke licenses (manageLicenses) |
| Vehicles | Search vehicles by plate; record shows owner, model, type, state, and active BOLO flag |
| Weapons | Search the firearm registry by serial or owner name; view a weapon's owner of record and set its status (registered / stolen / seized / revoked) |
| Reports | Create / search / close case files with attached charges, mugshots, evidence |
| Charges | Process arrests and attach charges from the catalog to a case (requires processArrest) |
| Fines | Issue field fines or attach fines to a case (requires issueFine) |
| Warrants | Issue / search / recall arrest warrants (issueWarrant / recallWarrant) |
| BOLOs | Be on the lookout broadcasts for vehicles (by plate) or persons (by char_id) |
| Video Storage | Browse and attach bodycam recordings and baitcar dashcam clips to cases (gated on per-department / boss permissions) |
| Catalog | Admin-only: view / edit the charge catalog |
Server-side caps in Config.MDT.limits prevent abuse: maxFinePerCall, maxCountPerCharge, maxTextLength, maxPlateLength.
When Config.MDT.tabletAnimation = true, opening the MDT attaches a tablet prop to the officer's hand and plays a tablet-holding animation so nearby players see them using the device instead of standing idle.
Characters listed in Config.MDT.hidden.charIds are hidden from MDT person search, profile lookups, and vehicle-owner queries. Officers at or above Config.MDT.hidden.bypassMinGrade still see hidden characters; set the bypass to -1 to hide them from everyone.
Charges and Fines
The charge catalog seeds from Config.DefaultCharges (100 entries) on first run, then is managed in the MDT.
- Charges have a code, title, category (
infraction/misdemeanor/felony), description, fine amount, and jail time. - Fines can be issued from a case or as a field citation.
Config.MDT.fineRevenueSplit(default50) determines how much of fine revenue routes to the department treasury; the rest is treated as the state's share and leaves the economy.- When banking integration is on (
Config.UseBankingAccount = true), fines are sent as banking invoices for the player to pay; if invoicing is unavailable, the amount is taken straight from the player's bank account. - Jail sentences from charges flow into custody automatically when the booking flow is confirmed.
Garage and Fleet
Each station can have a garage. Vehicles in the garage are sourced from the department's fleet.
- Fleet vehicles are added through the boss panel from
Config.FleetCatalog(ships with Patrol, Pursuit, Tactical, and Motorcycle categories — labels are locale-driven and can be retitled or extended). - Each fleet entry has a
model,label,cost, optional radar / megaphone addons, andmin_grade. - Buying a vehicle into the fleet debits the department treasury by
cost + addon surcharges. - When a fleet vehicle is totalled, replacement debits the treasury by the saved replacement cost.
- The radar addon (
Config.FleetAddons.radar, default5000) setshas_radar = trueon the vehicle, enabling the vehicle radar keybinds. - The megaphone addon (
Config.FleetAddons.megaphone, default2500) enables the vehicle PA toggle.
Checking out and returning
- A checked-out fleet vehicle stays in the world wherever it is left. It is not removed when the officer clocks out, disconnects, or the server restarts — after a restart it respawns in the same spot. A unit only returns to the available pool once it is physically brought back.
- Returning is a physical act. Any on-duty officer of the department can return any of that department's vehicles by driving it to one of that department's garage bays and using the return option — it does not have to be the car they personally checked out. Returning at any other location, or returning another department's vehicle, is refused with a message explaining why.
- If every bay at a garage is occupied, checking out another vehicle is refused until one is returned.
- Tow recovery: the boss menu Fleet screen has a Tow action that lists every unit out in the field — plate, who checked it out, whether that officer is online, and the street it was last seen on — so the boss picks exactly which vehicle to recover. Towing brings that unit back without anyone driving it, charging the treasury
Config.FleetRecoveryFeeper tow (default750;0= free).
Armory
Armories are per-station and serve grade-restricted loadouts (collections of items + counts) through a dedicated shop NUI with two tabs: Loadouts (buy a whole bundle in one click) and Items (cherry-pick items from the loadouts your rank can access).
- Loadouts are created and priced in
/padmin→ Loadouts. Each item carries its ownprice; the bundle total is the sum. - Each loadout has a
min_gradeand a list of items with counts and per-item prices (cap:Config.MaxLoadoutItems). - Funding source is per department: bosses toggle "Treasury Funded" vs "Officer Pays" in the boss menu. Treasury-funded pulls debit
police_departments.balance; officer-pays pulls debit the officer's bank. - Once equipment is pulled, it stays in the officer's inventory. Going off-duty or disconnecting does not strip armory items.
WEAPON_RADARis added to a loadout to give officers the handheld speed radar.
Uniforms
Uniforms are saved outfit presets defined per department. Officers put them on at a station's personal locker point — uniforms are not applied automatically on clock-in.
- Created and managed in
/padmin→ Uniforms (separate male / female outfits, with amin_gradeper uniform). - Officers use the personal locker point at a station to pick a uniform their rank can access, or to change back to their own clothes.
- Any applied uniform is removed automatically on clock-out.
- The inmate uniform is separate (
Config.Custody.Uniform).
Custody and Booking
The custody pipeline turns a cuffed suspect into a sentenced inmate.
| Stage | What happens |
|---|---|
| Cuff | Officer applies cuffs (front / rear / dead variant detected automatically) |
| Search | Officer pats down the suspect (configurable in Config.Search) |
| Escort | Officer drags the suspect to the booking station |
| Booking | Officer opens OpenBookingFlow at the station; charges + fines + jail time totalled |
| Mugshot | Captured during booking via screenshot-basic and uploaded |
| Confirm | Sentence is committed to police_custody; suspect teleported to a configured jail cell |
| Strip | Inmate inventory is processed per the department's stripping mode |
| Sentence | Sentence ticks down on Config.Custody.TickInterval; prisoner jobs reduce remaining time |
| Release | Inmate is released to a configured release point with their stripped items returned (per stripping mode) |
Stripping modes (per department, set in /padmin → Jail Policy):
none— inmates keep their itemslocker— items moved to a per-character locker stash and returned on releasewipe— items destroyed
A separate whitelist (also on the Jail Policy screen) lists items the inmate always keeps — it applies in both locker and wipe modes.
The locker stash uses the prefix Config.Custody.Locker.StashPrefix (default 'police_jail_locker_') with Slots = 50 and MaxWeight = 500000 g.
When Config.Custody.ReduceOfflineTime = true, sentences keep counting down while the inmate is offline. The server decrements remaining_seconds on the same cadence as the live tick and auto-releases records that hit zero — players who log in mid-sentence resume with the time already burned. Leave it false if you want serving time to require active play.
/jail <id> <months> and the JailPlayer export use Config.Custody.SecondsPerMonth (default 60) to convert months to real seconds.
A prisoner's remaining sentence can be adjusted after booking with /addtime <id> <±minutes> (add or reduce) and /setsentence <id> <minutes> (set an exact length). Both work on offline prisoners and release the prisoner when the remaining time reaches zero. They are usable by admins or by on-duty officers of a high enough rank — see the Admin Guide.
Prison revive
When an inmate dies during their sentence, Config.Custody.Revive runs a fade-to-black cutscene and teleports them to the global revive point configured in /padmin → Detention → Revive Point. Non-jailed deaths fall through to the framework's medical resource untouched.
The revive point row must exist in police_prison_revive_point for the cutscene to fire.
Mugshot
Mugshots are captured via screenshot-basic and uploaded to the endpoint configured in Config.Mugshot.PresignedUrlEndpoint (default Fivemanage). Requires the convar FIVEMANAGE_MEDIA_API_KEY.
- Capture from the booking flow or directly via
CaptureMugshotexport. - The
/padminpanel includes a Preview button under Detention Mugshot that places you at the photo mark and shows the camera framing — useful for lining up the booth. Preview does not take or upload a photo; test the upload with a real booking. - An optional Discord webhook (
Config.Mugshot.Webhook) posts the embed defined byConfig.Mugshot.BuildEmbed. Config.Mugshot.SendPhotocan be overridden to route to S3, Loki, or any custom destination.
Prisoner Jobs
Inmates can reduce their remaining sentence by completing prisoner jobs. Job points are placed by admins through /padmin → Detention → Prisoner Jobs.
| Job | Mechanic | Time per swing / pickup / success |
|---|---|---|
| Mining | Hit rocks with a pickaxe (8 swings to break) | 10s per swing |
| Cleaning | Pick up trash bags around the prison yard | 8s per pickup |
| Electrical | Welding scenario + wireMatch / circuitTrace / voltageTune minigame | 60s on success |
Optional money rewards (Config.PrisonerJobs.<job>.Money) and item drops (ItemDrops) ship empty by default — configure them per server.
Prison Shop
A prison shop vendor is placed via /padmin → Detention → Prison Shop. Until a location is placed, the shop is dormant.
- Vendor model:
Config.PrisonShop.model(defaults_m_y_prismuscl_01). - Free meal item:
Config.PrisonShop.freeItem(defaultprison_food_tray), handed out during configured meal windows. - Paid catalog: defined per-server through the admin UI under categories
food,drink,misc. - Inmates pay with cash; transactions deduct the configured price.
Evidence
The evidence registry tracks crime-scene drops and forensic data.
| Type | Source | Expire (min) | Notes |
|---|---|---|---|
| Blood | 70% chance on player damage | 60 | 10s cooldown per player. Tagged with the player's character ID. If oxide-medical is installed, it takes over blood drops instead (DNA-tagged — see below) |
| Bullet | Spawned on weapon discharge | 60 | Officers can be excluded — see Config.Evidence.OfficersDropBullets below |
| Fingerprint | 80% chance on entering a vehicle without gloves | 120 | Glove check via Config.Evidence.CheckPlayerGloves |
Other features:
- GSR (gunshot residue) — set on the shooter on weapon discharge;
Config.Evidence.gsr.duration = 600sand washes off in water ifwashInWater = true. - Vehicle fingerprints — recorded against the specific vehicle; other resources can look them up via the
GetVehicleFingerprintsexport. - Weapon ballistics —
Config.Evidence.Weaponslists each weapon's name and ammo type so ballistics reports can identify what was fired. - Drop controls —
Config.Evidence.OfficersDropBullets(defaulttrue): set tofalseso on-duty officers leave no bullet casings, keeping range training and duty firefights from littering collectable evidence.Config.Evidence.IsDropExemptis a function you can edit to suppress every world-evidence drop (casings, blood, vehicle fingerprints) for a player — handy for excluding paintball or other minigame states. See Configuration for the example. - Blood drop source — by default, blood is dropped when a player takes damage and is tagged with their character ID. If the optional
oxide-medicalresource is installed, it takes over blood entirely: a bleeding suspect dropsbloodevidence carrying their DNA, character ID, and wounded body part, and the basic damage-triggered drop is turned off so the two never both appear for one wound. Withoxide-medicalabsent, the basic damage-triggered blood drop is used. - Case-based evidence lockers — each case file has its own evidence locker keyed by case number. The station is the access gate (officer must be on duty with access to the station's department), but which locker opens is decided by the selected case. Officers select a case before opening, processing, or registering evidence. Locker capacity uses
Config.Evidence.locker.slots / weight, with access gated byConfig.Evidence.locker.minGrade. - Registry submission — items in
Config.Evidence.registrableItemsand any item matchingConfig.Evidence.registrablePatterns(defaultweapon_*) can be logged to a case's registry and moved into that case's locker. Registering a firearm (weapon_*) also records its serial in the weapon registry — a ghost gun with no owner data is captured with no owner, which flags it as unregistered in the MDT Weapons tab. - Processing — items in
Config.Evidence.processingcan be processed for a result label (DNA Analysis, Ballistics Report, Print Match Report).
Evidence Camera
The evidence_camera item lets officers photograph evidence drops at a crime scene. Photos are tagged to the case and uploaded through the same screenshot-basic pipeline as mugshots.
CCTV
CCTV cameras are placed by officers through the placement UI (cctv_camera item).
- Placement: aim, scroll/
/to rotate, LMB to place, RMB to cancel. - After placing, arrow keys aim the default view,
Econfirms. - Placed cameras live for
Config.Cctv.temporaryDurationSeconds(default24h) and are cleaned up by a server tick (Config.Cctv.expiryTickSeconds). - Open the viewer with
/camerasto browse all cameras the officer can access. - Viewer applies
Config.Cctv.timecycleEffect(Island_CCTV_ChannelFuzz) atConfig.Cctv.timecycleStrength.
Speed Cameras
Speed cameras are placed by admins through /speedcam_create and stored in the database.
- Models offered:
Config.SpeedCam.Models(default:prop_cctv_pole_03). - Per-camera config: speed limit, sensor radius (default
Config.SpeedCam.DefaultSensorRadius = 3.0), fine multiplier (cap:Config.SpeedCam.MaxFineMultiplier = 3). - Catch cooldown:
Config.SpeedCam.CatchCooldown(default30s) prevents repeat triggers. - Plays a catch sound (volume
Config.SpeedCam.SoundVolume) and fines the driver of the vehicle. - Departments can list
speedcam_ignored_jobs(set in/padmin) to exclude specific framework jobs from triggering. - Speed unit follows
Config.SpeedUnit(MPHorKMH).
Bodycam
The body_cam item streams the wearer's POV to other officers via /bodycams.
- Camera attaches to bone
Config.Bodycam.headBonewith offsetConfig.Bodycam.cameraOffset. - FOV:
Config.Bodycam.fov(default50). - Watcher distance check every
Config.Bodycam.pollIntervalMs(default2.5s); resets the view to the wearer if distance exceedsConfig.Bodycam.maxWatchDistance(default60m), and the watch session continues. - Roster filter:
Config.Bodycam.sameDepartmentOnly(defaulttrue) restricts the roster to officers in the watcher's department. - Bosses can override the roster filter for senior ranks per department. The min rank is stored on
police_departments.bodycam_view_all_min_rankand toggled from the boss menu — officers at or above the rank see every active wearer regardless of department.
Recording
Watching another officer's feed can capture clips (mic + best-effort page audio). Recording runs on the watcher's machine, never on the wearer.
- Auto-records once per watch session when
Config.Bodycam.recording.autoRecordOnWatchStart = true. - Manual hotkey (
F6by default,Config.Bodycam.recording.hotkey) toggles additional clips during the same watch session. - Provider:
'fivemanage'(uploads viaFIVEMANAGE_MEDIA_API_KEY) or'discord'(POSTs toConfig.Bodycam.recording.discordWebhook). - Caps:
maxDurationS(default45s),videoBitrate(default600 kbps),discordMaxBytes(default25 MB). - Wearers receive a "you are being recorded" notification when a clip is rolling against them.
- Recordings are stored in
police_bodycam_recordingswith the recorder, wearer, department, trigger type (auto/manual), duration, provider, video URL, and optional thumbnail / case attachment. - The MDT exposes a Video Storage tab for officers to browse, attach to cases, and delete recordings (gated on per-department / boss permissions). The same tab also surfaces baitcar dashcam clips uploaded by
oxide-baitcar, so all archived video is in one place.
Megaphone
The megaphone item enables PA mode (handheld and vehicle).
| Mode | Range | Trigger |
|---|---|---|
| Handheld | Config.Megaphone.handheldRange = 30m | Use the item |
| Vehicle | Config.Megaphone.vehicleRange = 50m | +oxide_police_vehicle_pa keybind (default B), driver only by default |
Listeners within range are force-subscribed to the speaker's voice channel (bypassing pma-voice / yaca-voice proximity falloff).
Breathalyzer
The breathalyzer item reads BAC from your drunk system. The reader tries each entry in Config.Breathalyzer.sources in order and uses the first numeric result.
Supported source types: metadata (via o-link.character.GetMetadata), export (server-side), client_export (client-side via export call), client_callback (target client registers oxide:police:client:reportBac).
The display value is raw * Config.Breathalyzer.multiplier, clamped to [0, Config.Breathalyzer.maxDisplay]. Thresholds: cautionLimit (default 50) flips the colour, overLimit (default 80) flashes OVER LIMIT.
Field Tools
| Tool | Item | Behaviour |
|---|---|---|
| Wheel clamp | wheel_clamp | Attaches to the front-left wheel, immobilising the vehicle |
| Mouth tape | mouthtape | Disables pma-voice / yaca-voice on the target |
| Tracking band | tracking_band | Live blip + GPS coords on the target every 1s |
| Vehicle impound | (no item) | Tows a registered vehicle for a configurable fee (default $500, max $50000) |
All field tools are gated on duty by default. Distances, durations, and bone attachments are configurable in shared/config/field_tools.lua.
Radio
The police radio (+oxidepoliceradio, default Y) is an in-world voice channel browser. It requires the police_radio item by default.
- Configurable channels per department through
/padmin→ Radio. pma-voiceandyaca-voiceintegration via channel mapping.- Talking-state debounce:
Config.Radio.TalkingDelay(default50ms). - The
SetRadioDeadserver export lets external resources (e.g.oxide-death) flag a downed officer as unable to use the radio.
Treasury and Payroll
Each department has a treasury balance stored in police_departments.balance.
- Optional banking account through
oxide-banking(Config.UseBankingAccount = true), starting balanceConfig.BankingAccountStartBalance = 30000. - Funded via
FundDepartmentexport, manual top-up in the boss panel, fines (perConfig.MDT.fineRevenueSplit), and external sources. - Payroll runs every
Config.SalaryInterval(default15 min) and pays each on-duty officer their gradesalary. - When
Config.PlayerManagement = true:- Salaries debit the department treasury.
- Unpaid ticks accrue in
police_unpaid_payrollfor boss settlement. - Rows older than
Config.UnpaidHoursDecayDaysare pruned.
- When
Config.PlayerManagement = false:- Salaries are paid directly from the framework with no treasury impact.
- Armory pulls debit the treasury when the dept's
armory_treasury_fundedflag is on (boss-toggled). When off, officers pay personally and the treasury is untouched.
Respawn
When an on-duty officer dies, the respawn module routes them to the configured station respawn / hospital point instead of running the framework's death flow. This is independent of the prison revive cutscene (which only applies to inmates with an active sentence).
Station Services
Per-station amenities configured in Config.FieldActions.StationServices.
| Service | Config flag | Notes |
|---|---|---|
| Station bell | bellsEnabled | Cooldown: bellCooldownMs = 30s |
| Trash bin | trashEnabled | 30 slots, 50000g cap, auto-clear every 1h |
| Trash clear | trashClearable | Min grade: trashClearMinGrade = 0 |
| Firearm registration desk | firearmRegistrationEnabled | Civilian-facing; fee firearmRegistrationFee = 250 per firearm |
Firearm Registration Desk
The firearm registration desk is a civilian-facing service point placed on a station in /padmin (Stations → Firearm Registration). Any player can target the desk to register the firearms they are carrying.
- The desk lists only the player's eligible firearms: weapons that have a serial and have never been registered. Already-registered weapons and deliberately unregistered ghost guns are excluded.
- A fee of
Config.FieldActions.StationServices.firearmRegistrationFee(default$250) is charged per firearm from the registrant's bank. - The fee is deposited into the station's department treasury.
- Each registered firearm is recorded in the weapon registry under the registrant as the owner of record.
The eligible list is always re-derived on the server, so a tampered client cannot register a weapon it isn't actually carrying or launder a ghost gun.
Weapon Registry
The weapon registry is a statewide, durable record of who each firearm is registered to, keyed by the weapon's serial. It survives the physical item being sold, destroyed, or carried offline, giving officers a permanent owner-of-record to trace.
The registry is populated from two places:
- Civilian registration desk — registering a firearm records it to the registrant as the owner, with status
registered. - Evidence submission — registering a
weapon_*item to a case records the seized weapon with statusseized. A ghost gun (no owner data) is recorded with no owner, which flags it as unregistered.
Officers work the registry from the MDT Weapons tab:
- Search by weapon serial or owner name.
- View a weapon's details, including its owner of record (resolved to the current character name).
- Set a weapon's status:
registered,stolen,seized, orrevoked. Marking a weaponstolenorrevokedautomatically flags it.
Other resources can register, seize, look up, and flag weapons directly via the Weapon Registry exports.
Field Interactions
Officer-on-suspect interactions handled by Config.Cuffing / Escort / Search / Tackle / HandsUp / Carry.
| Interaction | Default key / command | Notes |
|---|---|---|
| Cuff | Action menu (F2) | Front / rear / dead detection (Animation = 'advanced') |
| Lockpick cuffs | Action menu (suspect side) | Requires lockpick, three skill-check rounds |
| Break cuffs | Action menu (suspect side) | BreakMinigame = true, EscapeCooldown = 30s |
| Escort | Action menu | Officer-target attach with walk / idle anims |
| Search | Action menu | 5.5s body-search anim |
| Tackle | +policetackle (default G) | 3.0m reach, 10s cooldown, animation or ragdoll |
| Hands up | handsup (default X) | Marks the player as surrendering (other resources can read the oxide:handsup state) |
| Carry | Action menu, stop with E | Fireman's-carry attach |
| Headbag | Action menu | Black-out overlay on target screen |
| Ziptie | Action menu | Auto-release after 5min if autoReleaseSeconds > 0 |
Action menu (F2, configurable via Config.ActionMenuKey) opens a contextual radial of available actions based on the officer's target.
Most of these actions are also available through the officer target menu (third-eye) on a player. The options shown there are controlled per-action by Config.OfficerTargetMenu.Actions — cuff, search, and escort are on by default; hard cuff, carry, headbag, put/take out of vehicle, GSR check, and issue ticket can each be enabled individually.
Each interaction also carries its own duty requirement. Escort, carry, headbag, and the vehicle actions expose a per-action requireDuty flag (default true); setting one to false lets off-duty officers or civilians use that action — for example, allowing civilians to restrain a target with zip-ties while keeping everything else on-duty-only. See Configuration → OfficerTargetMenu.
Placeable Objects
The +policeactions menu (default F2) includes a Place Object option that opens a picker of items defined in Config.PlaceableObjects.props.
- Cap:
Config.PlaceableObjects.maxPerOfficer(default15) per officer. - Placement shows a translucent preview positioned by a camera raycast (out to
Config.PlaceableObjects.placementMaxDepth); confirm to drop, or rotate before placing. - Spike strips set
spikeStrip = trueand trigger tire-pop logic on driver-over.
Shipped props: do-not-cross barriers, A-frame barriers (with and without lights), road-work barriers, traffic barriers (with and without lights), three traffic cone variants, road poles, spike strips.