Installation

3 min readUpdated Today

Overview

ML Radio adds handset radios on pma-voice with antenna-based signal coverage, jammers, hackable towers, job-gated broadcast stations, speaker zones and placeable stereos. It persists placed infrastructure to the database and integrates with the inventory through ml_bridge.

Quick Start

  1. Download from CFX Portal
  2. Extract to your resources folder as ml_radio
  3. Add to server.cfg:
server.cfg
1ensure oxmysql
2ensure ox_lib
3ensure pma-voice
4ensure ml_bridge
5ensure xsound      # optional — station and stereo audio
6ensure ml_radio
Load Order

ml_radio must start AFTER ml_bridge and pma-voice.

Database

Tables are created automatically on first start:

ml_radio_data | Per-player radio state: frequencies, callsign, favorites, battery

ml_radio_antennas | Player-placed antennas: position, health, lockout

ml_radio_fixed_antennas | Fixed tower state overrides: health, lockout

ml_radio_disruptors | Placed jammers: position, power, health

_INSTALL/sql.sql is an optional manual version of the same schema. It also drops the ml_radio_antennas / ml_radio_extenders tables when they are present, so run it once if your database still has them.

Item Registration

Register the following items in your inventory system. Ready-to-paste definitions ship in _INSTALL/items.lua, and _INSTALL/ox_items.txt is pre-formatted for ox_inventory/data/items.lua:

  • radio: Basic handset
  • radio_military: Long-range handset with a bigger battery
  • radio_jammer / radio_jammer_advanced: Placeable jamming towers
  • radio_antenna_small / radio_antenna_medium / radio_antenna_large: Placeable antennas
  • boombox: Placeable stereo
  • batteria_stilo: Battery, recharges handsets and jammers
  • electronic_kit / metal_scrap: Repair materials
  • hacking_device: Required to hack antennas

Item names are configurable in Config.Items.

Antenna Model

Antennas and fixed towers use model = 'dgm_antenna' by default. That model must be streamed on your server; if it is not, change model on the antenna tiers (Config.Items.antennas) and every entry in Config.FixedAntennas.locations to a base-game prop such as prop_radiomast01. Jammers and boomboxes use base-game props and need nothing extra.

Verify

After starting, the console prints the resource banner and the fixed towers load. In game: hold a radio item, press F5, tune a frequency near a fixed tower and the signal bars read above zero.

  • Radio opens but nobody hears voice - check that pma-voice is running and started before ml_radio.
  • Stations and boomboxes play no music - xsound is missing or Config.Broadcast.streamingProvider = 'none'. Voice radio is unaffected.
  • Antennas are invisible - the dgm_antenna model is not streamed on your server. Swap the model values as described above.
  • "No signal" everywhere - signal starts at Config.Signal.baseSignalWithoutAntenna = 0; coverage comes from fixed towers and placed antennas. Check the tower coords are loaded.
  • Nothing posts to Discord - the webhooks in server/config_server.lua ship as placeholders; fill in real URLs.