Configuration

919RADIO is configured through config.lua, an optional server-only file, and the in-game admin panel. Most server owners only need to edit config.lua, then manage zones and channels with /radioadmin.

File / surface Scope Editable
config.lua Shared - client + server Yes
config_s.lua Server only Yes
locale.json UI strings Yes
modules_editable/bridge/ Framework hooks Yes
In-game admin panel (/radioadmin) Zones, channels, repeaters, defaults Yes (ACE required)

Zones, channels, job/gang locks, repeaters, default device name, and simplex range are not set in config.lua. They live in the database and are edited through the admin panel after first boot.


General

Config.ToggleSystem = "both" -- "both", "keybind", "item"
Config.OpenKey = 'F5'
Config.RequireItem = "radio"

Toggle system

Value Behavior
"both" Keybind and inventory item can open the radio
"keybind" Keybind only (smartradio / Config.OpenKey)
"item" Inventory item only

When Config.RequireItem is set, the player must carry that item to open the radio (even via keybind). Set Config.RequireItem to false or nil to allow opening without an item.

Config.OpenKey is the default key for FiveM's keybind settings. Players can rebind it in Settings → Key Bindings → FiveM.

Admin command

Config.AdminOpenCommand = 'radioadmin'

Opens the radio configuration overlay. Requires ACE smartradio.admin or admin. See Installation — Admin access.


PTT sounds

Add audio files under web/build/sounds/ in the resource. Paths in config are filenames only; the NUI loads them from ./sounds/<file>.

Config.PttSounds = {
    defaults = {
        clicksEnabled = true,
        beepsEnabled  = true,
        clicksId      = 'standard',
        beepsOnId     = 'standard',
        beepsOffId    = 'standard',
    },
    clicks = {
        { id = 'standard', label = 'Standard', press = 'click_on.mp3', release = 'click_off.mp3' },
    },
    beepsOn = {
        { id = 'standard', label = 'Standard', file = 'beep_on.mp3' },
    },
    beepsOff = {
        { id = 'standard', label = 'Standard', file = 'beep_off.mp3' },
        { id = 'alt',      label = 'Alternate', file = 'beep_off2.mp3' },
    },
}
  • defaults — starting PTT sound prefs for new devices (players can change these in Settings)
  • clicks — press/release click pairs selectable by id
  • beepsOn / beepsOff — transmit start/end beep catalogs

To add a new sound pack, drop the .mp3 files into web/build/sounds/ and add entries to the matching catalog tables. Restart the resource after saving.


Server-only config (`config_s.lua`)

---919RADIO server-only configuration.
---Loaded after config.lua. Never expose these values to clients.

Reserved for server-side secrets and options. Values here are never sent to clients. Restart the resource after making changes.


Admin panel (database config)

Run /radioadmin (or Config.AdminOpenCommand) in-game. The panel configures:

Section What you edit
Zones & Channels Zone names, allowed jobs, allowed gangs, channel names and frequencies (MHz)
Repeaters Name, world coordinates, coverage range
Defaults Default device name, simplex range (metres)

Changes are saved to the database and hot-reloaded for all connected players.

First-boot seed

On an empty database, 919RADIO seeds:

  • Default device name 919RADIO
  • Simplex range 250.0 metres
  • Public zone with a full channel list
  • Police and EMS/Fire zones locked to common job names (police, leo, ambulance, etc.)
  • Map repeaters across San Andreas

After the first seed, editing seed source files has no effect. Use the admin panel (or your database) for all further topology changes.

Match job and gang names in the admin panel to the exact names your framework uses.


Localization

All player-facing UI text lives in locale.json at the resource root. Edit this file to change app names, settings labels, error messages, and notification copy. Restart the resource after saving.


Bridge customization

For framework-specific behavior, edit:

modules_editable/bridge/bridge_s.lua   -- server
modules_editable/bridge/bridge_c.lua   -- client

The bridge is auto-selected based on your running framework and inventory. Override functions there when the defaults do not match your server setup.

Admin ACE checks live in Bridge.IsRadioAdmin — customize that function if you need a different permission model.


Commands

Command Description
/smartradio Toggle the radio UI (also bound to Config.OpenKey when keybind mode is enabled)
/radioadmin Open the radio admin panel (Config.AdminOpenCommand)

/radioadmin requires ACE smartradio.admin or admin. Players without permission receive an access denied notification.