Retro Radial
Features
Section titled โFeaturesโrs_radial is a complete radial-menu system for FiveM. It combines a polished orbit-style UI, a runtime API for other resources, server-authoritative validation, and per-player customization in one resource.
Core Menu Features
Section titled โCore Menu Featuresโ- Orbit-style radial with configurable hub size, orbit radius, start angle, and direction.
- Hold-to-open keybind with toggle and close-on-select options.
- Multi-page navigation with breadcrumb-style center labels.
- Center hub doubles as the back button on subpages.
- Per-item icons in five formats: built-in name, inline SVG file, PNG/WEBP/JPG, CSS class (Font Awesome), external URL.
- Per-item label, color, tooltip, badge, and disabled-reason hover.
- Per-item confirmation, input, and select modals.
- Async items show a spinner until
CompleteAsyncActionis called from the server. - Smooth open/close/page-switch animations with reduced-motion support.
Page System
Section titled โPage Systemโmaintop-level page with up to 8 default entries (configurable).favoritesdynamic, per-player KVP-backed list of starred items.generalshared general actions (emotes, carry, clothing entry point).blipsdynamic page built fromConfig.Blips.categorieswith per-player toggles.vehicleauto-built fromConfig.Vehicle.controls, shown only when in a vehicle.settingsopens the Settings panel.police/mechanic/emsjob-gated job action pages.clothingauto-built fromConfig.Clothing.items.
Item Action Types
Section titled โItem Action TypesโclientTriggerEvent(name, args).serverTriggerServerEvent(name, args).commandExecuteCommand(str).exportexports[resource][event](args).customFunctioncall a function declared incustom_functions.lua.pagenavigate to a subpage.backreturn to previous page.settingsopen the Settings panel.blipToggletoggle a blip category.info/nuiOnlynon-interactive placeholders.- Vehicle-specific:
seat,door,window,engine,neon,allDoors,allWindows.
Visibility Controls
Section titled โVisibility Controlsโ- Job / grade / on-duty gating.
- Gang / gang grade gating.
- Cuffed / dead state gating (with allowlist for items usable while dead).
visibleIfpredicate (named, registered viaRegisterPredicate).- Inline
canSee(ctx)callback. reqItemsinventory requirement (ox_inventory / qb-inventory).showOnlyInVehicle/showOnlyOutVehicleflags.predicateDisabledModechoosehide(default) ordisabledfor predicate failures.- Cooldown state (per-item, per-player).
Vehicle Control Bar
Section titled โVehicle Control Barโ- Driver-only button surface for door, window, engine, neon, seat-swap actions.
- Configurable position (drag-to-edit) and 13-color theme palette.
- Multiplayer-sync of door/window/engine/neon state across all occupants.
- Driver-lock state preview for passengers (read-only view of who has control).
- Live preview in the Settings panel pickers update the bar immediately.
Per-Player Customization (Settings Panel)
Section titled โPer-Player Customization (Settings Panel)โ- 12-color Theme Editor with per-color picker, live preview, save / discard / reset.
- Menu Size slider (configurable min / max / step).
- Menu Position drag-edit with viewport clamp.
- Item Order drag-reorder per page.
- Vehicle Control bar position + color customization.
- Sound Effects master toggle, volume slider, and per-event mute.
- Reset Defaults button.
- Optional Player Card (mugshot + name + server ID).
- Every toggle can be locked from
config.lua.
Runtime API (Other Resources)
Section titled โRuntime API (Other Resources)โAddMenuItem(pageId, item)add an item from any resource.RemoveMenuItem(pageId, itemId)/UpdateMenuItem(pageId, itemId, patch).AddSubMenu(pageId, def)register a brand-new page.AddMenuItemForPlayer(src, pageId, item)server-side, per-player items.GetMenuItem/IsMenuOpen/GetCurrentPage/CloseMenu/Refresh.RegisterPredicate/UnregisterPredicate(client) andRegisterServerPredicate(server).CompleteAsyncAction(itemId, ok, errorMessage)resolve async items.WatchStateBagKey(key)refresh menu when a state bag value changes.- Resource-stop sweep: items registered by a resource are auto-removed when it stops.
Server-Side Authority
Section titled โServer-Side AuthorityโConfig.Security.serverSideValidation = truere-checks job/gang/cuffed/dead/cooldown/visibility on every server-event dispatch.RegisterServerItem(pageId, itemId, config)bind a server-side validator/handler pair.CanPlayerUseMenuItem(src, pageId, itemId)from anywhere.- Per-item cooldowns enforced and reported back to the client.
- Trigger-protection: refuses server events for items that donโt pass server-side checks.
Discord Logging
Section titled โDiscord Loggingโ- Optional webhook with per-event filters (security, item-used, blocked, errors).
- Throttle and batching to avoid rate limits.
- Per-page or per-item override of the webhook URL.
ox_lib Compatibility Bridge
Section titled โox_lib Compatibility Bridgeโ- Opt-in via
Config.OxLibBridge.enabled = true. - Patches
lib.addRadialItem,lib.removeRadialItem,lib.registerRadial,lib.hideRadial,lib.getCurrentRadialId. - Forwards into rs_radialโs runtime API.
- If real ox_lib is installed, only the radial functions are patched.
- Inline
onSelect = function() endcallbacks are stored locally and dispatched on click. - Icon strings auto-mapped to Font Awesome classes.
Performance and Diagnostics
Section titled โPerformance and DiagnosticsโConfig.Debugtoggles F8 console logging.Config.Performancecontrols resmon-sensitive paths (state-bag watchers, refresh cadence).- NUI files are cache-busted on every build (
?v=N). - All
html/files ship with a UTF-8 BOM so CEF cannot mis-detect encoding.
Dependencies and Integration Notes
Section titled โDependencies and Integration Notesโ- Framework auto-detection: QBCore, Qbox / qbx_core, ESX, or standalone.
- Inventory auto-detection: ox_inventory, qb-inventory, qbx_core, ESX, or custom callback.
pma-voiceis not required.- ox_lib is optional: rs_radial can stand alone, replace ox_libโs radial, or coexist with it.