mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-17 15:06:02 +01:00
63 lines
1.6 KiB
Lua
63 lines
1.6 KiB
Lua
---@type promise?
|
|
local skillcheck
|
|
local gameCount = 0
|
|
|
|
---@alias SkillCheckDifficulity 'easy' | 'medium' | 'hard' | { areaSize: number, speedMultiplier: number }
|
|
|
|
---@type SkillCheckDifficulity | SkillCheckDifficulity[]
|
|
local gameDifficulty
|
|
|
|
---@type promise?
|
|
local gamePromise
|
|
|
|
local function resolveSkillCheck(success)
|
|
if skillcheck then
|
|
skillcheck:resolve(success)
|
|
skillcheck = nil
|
|
SetNuiFocus(false, false)
|
|
end
|
|
end
|
|
|
|
---@param difficulty SkillCheckDifficulity | SkillCheckDifficulity[]
|
|
---@return boolean?
|
|
function lib.skillCheck(difficulty)
|
|
if skillcheck then return end
|
|
|
|
skillcheck = promise:new()
|
|
gameDifficulty = difficulty
|
|
SetNuiFocus(true, false)
|
|
|
|
if type(difficulty) == 'table' then
|
|
gameCount = 0
|
|
for i = 1, #difficulty do
|
|
gamePromise = promise:new()
|
|
SendNUIMessage({
|
|
action = 'startSkillCheck',
|
|
data = difficulty[i]
|
|
})
|
|
if not Citizen.Await(gamePromise) then
|
|
gamePromise = nil
|
|
break
|
|
end
|
|
end
|
|
else
|
|
SendNUIMessage({
|
|
action = 'startSkillCheck',
|
|
data = difficulty
|
|
})
|
|
end
|
|
|
|
return Citizen.Await(skillcheck)
|
|
end
|
|
|
|
RegisterNUICallback('skillCheckOver', function(data, cb)
|
|
cb(1)
|
|
if not gamePromise then return resolveSkillCheck(data.success) end
|
|
gamePromise:resolve(data.success)
|
|
if not data.success then return resolveSkillCheck(data.success) end
|
|
gameCount += 1
|
|
if gameCount == #gameDifficulty then
|
|
resolveSkillCheck(data.success)
|
|
end
|
|
end)
|