66 lines
2.2 KiB
Lua
66 lines
2.2 KiB
Lua
---@diagnostic disable: duplicate-set-field
|
|||
|
|
local resourceName = "msk_core"
|
||
|
|
local configValue = BridgeClientConfig.ProgressBarSystem
|
||
|
|
if (configValue == "auto" and GetResourceState(resourceName) ~= "started") or (configValue ~= "auto" and configValue ~= resourceName) then return end
|
||
|
|
|
||
|
|
ProgressBar = ProgressBar or {}
|
||
|
|
|
||
|
|
---Converts bridge/ox-style progress options into the msk_core Progress.Start format.
|
||
|
|
---@param options table
|
||
|
|
---@return table
|
||
|
|
local function convertToMsk(options)
|
||
|
|
options = options or {}
|
||
|
|
|
||
|
|
-- QB exposes animation under .animation.animDict/.anim and disables under .controlDisables
|
||
|
|
local anim = options.anim or options.animation
|
||
|
|
local animation
|
||
|
|
if anim then
|
||
|
|
animation = {
|
||
|
|
dict = anim.dict or anim.animDict,
|
||
|
|
anim = anim.clip or anim.anim,
|
||
|
|
flag = anim.flag or anim.flags or 49,
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
-- ox uses options.disable.{move,car,combat,mouse}, QB uses options.controlDisables.*
|
||
|
|
local d = options.disable or options.controlDisables or {}
|
||
|
|
local disable = {
|
||
|
|
move = d.move or d.disableMovement,
|
||
|
|
vehicle = d.car or d.disableCarMovement,
|
||
|
|
combat = d.combat or d.disableCombat,
|
||
|
|
mouse = d.mouse or d.disableMouse,
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
duration = options.duration,
|
||
|
|
text = options.label or options.text or '',
|
||
|
|
disable = disable,
|
||
|
|
animation = animation,
|
||
|
|
forceOverride = options.forceOverride,
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
---This will open a progress bar (blocking until it completes).
|
||
|
|
---@param options table
|
||
|
|
---@param cb any optional callback receiving the success boolean
|
||
|
|
---@param isQBInput boolean optional
|
||
|
|
---@return boolean success true if the progress completed without being cancelled
|
||
|
|
function ProgressBar.Open(options, cb, isQBInput)
|
||
|
|
local data = convertToMsk(options)
|
||
|
|
|
||
|
|
-- msk_core Progress.Start blocks for the full duration; if it is interrupted
|
||
|
|
-- it stops early. We treat a fully elapsed bar as success.
|
||
|
|
exports.msk_core:Progressbar(data)
|
||
|
|
|
||
|
|
local active = exports.msk_core:ProgressActive()
|
||
|
|
local success = not active
|
||
|
|
|
||
|
|
if cb then cb(success) end
|
||
|
|
return success
|
||
|
|
end
|
||
|
|
|
||
|
|
ProgressBar.GetResourceName = function()
|
||
|
|
return resourceName
|
||
|
|
end
|
||
|
|
|
||
|
|
return ProgressBar
|