Skip to content

Retro Radio

Place rs_radio in your resources and ensure it in server.cfg:

ensure rs_radio

rs_radio requires:

ensure pma-voice
ensure rs_radio

pma-voice is required for:

  • DJ mic routing
  • call-in screening
  • patched live callers
  • station mic participant handling

The world playback path is bundled/internalized inside rs_radio.

You do not need to install a separate external xSound resource for the current build in this repository.

The boombox system auto-detects the supported runtime stack.

Supported frameworks:

  • QBCore
  • QBOX
  • ESX

Supported inventories:

  • qb-inventory
  • ox_inventory

Supported target resources:

  • qb-target
  • ox_target

If no supported target resource is running, boombox interaction should be treated as unavailable.

rs_radio uses the configured DJ job for tablet access and boss hiring.

Default job name:

  • dj

Default grades:

  • 0 = Trainee
  • 1 = DJ
  • 2 = Senior DJ
  • 3 = Boss

The boss menu requires grade 3 by default. These values must match:

  • Config.DJJobName
  • Config.DJGrades
  • Config.DJBossGrades

Add the dj job to:

  • resources/[qbx]/qbx_core/shared/jobs.lua

Example:

['dj'] = {
label = 'Radio DJ',
type = 'radio',
defaultDuty = true,
offDutyPay = false,
grades = {
[0] = {
name = 'Trainee',
payment = 25
},
[1] = {
name = 'DJ',
payment = 50
},
[2] = {
name = 'Senior DJ',
payment = 75
},
[3] = {
name = 'Boss',
isboss = true,
bankAuth = true,
payment = 100
},
},
},

After editing jobs, restart qbx_core and rs_radio, or restart the server.

Add the same dj job shape to your QBCore jobs file, commonly:

  • qb-core/shared/jobs.lua

The job key must be lowercase dj, and grade 3 should be marked with isboss = true.

Create the dj job and grades in your ESX jobs database/table or job-management resource.

Minimum requirements:

  • job name: dj
  • grades: 0, 1, 2, 3
  • boss grade: 3

Default item name:

  • radio_boombox

Expected image asset:

  • radio_boombox.png

This resource auto-detects the runtime stack, but the item itself still has to exist in your inventory item definitions.

This repository already includes the QB item entry in:

  • qb-core/shared/items.lua

Example:

radio_boombox = {
name = 'radio_boombox',
label = 'Portable Radio',
weight = 2500,
type = 'item',
image = 'radio_boombox.png',
unique = true,
useable = true,
shouldClose = true,
description = 'A portable boombox that can broadcast the station around you.'
},

QBOX servers commonly pair with ox_inventory.

Add an item definition in your ox_inventory item file, commonly:

  • ox_inventory/data/items.lua

Example:

['radio_boombox'] = {
label = 'Portable Radio',
weight = 2500,
stack = false,
close = true,
description = 'A portable boombox that can broadcast the station around you.'
},

If your ESX server uses ox_inventory, define the same item there:

  • ox_inventory/data/items.lua

Example:

['radio_boombox'] = {
label = 'Portable Radio',
weight = 2500,
stack = false,
close = true,
description = 'A portable boombox that can broadcast the station around you.'
},

If your ESX server uses a different inventory, the exact file depends on that inventory resource.

Minimum expectation:

  • item name must be radio_boombox
  • item should be usable
  • image should be radio_boombox.png
  • item should not stack if your inventory supports unique/non-stackable items
  • The item name in your inventory must match Config.BoomboxItemName unless you change the config.
  • This workspace currently includes the QBCore item entry only. QBOX / ESX examples above are provided as install references, not as files already present in this repository.
  • If you change the item name, keep the same value aligned across config.lua and your inventory item definitions.

Local station audio should live in:

  • South rap station: songs/stations/south/music, songs/stations/south/ads, songs/stations/south/sfx
  • North country station: songs/stations/north/music, songs/stations/north/ads, songs/stations/north/sfx

Editable station data files:

  • South: data/stations/south/playlist.json, data/stations/south/ads.json, data/stations/south/sfx.json
  • North: data/stations/north/playlist.json, data/stations/north/ads.json, data/stations/north/sfx.json

Shared product ads stay global:

  • data/product_ads.json

If using an external weather authority such as rs_weather:

  • keep Config.WeatherUseExternalAuthority = true
  • set Config.WeatherAuthorityResource = "rs_weather"
  • let rs_weather apply world weather
  • let rs_radio only read weather state for radio UI/broadcast purposes

Important:

  • avoid duplicate world weather application
  • when rs_weather is active, rs_radio should behave as a consumer, not a competing weather controller

If you use ox_doorlock, rs_radio can automatically install or update the captured Rebel Radio doors when both ox_doorlock and oxmysql are running.

Config toggle:

  • Config.AutoInstallRebelRadioDoors = true

The auto-installer only inserts missing Rebel Radio rows by name. Existing rows are not deleted or updated.

The repository also includes a manual SQL import:

  • docs/rebel_radio_doors_ox_doorlock.sql

The included doors are locked by default and restricted to:

  • dj grade 0+

Restart ox_doorlock after the auto-install or manual SQL import if any rows were inserted. This is required for double-door entries to rebuild correctly in ox_doorlock.

qb-doorlock does not use the ox_doorlock SQL table, so rs_radio cannot auto-populate it from the database.

If your server uses qb-doorlock, copy the provided entries into your qb-doorlock door config:

  • docs/rebel_radio_doors_qb_doorlock.lua

The entries use:

  • authorizedJobs = { ['dj'] = 0 }
  • locked = true
  • the same north/south front double doors, garage doors, and booth doors captured for Rebel Radio

After adding the entries, restart qb-doorlock.

After installing or updating:

  1. restart the server or ensure rs_radio
  2. confirm the dj job exists in your framework
  3. confirm a grade 3 DJ can open the boss menu at the configured station locations
  4. confirm a hired DJ can open the DJ tablet
  5. confirm listener UI works in a vehicle
  6. confirm local tracks load from the music list
  7. confirm YouTube URLs resolve and cache
  8. confirm boombox item flow works if enabled

Before production use, verify:

  • DJ permissions are configured correctly
  • Config.AdminToolsEnabled is false unless actively debugging
  • Config.EnableDJTabletCommand is false so DJs use configured station locations
  • DJ job and boss grades exist in your framework
  • boombox item exists for your inventory stack
  • only one weather authority is applying world weather
  • your target/inventory/framework stack matches one of the supported combinations