Configuration
Everything lives in the config/ folder and stays editable after escrow:
config/
├── config.lua # framework and integrations
├── radio.lua # radio behaviour, keybinds, frequencies
├── jammer.lua # jammer variants and placement
└── locale/ # en.lua, es.luaGeneral
config/config.lua
| Option | Default | Description |
|---|---|---|
Config.Locale | 'en' | File from config/locale/ |
Config.Framework | 'qb' | qb, esx or qbx |
Config.Inventory | nil | ox_inventory. Leave nil to auto-detect |
Config.Notify | nil | ox_lib or framework. Leave nil to auto-detect |
Config.Dialog | nil | ox_lib, of_ui or builtin. Leave nil to auto-detect |
Radio
config/radio.lua
Config.Radio = {
UseCommand = 'radio', -- command to open the radio, false to use the keybind only
BlurOnUse = false, -- blur the screen while the radio is open
}Set Config.debug = false on a live server.
Item requirement
The player must carry an item to use the radio. Losing it disconnects them from their channel.
RequireItem = {
enabled = true,
item = 'radio',
leaveChannelOnRadioLoss = true,
checkInterval = 5, -- seconds between checks
bypass = { 'police' }, -- jobs that never need the item
}Keybinds
Defaults players can rebind in FiveM's key settings. An empty string leaves the action unbound.
| Action | Default | Description |
|---|---|---|
talk | CAPITAL | Push-to-talk on your current channel |
open | F2 | Open the radio UI |
mute | None | Stop transmitting |
deafen | None | Stop hearing the radio |
broadcast | None | Hold-to-talk into another channel |
disconnect | None | Leave the current channel |
Broadcast lets a player talk into any other channel they have access to without leaving their own. Disable it with Config.Radio.Broadcast.enabled = false.
Restricted zones
Areas with no radio coverage, identical to being inside a jammer field. Jobs in bypassJob are unaffected.
Config.RestrictedZones = {
{ coords = vec3(-2243.82, 330.02, 174.6), radius = 10.0, bypassJob = { 'police' } },
}Callsign prefixes
Offered to players when they set a callsign. Work frequencies can define their own list; Default applies elsewhere.
Config.Prefixes = {
Default = { 'UNIT', 'CMD', 'DISPATCH' },
MaxChar = 8,
}Sounds
Played on join, leave, mute, unmute, deafen, undeafen and talk. default sets whether the sound is on for a new player. Each one can be toggled per player in the radio settings.
Config.Sounds = {
volume = 0.4,
events = {
join = { file = 'join.ogg', default = true },
-- ...
},
}Animations
Emotes played while transmitting. Players pick one in the radio settings; default is the starting choice.
Config.Anims = {
enabled = true,
default = 'holding_radio', -- holding_radio, chest_mic, ear, handheld_prop
}Add entries to Config.Anims.list with a dict and clip, optionally a prop, bone and place offset.
Player settings (nickname, avatar, badges, status, sounds, animation, keybinds) are stored per character in of_radio_user_settings and restored on the next session.
