Files
ox_lib/resource/interface/client/progress.lua

173 lines
4.0 KiB
Lua
Raw Normal View History

2022-04-14 06:45:48 +00:00
local progress
local DisableControlAction = DisableControlAction
local DisablePlayerFiring = DisablePlayerFiring
local playerState = LocalPlayer.state
2022-04-14 06:45:48 +00:00
local function createProp(prop)
lib.requestModel(prop.model)
local coords = GetEntityCoords(cache.ped)
local object = CreateObject(prop.model, coords.x, coords.y, coords.z, true, true, true)
AttachEntityToEntity(object, cache.ped, GetPedBoneIndex(cache.ped, prop.bone or 60309), prop.pos.x, prop.pos.y, prop.pos.z, prop.rot.x, prop.rot.y, prop.rot.z, true, true, false, true, 0, true)
return object
end
local function interruptProgress(data)
if not data.useWhileDead and IsEntityDead(cache.ped) then return true end
if not data.allowRagdoll and IsPedRagdoll(cache.ped) then return true end
if not data.allowCuffed and IsPedCuffed(cache.ped) then return true end
if not data.allowFalling and IsPedFalling(cache.ped) then return true end
end
2022-04-14 06:45:48 +00:00
local function startProgress(data)
playerState.invBusy = true
2022-04-14 06:45:48 +00:00
progress = data
if data.anim then
if data.anim.dict then
lib.requestAnimDict(data.anim.dict)
TaskPlayAnim(cache.ped, data.anim.dict, data.anim.clip, data.anim.blendIn or 3.0, data.anim.blendOut or 1.0, data.anim.duration or -1, data.anim.flag or 49, data.anim.playbackRate or 0, data.anim.lockX, data.anim.lockY, data.anim.lockZ)
data.anim = true
elseif data.anim.scenario then
TaskStartScenarioInPlace(cache.ped, data.anim.scenario, 0, data.anim.playEnter ~= nil and data.anim.playEnter or true)
2022-04-14 06:45:48 +00:00
data.anim = true
end
end
if data.prop then
if data.prop.model then
data.prop1 = createProp(data.prop)
else
for i = 1, #data.prop do
local prop = data.prop[i]
if prop then
data['prop'..i] = createProp(prop)
end
2022-04-14 06:45:48 +00:00
end
end
end
local disable = data.disable
while progress do
if disable then
if disable.mouse then
DisableControlAction(0, 1, true)
DisableControlAction(0, 2, true)
DisableControlAction(0, 106, true)
end
2022-04-14 06:45:48 +00:00
if disable.move then
DisableControlAction(0, 21, true)
DisableControlAction(0, 30, true)
DisableControlAction(0, 31, true)
DisableControlAction(0, 36, true)
2022-04-14 06:45:48 +00:00
end
if disable.car then
DisableControlAction(0, 63, true)
DisableControlAction(0, 64, true)
DisableControlAction(0, 71, true)
DisableControlAction(0, 72, true)
DisableControlAction(0, 75, true)
2022-04-14 06:45:48 +00:00
end
if disable.combat then
DisableControlAction(0, 25, true)
2022-04-14 06:45:48 +00:00
DisablePlayerFiring(cache.playerId, true)
end
end
2022-04-14 06:45:48 +00:00
if interruptProgress(progress) then
progress = false
2022-04-14 06:45:48 +00:00
end
Wait(0)
2022-04-14 06:45:48 +00:00
end
if data.anim then
ClearPedTasks(cache.ped)
end
if data.prop then
local n = #data.prop
for i = 1, n > 0 and n or 1 do
2022-04-14 06:45:48 +00:00
local prop = data['prop'..i]
if prop then
DetachEntity(prop)
DeleteEntity(prop)
end
end
end
playerState.invBusy = false
2022-04-14 06:45:48 +00:00
local cancel = progress == false
progress = nil
if cancel then
SendNUIMessage({ action = 'progressCancel' })
return false
end
return true
end
function lib.progressBar(data)
while progress ~= nil do Wait(100) end
if not interruptProgress(data) then
2022-04-14 06:45:48 +00:00
SendNUIMessage({
action = 'progress',
data = {
label = data.label,
duration = data.duration
}
})
return startProgress(data)
end
end
function lib.progressCircle(data)
while progress ~= nil do Wait(100) end
if not interruptProgress(data) then
2022-04-14 06:45:48 +00:00
SendNUIMessage({
action = 'circleProgress',
data = {
duration = data.duration,
position = data.position,
label = data.label
2022-04-14 06:45:48 +00:00
}
})
return startProgress(data)
end
end
function lib.cancelProgress()
if not progress then
error('No progress bar is active')
elseif not progress.canCancel then
error(("Progress bar '%s' cannot be cancelled"):format(id))
end
progress = false
end
function lib.progressActive()
return progress and true
end
2022-04-14 06:45:48 +00:00
RegisterNUICallback('progressComplete', function(data, cb)
cb(1)
progress = nil
end)
RegisterCommand('cancelprogress', function()
if progress?.canCancel then progress = false end
end)
RegisterKeyMapping('cancelprogress', 'Cancel current progress bar', 'keyboard', 'x')