TIMMYG Studios

API Reference

Complete API reference for Tommy's Radio exports, functions, and events.

Server ExportsClient ExportsEvents

Server Exports

Channel Management

getAllChannels()

Get all active channels with user counts.

Returns: table - All channels with active user information

Example Usage
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

Example Usage
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 ID
  • frequency (number) - Target channel frequency

Returns: boolean - Success status

Example Usage
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

Example Usage
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 frequency
  • enabled (boolean) - Signal 100 state
Example Usage
-- 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 frequency
  • serverId (number) - Player's server ID
  • enabled (boolean) - Panic state
Example Usage
-- Activate panic for user on channel
exports['radio']:setChannelPanic(154.755, 1, true)

getChannelSignal(frequency)

Get current Signal 100 state of a channel.

Get Channel Signal
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.

Get Channel Panic
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.

Play Tone on 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.

Play Tone to 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.

Get User 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.

Get User Info
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.

Get Player Name
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.

Check Connection Status
local connected = exports['radio']:isConnected()
-- Returns: boolean indicating connection status

isPowerOn()

Check if radio power is on.

Check Power State
local powerOn = exports['radio']:isPowerOn()
-- Returns: boolean indicating power state

isRadioOpen()

Check if radio interface is open.

Check Radio UI State
local radioOpen = exports['radio']:isRadioOpen()
-- Returns: boolean indicating if UI is displayed

Channel Information

getFrequency()

Get current channel frequency.

Get Current Frequency
local frequency = exports['radio']:getFrequency()
-- Returns: number representing current frequency, or -1 if not connected

getChannel()

Get current channel object.

Get Current Channel
local channel = exports['radio']:getChannel()
-- Returns: table with channel information

getZone()

Get current zone name.

Get Current Zone
local zoneName = exports['radio']:getZone()
-- Returns: string name of current zone

Radio Control

setSignalOnFreq(freq, enabled)

Set Signal 100 state on frequency.

Set Signal 100 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.

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

Set Voice Volume
exports['radio']:setVolume(80)
-- Parameters:
--   volume (number): Volume level from 0-100

setToneVolume(volume)

Set tone volume level.

Set Tone Volume
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.

Example Usage
AddEventHandler('radio:connected', function()
    print('Radio system online')
    -- Initialize radio-dependent features
end)

radio:disconnected

Triggered when radio disconnects from voice server.

Example Usage
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
Example Usage
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
Example Usage
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
Example Usage
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
Example Usage
AddEventHandler('radio:userDisconnected', function(serverId)
    local name = GetPlayerName(serverId)
    print(name .. ' disconnected from radio system')
end)

Usage Examples

Basic Channel Management

Server-Side Channel Control
-- 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

Panic Button Handler
-- 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

Client-Side State Checking
-- 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 or false when radio is disconnected
  • NAC ID checks should handle nil returns gracefully

Example Error Handling

Error Handling Example
-- 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