API Reference
Complete API reference for Tommy's Radio exports, functions, and events.
Server Exports
Channel Management
getAllChannels()
Get all active channels with user counts.
Returns: table
- All channels with active user information
local channels = exports['radio']:getAllChannels()
for frequency, data in pairs(channels) do
print("Channel " .. frequency .. " has " .. #data.users .. " users")
end
getUsersInChannel(frequency)
Get list of users currently in a specific channel.
Parameters:
frequency
(number) - The channel frequency to check
Returns: table
- Server IDs currently on the channel
local users = exports['radio']:getUsersInChannel(154.755)
for _, serverId in ipairs(users) do
print("User " .. serverId .. " is on dispatch")
end
changeUserChannel(serverId, frequency)
Move a user to a different channel.
Parameters:
serverId
(number) - The player's server IDfrequency
(number) - Target channel frequency
Returns: boolean
- Success status
local success = exports['radio']:changeUserChannel(1, 155.475)
if success then
print("User moved to new channel")
end
disconnectUser(serverId)
Disconnect a user from the radio system.
Parameters:
serverId
(number) - The player's server ID to disconnect
Returns: boolean
- Success status
local success = exports['radio']:disconnectUser(1)
if success then
print("User disconnected from radio")
end
Emergency Functions
setSignal100OnChannel(channel, enabled)
Enable or disable Signal 100 on a channel.
Parameters:
channel
(number) - Channel frequencyenabled
(boolean) - Signal 100 state
-- Activate Signal 100 on dispatch channel
exports['radio']:setSignal100OnChannel(154.755, true)
setChannelPanic(frequency, serverId, enabled)
Set panic button state for a user on a channel.
Parameters:
frequency
(number) - Channel frequencyserverId
(number) - Player's server IDenabled
(boolean) - Panic state
-- Activate panic for user on channel
exports['radio']:setChannelPanic(154.755, 1, true)
getChannelSignal(frequency)
Get current Signal 100 state of a channel.
local isSignal100 = exports['radio']:getChannelSignal(154.755)
-- Parameters:
-- frequency (number): Channel frequency to check
-- Returns: boolean indicating if Signal 100 is active
getChannelPanic(frequency)
Get panic button states for a channel.
local panicUsers = exports['radio']:getChannelPanic(154.755)
-- Parameters:
-- frequency (number): Channel frequency to check
-- Returns: table of server IDs with active panic buttons
Audio Management
playToneOnChannel(radioChannel, tone)
Play a tone on a specific channel.
exports['radio']:playToneOnChannel(154.755, "beep")
-- Parameters:
-- radioChannel (number): Target channel frequency
-- tone (string): Tone identifier
playToneOnSource(source, tone)
Play a tone to a specific player.
exports['radio']:playToneOnSource(1, "alert")
-- Parameters:
-- source (number): Player's server ID
-- tone (string): Tone identifier to play
User Information
getUserNacId(serverId)
Get a user's NAC ID.
local nacId = exports['radio']:getUserNacId(1)
-- Parameters:
-- serverId (number): Player's server ID
-- Returns: string NAC ID or nil if not found
getUserInfo(serverId)
Get complete user information.
local userInfo = exports['radio']:getUserInfo(1)
-- Parameters:
-- serverId (number): Player's server ID
-- Returns: table with user data (nacId, name, etc.)
getPlayerName(serverId)
Get player's display name/callsign.
local name = exports['radio']:getPlayerName(1)
-- Parameters:
-- serverId (number): Player's server ID
-- Returns: string formatted name/callsign
Client Exports
Radio State
isConnected()
Check if radio is connected to voice server.
local connected = exports['radio']:isConnected()
-- Returns: boolean indicating connection status
isPowerOn()
Check if radio power is on.
local powerOn = exports['radio']:isPowerOn()
-- Returns: boolean indicating power state
isRadioOpen()
Check if radio interface is open.
local radioOpen = exports['radio']:isRadioOpen()
-- Returns: boolean indicating if UI is displayed
Channel Information
getFrequency()
Get current channel frequency.
local frequency = exports['radio']:getFrequency()
-- Returns: number representing current frequency, or -1 if not connected
getChannel()
Get current channel object.
local channel = exports['radio']:getChannel()
-- Returns: table with channel information
getZone()
Get current zone name.
local zoneName = exports['radio']:getZone()
-- Returns: string name of current zone
Radio Control
setSignalOnFreq(freq, enabled)
Set Signal 100 state on frequency.
exports['radio']:setSignalOnFreq(154.755, true)
-- Parameters:
-- freq (number): Target frequency
-- enabled (boolean): Signal 100 state
panicButton(freq, enabled)
Activate or deactivate panic button.
exports['radio']:panicButton(154.755, true)
-- Parameters:
-- freq (number): Target frequency
-- enabled (boolean): Panic button state
Audio Control
setVolume(volume)
Set voice volume level.
exports['radio']:setVolume(80)
-- Parameters:
-- volume (number): Volume level from 0-100
setToneVolume(volume)
Set tone volume level.
exports['radio']:setToneVolume(15)
-- Parameters:
-- volume (number): Tone volume level from 0-100
Events
Client Events
radio:connected
Triggered when radio connects to voice server.
AddEventHandler('radio:connected', function()
print('Radio system online')
-- Initialize radio-dependent features
end)
radio:disconnected
Triggered when radio disconnects from voice server.
AddEventHandler('radio:disconnected', function()
print('Radio system offline')
-- Handle disconnection cleanup
end)
radio:channelChanged
Triggered when user changes channels.
Parameters:
channel
(table) - New channel information
AddEventHandler('radio:channelChanged', function(channel)
print('Switched to: ' .. channel.name .. ' (' .. channel.frequency .. ')')
end)
radio:emergencyActivated
Triggered when panic button is activated.
Parameters:
frequency
(number) - Channel frequency where emergency was activated
AddEventHandler('radio:emergencyActivated', function(frequency)
print('EMERGENCY on channel: ' .. frequency)
-- Trigger emergency response
end)
Server Events
radio:userConnected
Triggered when user connects to radio system.
Parameters:
serverId
(number) - Player's server ID
AddEventHandler('radio:userConnected', function(serverId)
local name = GetPlayerName(serverId)
print(name .. ' connected to radio system')
end)
radio:userDisconnected
Triggered when user disconnects from radio system.
Parameters:
serverId
(number) - Player's server ID
AddEventHandler('radio:userDisconnected', function(serverId)
local name = GetPlayerName(serverId)
print(name .. ' disconnected from radio system')
end)
Usage Examples
Basic Channel Management
-- Move user to different channel
local playerId = 1
local newFrequency = 155.475
local success = exports['radio']:changeUserChannel(playerId, newFrequency)
if success then
print('User moved to tactical channel')
end
-- Monitor channel activity
local dispatchUsers = exports['radio']:getUsersInChannel(154.755)
print('Dispatch has ' .. #dispatchUsers .. ' active units')
Emergency System Integration
-- Server-side emergency response
AddEventHandler('radio:emergencyActivated', function(serverId)
local nacId = exports['radio']:getUserNacId(serverId)
local playerName = exports['radio']:getPlayerName(serverId)
if nacId == "100" then -- Police unit
-- Activate Signal 100 on dispatch
exports['radio']:setSignal100OnChannel(154.755, true)
-- Notify all units
print('EMERGENCY: ' .. playerName .. ' activated panic button')
TriggerEvent('dispatch:emergencyAlert', serverId)
end
end)
Radio State Monitoring
-- Check radio status before actions
if exports['radio']:isConnected() and exports['radio']:isPowerOn() then
local currentFreq = exports['radio']:getFrequency()
local currentZone = exports['radio']:getZone()
if currentFreq == 154.755 then
print('On dispatch channel in ' .. currentZone)
-- Allow dispatch-specific actions
end
else
print('Radio offline - limited functionality')
end
Error Handling
Important Notes
- Always check return values from export functions
- Server exports may return
nil
if the radio system isn't running - Client exports return
-1
orfalse
when radio is disconnected - NAC ID checks should handle
nil
returns gracefully
Example Error Handling
-- Safe way to get user info
local function getSafeUserInfo(serverId)
local userInfo = exports['radio']:getUserInfo(serverId)
if userInfo and userInfo.nacId then
return userInfo
else
return { nacId = "000", name = "Unknown" }
end
end
-- Safe channel operations
local function moveUserSafely(serverId, frequency)
if exports['radio'] then
local success = exports['radio']:changeUserChannel(serverId, frequency)
return success or false
end
return false
end