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 byidbeepsOn/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.0metres - 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 -- clientThe 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.