Configuration
config.lua explained — channels, voice effects, jammer, and integrations.
All gameplay settings live in config.lua at the resource root (0r-radio/config.lua).
Open it in an editor and change only what you need — the file is commented, but this page is the short version.
Setup
setup = {
debug = 4, -- 0 = off, 1 = errors only, up to 4 = all logs (use 1 in production)
checkVersion = true,
notify = 'auto',
progress = 'auto',
menu = 'auto',
voice = 'auto',
replicateConvars = true,
},debug
Console noise. Keep at 1 on a live server unless you are troubleshooting.
checkVersion
Warns if a newer release exists on startup.
notify
auto or: ox_lib, lt-ui, esx_notify, okokNotify, pNotify, mythic_notify, brutal_notify, wasabi_notify, origen_notify, lation_ui
progress
auto or: ox_lib, lt-ui, progressbar, lation_ui, wasabi_uikit
menu
auto or: ox_lib, lt-ui, qb-menu, lation_ui, wasabi_uikit
voice
auto or: pma-voice, saltychat
replicateConvars
When true, 0r-radio sets PMA-Voice convars on startup and validates them. Prefer setting convars manually in server.cfg if you already manage them — set to false in that case.
General
locale
'en'
Also: tr, de, fr, es, pt-br, pl, ru, it — files in locales/
movement
true
Walk while the radio UI is open
leaveOnDeath
true
Leave the current channel when the player dies
micClicks
true
Default mic-click state for new players (they can change it in settings)
customMicClicks
true
Use sounds from web/public/sounds/ instead of pma-voice / saltychat clicks
defaultVolume
100
Default radio volume for new players (0–100)
How frequencies work
There are three kinds of channels. Think of them as layers:
Reserved (config) — IDs listed in
channels = { [1] = { ... }, [2] = { ... } }. Job-restricted, per-channel settings. Example: police on channel1.Public — Frequencies
1…frequency.publicChannels(default1–200). Open to everyone unless that ID is already defined inchannels.Password / custom — Frequencies from
publicChannels + 1up tofrequency.max(default201–500). Created in-game from the UI with a password.
If you change publicChannels, the ranges shift. Example with max = 500 and publicChannels = 250: 1–250 public, 251–500 password/custom.
Channel label can be a locale key ('channels.police_dispatch') or plain text ('LSPD Tac 1').
Restricted channel example
Channel options
label
Channel name (locale key or plain string)
jammed
false = this channel is not affected by jammers
duty
true = player must be on duty (job.onDuty) to join
showRole
Show each member's grade/role in the channel list
jobs
Allow-list of job names; others are refused at join time
The default config maps channels 1–9 to LSPD, BCSO, and EMS frequencies. Extend or replace them as needed.
Voice effects
Custom radio effects (radioEffect = 'custom') only work with pma-voice. saltychat still gets a working radio without the submix pipeline.
radioEffect
'custom'
'custom' = 0r-radio submix pipeline; 'pma' = pma-voice built-in; false = no effect
usePMAAnimations
false
true = use pma-voice talk animations; disables talkAnimations presets
underwaterEffects
true
Muffled radio audio underwater (custom mode only)
distanceEffects
true
Audio quality by distance between players (custom mode only)
Advanced tuning (custom mode only)
voiceEffects
Submix definitions (radioNear, radioMid, radioFar, jammed, underWaterTalking)
radioDistance
Distance thresholds that pick each submix
environmentalEffects
Interior and weather interference (enabled, interior, weather.badWeathers)
radioDropouts
Simulated packet loss (enabled, jitter, stages per distance tier)
Defaults are tested. Tweak only if you know what each value does — comments in config.lua are the source of truth.
Jammer
enabled
true
Turn the jammer system on or off
range
75.0
Radius where radio signal is affected
minDistance
15.0
Minimum gap allowed between two placed jammers
prop
'ch_prop_ch_mobile_jammer_01x'
World model when placed
useVoiceEffectInsteadLeaving
true
true = distorted submix while in range; false = remove from channel. Only when radioEffect = 'custom'
job
true
If true, only jobs below can place or pick up jammers
jobs
police, sheriff, swat
Allowed jobs when job = true; if job = false, anyone with the item can use it
Customization
enabled
true
Master switch for player customization
displayNames
true
Custom name on the channel list
colors
true
Custom badge color on the channel list
Keybinds
enabled
true
Enable or disable the keybind system
openRadio
'EQUALS'
Open / toggle radio UI
nextChannel
'PERIOD'
Next channel
prevChannel
'COMMA'
Previous channel
Players can rebind these in FiveM's keybind settings. Defaults apply on first join.
Talk animations
enabled
true
0r-radio talk animations; set false if another script handles radio anim
animations
[0], [1], [2]
Presets in the UI — do not edit dict/anim/prop unless swapping animations
Set usePMAAnimations = true (in the voice section) to let pma-voice handle talk animations instead.
Flashlight
enabled
true
Toggle flashlight from the radio UI
drawDistance
75.0
How far other players see the beam
light.color
RGB
Beam color
light.distance
12.5
Light range
light.brightness
1.0
Brightness
light.roundness
1.0
Roundness
light.radius
15.0
Radius
light.falloff
0.75
Falloff
Locales & data
Set locale to a supported code and edit strings in locales/*.json. Channel labels can use keys under "channels" in those files.
Player data is stored on the server (no database required):
data/favorites.json
Saved favorite channels
data/customization.json
Display name and badge color
Last updated