Skip to content

Retro Radial

Primary config file:

  • config.lua (customer-editable, escrow-ignored)
  • Customer hook surface: custom_functions.lua (escrow-ignored)
  • Bridge: bridge/ox_lib.lua (escrow-ignored, opt-in)

config.lua is one file with all server-tunable settings. There is no hidden defaults file every value the script reads is visible.

Access and permissions:

  • Config.Framework 'auto' | 'qb' | 'qbox' | 'esx' | 'standalone'
  • Config.Debug F8 console logging
  • Config.Inventory.provider 'auto' | 'ox' | 'qb' | 'qbox' | 'esx' | 'custom' | 'none'
  • Config.Security.serverSideValidation re-validate item visibility on server before dispatch
  • Config.Security.triggerProtection refuse server events for items that fail server-side checks
  • Config.Logging.enabled / Config.Logging.webhookUrl Discord webhook for security and item events
  • Config.RuntimeApi.enabled master switch for AddMenuItem / AddSubMenu exports

Core feature toggles:

  • Config.Controls.openMode 'hold' | 'toggle'
  • Config.Controls.closeOnSelect close radial when an item is clicked
  • Config.Settings.enabled Settings panel availability
  • Config.Settings.allowThemeEditor / allowMenuScale / allowMenuPosition / allowItemReorder / allowSoundToggle / allowResetDefaults
  • Config.Favorites.enabled per-player favorites
  • Config.Blips.enabled blip system
  • Config.Vehicle.enabled Vehicle Control bar
  • Config.Clothing.enabled clothing page
  • Config.OxLibBridge.enabled ox_lib radial compatibility bridge
  • Config.Icons.fontAwesome.enabled auto-inject FA from CDN

Common server-specific values:

  • Config.Pages all radial pages and items
  • Config.UI.brand.logoSrc / backIcon center hub assets
  • Config.UI.geometry.hubSize / orbitRadius / startAngle radial layout
  • Config.Theme.default 12-color palette for the radial
  • Config.VehicleControlTheme.default 13-color palette for the Vehicle Control bar
  • Config.Vehicle.controls what shows up on the Vehicle Control bar
  • Config.Clothing.items what shows up on the Clothing page
  • Config.Blips.categories blip categories and per-category locations
  • Config.Predicates.registry reusable canSee callbacks (also via RegisterPredicate export)
  • Config.Locale every user-facing string

Settings the player can change at runtime via the Settings panel (each toggleable from Config.Settings):

  • Theme colors (KVP-persisted per-player).
  • Menu scale (Config.Customization.minScale / maxScale / scaleStep).
  • Menu position (drag-edit, clamped by Config.Customization.positionClamp).
  • Item order per page.
  • Vehicle Control bar position + colors.
  • Sound effects (master toggle + per-event mute + volume).

Action item fires an event / command / export:

{
id = 'cuff',
label = 'CUFF',
icon = 'cuff.png',
iconType = 'image', -- 'image' | 'svg' | 'file' | 'builtin' | 'class' | 'url'
type = 'client', -- see docs/features.md for all item types
event = 'police:client:CuffPlayer',
args = nil, -- optional
jobs = { police = 0 },
cooldown = 5000, -- ms
async = true, -- show spinner until CompleteAsyncAction
confirm = { enabled = true, title = '...', body = '...' },
visibleIf = 'isPolice', -- named predicate
canSee = function(ctx) return ctx.job == 'police' end, -- inline predicate
}

Page navigation item:

{ id='garage', label='GARAGE', icon='garage.png', type='page', targetPage='garage' }

Settings entry:

{ id='settings', label='SETTINGS', icon='settings.png', type='settings' }

Full item schema (all fields, all modal types, predicate modes, badges) is documented inline in Config.Pages in config.lua.

Enabled with Config.Security.serverSideValidation = true. When set, every type='server' item is routed through rs_radial:server:dispatch, which re-runs the visibility checks (job, gang, cuffed, dead, cooldown, predicates, reqItems) before firing the configured event.

Register a server-side validator/handler pair:

exports['rs_radial']:RegisterServerItem('police', 'jail', {
validate = function(src) return Bridge.getJob(src).name == 'police' end,
handler = function(src, args) ... end
})

Recommended defaults for most servers:

  • keep Config.Framework = 'auto' unless you need to force one
  • keep Config.Security.serverSideValidation = true once items are wired
  • keep Config.Debug = false in production
  • keep Config.OxLibBridge.enabled = false unless you actually depend on third-party scripts that call lib.addRadialItem
  • only edit custom_functions.lua when you need server-specific behavior (the file is loaded BEFORE client.lua and stays plain-text for the customer)