Spartan Software Docs
Installation

Installing the FiveM Resource

Learn how to download and install the Spartan Radio system on your FiveM server.

Download & Extract

  • Download the latest Spartan Radio resource from the Spartan Customer Portal.
  • Transfer the .zip file to your host server using your preferred file transfer method.
  • Open the .zip file manually and extract the spartanradio folder from the main archive into your server's resources directory.

Start the Resource

After setting the license key and saving your RMS profile, add ensure spartanradio to server.cfg. Start any framework, inventory resource, or ox_lib used by your chosen settings before Spartan Radio. If authorization fails, check the selected community and license with your POC or support.

Configuring the FiveM Resource

Configure License Key

The license key authorizes the resource and must be set for the radio to start. Get the key from the Spartan Customer Portal or RMS for the selected community.

Config.LicenseKey = "REPLACEME"

Default Keybinds

Default Keybinds for Radio Interaction, can be changed in game. You can set the value to "" to disable the default keybind and only use custom keybinds set in game.

Config.DefaultFocusKey = "F10" -- Default key to open and interact with the radio, can be changed in game. (Default: F10)
Config.DefaultShowUIKey = "F7" -- Default key to display the radio UI, can be changed in game. (Default: F7)
Config.DefaultPTTKey = "F3" -- Default key for Push To Talk, can be changed in game. (Default: F3)
Config.DefaultPanicKey = "F9" -- Default key for Panic Button, can be changed in game. (Default: F9)

Radio Animations

Enable radio animations with true. Players can choose standard radio chatter, chest mic, or handheld styles with /radio anim [1-3].

Config.RadioAnimations = true

The selected animation style is saved locally. Optional clothing rules can override that style while matching gear is worn:

Config.RadioAnimationStyleByClothing = false
Config.RadioAnimationClothingStyles = {
    -- { component = 9, drawable = 12, texture = 0, style = 2 }
}

Use clothing/component values from your own server's outfits.

Tower and Signal Simulation

Use Towers for Signal Simulation, if true the player will lose signal when they are too far from radio towers.

Config.RadioSignalSimulation = false -- Set to true to enable radio signal simulation, set to false to disable radio signal simulation. (Default: false)
Config.RadioTowerMode = "default" -- "Default" for predefined radio tower locations.

Towers.json

You can add or remove custom tower locations using the towers.json file.

[
  {
    "id": "Radio Tower #001",
    "name": "Mt. Chiliad Transmitter",
    "size": "LARGE",
    "zone": "BC",
    "active": false,
    "x": 450.88,
    "y": 5566.83,
    "z": 810,
    "range": 12000
  }
]

Radio Permissions

Choose who should have access to the radio and determine how those permissions should be validated.

Config.RadioPermissions = false -- Set to true to enable radio permissions, set to false to disable radio permissions. (Default: false)
Config.RadioPermissionsType = "" -- ACE: "aceperms". Item access: "ox_inventory" or "qb_inventory". Job access: "qb" (QBCore/Qbox) or "esx_legacy".

-- Radio Permissions Item Settings, only used if RadioPermissions is true and RadioPermissionsType is set to "ox_inventory" or "qb_inventory". You MUST have a radio item in your inventory resource for this to work, set the value to the item name of the radio item in your inventory.
Config.RadioPermissionsItem = "radio"

Config.RadioPermissionsJobs = { -- Active job access for "qb" or "esx_legacy" when RadioPermissions is true.
    ["police"] = 0, -- Job name and minimum grade required to access the radio. (Example: ["police"] = 0 means all police grades have access, ["police"] = 3 means only police grades 3 and above have access)
    ["ems"] = 0
}

ACE Access

Config.RadioPermissions = true
Config.RadioPermissionsType = "aceperms"
Config.RadioPermissionsAce = "spartanradio.access"

Grant your chosen group access in server.cfg, for example add_ace group.police spartanradio.access allow, and assign that group to the intended players. Custom ACE object names must match your grant exactly.

QBCore / Qbox Job Permissions

Set the permission type to "qb" to allow radio access by active job and minimum grade:

Config.RadioPermissions = true
Config.RadioPermissionsType = "qb"
Config.RadioPermissionsJobs = {
    ["police"] = 0,    -- All police grades
    ["ambulance"] = 0 -- Use your server's exact job names
}

Start qb-core (QBCore) or qbx_core (Qbox) before spartanradio. Qbox is detected first and uses its native API, so its QB compatibility bridge is optional. The server checks the player's active job, including job.grade.level; additional Qbox jobs and duty status do not grant or restrict access. Set a job to true to allow any grade, or remove it to deny access. A numeric value such as ["police"] = 3 requires grade 3 or higher.

The "qb" mode does not require a radio item. Use "qb_inventory" for QB inventory item access, or "ox_inventory" for ox_inventory item access on Qbox. Access refreshes on job changes and character login/logout; losing access releases PTT and closes the radio controls. If the framework or player data is unavailable, permission requests are denied.

Codeplug Permissions

Config.CodeplugPermissions = {
    -- QBCore, Qbox, or ESX active job and minimum grade:
    -- ["LSPD"] = { jobs = { ["police"] = 0 } },
    -- ["LSPD"] = { ace = "spartanradio.codeplug.lspd" },
    -- ["SAFR"] = { ace = "spartanradio.codeplug.safr" },
    -- ["Command"] = { ace = "spartanradio.codeplug.command" }
}

Codeplug Bypass

Set Config.BypassCodeplugs = true to make all configured zones/channels available without requiring a codeplug selection. The supplied default is false. Radio access restrictions still apply, but codeplug-based separation is intentionally bypassed.

Use codeplug bypass only when your server intentionally runs a simplified radio layout. Communities using department-specific zones, radio models, or strict codeplug permissions should keep codeplug selection enabled.

Panic / Emergency Controls

Config.RadioPanicHold = true -- Hold the emergency button/key for 2 seconds; false activates on press.
Config.RadioPanicCooldown = 30000 -- Cooldown time in milliseconds for the panic button. Cannot be set to less than 30 seconds. (Default: 30 seconds)

With hold enabled, /radio panic and the menu action prompt the player to hold the emergency button/key; they can still clear an active panic. /radio clearpanic also clears it.

Patch Command Access

Config.PatchCommandPermissions = false
Config.PatchCommandAce = "spartanradio.patch"

With permissions enabled, grant that ACE object to the intended operators. /patch and /radio patch toggle that player's Simplex / Duplex mode on the current channel when it supports this feature in RMS.

Notifications Method

Config.RadioNotifications = true -- Set to true to enable radio notifications, set to false to disable radio notifications. (Default: true)
Config.RadioNotificationType = "" -- "" or "default" for native notifications, "ox" for ox_lib notifications.

Radio Models / Skins

Config.CodeplugOverrideRadioModel = true -- Set to true if you want codeplugs to override the radio models set in the config, set to false to use the radio models set in the config. (Default: true)
Config.RadioModelHandheld = "APX8000" -- APX4000, APX7000, APX8000, APX8000-HXE, or XL200.
Config.RadioModelMobile = "APX6500-O2" -- APX6500-O2, APX6500-O5, APX6500-O7, APX6500-E5, or XL200M.

Compact Top View and Backlight

Config.DisplayTopView = true uses the compact top display for APX8000, APX7000, and APX8000-HXE when shown without focus. Players can request top view with /radio top on and return to automatic behavior with /radio top off. If a player has forced top view on, they should use /radio top off before focusing the full radio controls.

Config.RadioBacklight controls the display background/backlight appearance.

Radio Map Blips

Config.RadioBlips = true -- Set to true to enable radio blips on the map, set to false to disable radio blips on the map. (Default: true)
Config.RadioBlipRate = 1000 -- Time in milliseconds for how often the radio blips should update, set to 0 to only update when a player enters or leaves a radio channel. (Default: 1000ms or 1 second)
Config.RadioBlipsOnlyVisibleInVehicle = false -- Restrict map visibility to when the viewer is in a vehicle.
Config.RadioBlipSameCodeplugOnly = false -- If true, radio blips are only visible to users on the same codeplug.
Config.RadioBlipDefaultColor = 3 -- Default GTA blip color when no codeplug-specific color is configured.
Config.RadioBlipTransmitColor = 1 -- GTA blip color used when a radio user is transmitting.
Config.RadioBlipCodeplugColors = { -- Optional per-codeplug blip colors. Key must match the codeplug name or ID.
    -- ["LSPD"] = 3,
    -- ["SAFR"] = 1,
    -- ["Command"] = 5
}

Battery Level Simulation

Config.RadioBatterySimulation = false -- Set to true to enable radio battery simulation, set to false to disable radio battery simulation. (Default: false)
Config.RadioBatteryDrainRate = 60000 -- Time in milliseconds for how often the radio battery should drain, only used if RadioBatterySimulation is true. (Default: 60000ms or 1 minute)
Config.RadioBatteryDrainAmount = 1 -- Amount of battery to drain each interval, only used if RadioBatterySimulation is true. (Default: 1)

Proximity Audio Broadcasting

Config.RadioUsePAB = true -- Set to true to enable radio proximity audio broadcasting, set to false to disable radio proximity audio broadcasting. (Default: true)
Config.RadioPABRange = 5.0 -- Range in meters for radio proximity audio broadcasting, only used if RadioUsePAB is true. (Default: 5.0 meters)
Config.RadioNativeVoiceOnPTT = true -- Also keys local/native voice while transmitting over the radio.

Optional clothing rules can mute a player's proximity broadcast while an earpiece or other matching item is worn:

Config.RadioPABMuteByClothing = false
Config.RadioPABMuteClothingItems = {
    -- { prop = 2, drawable = 1, texture = "any" }
}

Audio Input Selection

With ox_lib running, /radiomenu includes Microphone Input. Use it to choose the intended microphone when a player has multiple input devices or the radio captures no voice.

Callsign Methods

Config.RadioCallsigns = false -- Enable player callsigns; false keeps generated radio IDs.
Config.RadioCallsignType = "" -- Leave blank to use the player's generated radio ID. Use "command" for /radio callsign, or "custom" for an installed identity integration.

Having Issues?

If you encounter any issues or have questions, open a support ticket.

On this page