v1.15.7

Summary

This release adds a radial menu, Freeze Time, and a config option to disable Discord staff roles. It also fixes clipboard copy, revive, and in-game audio.

What's New

Features

  • Added a radial menu
  • Added Freeze Time
  • Added a config option to disable Discord staff roles (off by default)

Bug Fixes

  • Fixed clipboard copy
  • Fixed inventory staying locked after revive
  • Fixed staff group saves
  • Fixed missing staff icon on the player list
  • Fixed gamer tags
  • Fixed choppy in-game audio
  • Fixed vehicle keys with qb-vehiclekeys
  • Fixed gang list when using op-crime

File Changes

⚙️ Configuration & Bridge Files

These files are not encrypted. Review the changes below — you may need to manually apply updates to your server's config files.

config/config.json

   "hierarchy_protection": true,
+  "staff": {
+    "discord_roles": {
+      "enabled": false,
+      "__comment__": "Set to false to hard-disable mapping Discord roles to staff groups (auto-provisioning, role enforcement, role sync and /staff bindrole)."
+    }
+  },
   "default_duty": true,

bridge/server/weather.lua

-function weather.FreezeTime()
+---@param state? boolean Freeze state to apply, toggles when omitted
+function weather.FreezeTime(state)
     if (GetResourceState("Renewed-Weathersync") == "started") then
-        exports["qb-weathersync"]:setTimeFreeze();
+        exports["qb-weathersync"]:setTimeFreeze(state);
     elseif (GetResourceState("cd_easytime") == "started") then
-        local data = exports['cd_easytime']:GetWeather()
-        local status = not data.freeze
+        local status = state
+        if status == nil then
+            local data = exports['cd_easytime']:GetWeather()
+            status = not data.freeze
+        end
         exports['cd_easytime']:forceUpdate({ freeze = status })
     elseif (GetResourceState("qb-weathersync") == "started") then
-        exports["qb-weathersync"]:setTimeFreeze();
+        exports["qb-weathersync"]:setTimeFreeze(state);

bridge/server/player.lua

 function player.revive(source)
     if GetResourceState("luxu_medicine") == "started" then
         exports.luxu_medicine:revivePlayer(source, true)
+    elseif GetResourceState("luxu_ambulancejob") == "started" then
+        exports.luxu_ambulancejob:revivePlayer(source)
     elseif GetResourceState('wasabi_ambulance_v2') == "started" then
     elseif GetResourceState("qb-vehiclekeys") == "started" then
-        return exports.qb_vehiclekeys:GiveKeys(source, plate)
+        return exports["qb-vehiclekeys"]:GiveKeys(source, plate)

bridge/server/job.lua

 function JobManager.getGangs()
-    if GetResourceState("op-crime") == "started" then
-        local gangs = exports['op-crime']:getOrganisationsList()
-        return lib.array.map(gangs, function(g)
-            return {
-                name = g.identifier,
-                label = g.label,
-                grades = {}
-            }
-        end)
-    end
-
     if Framework.name == "esx" then

sql/install.sql

   `gender` enum('male','female') NOT NULL DEFAULT 'male',
   `current_duty_start` datetime DEFAULT NULL,
   `total_duty_seconds` int(10) unsigned NOT NULL DEFAULT 0,
+  `radial_menu` longtext DEFAULT NULL,
   `last_updated` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),

fxmanifest.lua

 author 'luxu-gg'
 description 'Admin menu for FiveM'
-version '1.15.6'
+version '1.15.7'

 dependencies {
     'oxmysql',

locales/en.json

{
  "failed_to_update_group": "Failed to update group",
  "freeze_time": "Freeze Time",
  "time_freeze_failed": "Failed to change the time freeze.",
  "time_frozen": "Time frozen.",
  "time_unfrozen": "Time unfrozen.",
  "log_action_froze_time": "froze time",
  "log_action_unfroze_time": "unfroze time",
  "discord_role_id": "Discord Role ID",
  "radial_menu": "Radial menu",
  "radial_menu_description": "Your own quick wheel. Bind it under GTA Settings > Key Bindings > FiveM.",
  "radial_empty": "No actions",
  "radial_setup_hint": "Set it up in Settings",
  "radial_release": "Release to select",
  "radial_click": "Click to select",
  "radial_teleport_waypoint": "To waypoint",
  "radial_open_panel": "Admin panel",
  "radial_command": "Command",
  "radial_group_self": "Self",
  "radial_group_world": "World",
  "radial_group_menus": "Menus",
  "radial_group_addons": "Addons",
  "radial_group_custom": "Custom",
  "radial_folder": "Folder",
  "radial_wheel": "Wheel",
  "radial_items": "items",
  "radial_add_action": "Action",
  "radial_add_folder": "Folder",
  "radial_unavailable": "No permission or missing",
  "radial_empty_level": "Nothing here yet. Add an action.",
  "radial_icon_hint": "Any Iconify name, e.g. mdi:car or game-icons:pistol-gun",
  "radial_preview_hint": "Hold your radial key in game, point and release. Tap it to keep the wheel open.",
  "radial_reset": "Reset to default",
  "radial_keybind": "Open Radial Menu"
}

Full list of files changed

Change File
Modified bridge/server/job.lua
Modified bridge/server/player.lua
Modified bridge/server/weather.lua
Modified client/modules/actions.lua
Modified client/modules/gamer_tags.lua
Modified client/modules/nui.lua
Added client/modules/radial.lua
Modified client/modules/visibility.lua
Modified config/config.json
Modified fxmanifest.lua
Modified locales/en.json
Modified server/vendor/mc.cjs
Modified sql/install.sql
Modified web/
Modified server/index.js