Retro Radio
Installation
Section titled โInstallationโ1) Add The Resource
Section titled โ1) Add The ResourceโPlace rs_radio in your resources and ensure it in server.cfg:
ensure rs_radio2) Required Dependency
Section titled โ2) Required Dependencyโrs_radio requires:
ensure pma-voiceensure rs_radiopma-voice is required for:
- DJ mic routing
- call-in screening
- patched live callers
- station mic participant handling
3) Audio Dependency Model
Section titled โ3) Audio Dependency Modelโ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.
4) Framework / Inventory / Target Compatibility
Section titled โ4) Framework / Inventory / Target CompatibilityโThe boombox system auto-detects the supported runtime stack.
Supported frameworks:
- QBCore
- QBOX
- ESX
Supported inventories:
qb-inventoryox_inventory
Supported target resources:
qb-targetox_target
If no supported target resource is running, boombox interaction should be treated as unavailable.
5) DJ Job Setup
Section titled โ5) DJ Job Setupโrs_radio uses the configured DJ job for tablet access and boss hiring.
Default job name:
dj
Default grades:
0= Trainee1= DJ2= Senior DJ3= Boss
The boss menu requires grade 3 by default. These values must match:
Config.DJJobNameConfig.DJGradesConfig.DJBossGrades
QBOX / qbx_core
Section titled โQBOX / qbx_coreโ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
6) Boombox Item Setup
Section titled โ6) Boombox Item Setupโ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.
QBCore + qb-inventory
Section titled โQBCore + qb-inventoryโ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 + ox_inventory
Section titled โQBOX + ox_inventoryโ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.'},ESX + ox_inventory
Section titled โESX + ox_inventoryโ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.'},ESX + another inventory
Section titled โESX + another inventoryโ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
Important Notes
Section titled โImportant Notesโ- The item name in your inventory must match
Config.BoomboxItemNameunless 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.luaand your inventory item definitions.
7) Media And Data Files
Section titled โ7) Media And Data Filesโ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
8) Optional Weather Integration
Section titled โ8) Optional Weather IntegrationโIf using an external weather authority such as rs_weather:
- keep
Config.WeatherUseExternalAuthority = true - set
Config.WeatherAuthorityResource = "rs_weather" - let
rs_weatherapply world weather - let
rs_radioonly read weather state for radio UI/broadcast purposes
Important:
- avoid duplicate world weather application
- when
rs_weatheris active,rs_radioshould behave as a consumer, not a competing weather controller
9) Optional Rebel Radio Door Locks
Section titled โ9) Optional Rebel Radio Door Locksโox_doorlock
Section titled โox_doorlockโ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:
djgrade0+
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
Section titled โqb-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.
10) Restart And Verify
Section titled โ10) Restart And VerifyโAfter installing or updating:
- restart the server or
ensure rs_radio - confirm the
djjob exists in your framework - confirm a grade
3DJ can open the boss menu at the configured station locations - confirm a hired DJ can open the DJ tablet
- confirm listener UI works in a vehicle
- confirm local tracks load from the music list
- confirm YouTube URLs resolve and cache
- confirm boombox item flow works if enabled
11) Production Notes
Section titled โ11) Production NotesโBefore production use, verify:
- DJ permissions are configured correctly
Config.AdminToolsEnabledisfalseunless actively debuggingConfig.EnableDJTabletCommandisfalseso 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