CustodyComms
CustodyComms is an advanced FiveM Lua resource that adds realistic voice isolation and monitoring systems. It allows server admins to create interactive, location-based communication zones such as interrogation rooms, prison cells, or control centers, where voice chat automatically adapts to the environment by isolating conversations within defined areas, controlling who can hear or speak, and enabling monitoring or two-way communication from designated listening posts. This system brings a new level of immersion and realism to police, corrections, and security roleplay by simulating authentic audio behavior and controlled communication flow.
Features
Section titled “Features”- Voice-Isolated Zones: Set isolation and listening zones with automatic routing, isolation, and optional two-way talkback.
- In-Game Zone Editor: Drag vertices, name zones, preview coverage, and save directly in-game, no file edits or restarts needed.
- Immersive Interactions: Add animations, props, and targets so players “use” consoles or listening devices to tap into a room.
- Permissions: Gate access by job/role (ESX, QBCore, QBox, Ox).
- Optimised: In game 0.01-0.02ms client/server with 25 zones.
Perfect For
Section titled “Perfect For”- PD interview suites & interrogation rooms: Keep suspect audio contained while detectives monitor.
- Prison cells & blocks: Isolate inmate comms per cell, allow monitoring from control rooms, enable per-cell talkback/overrides, and keep yard chatter contained.
- More: Secure boardrooms, gang HQs, events.
- Preconfigured Support: Includes ready-to-use zones for:
- Vinewood Police Headquarters MLO - AshRigs
- Community Mission Row PD - SLB2k11
Want More Interiors or Maps?
Section titled “Want More Interiors or Maps?”We’re always adding new supported interiors and maps.
Join our Discord and open a ticket to request a new location, or use the in-game editor to create and share your own zones.
Commands
Section titled “Commands”/custodycomms: Opens the main management menu for the zone editor. Requireskf-custodycomms.commandorgroup.adminACE permission.
Example
add_principal identifier.fivem:1234 group.admin
or
add_ace identifier.fivem:1234 "kf-custodycomms.command" allowGetting Started
Section titled “Getting Started”-
Download the latest from Cfx.re Portal
Section titled “Download the latest from Cfx.re Portal” -
Download Dependencies
Section titled “Download Dependencies” -
Install
Section titled “Install”Move the dependencies and
kf-custodycommsfolders into your server’sresourcesdirectory. -
Add to
Section titled “Add to server.cfg”server.cfgAdd the following to your
server.cfg.server.cfg setr voice_useNativeAudio truesetr voice_useSendingRangeOnly trueensure kf-custodycomms
Configuration
Section titled “Configuration”The main configuration is located in config.lua. You can modify this file to suit your server’s needs.
Config = { debug = true, -- Enables debug prints and visualizations for zones. interrogationInput = false, -- Enables or disables the key press input for interrogation rooms. listeningPostInput = false, -- Enables or disables the key press input for listening posts. allowedJobs = { 'police', 'admin' }, -- A list of job/group names that are allowed to use the listening posts. zoneNotifications = true, -- Toggles notifications when entering or exiting zones.}Zone Editor
Section titled “Zone Editor”The primary way to create and manage zones is via the in-game editor. The editor allows for the creation, modification, and deletion of zones directly on your server.
Accessing the Editor
Section titled “Accessing the Editor”To access the editor, you must have the appropriate permissions to use the command (see above).
- Open the command input in your chat window.
- Type
/custodycommsand press Enter. - A context menu will appear, providing options to either create a new zone or manage existing ones.
Creating/Editing a New Zone
Section titled “Creating/Editing a New Zone”- Select “Create a new zone” from the context menu.
- The zone editor UI will appear, and you can begin drawing a polygon shape by clicking on the ground to place vertices, you can drag existing vertices to reshape the polygon, or delete them.
- Once you are satisfied with the shape, you can configure the zone’s properties in the UI.
- Click “Save” to create/edit the zone. The zone will be saved as a
.luafile in thezones/directory.
Zone Data Format
Section titled “Zone Data Format”Zone files can also be created, modified, and deleted manually.
Zones are stored as individual Lua files in the /zones/ directory. Zone file names must be unique.
After editing a zone manually you should run the command /custodycomms rebuild to rebuild the zone-index.json file.
Example Zone File
Section titled “Example Zone File”return { name = "unique_zone_id", type = "poly", points = { vector2(...), ... }, -- Minimum 3 points thickness = 6, -- Vertical height altitude = 68.4, -- Base Z coordinate label = "Display Name",
-- Voice configuration canTalk = false, -- Default talkback state listens_to = {}, -- Array of zone names to monitor isolateIncoming = false, -- Isolate incoming voice isolateOutgoing = false, -- Isolate outgoing voice
-- Interaction input = 38, -- FiveM control key (false to disable)
-- Optional features animation = { dictionary = "anim_dict", name = "anim_name", startCoords = vector3(...), -- Optional spawn point prop = { ... } -- Optional prop configuration }, objects = { -- Spawned props with optional targets { model = "prop_model", coords = vector3(...), rotation = vector3(0, 0, 0), source = "spawned", -- "spawned" or "world" target = "listen", -- "listen" or "toggleTalk" (optional) label = "Interact Label" -- Optional target label } }, dependencies = { "resource_name" }, -- Required resources category = "Category", -- Optional (auto-derived from path)
-- Metadata (auto-populated on save) created_at = 1234567890, created_by = "Player Name"}