OverflowOverflow
Radio

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.lua

General

config/config.lua

OptionDefaultDescription
Config.Locale'en'File from config/locale/
Config.Framework'qb'qb, esx or qbx
Config.Inventorynilox_inventory. Leave nil to auto-detect
Config.Notifynilox_lib or framework. Leave nil to auto-detect
Config.Dialognilox_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.

ActionDefaultDescription
talkCAPITALPush-to-talk on your current channel
openF2Open the radio UI
muteNoneStop transmitting
deafenNoneStop hearing the radio
broadcastNoneHold-to-talk into another channel
disconnectNoneLeave 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.

On this page