All pages
Powered by GitBook
1 of 10

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Integrations

Learn more about our official integrations with Sonoran Radio!

Sonoran CMS

Automate Sonoran Radio permissions with Sonoran CMS!

Sonoran CMS x Sonoran Radio

Sonoran CMS makes managing your community's radio easy and automatic!

  • Sync radio permissions and channel access via CMS ranks and Discord Roles

  • Sync radio display names via CMS and Discord names

Learn more about Sonoran CMS!

Stream Deck Plugin

Sonoran Radio's official Stream Deck plugin gives you faster, customizable control over channels, volume, presets, and more.

Introduction

Sonoran Radio's MacOS and Windows desktop applications offer direct integration with Stream Deck hardware. By installing our official Stream Deck plugin, users can change channels, toggle preset channel groups, change channel and system volumes, and more - faster than ever before.

Don't have a physical Stream Deck? Download the free Stream Deck Mobile app!

Installation

1. Download and Install the Plugin

Download the official Sonoran Radio Stream Deck plugin from the Elgato Marketplace.

2. Configure Actions

Using the Stream Deck desktop application search for Sonoran Radio in the Keys and Dials sections.

Drag-and-drop an action category to the Stream Deck. Select the action to update the sub-type.

Ex: Channel key type > Toggle XMIT Channels > Select Channels

3. Optional: FiveM Integration

Each action can be configured to control the desktop app (default) or FiveM in-game resource.

For clients using the in-game radio in FiveM, simply toggle each action from Desktop to FiveM.

Sonoran Radio then acts as a local bridge between the Stream Deck, the desktop app, and the FiveM radio. The desktop app must be running, but does not have to have any radio community open or selected.

  1. Stream Deck sends the action to Sonoran Radio Desktop on localhost

  2. Sonoran Radio Desktop forwards the command to a localhost WebSocket

  3. your FiveM client script listens to that socket and forwards the event into the radio iframe/NUI

  4. the iframe/NUI sends radio state snapshots back through your FiveM client script to Sonoran Radio Desktop

  5. Stream Deck reads those snapshots for channel lists, labels, and action state

This means the normal setup for users is:

  • keep Sonoran Radio Desktop running

  • switch the Stream Deck action target to FiveM

  • run a FiveM client script that connects to the desktop socket and forwards the documented messages

4. FiveM Developer Setup

If you are implementing the FiveM side yourself, use the documented developer contract here:

Stream Deck API

Capabilities

Keys

Channel Category Buttons

Channel actions allow you to do somethin

  • Next Group

  • Previous Group

  • Next Channel

  • Previous Channel

  • Toggle XMIT Channels

    • Select one or more channels

    • Toggling this action will add and remove the selected channel(s) from your transmit list

  • Temporary XMIT Channel

    • Select a channel

    • Pressing this action will temporarily transmit in the selected channel and return to your previous channel(s) after release

  • Toggle Scan Channels

    • Select one or more channels

    • Toggling this action will add and remove the selected channel(s) from your scan list

Toggle Category Buttons
  • Push to Talk

  • Toggle AI Mode

  • Toggle Tone Board

Audio Category Buttons
  • Volume Up

  • Volume Down

  • SFX Volume Up

  • SFX Volume Down

  • AI Volume Up

  • AI Volume Down

Desktop Category Buttons
  • Connected Users Overlay

  • Focus Radio Overlay

  • Toggle Radio Overlay

Dials

Stream Deck hardware with dials have the following supported actions:

Dial Options
  • Cycle Groups (Prev/Next)

  • Cycle Channels (Prev/Next)

  • Adjust Volume

    • Optional Press to Mute

  • Adjust SFX Volume

    • Optional Press to Mute

  • Adjust AI Volume

    • Optional Press to Mute

  • Adjust Current Channel Volume

    • Optional Press to Mute

Dispatch AI

Speak to our AI dispatcher over the radio to manage CAD status, dispatch calls, run record lookups, and more.

This feature is in a public BETA state.

Services may be intermittent and unreliable. Some features may experience issues.

Dispatch AI is not yet approved for full, production use. Utilize dispatch AI at your own risk.

This feature requires both Sonoran CAD Pro and Sonoran Radio Pro.

Learn more about our paid subscription plans.

Setup Video

Setup Documentation

1. Copy Sonoran CAD API Information

Copy Sonoran CAD API Information

Dispatch AI requires a Sonoran CAD community ID, API key, and server ID.

The community ID and API key are located in the Admin panel > Advanced > In-Game Integration > Web API.

The server ID can be found in the Admin panel > Customization > Servers. The default server ID is 1.

2. Create an Open AI API Key (BYOK)

Open AI API Key

Currently, dispatch AI runs on a bring-your-own-key (BYOK) system for AI usage billing. This allows communities to maintain granular control of their AI expenses with OpenAI as a third-party. This system is subject to change in the future.

Sonoran Software Systems is not responsible for any unexpected or excess charges incurred from OpenAI or other third-party AI service providers. Communities are strongly encouraged to set spending limits, enable billing alerts, and actively monitor AI usage to ensure costs remain within approved thresholds.

Because OpenAI and all other AI providers are a third-party, Sonoran Software Systems has no ability to offer refunds or reduced rates for AI costs.

View the OpenAI API Key process here.

In the current beta, dispatch AI relies on the following models:

  • gpt-realtime-mini

  • gpt-5-nano

  • gpt-4o-mini-transcribe

  • gpt-4o-mini-tts

3. Link CAD In Radio

Link CAD In Radio

In the radio Customization panel > Info > Select a server (or create one) and click on the Sonoran CAD icon. This will open a popup modal to enter in your CAD's community ID, API key, and server ID. Additionally, paste in your AI API key from the previous step.

4. Prompt Customization

AI Prompt Phrases

The AI has a set of tools it can use to take action in the CAD and on the radio—such as running lookups, creating calls, or updating statuses.

Radio traffic varies by community. One agency might say, “show me out on traffic with a blue sedan,” while another says, “create a traffic stop call with a blue sedan.”

Prompt phrase customization lets you train the AI to map your agency’s specific radio language to the correct system actions, so it responds appropriately to local lingo.

Keep your phrases short and direct. Adding too many phrases can eventually overload the AI's context window.

Invoke the AI

When first connecting to the radio, if you are the only user in the room, the AI agent may take up to 30 seconds to join.

When the agent has joined, a brief "Dispatch Online" audio will play.

Via Wake Work

When pressing your push-to-talk key, a local AI listens to your microphone feed for the customizable wake word. By default, this is Dispatch.

Users can customize their wake word by pressing the microphone button and speaking their custom wake word.

Communities can also customize the default wake word for all users.

Prompting the AI

In order to reduce false triggers and conserve local resources, the AI will only listen to the first five seconds of your transmission. This amount can be modified in the Advanced tab of the Audio settings.

Upon detection of the wake word, an audible beep indicates that the AI has been activated. Users may begin speaking before the beep is heard, as long as the tone occurs at some point during the same transmission.

Example

If your wake word is Dispatch, then your transmissions to the AI would be as follows:

<wake word>, <optional: my unit number>, <action to do> &#xNAN;Dispatch, A-10, mark me as available. &#xNAN;Dispatch, A-10, run a lookup on the license plate ABC123

Via Hotkey (Web and Desktop)

Web and desktop users can also set a customizable hotkey in the settings menu. Pressing this keybind will enable the AI (same as the wake word) for your transmission.

FiveM: Via Hotkey

FiveM users can also set a manual keybind in the settings. Pressing this keybind will enable the AI (same as the wake word) for your transmission.

Enable/Disable the AI

Manually

The AI can be manually toggled on or off via the CAD link page.

Auto Disable w/Human Dispatcher

The AI can be automatically disabled whenever an active dispatcher is in the CAD.

When this feature is enabled, the AI will check for a dispatcher once per minute.

AI Commands & Features

CAD Functionality

CAD Status

The AI can update the status of you and other units to the stated, customizable status code.

Dispatch, A-10, mark my status as available. &#xNAN;Dispatch, A-10, set B-11 and I to 10-8.

CAD Lookup

The AI agent can perform a name or plate lookup, send the results to your CAD, and notify you of brief details.

Dispatch, A-10, run a lookup on the plate ABC123. &#xNAN;Dispatch, A-10, do a record check on first name John last name Doe.

CAD Dispatch Calls

Create Call

The AI can create a call and assign your unit. If your unit has a location, it will be automatically applied to the call unless otherwise specified. If a license plate is provided, it will automatically run a plate lookup and send the results to your CAD.

Dispatch, A-10, show me out on traffic with a blue four-door sedan. License plate ABC123.


Attach to Call

The AI can attach you and other units to an existing call by mentioning the call ID, location, postal, title, etc.

Dispatch, A-10, attach me to the robbery in progress call. &#xNAN;Dispatch, A-10, attach B-11 to my call.


Call Notes

The AI can add a note to your active dispatch call for other units to see.

Dispatch, A-10, add a note on the call that I am arriving on-scene now, it's a white vehicle.


Detach from Call

The AI can lookup your current dispatch call and remove you from it.

Dispatch, A-10, clear my call.


Close Call

The AI can lookup and close your current dispatch call. &#xNAN;Dispatch, A-10, close my call.

CAD Unit Groups

Group Units

The AI can add your unit (and others) to a new or existing group.

Dispatch, A-10, add me to group 'Ladder 12'. &#xNAN;Dispatch, A-10, add myself and B-11 to group 'Ladder 12'.


Clear Unit Group

The AI can remove your unit (and others) from a group.

Dispatch, A-10, clear my unit group. &#xNAN;Dispatch, A-10, remove B-11 and I's unit group.

CAD Panic

Dispatch, A-10, toggle my panic status.

The AI agent will enable or disable your panic status.

FIveM: Emergency Call Readout

In the Radio Zones menu, you can create custom zones and assign radio channels to each. When a 911 call is generated in CAD, the AI automatically creates a new dispatch call, reads the call over the channels configured for that zone, and removes the 911 call.

FiveM: GPS Route to Postal

In order to route your GPS to a postal code, the Nearest Postal resource is required. Or, another resource that can handle the command /postal <id>.

The AI can draw an in-game GPS route to a postal code on the map.

Raw Postal:

Dispatch, A-10, route me to postal 123. &#xNAN;Dispatch, A-10, directions to postal 123.


Postal on a Dispatch Call

The AI can find an active dispatch call based on the ID, location, title, etc. &#xNAN;Dispatch, A-10, route me to call 123. &#xNAN;Dispatch, A-10, route me to the traffic stop call.

FiveM: GPS Route to Unit

The AI will route you to the coordinates of another active unit by providing their unit name, number, etc.

Dispatch, A-10, route me unit B-11. &#xNAN;Dispatch, A-10, directions to unit J. Doe.

FiveM: Auto-Status on GPS Route + Arrival

This feature requires the Nearest Postal resource version v1.5.4 or newer.

When the AI routes a user to a specific postal code or GPS coordinate (unit location) it will automatically set your status as en-route. Upon arrival, the AI will automatically mark your status as on-scene.

The radio resource's config.lua contains Config.autoOnSceneStatus with options to tweak the settings.

Radio Functionality

Coming soon!

Settings

AI Volume

The AI's reply volume can be changed in the settings menu.

Hear AI Replies

By default, users hear AI replies directed to anyone in their primary or scanned channel. The radio setting allows you to switch from hearing AI replies for all users to hearing only replies addressed to you.

AI Keys

Integrate Sonoran Radio with OpenAI.

Sonoran Radio AI

Sonoran Radio integrates with OpenAI to add additional features and functionality. Each feature can be easily enabled or disabled and have separate AI keys for optimal billing transparency.

Generating an Open AI Key

1. Login to the Open AI Platform

Navigate to platform.openai.com and create an account.

At the top left, select Create Project for a new category of Sonoran Radio API keys.

OpenAI: Create Project
OpenAI: Name Project

2. Add Billing Information

OpenAI charges based on usage for each model. You will need to add payment information for AI usage.

Navigate to Settings > Billing > Add payment details to add a credit or debit card on file. Once added, you can manually add credits and set billing limits.

OpenAI: Payment Details
OpenAI: Payment Limits

3. Generate an API Key

With the new project selected, navigate to API Keys > Create new secret key

Give the new API key a name (we recommend a separate key for each AI feature for optimal billing transparency) and select your Sonoran Radio project.

You can also restrict each key's model access based on the specific feature's requirements.

OpenAI: Generate Key
OpenAI: Generate Key

4. Add your API Key to Sonoran Radio

In Sonoran Radio, navigate to Customize > AI > toggle on and paste in your new OpenAI API key for the specific feature.

Sonoran Radio: OpenAI API Keys

AI Options

Dispatch AI

Dispatch AI offers in-depth integration to manage Sonoran CAD unit statuses, lookups, call creation, emergency calls, and more.

Model Requirements (OpenAI)

  • gpt-realtime-mini

  • gpt-5-nano

  • gpt-4o-mini-transcribe

  • gpt-4o-mini-tts

Transmission Log STT (Speech-To-Text)

Transmission logs enable dispatchers to review and replay previous transmissions. With AI integration, these logs are enhanced with text transcripts, making it easier to search, reference, and analyze past communications efficiently.

Model Requirements (OpenAI):

whisper-1

Sonoran CAD Integration

Integrate the Radio with your Sonoran CAD!

Sonoran Radio CAD Plugin

To enable integrations between Sonoran CAD and Radio, simply enable the sonrad (Sonoran Radio) submodule in your CAD resource.

Integration Features

Panic Toggle

CAD Panic Toggle

Triggering your Sonoran Radio panic (by pressing the yellow button at the top of the radio) will also toggle your panic status in Sonoran CAD.

Dispatch Call Information

Dispatch Call Information

When attached to a Sonoran CAD dispatch call, the radio will display a red call info box and set the top status bar to red. Click the call title to expand and collapse the information.

Sonoran Radio x CAD Call Information
Call Information - Expanded

Live Map Blips

Live Map Radio Tower Information

Sonoran Radio towers will be displayed on the CAD live map.

Select one of the blips to view it's repeater type and health.

Display Name Sync

CAD To Radio Display Name

Automatically set your radio's display name based on your CAD unit information.

In the sonorad submodule's configuration file, set config.syncRadioName.enabled to true and customize the formatting in config.syncRadioName.nameFormat.

Vehicle Radio Display

View Sonoran Radio on a working, in-vehicle 3D display!

Vehicle Radio Display (Video Tutorial)

The vehicle radio display is a free Tebex script fully compatible with the free version of Sonoran Radio.

Sonoran Radio - Vehicle Display

Installation (Written)

1. Download the Script

"Purchase" the free .

Once purchased, see:

2. Install the script

A. Extract Folders

Extract the script's two folders (sonoran-radiodisplay and sonoran-radiodisplay_helper) to a folder in your server's resources folder called [sonoranradio].

B. Rename Config Files

Inside of the sonoran-radiodisplay folder:

  • Rename config.changeme.lua to config.lua

    • See more about the here.

  • Rename radios.changeme.json

C. Start the Resource

To start the display resource and give the auto-updater permissions to run, paste the following into your server.cfg

Configuration

The config.lua file allows you to customize the labels, ACE permissions, and more!

Default config.lua

Spawning the Radio Display

Use the /radiodisplay command while in a vehicle to spawn a new display.

  • Use the keys displayed at the bottom of your screen to move and rotate the display into position.

  • Select Attach to attach the display to your vehicle.

    • See the Config.acePerms.aceObjectUseMenu for permission restrictions.

radios.json Property Explanation

Property Name
Example
Notes

Commands

Command Name
Command Description
Required Permissions

Default Vehicles

Vehicle Spawncode
Adds Radio by Default

Additional Display Resources

Loving the radio display? Check out our and displays!

Changelog

v1.0.1

  • fix: Duplicate radio items when a passenger is in the vehicle

v1.0.0

  • Initial Release

Big Daddy Radio Animations

Sonoran Radio is partnered with Big Daddy Scripts to offer a FREE copy of their radio animations script!

Sonoran Radio x Big Daddy Scripts

What is this offer?

This script requires the pro version of Sonoran Radio standalone.

Big Daddy's radio animation script enhances your Sonoran Radio experience by adding new in-game animations. As one of the most popular scripts of its kind, it offers versatile options based on where your radio is positioned—whether on your chest, shoulders, or handheld. This provides a more immersive and personalized interaction.

Download and Installation

1. Download the Script and Product Key

Create an account and from Big Daddy Scripts.

In the account portal, select your recent order and copy the product key.

2. Install The Script

A. Extract

Extract the script to your server's resources folder.

B. License Key

In the settings.ini file, paste your license key.

C. Ensure the Resource

In your server.cfg file, add the following line after your Sonoran Radio resource lines:

Sonoran Radio will automatically detect the script named BigDaddy-RadioAnimation, and disable the default Sonoran Radio animation (disableAnimation from the config.lua)

3. Enjoy!

Once in-game, you can use the /radioanim command to open up the customization menu.

This script will automatically detect when you are talking on your Sonoran Radio.

FiveM Inventories

Sonoran Radio integrates with FiveM inventory systems for physical radio and scanner items.

QBCore

QBCore inventory support for the radio and radio scanner items is automatically detected.

Configuration

Inventory Restriction

To restrict radio and scanner access to users with the radio item in their inventory, set config.enforceRadioItem to true.

Inventory Item

Customize your radio and scanner items in your config.lua's Config.RadioItem and Config.ScannerItem objects.

Config.Lua Properties

Supported Inventories (QBCore)

Currently, the following QBCore inventories are supported:

  • QBCore Inventory

  • OX Inventory

  • QS Inventory

  • Core Inventory

Qbox

Configuration

Inventory Restriction

To restrict radio and scanner access to users with the radio item in their inventory, set config.enforceRadioItem to true.

Inventory Item

Qbox requires you to manually add the following to your /ox_inventory/data/items.lua file. The config.lua's Config.RadioItem and Config.ScannerItem can not be used with Qbox.

Ox Inventory Items File

Supported Inventories (Qbox)

Currently, the following Qbox inventories are supported:

  • OX Inventory

Known Issues and Limitations

OX Inventory

OX Inventory Bugs and Limitations

QBCore Support

QS Inventory

QS Inventory Bugs and Limitations

Official Support

While QS inventory has not been officially tested with Sonoran Radio, customers have reported it working with full functionality. Report any issues on our .

FiveM Phone Scripts

Sonoran Radio integrates with FiveM phone scripts to allow players to call Sonoran Radio emergency service dispatchers right from their phone

LB Phone

LB Phone support for Sonoran Radio is as easy as changing a configuration variable.

Configuration

  1. In your , set Config.phoneResource to 'lb-phone'.

  2. Ensure you start the lb-phone resource prior to Sonoran Radio.

Usage

In LB Phone, dial 911 () to connect with a Sonoran Radio dispatcher. Press the end call button to hang up.

config.lua
Customize the emergency call number and hide the call banner.
or your customized number
Sonoran Radio: LB Phone Emergency Call
Sonoran Radio: LB Phone Emergency Call
Sonoran Radio Handheld - Panic Button
to
radios.json

Select Apply to all of this vehicle model to have the radio display automatically added whenever the vehicle type is spawned.

  • See the config.lua Config.acePerms.aceObjectAdminUseMenu for permission restrictions.

This is a table that contains the x, y, and z rotation of the radar

Vehicle

POLICE

This is the vehicles spawn code

Bone

-1

This is the index of the bone you would like to attach the radar to

yes

POLICE3

yes

POLICE4

yes

POLICEOLD1

no

POLICEOLD2

no

SHERIFF

yes

SHERIFF2

yes

ID

2

ID must be unique. No other radar can share this ID

Position

This is a table that contains the x, y, and z coords of the radar

/radiodisplay

This command will initiate the radar spawning and attaching process

As configured

FBI

yes

FBI2

yes

POLICE

yes

vehicle radio display from the Sonoran Store
How to download the script from your Keymaster account.
configuration options
config.lua
in-vehicle police radar
radar detector
Radio Display - Folders
Sonoran Store: Radar Display
Sonoran Store: Radar Detector

Rotation

POLICE2

This script also makes users talk on their in-game microphone when they talk on the radio.

To disable this, ensure the Config.talkSync is disabled in the Sonoran Radio config.lua and the TalkSync is set to false in Big Daddy's Animation settings.ini file.

download the latest script resource
See the documentation for more information about configuration options and commands.
Click to learn more about Sonoran Radio standalone!
Big Daddy - Account Panel
Big Daddy - License Key
Big Daddy - Product Key
OX inventory has officially dropped QBCore support in sole favor of the Qbox framework. However, full functionality can still work.
support website
-- Located in the Radio's config.lua
Config.RadioItem = {		 -- Note: Changes to this item will require a server restart to take effect
	name = 'sonoran_radio',  -- Item name in your inventory | STRING
	label = 'Sonoran Radio', -- Label for the item in your inventory | STRING
	weight = 1, 			 -- Weight of the item in your inventory | INT
	description = 'Communicate with others through the Sonoran Radio', -- Description of the item in your inventory | STRING
}
Config.ScannerItem = {
	name = 'sonoran_radio_scanner', -- Item ID
	label = 'Sonoran Radio Scanner', -- Label for the item in your inventory
	weight = 1, -- Weight of the item in your inventory
	description = 'Listen to radio chatter with the Sonoran Radio Scanner', -- Description of the item in your inventory
}
# Start the Radio Display Resource
ensure sonoran-radiodisplay

# Grant permissions to the auto-updater
add_ace resource.sonoran-radiodisplay command allow
add_ace resource.sonoran-radiodisplay_helper command allow
Config = {}

Config.debug_mode = false -- Enable debug mode
Config.configuration_version = 1.0
Config.auto_update = true -- Enable auto updates

Config.lang = {
    addNewRadioHelp = 'Open the menu to begin spawning a new in-car model model',
    vehNotCompatible = 'This vehicle is not compatible with the in-car model placement system!',
    vehAlrRadio = 'This vehicle already has a valid in-car radio!',
    radioMenuHeader = 'Sonoran In-Car Radio',
    creditsPanel = 'Made by',
    spawningSubMenu = 'In-Car Radio Spawning',
    attachingSubMenu = 'Attaching',
    deletionSubMenu = 'Are you sure?',
    radioAttachMenuButton = 'Attach In-Car Radio',
    deleteMenuButton = 'Delete Current In-Car Radio',
    spawnMenuButton = 'Spawn In-Car Radio',
    deletionConfirmationButton = 'Yes, remove from all of these vehicles',
    deletionCancelButton = 'Cancel',
    deletionCancelled = 'In-Car Radio deletion cancelled',
    noRadioFound = 'No In-Car Radio is in this vehicle!',
    modelComboBox = 'Model:',
    vehAlrRadioNoti = '~r~This vehicle already has an In-Car Radio of this type',
    notInVeh = '~r~You must be in a vehicle!',
    vehicleBone = 'Radio - Vehicle Bone',
    object = "Object:",
    vehicleBoneComboBox = 'Vehicle Bone',
    objectName = 'Sonoran In-Car Radio',
    attachButton = 'Attach',
    detachButton = 'Detach',
    confirmPlacementButton = 'Apply to all of this vehicle model',
    cannotGoFaster = '~r~You cannot go any faster!',
    cannotGoSlower = '~r~You cannot go any slower!',
}

Config.commands = {
    carRadioMenu = 'radiodisplay',
    restricted = false -- should the radio display menu be restricted?
}

Config.permissionMode = "ace" -- Available Options: ace, framework, custom

-- Ace Permissions Section --
Config.acePerms = {
    aceObjectUseMenu = "sonoran.incarradio", -- Select the ace for placing new In-Car radios
    aceObjectAdminUseMenu = "sonoran.incarradio.admin", -- Select the ace for placing new In-Car radios into all vehicles of the same model
}

-- Framework Related Settings --
Config.framework = {
    frameworkType = "qb-core", -- This setting controls which framework is in use options are esx or qb-core
    civilianJobNames = {"unemployed"}, -- An array of job names that should be allowed to use the radio menu
    adminJobNames = {"admin"}, -- An array of job names that should be allowed to use the radio menu as an admin
    useCivilianJobListAsBlacklist = false, -- This will treat the civilian job list as a blacklist rather than a whitelist
}

-- Configuration For Custom Permissions Handling --
Config.custom = {
    checkPermsServerSide = true, -- If true the permission event will be sent out to the server side resource, this is recommended
    permissionCheck = function(_, type) -- This function will always be called server side.
        if type == 0 then -- Check permission to use the menu
            return true or false -- Return true if they have admin, return false if they don't
        end
    end
}

Config.general = {
    notificationType = "native", -- Available options: native, pNotify, okokNotify
    useAllowlistAsBlacklist = false, -- If true, the Config.allowlistedCars will be treated as an blacklist
}

Config.allowlistedCars = {
    "POLICE",
    "POLICE2",
    "POLICE3",
    "POLICE4",
    "FBI",
    "FBI2",
    "SHERIFF",
    "SHERIFF2",
}
# Start the sonoranradio resource
ensure sonoranradio

# Permissions for auto-updater (REQUIRED)
add_ace resource.sonoranradio command allow
add_ace resource.sonoranradio_updatehelper command allow

# ----------------NEW----------------
# Big Daddy Radio Animation Script
ensure BigDaddy-RadioAnimation
['sonoran_radio_scanner'] = {
        label = 'Sonoran Radio Scanner',
        description = 'Listen to radio chatter with the Sonoran Radio Scanner',
        weight = 1,
        client = {
            image = 'radio.png',
            remove = function(total)
                if total < 1 then
                    TriggerServerEvent('SonoranRadio::DropItem::Scanner')
                end
            end
        }
    },
    ['sonoran_radio'] = {
        label = 'Sonoran Radio',
        description = 'Communicate with others through the Sonoran Radio',
        weight = 1,
        client = {
            image = 'radio.png'
        }
    },