Troubleshooting
Symptom-based fixes for connection failures, audio problems, microphone issues, dispatch panel errors, and configuration mistakes in Tommy's Radio.
Can't connect / radio won't open
Health check states
When the resource starts, the server logs a health check result. Find the line in your server console:
| State | Meaning | Action |
|---|---|---|
| Green | Both public URL and localhost probes succeeded | None — fully operational |
| Amber (warning) | Localhost passed, public probe failed from this host | Radio works for players. This host can't probe its own public IP (hairpin-NAT, CGNAT, or reverse proxy). Verify from portchecker.co or a phone on mobile data. |
| Red (error) | Both probes failed | Service is not running on the configured port, or another process is answering it — see ECONNREFUSED fix below |
ECONNREFUSED / port closed
Symptom: Console shows:
[Radio-Server] ERROR Health check failed after 4 attempt(s)
[Radio-Server] WARN HTTP endpoint test failed - connect ECONNREFUSEDor players get "Failed to connect to radio server" in-game.
Diagnosis: Go to portchecker.co while the resource is running. Enter your server IP and the port set in config.lua. Open = configured correctly. Closed = port is blocked.
Fix — hosting panel (Pterodactyl-based):
- Confirm the port appears in your panel's Network / Ports / Allocations section
- Do not use port 30120 (FiveM) or 40120 (txAdmin)
- Set both
serverPortandserverAddressinconfig.luato match - Restart the entire server from the panel — not just the resource
- Re-test with portchecker.co
- If the port is still closed, open a support ticket with your host — many providers block ports at the network level even after you add them in the panel
Fix — VPS / dedicated server:
# Ubuntu/Debian
sudo ufw allow 7777 && sudo ufw reload
# CentOS/RHEL
sudo firewall-cmd --permanent --add-port=7777/tcp && sudo firewall-cmd --reloadExpected outcome: portchecker.co reports the port as Open and the health check turns green on the next resource restart.
Invalid URL
Symptom: Console shows Invalid URL on startup.
Cause: serverAddress in config.lua is malformed (missing protocol, trailing slash issues, or a placeholder value).
Fix: Set serverAddress = "" to let the resource auto-detect, or use the exact format http://YOUR_IP:YOUR_PORT.
Expected outcome: No Invalid URL error on next restart.
xhr poll error
Symptom: Browser console or in-game console shows xhr poll error.
Cause: The port is not reachable from the internet — the socket transport cannot establish a connection.
Fix: The port is blocked. Follow the ECONNREFUSED steps above to open it.
No audio / can't hear transmissions
No voice at all
Symptom: PTT triggers but no one can hear anything, or you can't hear others.
Cause: The player's codeplug does not include the channel being used.
Fix: Verify the codeplug assigned to the player has the channel ID in its channelIds list. Alternatively, grant the ACE permission tRadio.connect.{freq} where {freq} is the channel frequency.
Expected outcome: Voice is audible on the channel after reconnecting.
No background/transmission effects
Symptom: Voice transmits but no static, tone, or radio character is heard.
Fix: In the admin panel, enable playTransmissionEffects. Also confirm radioFx.fxEnabled (analog) or radioFx.p25Enabled (P25) is on.
Expected outcome: Static and tones play on next transmission.
P25 / IMBE vocoder diagnostics
| Symptom | Cause | Fix |
|---|---|---|
| Robotic or warped audio at the very start | WASM vocoder cold-start — normal | No action needed; self-resolves after the first PTT |
| Metallic buzz or warbling throughout | Input clipping from mic gain | Lower the microphone level in Windows Sound settings (Recording tab → Properties → Levels) |
| First syllable always cut off | Normal codec behavior | If severe, increase pttReleaseDelay in the admin panel |
| Dispatch panel hears clean Opus instead of P25 | p25Enabled is false on the server | Set p25Enabled = true in the admin panel and refresh the dispatch panel |
Transmission blocking / bonk tones
| Symptom | Fix |
|---|---|
| Unwanted bonk tones when a player tries to transmit | Disable bonking.playBonkTone in the admin panel |
| Players can talk over each other with no indication | Enable bonking.blockTransmission in the admin panel |
Microphone not working
Wrong device selected
Symptom: PTT key activates but no one hears you; audio visualizer shows no input.
Fix: Open the radio → ST (settings) → microphone setting → select the correct input device from the list.
Expected outcome: Audio visualizer responds when you speak.
FiveM microphone permission denied
Symptom: No device list appears, or the selected device produces no audio.
Fix: FiveM must have been granted microphone access at startup. If you clicked "Deny":
- Close FiveM completely
- Delete the FiveM application cache folder:
%localappdata%\FiveM\FiveM.app\cache - Relaunch FiveM — the permission prompt will reappear
- Click Allow
Expected outcome: Device list populates and microphone input is detected.
Wrong channel / zone access
Can't connect to a channel
Symptom: Channel exists in the codeplug UI but the player cannot join it.
Fix: The codeplug assigned to the player must list the channel ID in channelIds. If not using codeplugs, grant the ACE: tRadio.connect.{freq}.
Scanning not working
Symptom: Scan is enabled but a channel is never picked up.
Fix: The codeplug must list the channel ID in scanChannelIds. Grant tRadio.scan.{freq} as an alternative.
Zone not visible
Symptom: A zone does not appear in the zone selector.
Fix: The codeplug must include the zone ID in zoneIds. Grant tRadio.zone.{N} as an alternative.
GPS blips not showing
Symptom: GPS blips for other players on the channel are absent.
Fix: Check all three: the codeplug has visibleCodeplugs set to include the target codeplug, features.gps is enabled in config, and GPS is turned on in the player's radio settings.
Dispatch panel issues
Desktop app connects to demo server instead of your server
Symptom: The dispatch panel shows activity from strangers, not your players.
Fix: In the desktop app settings, change Endpoint URL to http://YOUR_IP:YOUR_PORT/.
Expected outcome: Panel shows only your server's traffic after reconnecting.
NAC ID not found
Symptom: Dispatch panel asks for a NAC ID but you don't know where to get it.
Cause: The NAC ID is not auto-generated — you define it.
Fix: Set it in config.lua:
Config = {
dispatchNacId = "YOUR_CODE"
}Microphone doesn't work in the browser version
Symptom: PTT in the browser dispatch panel does nothing; no mic access.
Cause: Browsers require HTTPS before they expose microphone APIs. HTTP origins are blocked.
Fix: Either use the desktop dispatch app (no HTTPS requirement), or configure a reverse proxy with a valid TLS certificate in front of the radio server.
Audio quality / FX problems
Analog FX chain tuning
These fields are set in the admin panel under Radio FX:
| Symptom | Field | Adjustment |
|---|---|---|
| Too muffled / telephone-like | lowpassFrequency | Raise to 4000–5000 Hz |
| Too tinny or harsh | highpassFrequency | Lower to 150–200 Hz |
| Volume pumping / breathing | compression | Lower the value |
| Distorted or crackling audio | inputGain | Lower to 0.8–1.2; also check distortion |
After adjusting, transmission effects apply to the next PTT — no restart required.
Config errors
Syntax error <\1> on startup
Symptom: Resource fails to load with a Lua syntax error referencing <\1>.
Two causes:
-
Corrupted file transfer — FTP clients in ASCII mode (FileZilla default) or Windows Remote Desktop drag-and-drop corrupt Lua files. Fix: use WinSCP, or set your FTP client to binary transfer mode. Always transfer the
.zipand unzip on the server — never transfer individual.luafiles. -
Outdated server artifact — build 4752 or higher is required. Check with
versionin your server console.
To update the Linux artifact:
- Download the latest from the Linux build server
- Stop the server; delete the
cacheandalpinefolders - Extract:
tar -xf fx.tar.xz - Restart
Missing .fxap file
Symptom: Resource starts but licensed features don't activate; console may warn about missing escrow file.
Cause: The .fxap file is dot-prefixed (hidden on Linux/macOS) and is commonly excluded by FTP "hide hidden files" settings or by .gitignore rules in CI/CD pipelines.
Fix: Enable "show hidden files" in your FTP client and transfer the .fxap. If using a git-based deploy, ensure .fxap is not in .gitignore.
Signal 100 / can't activate
Symptom: The Signal 100 button does nothing or shows a permission error.
Fix: The triggering player needs the tlib.admin ACE, or must be designated as a supervisor in their codeplug.
Admin panel shows "No authentication method configured"
Symptom: Opening the admin panel shows an authentication error immediately.
Fix: Set adminPassword in config.lua and restart the resource.
Debug logging
Set logLevel in Admin Panel → Settings:
| Level | Output |
|---|---|
| 0 | Errors only |
| 1 | Warnings |
| 2 | Minimal |
| 3 | Normal (default) |
| 4 | Detailed |
| 5 | Verbose |
Levels 4–5 produce extensive output. Use only for active troubleshooting — set back to 3 when done.
Reading the logs: After reproducing the issue at level 4 or 5, look in your server console for lines prefixed [tRadio]. Connection failures appear immediately on startup; audio path issues appear only when a player transmits.
If logs don't resolve the issue: Post in the FiveM Community forum thread with: the full console error block, your config.lua (redact passwords), the log level 4 output captured during the failure, and your server framework (ESX / QBCore / standalone).
