forked from Simnation/Main
125 lines
3.3 KiB
Lua
125 lines
3.3 KiB
Lua
![]() |
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
RegisterNetEvent('QBCore:Client:UpdateObject', function() QBCore = exports['qb-core']:GetCoreObject() end)
|
||
|
|
||
|
local headerShown = false
|
||
|
local sendData = nil
|
||
|
|
||
|
-- Functions
|
||
|
|
||
|
local function sortData(data, skipfirst)
|
||
|
local header = data[1]
|
||
|
local tempData = data
|
||
|
if skipfirst then table.remove(tempData,1) end
|
||
|
table.sort(tempData, function(a,b) return a.header < b.header end)
|
||
|
if skipfirst then table.insert(tempData,1,header) end
|
||
|
return tempData
|
||
|
end
|
||
|
|
||
|
local function openMenu(data, sort, skipFirst)
|
||
|
if not data or not next(data) then return end
|
||
|
if sort then data = sortData(data, skipFirst) end
|
||
|
for _,v in pairs(data) do
|
||
|
if v["icon"] then
|
||
|
if QBCore.Shared.Items[tostring(v["icon"])] then
|
||
|
if not string.find(QBCore.Shared.Items[tostring(v["icon"])].image, "//") and not string.find(v["icon"], "//") then
|
||
|
v["icon"] = "nui://qb-inventory/html/images/"..QBCore.Shared.Items[tostring(v["icon"])].image
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
SetNuiFocus(true, true)
|
||
|
headerShown = false
|
||
|
sendData = data
|
||
|
SendNUIMessage({
|
||
|
action = 'OPEN_MENU',
|
||
|
data = table.clone(data)
|
||
|
})
|
||
|
end
|
||
|
|
||
|
local function closeMenu()
|
||
|
sendData = nil
|
||
|
headerShown = false
|
||
|
SetNuiFocus(false)
|
||
|
SendNUIMessage({
|
||
|
action = 'CLOSE_MENU'
|
||
|
})
|
||
|
end
|
||
|
|
||
|
local function showHeader(data)
|
||
|
if not data or not next(data) then return end
|
||
|
headerShown = true
|
||
|
sendData = data
|
||
|
SendNUIMessage({
|
||
|
action = 'SHOW_HEADER',
|
||
|
data = table.clone(data)
|
||
|
})
|
||
|
end
|
||
|
|
||
|
-- Events
|
||
|
|
||
|
RegisterNetEvent('qb-menu:client:openMenu', function(data, sort, skipFirst)
|
||
|
openMenu(data, sort, skipFirst)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-menu:client:closeMenu', function()
|
||
|
closeMenu()
|
||
|
end)
|
||
|
|
||
|
-- NUI Callbacks
|
||
|
|
||
|
RegisterNUICallback('clickedButton', function(option, cb)
|
||
|
if headerShown then headerShown = false end
|
||
|
PlaySoundFrontend(-1, 'Highlight_Cancel', 'DLC_HEIST_PLANNING_BOARD_SOUNDS', 1)
|
||
|
SetNuiFocus(false)
|
||
|
if sendData then
|
||
|
local data = sendData[tonumber(option)]
|
||
|
sendData = nil
|
||
|
if data.action ~= nil then
|
||
|
data.action()
|
||
|
cb('ok')
|
||
|
return
|
||
|
end
|
||
|
if data then
|
||
|
if data.params.event then
|
||
|
if data.params.isServer then
|
||
|
TriggerServerEvent(data.params.event, data.params.args)
|
||
|
elseif data.params.isCommand then
|
||
|
ExecuteCommand(data.params.event)
|
||
|
elseif data.params.isQBCommand then
|
||
|
TriggerServerEvent('QBCore:CallCommand', data.params.event, data.params.args)
|
||
|
elseif data.params.isAction then
|
||
|
data.params.event(data.params.args)
|
||
|
else
|
||
|
TriggerEvent(data.params.event, data.params.args)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
cb('ok')
|
||
|
end)
|
||
|
|
||
|
|
||
|
RegisterNUICallback('closeMenu', function(_, cb)
|
||
|
headerShown = false
|
||
|
sendData = nil
|
||
|
SetNuiFocus(false)
|
||
|
cb('ok')
|
||
|
TriggerEvent("qb-menu:client:menuClosed")
|
||
|
end)
|
||
|
|
||
|
-- Command and Keymapping
|
||
|
|
||
|
RegisterCommand('playerfocus', function()
|
||
|
if headerShown then
|
||
|
SetNuiFocus(true, true)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterKeyMapping('playerFocus', 'Give Menu Focus', 'keyboard', 'LMENU')
|
||
|
|
||
|
-- Exports
|
||
|
|
||
|
exports('openMenu', openMenu)
|
||
|
exports('closeMenu', closeMenu)
|
||
|
exports('showHeader', showHeader)
|