Browse docs
Radial Menu
Radial Menu
When Config.JobRadial.targetContext.enabled is enabled, the player target tracker and its marker remain active for the entire time the radial menu is open. This is independent of whether the currently visible actions require a player target.
openRadialMenu()
- Purpose: Opens the job radial menu as if the player pressed the configured hotkey.
exports["sky_jobs_base"]:openRadialMenu()
registerRadialProvider(options)
- Purpose: Registers the calling client resource as a dynamic radial action provider.
- Arguments:
options.jobKeys(string | string[]?) - limits the provider to exact job keys.options.jobGroups(string | string[]?) - limits the provider to job groups such aspoliceorcrime.
- Returns:
boolean.
The provider resource must expose getRadialActions, triggerRadialMenuAction, and optionally canInteractRadialMenuAction. Prefer this self-registration flow over adding the resource to Config.JobRadial.providers; the config list is intended for providers that cannot register themselves. A live self-registration and its job filters take precedence over a legacy config entry for the same resource.
An action may use menu = { id, icon?, label?, description? } to join a submenu. Actions with the same menu ID are grouped together, while a submenu containing only one currently available action is flattened automatically. Actions may also use oxTarget = { types, bones?, distance?, boneRadius?, netId? }, radialTarget = true, and targetValidate = true to receive and validate the live entity context.
When an action already displayed its own feedback or intentionally cancelled without a notification, its handler can return false, { silent = true }.
exports["sky_jobs_base"]:registerRadialProvider({
jobGroups = { "crime" }
})
getRadialActions()
- Purpose: Returns all available radial menu actions with their metadata.
- Returns:
RadialAction[]— array of action objects withid,label,icon,disabled, and more.
local actions = exports["sky_jobs_base"]:getRadialActions()
for _, action in ipairs(actions) do
print(action.id, action.label, action.disabled)
end
getRadialAction(actionId)
- Purpose: Fetches a single radial action by its ID.
- Arguments:
actionId(string) — the action identifier.
- Returns:
table | nil— the action object, ornilif not found.
local action = exports["sky_jobs_base"]:getRadialAction("stretcher_carry")
isRadialMenuActionAvailable(actionId)
- Purpose: Checks if a radial action exists and is currently enabled.
- Arguments:
actionId(string)
- Returns:
boolean—truewhen the action exists and is not disabled.
if exports["sky_jobs_base"]:isRadialMenuActionAvailable("treat_patient") then
-- Action is available
end
triggerRadialMenuAction(actionId, context?)
- Purpose: Executes a radial action handler without opening the UI.
- Arguments:
actionId(string)context(table?) - optional selected entity, network ID, distance, and target information forwarded to the action provider.
- Returns:
boolean—trueon success,falseon failure.table?— on failure, a table withkey(locale key) andfallback(error message).
local success, err = exports["sky_jobs_base"]:triggerRadialMenuAction("treat_patient")
if not success then
print("Failed:", err.fallback)
end
Built-in Actions
These actions are registered by sky_jobs_base itself. Job scripts (like sky_ambulancejob) add their own actions on top.
| Action ID | Description |
|---|---|
tablet | Opens the tablet interface. |
remove_trunk_prop | Removes a nearby placed trunk prop. |