F.A.Q
Setup
Yes. Voice radio, channels, antennas, jammers and hacking all run without it. xsound only powers streamed music: station playlists, speaker zones and boombox audio. Set Config.Broadcast.streamingProvider = 'none' to silence those cleanly.
pma-voice. The primary channel, the secondary monitor channel and push-to-talk all run through it. Other voice resources are not supported.
Only for the dual channel. The download ships a pma-voice fork that adds a second radio channel, and ml_radio uses it to keep a background frequency open while the player talks on the main one. On stock pma-voice that single feature disables itself with one console warning; channels, antennas, jammers, hacking, stations and stereos are untouched. If you already run a customised pma-voice, port the setSecondRadioChannel export into your copy instead of overwriting it.
Not by default. Every keybind ships empty so the script never takes a key on install, and players assign their own under Settings, Key Bindings, FiveM. The radio opens by using the item, which needs no key at all. To ship a default, fill Config.UI.keybind.
No. A radio from Config.Items.radios has to be in the inventory. There is no command that bypasses it.
Signal and Antennas
Coverage comes from infrastructure. Config.Signal.baseSignalWithoutAntenna = 0 means a player outside every tower and antenna range has nothing. Four fixed towers ship pre-configured; add more locations or let players place their own antennas.
Only if the location opts in with hackable = true. By default fixed towers cannot be hacked; player-placed antennas can, unless their tier disables it.
The antenna is knocked offline and locked for Config.Antenna.hack.lockDuration (5 minutes by default), and its health takes damageOnSuccess damage (50 by default, infinite-health towers immune). A fixed tower can override the lockout with its own hackLockDuration. The owner is warned after a delay, and locks survive restarts.
Yes. Position, health, active state and lockouts persist in the database. Picking an antenna up writes its condition onto the item.
Jammers
The jammer owner adds their frequencies to the jammer's whitelist from its interaction menu. Everyone else inside the radius reads JAMMED.
Yes, while Config.Jammer.durability.destroyable = true. It also drains power over time and needs batteries to keep running.
Stations and Music
Autoplay ships off with an empty track list. Put your own links in the station's autoplay block and switch enabled on. A track can also be an mp3 inside the resource, written as a path under sounds/, which loops forever with no stream host at all.
1autoplay = {
2 enabled = true,
3 tracks = {
4 { url = 'https://radio.myserver.com/stream', title = 'My Station' },
5 { url = 'sounds/my_track.mp3', title = 'My Track' },
6 }
7}Until a station has something to play, it stays off the air unless a DJ goes live, and any speaker zone or stereo on its frequency stays silent.
Whatever you hold the rights to. No music ships inside the resource, so every source on a station is one the server owner chose.
Two things decide it. The recording: a track licensed through a performing rights organisation is off limits whether it is streamed or dropped into sounds/, because where the file sits changes nothing. And the service: YouTube, Spotify and similar platforms license playback only inside their own player, so routing their audio into the game breaks their terms.
Config.BlockedStreamHosts refuses those services out of the box.
The jobs listed in the station's permission table. An empty table lets anyone take it. Set permission = false to lock the console, and the station will only ever play its own autoplay. The console offers queue management, play, pause, skip, shuffle, repeat, volume and crossfade, and voice ducking lowers the music while the DJ talks.
Yes, in server/config_server.lua. List the hosts you allow; subdomains of a listed host pass too.
1Config.AllowedStreamHosts = { 'radio.myserver.com' }Empty allows any public host. Private addresses are always blocked, and the hosts in Config.BlockedStreamHosts are refused either way.
To take custom links away from a station entirely, set allowStreaming = false on it and only the configured tracks will play.
Items and Battery
Handsets and consumables are in Config.Items, antennas in Config.Antenna.tiers, jammers in Config.Jammer.tiers, stereos in Config.StereoProps.items. Change the names there and register matching items in your inventory.
The radio disconnects from the air. A warning fires once at Config.Battery.lowThreshold percent, and a battery item restores chargeAmount percent on use.
Updates
- Download latest from CFX Portal
- Backup the three config files in
shared/,server/config_server.lua, anything you edited inopen/, and your own files inlocales/andsounds/ - Replace everything else
- Restart the resource
Database tables migrate automatically on start.