Installation
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
- Download from CFX Portal
- Extract to your
resourcesfolder asml_radio - Add to
server.cfg:
1ensure oxmysql
2ensure ox_lib
3ensure pma-voice
4ensure ml_bridge
5ensure xsound # optional — station and stereo audio
6ensure ml_radioml_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 handsetradio_military: Long-range handset with a bigger batteryradio_jammer/radio_jammer_advanced: Placeable jamming towersradio_antenna_small/radio_antenna_medium/radio_antenna_large: Placeable antennasboombox: Placeable stereobatteria_stilo: Battery, recharges handsets and jammerselectronic_kit/metal_scrap: Repair materialshacking_device: Required to hack antennas
Item names are configurable in Config.Items.
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-voiceis running and started beforeml_radio. - Stations and boomboxes play no music -
xsoundis missing orConfig.Broadcast.streamingProvider = 'none'. Voice radio is unaffected. - Antennas are invisible - the
dgm_antennamodel is not streamed on your server. Swap themodelvalues 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.luaship as placeholders; fill in real URLs.