F.A.Q

4 min readUpdated 2 days ago

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

Replace the tracks URLs in the station's autoplay block with your own stream links. The shipped entries are public example streams. 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.

shared/config_audio.lua
1autoplay = {
2    enabled = true,
3    tracks = {
4        { url = 'https://your-stream-host/stream', title = 'My Station' },
5        { url = 'sounds/alarm.mp3', title = 'Alarm' },
6    }
7}

The jobs listed in the station's permission table. 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. The table is keyed by host, not a plain list, so { 'ice1.somafm.com' } blocks everything instead of allowing that one.

server/config_server.lua
1Config.AllowedStreamHosts = {
2    ['ice1.somafm.com'] = true
3}

Empty allows any public host. Private addresses are always blocked.

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

  1. Download latest from CFX Portal
  2. Backup the three files in shared/, server/config_server.lua, anything you edited in open/, and your own files in locales/ and sounds/
  3. Replace everything else
  4. Restart the resource

Database tables migrate automatically on start.