Troubleshooting

Symptom-based fixes for connection failures, audio problems, microphone issues, dispatch panel errors, and configuration mistakes in Tommy's Radio.

ConnectionAudioConfig

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:

StateMeaningAction
GreenBoth public URL and localhost probes succeededNone — fully operational
Amber (warning)Localhost passed, public probe failed from this hostRadio 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 failedService 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 ECONNREFUSED

or 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):

  1. Confirm the port appears in your panel's Network / Ports / Allocations section
  2. Do not use port 30120 (FiveM) or 40120 (txAdmin)
  3. Set both serverPort and serverAddress in config.lua to match
  4. Restart the entire server from the panel — not just the resource
  5. Re-test with portchecker.co
  6. 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 --reload

Expected 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

SymptomCauseFix
Robotic or warped audio at the very startWASM vocoder cold-start — normalNo action needed; self-resolves after the first PTT
Metallic buzz or warbling throughoutInput clipping from mic gainLower the microphone level in Windows Sound settings (Recording tab → Properties → Levels)
First syllable always cut offNormal codec behaviorIf severe, increase pttReleaseDelay in the admin panel
Dispatch panel hears clean Opus instead of P25p25Enabled is false on the serverSet p25Enabled = true in the admin panel and refresh the dispatch panel

Transmission blocking / bonk tones

SymptomFix
Unwanted bonk tones when a player tries to transmitDisable bonking.playBonkTone in the admin panel
Players can talk over each other with no indicationEnable 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":

  1. Close FiveM completely
  2. Delete the FiveM application cache folder: %localappdata%\FiveM\FiveM.app\cache
  3. Relaunch FiveM — the permission prompt will reappear
  4. 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:

SymptomFieldAdjustment
Too muffled / telephone-likelowpassFrequencyRaise to 4000–5000 Hz
Too tinny or harshhighpassFrequencyLower to 150–200 Hz
Volume pumping / breathingcompressionLower the value
Distorted or crackling audioinputGainLower 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:

  1. 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 .zip and unzip on the server — never transfer individual .lua files.

  2. Outdated server artifact — build 4752 or higher is required. Check with version in your server console.

To update the Linux artifact:

  1. Download the latest from the Linux build server
  2. Stop the server; delete the cache and alpine folders
  3. Extract: tar -xf fx.tar.xz
  4. 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:

LevelOutput
0Errors only
1Warnings
2Minimal
3Normal (default)
4Detailed
5Verbose

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).

On this page

Need help?

Ask on Discord