This repository has been archived on 2025-12-11. You can view files and clone it, but cannot push or open issues or pull requests.

133 lines
3.5 KiB
Lua

local GUI, MenuType, OpenedMenus, CurrentNameSpace = {}, "default", 0, nil
GUI.Time = 0
local function openMenu(namespace, name, data)
CurrentNameSpace = namespace
OpenedMenus = OpenedMenus + 1
SendNUIMessage({
action = "openMenu",
namespace = namespace,
name = name,
data = data,
})
end
local function closeMenu(namespace, name)
CurrentNameSpace = namespace
OpenedMenus = OpenedMenus - 1
if OpenedMenus < 0 then
OpenedMenus = 0
end
SendNUIMessage({
action = "closeMenu",
namespace = namespace,
name = name,
})
end
AddEventHandler("onResourceStop", function(resource)
if GetCurrentResourceName() == resource and OpenedMenus > 0 then
ESX.UI.Menu.CloseAll()
elseif CurrentNameSpace ~= nil and CurrentNameSpace == resource and OpenedMenus > 0 then
ESX.UI.Menu.CloseAll()
end
end)
ESX.UI.Menu.RegisterType(MenuType, openMenu, closeMenu)
RegisterNUICallback("menu_submit", function(data, cb)
local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
if menu.submit ~= nil then
menu.submit(data, menu)
end
cb("OK")
end)
RegisterNUICallback("menu_cancel", function(data, cb)
local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
if menu.cancel ~= nil then
menu.cancel(data, menu)
end
cb("OK")
end)
RegisterNUICallback("menu_change", function(data, cb)
local menu = ESX.UI.Menu.GetOpened(MenuType, data._namespace, data._name)
for i = 1, #data.elements, 1 do
menu.setElement(i, "value", data.elements[i].value)
if data.elements[i].selected then
menu.setElement(i, "selected", true)
else
menu.setElement(i, "selected", false)
end
end
if menu.change ~= nil then
menu.change(data, menu)
end
cb("OK")
end)
ESX.RegisterInput("menu_default_enter", "Submit menu item", "keyboard", "RETURN", function()
if OpenedMenus > 0 and (GetGameTimer() - GUI.Time) > 200 then
SendNUIMessage({
action = "controlPressed",
control = "ENTER",
})
GUI.Time = GetGameTimer()
end
end)
ESX.RegisterInput("menu_default_backspace", "Close menu", "keyboard", "BACK", function()
if OpenedMenus > 0 then
SendNUIMessage({
action = "controlPressed",
control = "BACKSPACE",
})
GUI.Time = GetGameTimer()
end
end)
ESX.RegisterInput("menu_default_top", "Change menu focus to top item", "keyboard", "UP", function()
if OpenedMenus > 0 then
SendNUIMessage({
action = "controlPressed",
control = "TOP",
})
GUI.Time = GetGameTimer()
end
end)
ESX.RegisterInput("menu_default_down", "Change menu focus to down item", "keyboard", "DOWN", function()
if OpenedMenus > 0 then
SendNUIMessage({
action = "controlPressed",
control = "DOWN",
})
GUI.Time = GetGameTimer()
end
end)
ESX.RegisterInput("menu_default_left", "Change menu slider to left", "keyboard", "LEFT", function()
if OpenedMenus > 0 then
SendNUIMessage({
action = "controlPressed",
control = "LEFT",
})
GUI.Time = GetGameTimer()
end
end)
ESX.RegisterInput("menu_default_right", "Change menu slider to right", "keyboard", "RIGHT", function()
if OpenedMenus > 0 then
SendNUIMessage({
action = "controlPressed",
control = "RIGHT",
})
GUI.Time = GetGameTimer()
end
end)