124 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			124 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)
 |