Scripts / TML Radio

A handheld two-way radio that feels like the real thing: a backlit LCD, a keypad, channel and volume buttons, and a status LED that turns purple when someone’s talking and red when you are. Emergency services get locked frequency ranges and a panic button. Built on pma-voice or SaltyChat.

Features

  • Tune it like a real radio. Type a frequency (145.50) and press ENT, step with CH+/CH-, or use the keyboard (type, Enter, arrow keys).

  • Presets: press to tune, hold to save. Volume, mic click, callsign and presets are remembered per player.

  • Locked frequency ranges. Lock any range to jobs with a minimum grade, on-duty only, or an ACE permission. Each range has its own label and colour on the display.

  • Secure by design. Every join is checked on the server, and with pma-voice the channels are also guarded inside pma-voice itself, so they can’t be joined from outside the radio. Players who change job or go off duty are taken off straight away.

  • Panic button on emergency ranges: an alarm, a flashing map blip and a notification for everyone on the channel, with a cooldown and an optional GPS waypoint. Plus a server event for your dispatch script.

  • Real radio sound. Voices over the radio get a radio effect (handheld, digital or old presets, or your own values), built on pma-voice’s audio submixes.

  • Settings on the radio itself: a MENU key turns the LCD into a menu for callsign, mic click and HUD.

  • HUD strip (top right, can be turned off by the server or per player) with the frequency, range label and a receiving / transmitting indicator, shown while the radio is on, even with the UI closed.

  • Realism: no signal while dead or underwater. Cops and medics talk on a shoulder mic; everyone else raises the radio to their mouth.

  • Optional member list with callsigns and live talking dots on emergency frequencies (off by default).

  • Item or no item. Require the radio item (checked continuously, so dropping it takes you off the air), or let everyone use /radio.

  • No database needed. Every config option is checked on start, with a readable warning and a safe default.

  • English and Spanish included; add your own language by copying one file.

  • Exports and events for developers: put players on a frequency, read who’s on one, react to joins, leaves and panics.

Requirements

  • FiveM server with OneSync

  • pma-voice or SaltyChat

  • A supported framework, or standalone mode using ACE permissions

Compatibility

The radio talks to your server through an open bridge layer, so it isn’t tied to one setup.

Category

Included adapters

Framework

Qbox, QBCore, ESX, ox_core, ND_Core, vRP, standalone, custom

Inventory

ox_inventory, qb-inventory, ps-inventory, qs-inventory, codem-inventory, core_inventory, standalone, custom

Voice

pma-voice, SaltyChat, none, custom

Notifications

ox_lib, QBCore, ESX, standalone, custom

The bridge files are not encrypted: if your setup is unusual, or an included adapter needs a tweak, you can edit the adapter yourself. A blank custom adapter is included for anything else.

Installation

  1. Drop tml_radio into your resources folder.

  2. ensure tml_radio after your framework, inventory and voice script.

  3. Add the radio item for your inventory (ready-made snippets and an item image included).

  4. Set your job names in the restricted frequency ranges.

A full install guide and config reference are included. Update announcements are posted in the Discord.

Important: Cfx.re Asset Escrow

This resource is distributed through the Cfx.re Asset Escrow system. Please read before purchasing.

  • The main client and server code is encrypted by Cfx.re’s escrow. It can’t be viewed or edited, and it can only run on a server whose license key belongs to the Cfx.re account that purchased it.

  • These files are left open so you can customise them: the config file, language files, all bridge adapters (framework, inventory, notifications, voice), the theme file (theme.css), sound files, the install snippets and the documentation.

  • You need a Cfx.re (Keymaster) account and a server using that account’s license key. The resource will not run on a server registered to a different account.

  • One purchase covers one server.

  • Do not resell, share, leak or redistribute the files or the encrypted assets. Doing so violates the license and Cfx.re’s terms.

Purchase terms

  • All sales are final: no refunds. Check the requirements and compatibility above, or ask in the Discord, before buying. Price drops and later sales are not refunded.

  • Free lifetime updates, granted to the same Cfx.re account.

  • No account transfers. Licences are not moved between Cfx.re accounts, so buy with the account that owns your server key.

  • Chargebacks and leaks mean the licence is revoked and your accounts are banned from support and future purchases. Report leaks to [email protected].

  • Payments are handled by Tebex, and anything not covered here follows Tebex’s terms: https://checkout.tebex.io/terms

Support

Support covers installation help, bugs in the shipped code and the documented config. It does not cover custom framework, inventory or voice integrations, heavily modified forks, conflicts with unrelated scripts, general server setup or account transfers. Join the Discord for support: https://discord.gg/RPzkXrDUEQ

Screenshots show the interface rendered with sample data.

FAQ

Common questions

The radio doesn't open.

With Config.Radio.requireItem = true you need the tml_radio item; check it's in your inventory's item list (see install/). On ox_inventory the item needs server = { export = 'tml_radio.use_item' }.

Nobody can hear me.

The console prints voice=... at start. If it says none, start pma-voice or SaltyChat before tml_radio. Talk with your voice script's radio key (pma-voice: Left Alt), with the radio UI closed.

I can't join the police frequencies.

Restricted ranges check your job name, grade and duty. The default config uses police, sheriff, ambulance, ems and fire; change Config.Restricted to your server's job names, or set onDutyOnly = false.

How do I show who's on a channel?

Set Config.Radio.showMembers = true. The list then shows on restricted frequencies; listeners on public frequencies stay anonymous unless you also set Config.Radio.showMembersOnOpen = true.

The console shows a lot of pma-voice "radio check removed" lines when I restart the radio.

That's pma-voice clearing the channel guards when tml_radio stops; they're added again when it starts. Set Config.Radio.guardChannels = false to turn the guards off (the radio still checks every join itself).

All TML Radio questions →

More from TML

You might also like

TML Admin Panel

A searchable in-game administration panel with automatic framework detection, a framework-independent ban system and every action permission-gated and logged.

  • 38 permissions
  • Framework-free bans
  • Audit log
…
Details

TML Billing

Itemised invoices and fines that just work. Businesses bill the person standing next to them in a few clicks; players see every bill in one clean window and pay from the bank in one click. The money…

…
Details

TML Monitor

Live performance, every log and server-side anti-cheat signals for your FiveM server, in a web dashboard you and your staff open from any browser or phone.

  • Live dashboard
  • Server-side anti-cheat
  • 30 days of logs
…
Details

TML Pager

A retro pager with modern features. Every character gets a pager number, then sends short messages, saves contacts and receives department dispatch alerts.

  • 7 frameworks
  • Dispatch alerts
  • Item optional
…
Details

TML Phone

A retro flip phone and a modern smartphone on the same numbers, contacts and messages. Calls, video calls and 17 apps, and every phone item can carry its own number.

  • Flip + smartphone
  • 17 apps
  • Video calls
…
Details

TML Queue

A connection queue players don’t hate. When your server is full, players wait on a live queue card with their position, priority, time waited and an estimated wait. Priority comes from Discord roles,…

…
Details
TML Radio…
Esc

↑↓ to move Enter to open

Keyboard shortcutsEsc
Ctrl K or /
Search pages, scripts and docs
G then H
Go to Home
G then S
Go to Store
G then P
Go to Previews
G then D
Go to Docs
G then I
Go to Install helper
G then F
Go to FAQ
C
Open the cart (store pages)
?
Show this list