Usage
Working Tommy's Radio — in-game controls, channel features, the dispatch panel, 911 calls, radio models, animations and the Stream Deck plugin.
How to work the radio, the dispatch panel and the 911 line. Everything an admin configures is in Configuration.
Quick reference
- F6 opens the radio; click the power knob to switch it on.
- The radio starts on a channel. Hold B to talk.
- Hover any button to see its full name.
- Change channel:
ZoneorChan, arrows,Sel. - ◀ ▶ means more softkeys — page with the arrows.
Scantoggles scanning;ScnLedits the list.- Emergency: hold the orange button for a second. Hold again to clear.
- Volume, earbuds and model:
Optn, or/tradio. - Escape returns control to the game; F6 hides the radio.
/tradio→ Quick is the radio without its screen.
The in-game radio
F6 opens, B transmits. Players rebind both in FiveM → Settings → Key Bindings; admins set defaults in Settings → Controls.
Escape returns control to the game and the radio to Home, leaving it visible. /tradio → Behavior → Hide radio when releasing focus hides it too. Hiding never powers off the radio or cancels an emergency.
On-radio buttons
Every layout works the same way; only the softkey count differs. Changing layout never changes your channel. Top-view layouts have no menus — see Top view.
Home screen
The Home row shows as many entries as the radio has softkeys. ◀ ▶ appears when there are more; the arrows page through and wrap, and unusable entries are skipped.
| Radio | Page 1 | Page 2 | Page 3 | Page 4 |
|---|---|---|---|---|
| 3 softkeys | ZnUp · Zone · ZnDn | Chan · Scan · Nuis | ScnL · Optn · Loc | Info · Alrt |
| 4 softkeys | ZnUp · Zone · ZnDn · Chan | Scan · Nuis · ScnL · Optn | Loc · Info · Alrt | — |
| 5 softkeys | ZnUp · Zone · ZnDn · Chan · Scan | Nuis · ScnL · Optn · Loc · Info | Alrt | — |
| Key | Does |
|---|---|
ZnUp / ZnDn | Steps zone without a menu |
Zone / Chan | Opens Select Zone / Select Chan |
Scan | Toggles scanning; hold for Edit Scan. See Scanning |
Nuis | Nuisance-deletes the scanned channel you are hearing |
ScnL | Opens Edit Scan |
Loc | Location sharing on or off |
Info | Opens Info → Radio Info |
Optn | Opens Options |
Alrt | Supervisors, conventional: fires the first alert on your channel |
Ctrl / Trnk | Supervisors, trunked: control frequency or back |
Supervisor means the tlib.admin ACE or a codeplug with Supervisor Access. Admins reprogram either bank — see Home softkey banks.
Select Zone and Select Chan
Sel is the leftmost softkey, Exit the rightmost. The highlighted row is a preview: • marks your operating zone or channel, S a scanned channel, R a scan-only channel.
- Arrows and the knob move the highlight. Browsing never retunes the radio
Selis the only thing that changes channel. A refusal says why:Scan only,No TX chanorInvalid chan- PTT from any menu returns Home and transmits on your channel
On Home the knobs change channel immediately; in a menu they only move the highlight. The display reads TX?: awaiting confirmation, TX: confirmed, RX: for your channel, SC: for a scanned one.
Indicators
Some layouts have no status light.
| Indicator | Meaning |
|---|---|
| Green status light | Startup SELFTEST |
| Red status light | Confirmed transmission. Portables also blink for low battery and your emergency; mobile heads have no emergency light |
| Yellow status light | Conventional reception. Trunked reception leaves it dark |
LCD TX? / TX / RX | Pending stays TX?. Confirmed uses antenna arrows or text |
| LCD no-service icon | Crossed antenna; hover for No network. The radio lost its server connection, not RF |
| Orange message | Emergency (yours), No emergency (paused), Emergency plus a unit name, or Man down. Never for your own Silent |
| Red message | Low battery, or Trnk timeout with the talkgroup name |
|→| icon | The channel is Direct. It uses the trunked icon's position |
| Scan icon | Scan is on, and stays lit while scanning pauses |
| Scan priority dot | Blinking for Priority 1, steady for Priority 2 |
Messages render differently per model: portables show a strip below the channel, mobile heads and the fixed vehicle screen tint and read Emergency · 2L-319 on the top line, the KVD-880 shows green text, and top view tints the glass.
On a trunked channel, wait for the talk-permit tone before speaking. Two things end your transmission early. Keying over someone gets the bonk and TX denied. Holding past the transmit time-out warns four seconds out, then Time out.
Options
Optn opens your per-player preferences. Options appear only when relevant.
| Option | Notes |
|---|---|
| Earbuds | Toggles in place. Only when 3D audio is enabled server-side |
| Voice vol / Tone vol | Changes as you adjust |
| 3D vol | Only when 3D audio is enabled |
| Style | Radio model, from your codeplug's allowed models. Applied on Ok |
| Disp | Auto, Light or Dark palette |
| Light | LCD brightness: Normal, Dim, Low |
| Mic | Microphone device. Applied on Ok |
| Anim | Radio animation. Applied on Ok |
| Scan list | Loads a codeplug list into Personal. It does not turn scanning on |
| Move radio / Reset position | Repositions or resets, then returns Home |
On the edit screen + raises, − lowers, Ok keeps the value, and Cncl, Home or PTT restores it. Three-softkey radios have no Cncl.
Light and Dimmer
The sun button and the Light / Dimmer keybind do different things per model.
| Control | Layouts | Short press | Hold (~0.6 s) |
|---|---|---|---|
| Dimmer | HLX-120, HLX-120G, ZTR-540, ZTR-540S | Steps Normal → Dim → Low | Switches day/night and saves it, so Auto becomes explicit |
| Light | QRX-720, QRX-720G, DRX-330, QRX-760, QRX-720H | Toggles Normal and Low | Nothing |
| none | KVD-880 | — | — |
The keybind is unbound by default. Brightness affects the LCD only and persists. Where a volume knob supports it, scroll to adjust volume.
Info / Radio Info
Info → Radio Info shows the server-assigned Unit ID — not your Agency ID, callsign or player number. It reads Not Assigned when there is no valid identity.
Clock
The clock cannot be set on the radio. Settings → General → Radio clock time picks the source: Game world (no date) or Player's computer. Codeplugs set the format under Codeplugs → Display; the optional Clck softkey opens a read-only Clock screen.
Menu timeout
A codeplug can put the radio back on Home after a period with no key presses, with a short tone. It ships off. Anything you had not confirmed is discarded, except Edit Scan changes.
Top view
The QRX-720H top view is the handheld from above, with no menus and no softkeys.
- Status row: signal bars with the TX/RX glyph, scan, trunked or Direct, battery. No GPS icon, no clock
- Two lines: zone, then channel. Temporary messages cover the channel line
- Zone letter: Basic is
A–Ffor zones 1–6, EnhancedA–Y, one per three zones - Lighting: the glass tints orange for an emergency or Man Down, red for a critical alert
The /tradio settings dialog
/tradio opens the per-player settings dialog; Radio Info and Edit Scan stay on the radio. It opens on Quick: the radio without its screen. Dispatch Panel, Admin Panel and 3D Prop Editor are entries in the sidebar, each shown only to a player the server has granted it.
| Tab | Options |
|---|---|
| Sounds | Voice / SFX / 3D volume · Earbuds · Tone Ducking · Input → Microphone |
| Sounds → Alerts | Voice Announcements, Man Down Alarm, Auto Transmit — things the radio does untouched. All codeplug-gated |
| Appearance | Radio Style (per context) · Theme · Animation · Move Radio / Reset Position |
| Behavior | Hide radio when releasing focus · Separate On-Foot Focus Layout · GPS Blips · Channel list · Zones → Geo Auto-Switch, plus a checkbox per zone |
| Advanced | Scan Lists · Receive Sound / P25 Receive EQ |
| Feedback | Reaches TIMMYG Studios, not your server's staff, and sends nothing identifying you. Last in the sidebar, as in every t* resource |
Channel features
Scanning
Scan on/off and the scan list are separate: turning scan off keeps the list.
Which list you scan. The radio scans the list your codeplug assigns to the channel you are on, or your Personal list where it assigns none.
Press Scan on Home to toggle scanning. With no list you get No scan list; with nothing to hear, List empty. Scan on survives a power cycle.
Edit Scan. Press ScnL, or hold Scan. A filled dot marks Priority 1, hollow Priority 2.
| Key | Does |
|---|---|
Sel | Adds the channel, then cycles non-priority → Priority 2 → Priority 1. A priority moves off whichever channel had it |
Del | Removes it from the list |
Rcl | Jumps to the next channel in the list |
| Home | Leaves. Changes take effect as you press |
How it sounds. The radio locks onto one scanned channel at a time, whichever keyed first. Priority 1 interrupts anything, Priority 2 interrupts non-priority, equal priorities never interrupt each other. It parks for the hang time after a channel goes quiet, and your own channel beats all of them.
Which channel PTT uses is set per list. Selected channel (the default) always uses the channel you selected. Talkback transmits on the channel the display shows, bonking on a scan-only one; emergency, hot mic and 911 never use it.
Nuisance delete. Press Nuis while stopped on an unwanted channel. Priority channels and your transmit channel are protected, and the deletion lasts until scanning restarts.
A Stream Deck Toggle Scan key or the addListeningChannel export edits the current channel's list and turns scan on. Scan state saves per codeplug and per server.
Using a scanner
A scanner is a different device, not a radio with scanning switched on. It is receive-only — there is no PTT and the server refuses one — and it is handed out as a codeplug, so you either have one or you do not. Servers usually attach it to an item; see Scanner.
The shipped model is the SWX-250, a portable with three soft keys and no keypad. Its Home page is the scan controls themselves rather than a menu, because a scanner has no selected channel to change and no scan list of its own to edit:
| Key | Does |
|---|---|
Sys | Freezes the sweep on the system you are hearing. Press again to release |
Chan | Freezes on the channel instead. Pressing one level while the other is held moves the hold rather than releasing it |
Avd | Avoids the channel you are hearing: once temporary, twice permanent, a third time clears it |
The display reads Scanning while it sweeps, shows the system and channel it stops on, and carries HOLD and AVD in the status row while either is in force. Nothing to Scan means every system is avoided or none is in reach — it is not an error.
Avoid only works on something you are actually hearing. Press it while the scanner is still sweeping and you get a bonk and Nothing heard, rather than silently avoiding whatever happened to be on screen. A call you have just avoided stays on screen until it ends, so that "press twice for permanent" is one gesture instead of two that need re-aiming.
Temporary avoids clear when the scanner is powered off. Permanent ones do not — clear those with a third press. That is how real scanners behave, so the habit carries over.
Channel list overlay
Enable it in /tradio → Behavior → Channel List: a floating roster of your channel, aware of patches, trunking and scan traffic. Dispatchers carry DSP; units in emergency highlight red. Header badges show zone, channel, frequency, P patched, T trunked, PANIC.
Emergency
What the orange button does depends on the emergency profile your codeplug assigns the channel — see Emergency profiles.
Starting. Hold the orange button, or the Emergency keybind, for the codeplug's hold time — one second by default. A short click shows Hold for emergency. A No emergency channel gives a low reject tone.
Ending. Hold the button again for about a second. A dispatcher can clear it, and powering off ends it — unless the codeplug sets Keep radio on during emergency.
| Mode | What happens |
|---|---|
| Alarm | Alarms dispatch. Ends on acknowledgment (Ack received), exhausted retries, or PTT |
| Call | Trunked only. You can key over a busy channel, never over another unit in emergency. Reported on your first PTT |
| Alarm + Call | The alarm, then the call on acknowledgment, exhausted retries, or PTT. A conventional channel given a Call profile runs as this |
| Silent | Your radio shows and plays nothing; dispatch still sees it. Other field radios are not told |
A Tactical profile keeps you where you are; a Revert profile moves you to the programmed channel and back when it ends. The emergency follows you across channels, pausing with No emergency and a repeating low tone on a channel that has none.
Hot mic. A profile can key your microphone for up to 120 seconds, on the first emergency transmission only. A player who turns Auto Transmit off is never keyed up automatically.
What others see. Units on your channel see Emergency with your name and your blip flashes — except on Silent. Dispatch gets an ACK button per unit, which stops its alarm tone.
Safety limits. Panic Alert Timeout (60 s) auto-clears an emergency for a crashed or AFK unit; 0 means manual only. Panic Alert Cooldown (15 s) is the minimum wait before raising another there.
Man down
Man down raises the emergency for an officer who has stopped responding — the one feature that does so without anybody pressing a key. It ships off. Settings → General → Man-Down by Default sets the starting value; /tradio → Sounds → Man Down Alarm is the per-player choice and always wins. Codeplugs → Features → Man Down off is a hard block for that department.
The clock runs only while the radio is on and connected. Moving, transmitting or looking around resets it.
| Stage | When | What happens |
|---|---|---|
| Pre-alert | While there is no activity | Nothing visible. Any activity restarts it |
| Post-alert | After 45 s — 10 s if down or ragdolled | A tone every 2.5 s, an orange Man down message, an on-screen banner, and a Clr softkey |
| Cancel | Any time in the post-alert | Move, look around or key up. Clr stays quiet until you move |
| Emergency | 20 s after the post-alert — 15 s if down or ragdolled | Raises the channel's programmed emergency, or nothing on a No emergency channel |
The 45 s and 20 s delays are Warning Delay and Emergency Delay in Settings → General; a codeplug can override both. The 10 s and 15 s thresholds always apply.
Callsigns
A callsign replaces your character name on radio displays and the dispatch panel.
/callsign 2L-319 -- set
/callsign -- show current
/callsign clear -- remove
Rename the command in Settings → General. Set sets tlib_community_id "your-unique-id" in server.cfg so callsigns do not bleed between servers.
Battery and signal
Battery charges 0.5%/s in any vehicle and drains 0.1%/s on foot: about 3 minutes to full, 17 to empty. Low battery is warning-only — at 0% the radio stays powered and connected, chirping under 50% and more often under 30%. Vehicle-mounted models show no battery icon.
Signal bars (1–5) reflect distance from the nearest signal tower, but position matters too: indoors costs signal, a tunnel most, a car body a little, an aircraft gains reach.
With Signal Degradation on — it ships off — weak signal narrows the band, lowers the volume, coarsens the audio and inserts brief dropouts.
| Bars | At default settings |
|---|---|
| 5 | Clean — no degradation |
| 4 | Clean — no degradation |
| 3 | First noticeable: thinned and muffled, roughly 350 Hz – 2.45 kHz |
| 2 | Clearly degraded — telephone-tight, artifacts, occasional dropouts |
| 1 | Nearly unusable — extreme filtering, heavy dropouts, below half volume |
Most players stay between 3 and 5 bars all session. To make degradation noticeable, raise Falloff Rate or leave gaps between towers — Degradation Intensity does nothing on full bars. The weaker of the two signals applies.
Direct channels
A conventional channel can be Direct (simplex): radio to radio, no repeater. The LCD shows a |→| icon.
- You hear only units close enough to you. Default range is 1500 m, less through buildings
- Channel busy is your own radio's view. Another unit can be transmitting elsewhere
- Signal bars show what you are receiving, not coverage
- Dispatch may not be there — only if the channel has a base radio
- Direct channels are never trunked, patched or in an announcement group
Range and obstruction are set per channel — see Direct / simplex channels.
3D audio
These are two different switches with two different scopes. Enable 3D Audio is server-wide: with it off, no radio is heard positionally anywhere. Earbuds is each player's own setting, and it decides only whether their radio is heard by the people around them.
With 3D audio on server-side, nearby players hear your radio from your position: Earbuds off is audible within 35 m by default, Earbuds on emits nothing. A configured earpiece item switches earbuds on automatically.
With Vehicle 3D Audio on, a vehicle carries your radio as its source — but only if you are driving an emergency vehicle (class 18), one owner at a time. Your traffic comes out of the car within 60 m, and keeps doing so from where it is parked after you walk away.
Riding along — the car's radio
On foot you operate your own portable. In the front seats of a car it is the car's, and two people there operate the same radio.
- Both of you are on the channel, transmitting under your own callsigns
- Either of you can work it — channel, zone, power, scan
- Whoever gets in second adopts whoever was there. A driver always takes over
- Getting out hands your radio back. A driver leaving you alone in the car does not
Volume, audio settings and open menus stay yours alone. Driver and front passenger only. The same codeplug checks apply, so your radio never follows the driver onto a talkgroup you do not carry.
The dispatch panel
Three ways in, all the same panel: in game with /tradio, in a browser, or in the desktop app. Log in with the dispatchNacId from config.lua, or Discord. Sessions last 24 hours.
In game
/tradio → Dispatch Panel in the sidebar, or Admin Panel with the tradio.admin ACE. /dispatch and /radioadmin no longer exist. Two things differ in game: Discord login is unavailable when exposeWeb = false, and there are no pop-out windows.
Desktop app or browser
The desktop app gives you global push-to-talk, which a browser cannot do while you are alt-tabbed into the game. Download it from Settings → Desktop App → Download and enter your server URL; it auto-updates with the server.
It is single-instance, so clicking the shortcut again raises the existing window. Closing the window quits the app by default; Settings → Minimize to Tray on Close keeps it running, with Quit on the tray menu. A flat gray rectangle in OBS means BitBlt — choose Automatic.
Choosing your microphone
Settings → Microphone picks the input the panel transmits from. Set this explicitly — on System default it follows whatever Windows calls the default, often a webcam or a switched-off headset. A panel that shows you transmitting while nobody hears you is almost always on the wrong input.
Working the board
| Control | What it does |
|---|---|
| Transmitting | Hold T or the header PTT. Each channel card has its own hold-to-talk button and optional PTT key |
| Units | Drag a user between channels. The row menu disconnects, alerts, or sets a callsign |
| Alerts | Trigger one from the channel menu, or compose a free-text Broadcast Alert |
| Emergencies | A unit flashes with an ALARM, CALL or SILENT badge, and each row has ACK and Clear |
| Frequency patching | Bridge channels so every patched unit hears the others. A P badge marks each, and patches survive a restart. Trunked channels cannot be patched |
| Announcement groups | A GROUPS bar appears when one exists. Arm one and your next PTT reaches every channel in it |
| Trunked channels | Monitor the control frequency for the whole talkgroup, logged as one entry |
| Transmission log | Timestamps, frequencies and callers, emergency traffic marked EMERG. Filter, replay, collapse or pop out |
| Speakers | Pick a tone, then press a speaker or group. See Speakers |
| Settings | Callsign, volumes, PTT bindings, theme, log, auto-collapse, Radio FX, app download |
Settings → Radio FX adjusts incoming voice for you alone, applies as you move each control, and is remembered per server. Cancel does not undo it — use Follow server. Players have the same thing in game.
Themes
Five themes ship built in, in Settings → Theme: Dark Minimal (default), Dark, Dark Blue, Basic and Basic Dark.
More install from Admin Panel → Marketplace → Themes. Building one is Dispatch panel theming.
Talking to the AI dispatcher
Some channels may be covered by an AI dispatcher that sounds like any other transmission. Say the wake phrase, by default "dispatch" — anything else is heard and remembered but not answered.
K31: Dispatch, K31.
Dispatch: Go K31.
K31: Traffic stop, black Sultan, two occupants, Vespucci Boulevard.
Dispatch: Copy K31, traffic stop on Vespucci.
- It knows the channel — who is on it, your callsign and status, distances, recent traffic
- One exchange at a time. Key up mid-answer and you are acknowledged next
- It can act — raise an alert, send a tone, patch channels, relay to another channel
- It stands down for a human and resumes when they leave
- It can call you. New 911 calls go out assigned to the nearest unit
Its callsign, channels and manner are server settings — see AI dispatcher.
911 calls
Civilians call 911 and land in a queue on the dispatch panel. On accept, caller and dispatcher get a private voice channel. Anyone can call — no radio or codeplug needed. It ships off: turn it on in Settings → General → 911 Calling.
/911 -- dial with no details
/911 shots fired at the bank -- dial with a message for the dispatcher
The message caps at 200 characters. The dispatcher sees it with the caller's number, unit ID, position and wait time.
The caller hears a ring-out tone until answered, then the radio powers on and a 911 banner appears. Speech is hands-free, using voice activity detection rather than PTT. Press ESC to hang up.
| Dispatcher control | Effect |
|---|---|
| Accept | Puts you on a private voice channel with the caller |
| Listen | Adds the call to your scan list |
| Talk | Press-and-hold cross-channel PTT on the call |
| Focus | Points your main PTT key at this call |
| End | Hangs up. Available to any dispatcher |
Timeouts. An unanswered call expires after 5 minutes; after accept the caller has 20 seconds to connect, and an empty channel for 15 seconds counts as hung up. Players are rate-limited 30 seconds between calls.
When nobody is on the panel the call still queues, and call911NoDispatcherFallback fires immediately — by default a chat broadcast to everyone with radio access. See 911 hooks.
Radio models and appearance
Eleven models ship. The radio picks one per context, and each context remembers its choice.
| Context | Default model |
|---|---|
| On foot, focused | QRX-720 |
| On foot, unfocused | QRX-720H — only with Separate On-Foot Focus Layout on |
| Ground vehicle | HLX-120 |
| Watercraft | HLX-120G |
| Air vehicle | KVD-880 |
Folder names, for a codeplug's allowed models:
| Model | Form factor |
|---|---|
QRX-720 | Portable handheld — on-foot default |
QRX-720H | Portable handheld — unfocused variant |
QRX-720G | Portable handheld — alternate body |
QRX-760 | Portable handheld — modern slim |
DRX-330 | Portable handheld — compact |
SWX-250 | Portable scanner — twin channel heads |
ZTR-540 | Mobile control head — squared body |
ZTR-540S | Mobile control head — squared, slim |
HLX-120 | Dash-mounted — in-vehicle default |
HLX-120G | Dash-mounted — watercraft variant |
KVD-880 | Aviation radio — in-air default |
A codeplug sets which models a player may pick under Allowed Models and Default Layouts, including overrides per spawncode and livery. Each model opens at its own size until a player resizes the radio; Reset Position clears that. Install more from Marketplace → Layouts, no restart.
Vehicle radio props
Admins with tlib.admin place a dashboard radio prop per vehicle model. Sit in the vehicle and pick 3D Prop Editor from /tradio's sidebar.
| Input | Action |
|---|---|
| Middle mouse + drag | Orbit |
| Shift + middle mouse + drag | Pan |
| Scroll wheel | Zoom |
| W / R | Translate mode / rotate mode |
| X | Toggle world and local space |
Drag the arrows to move and the rings to rotate. Save applies to every client immediately; Export Config copies the placement block.
Animations
Players pick their animation in /tradio → Appearance → Animation. Four ship, on native GTA dictionaries.
| Name | PTT pose | Radio-open pose |
|---|---|---|
| None | — | — |
| Shoulder | random@arrests / generic_radio_enter | cellphone@ / cellphone_call_to_text + hand radio prop |
| Handheld | cellphone@ / cellphone_call_to_text + hand radio prop | same |
| Earpiece | cellphone@ / cellphone_call_listen_base | — |
A fifth, Call911, plays for the caller side of a 911 call. Animations are suppressed while driving, piloting or holding a weapon.
Adding your own
Add entries to Config.animations in config/cl_functions.lua. Each needs a name, an onKeyState(isKeyDown) handler and an onRadioFocus(focused) handler; either may be empty. RadioMakeAnimHandler(dict, anim, prop) builds a standard one.
[6] = {
name = "Chest Mic",
onKeyState = RadioMakeAnimHandler("random@arrests", "generic_radio_enter", nil),
onRadioFocus = RadioMakeAnimHandler("cellphone@", "cellphone_call_to_text", "prop_cs_hand_radio"),
},Find prop names at forge.plebmasters.de/objects. Index [1] is the fallback when a saved choice no longer exists. "qrx720" is the only prop whose screen and LED come alive while held.
Placing the prop yourself. Pass a table instead of a model name; bone and placement are optional.
[9] = {
name = "Walkie Talkie",
onKeyState = RadioMakeAnimHandler(
"missfbi3_steve_phone",
"steve_phone_idle_a",
{
model = "prop_cs_hand_radio",
bone = 28422,
placement = { 0.1300, 0.0500, 0.0100, -113.0000, 0.0000, -60.0000 },
}
),
onRadioFocus = function(focused) end,
},Using rpemotes. Call exports["rpemotes"]:EmoteCommandStart("wt4", 0) and EmoteCancel(true) from your own handler. Check RadioShouldSuppressAnim(ped) first — it returns true while driving or armed.
Using a custom .ycd pack. Copy the files under rpemotes/stream/. The .ycd filename is the dictionary name; find the clip with OpenIV or CodeWalker. Register it in rpemotes/client/AnimationListCustom.lua — never edit AnimationList.lua — then add a Config.animations entry calling that emote and restart rpemotes, then tRadio.
Installed animation packs
Marketplace packs install live, but the animations become playable only after tRadio restarts. Until then they stay out of the picker. Your own entries always win over a pack animation of the same name.
Define this hook to gate or wrap an installed animation:
function Config.onMarketplaceAnimation(entry, info)
-- entry = { id, name, hidden, onKeyState, onRadioFocus }
-- info = { slug, pack, animId,
-- keyState = { dict, clip, prop },
-- radioFocus = { dict, clip, prop } }
--
-- Return nothing -> use it unchanged.
-- Return false -> drop it; it never appears in the picker.
-- Return a table -> use that instead.
if info.slug ~= "swat-poses" then return end
local inner = entry.onKeyState
entry.onKeyState = function(isKeyDown)
if isKeyDown and not PlayerIsOnDuty() then return end
inner(isKeyDown)
end
return entry
endRadioMarketplaceClip(slug, animId, slot) returns { dict, clip, prop } for an installed animation, or nil; slot is "keyState" or "radioFocus". Never write a pack's dict down — it is renamed on install, so ask for it.
local slot = RadioMarketplaceClip("swat-poses", "shoulder-mic", "keyState")
if slot then
Config.animations[#Config.animations + 1] = {
name = "SWAT (duty only)",
onKeyState = RadioMakeAnimHandler(slot.dict, slot.clip, slot.prop),
}
endStream Deck
The official plugin turns an Elgato Stream Deck into a live radio panel, driving both the in-game radio and the dispatch panel with no separate app. Stream Deck Mobile and OpenDeck work too.
Setup
Install the plugin
Elgato Stream Deck: double-click the .streamDeckPlugin file. OpenDeck: plugin menu → install from file, plus its Node.js runtime.
Add actions to keys
Find tRadio in the actions list and drag actions onto keys, or onto dials on a Stream Deck +.
Pick a target
Each control action has a Target: Radio, Dispatch or Auto. Channel actions pick from a live list.
Start tRadio
Keys populate once their source connects: radio keys need you in game, dispatch keys need the panel open.
Actions
| Key | Shows or does |
|---|---|
| Radio Status | Zone, channel, talk/scan status, signal bars, and scan / trunk / patch / GPS / secure flags. Red on panic |
| Talk Indicator | Amber for you, green for your channel, cyan for a scanned hit — with the talker's name |
| Scan Indicator | Lit while scanning; flags scanned-channel hits |
| Dispatch Activity | The dispatcher's channel and zone, units keyed up, and TX/RX |
| 911 Queue | How many calls are waiting — red with the count |
| Radio Control | One flexible key: PTT, next/previous channel or group, power, overlay, emergency, volume, accept/end 911 |
| Channel | Act on one channel: Connect, Toggle Transmit, Talk on Channel (hold), or Toggle Scan |
| Volume dial | Rotate for Master / SFX / 3D volume, press to mute |
| Channel dial | Rotate to step channels or groups, press and hold to transmit |
A channel key keeps its selection through disconnects, reloads and deck restarts.
Next steps
- Change what players get — zones, channels, codeplugs, alerts: Configuration
- Restyle the dispatch panel: Dispatch panel theming
- Something is not behaving as described here: Troubleshooting
Tommy's Radio
Still stuck? Support can answer it directly.
Was this page helpful?
TIMMYG Studios