Changelog — v1.14.1
Changes since v1.14.0
Summary
This release adds an offline custom functions framework so staff can trigger custom server-side actions against players who are not currently connected. It also adds Discord staff commands, mugshot deduplication, improved jaksam_inventory stash compatibility, and wasabi_ambulance_v2 revive support. Several config options have been consolidated — advanced_configuration.json has been removed and its settings merged into config.json.
What's New
Features
- Offline custom functions — new
offline_buttonaddon type lets you run custom server-side logic against offline players (bycharId/uniqueId) from the offline player management dialog. NewRegisterOfflineAddonCallbackserver helper andOfflineAddonTargettype included. - Discord staff commands — additional staff-oriented bot commands and event handling.
- Mugshot deduplication — prevents duplicate mugshots from being stored per player.
- jaksam_inventory compatibility —
inventory.getStashnow supportsjaksam_inventoryfor trunks, gloveboxes, and generic stashes. - wasabi_ambulance_v2 support —
player.revivenow preferswasabi_ambulance_v2when present, falling back to the originalwasabi_ambulance. - Configurable prop render distance — new
props_render_distanceoption inconfig.json. - Disable map option — new
advanced_configuration.disable_mapoption inconfig.jsonfor servers that don't want the live map module.
Other
- Removed standalone
config/advanced_configuration.json— settings moved intoconfig.jsonunderloop_delaysand a newadvanced_configurationsection. You may need to migrate any customizations manually. - Removed the bundled
server/vendor/discord_sdk.cjsbuild artifact.
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.
fxmanifest.lua
use_experimental_fxv2_oal 'yes'
author 'luxu-gg'
description 'Admin menu for FiveM'
-version '1.14.0'
+version '1.14.1'
dependencies {
'oxmysql',bridge/server/inventory.lua
function inventory.getStash(typeofStash, id)
local items = result and json.decode(result) or {}
return items
end
+ elseif isResourceRunning("jaksam_inventory") then
+ if typeofStash == "trunk" or typeofStash == "glovebox" then
+ return exports['jaksam_inventory']:getInventoryIdFromPlate(id, typeofStash)
+ else
+ return exports['jaksam_inventory']:getInventory(id)
+ end
elseif isResourceRunning("core_inventory") then
return exports.core_inventory:getInventory("stash-" .. id)
endbridge/server/player.lua
function player.revive(source)
TriggerClientEvent('visn_are:resetHealthBuffer', source)
- if GetResourceState('wasabi_ambulance') == "started" then
+ if GetResourceState('wasabi_ambulance_v2') == "started" then
+ exports['wasabi_ambulance_v2']:RevivePlayer(source)
+ elseif GetResourceState('wasabi_ambulance') == "started" then
exports.wasabi_ambulance:RevivePlayer(source)
elseif GetResourceState("qs-medical-creator") == "started" then
TriggerClientEvent('ambulance:revivePlayer', source, true, true)config/advanced_configuration.json (deleted)
This file has been removed. Its settings were merged into
config.json. If you had customized these, re-apply the changes toconfig.jsonunderloop_delays/ newadvanced_configurationsection.
config/config.json
"hierarchy_protection": true,
"default_duty": false,
"default_dark_mode": true,
+ "props_render_distance": 1000,
"branding": {
"name": "FiveM Community",
"logo": "./server_logo.png",
"__comment__": "'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center'"
},
"loop_delays": {
- "coords_update": 10000
+ "coords_update": 10000,
+ "jail_coordinate_check": 5000
},
"optimization": {
"_comment_": "Tweak these settings based on your server performance",
"telemetry": {
"enabled": true,
"__comment__": "No personal data is sent. Fully anonymous data is sent. Disable this if you don't want luxu to receive errors and relevant logs."
+ },
+
+ "advanced_configuration": {
+ "disable_map": false
}
}config/custom_functions/client.lua
RegisterAddons({
end,
},
+ -- Offline Button: appears in the offline player management dialog
+ {
+ type = "offline_button",
+ name = "example_offline_button",
+ label = "Wipe Inventory",
+ icon = "mdi:bag-personal-off",
+ color = "#ef4444",
+ -- permission = "some.permission", -- optional
+ ---@param target OfflineAddonTarget table { charId, uniqueId, name, identifiers }
+ ---@param callServer fun(...): any calls RegisterOfflineAddonCallback in server.lua
+ handler = function(target, callServer)
+ local result = callServer()
+ print("Offline action result for", target.name, "->", result)
+ end,
+ },
+
-- Quick Action: appears in Quick Menu > Main tab, supports options
{
type = "quick_action",config/custom_functions/server.lua
RegisterAddonCallback("custom_button_1", function(source, target, argument1)
return true
end)
+--- Offline Addon Callback: paired with a `type = "offline_button"` addon in client.lua
+--- target is { charId, uniqueId, name, identifiers } - the player is NOT in the server.
+--- Always validate inputs and enforce permissions/duty before mutating data.
+RegisterOfflineAddonCallback("example_offline_button", function(source, target)
+ print("example_offline_button: staff source:", source)
+ print("example_offline_button: target charId:", target.charId, "uniqueId:", target.uniqueId)
+ -- e.g. MySQL.update.await('DELETE FROM inventory WHERE charId = ?', { target.charId })
+ return true
+end)
+
--- Custom Statistic Blocks
RegisterAddonStatisticBlocksCallback("test_block_1", function(source)config/custom_functions/types.lua
---@field label string
---@field icon string
---@field color string
----@field type 'button' | 'quick_action' | 'quick_toggle'
+---@field type 'button' | 'offline_button' | 'quick_action' | 'quick_toggle'
---@field options? string[] -- Sub-options displayed in the quick menu (for quick_action and quick_toggle)
---@field handler fun(...): any
---@field permission? string
+---@class OfflineAddonTarget
+---@field charId string
+---@field uniqueId string
+---@field name string
+---@field identifiers string[]
+
---@class Zone
---@field id string
---@field points [number, number][]Full list of files changed
| Change | File |
|---|---|
| Modified | fxmanifest.lua |
| Modified | bridge/server/inventory.lua |
| Modified | bridge/server/player.lua |
| Deleted | config/advanced_configuration.json |
| Modified | config/config.json |
| Modified | config/custom_functions/client.lua |
| Modified | config/custom_functions/server.lua |
| Modified | config/custom_functions/types.lua |
| Modified | client/modules/nui.lua |
| Modified | client/modules/props.lua |
| Modified | client/utils/cl_functions.lua |
| Modified | client/utils/cl_user_addon.lua |
| Modified | server/modules/jail.lua |
| Modified | server/utils/sv_user_addon.lua |
| Deleted | server/vendor/discord_sdk.cjs |
| Modified | server/index.js |
| Modified | shared/init.lua |
| Modified | web/ |