forked from Simnation/Main
238 lines
No EOL
5.8 KiB
Lua
238 lines
No EOL
5.8 KiB
Lua
ESXMenu = {}
|
|
ESXMenu.UI = {}
|
|
ESXMenu.UI.Menu = {}
|
|
ESXMenu.UI.Menu.RegisteredTypes = {}
|
|
ESXMenu.UI.Menu.Opened = {}
|
|
ESXMenu.UI.Menu.RegisterType = function(type, open, close)
|
|
ESXMenu.UI.Menu.RegisteredTypes[type] = {
|
|
open = open,
|
|
close = close
|
|
}
|
|
end
|
|
|
|
ESXMenu.UI.Menu.Open = function(type, namespace, name, data, submit, cancel, change, close)
|
|
local menu = {}
|
|
menu.type = type
|
|
menu.namespace = namespace
|
|
menu.name = name
|
|
menu.data = data
|
|
menu.submit = submit
|
|
menu.cancel = cancel
|
|
menu.change = change
|
|
|
|
menu.close = function()
|
|
|
|
ESXMenu.UI.Menu.RegisteredTypes[type].close(namespace, name)
|
|
|
|
for i=1, #ESXMenu.UI.Menu.Opened, 1 do
|
|
if ESXMenu.UI.Menu.Opened[i] then
|
|
if ESXMenu.UI.Menu.Opened[i].type == type and ESXMenu.UI.Menu.Opened[i].namespace == namespace and ESXMenu.UI.Menu.Opened[i].name == name then
|
|
ESXMenu.UI.Menu.Opened[i] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
if close then
|
|
close()
|
|
end
|
|
|
|
end
|
|
|
|
menu.update = function(query, newData)
|
|
|
|
for i=1, #menu.data.elements, 1 do
|
|
local match = true
|
|
|
|
for k,v in pairs(query) do
|
|
if menu.data.elements[i][k] ~= v then
|
|
match = false
|
|
end
|
|
end
|
|
|
|
if match then
|
|
for k,v in pairs(newData) do
|
|
menu.data.elements[i][k] = v
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
menu.refresh = function()
|
|
ESXMenu.UI.Menu.RegisteredTypes[type].open(namespace, name, menu.data)
|
|
end
|
|
|
|
menu.setElement = function(i, key, val)
|
|
menu.data.elements[i][key] = val
|
|
end
|
|
|
|
menu.setElements = function(newElements)
|
|
menu.data.elements = newElements
|
|
end
|
|
|
|
menu.setTitle = function(val)
|
|
menu.data.title = val
|
|
end
|
|
|
|
menu.removeElement = function(query)
|
|
for i=1, #menu.data.elements, 1 do
|
|
for k,v in pairs(query) do
|
|
if menu.data.elements[i] then
|
|
if menu.data.elements[i][k] == v then
|
|
table.remove(menu.data.elements, i)
|
|
break
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
table.insert(ESXMenu.UI.Menu.Opened, menu)
|
|
ESXMenu.UI.Menu.RegisteredTypes[type].open(namespace, name, data)
|
|
|
|
return menu
|
|
end
|
|
|
|
ESXMenu.UI.Menu.Close = function(type, namespace, name)
|
|
for i=1, #ESXMenu.UI.Menu.Opened, 1 do
|
|
if ESXMenu.UI.Menu.Opened[i] then
|
|
if ESXMenu.UI.Menu.Opened[i].type == type and ESXMenu.UI.Menu.Opened[i].namespace == namespace and ESXMenu.UI.Menu.Opened[i].name == name then
|
|
ESXMenu.UI.Menu.Opened[i].close()
|
|
ESXMenu.UI.Menu.Opened[i] = nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
ESXMenu.UI.Menu.CloseAll = function()
|
|
for i=1, #ESXMenu.UI.Menu.Opened, 1 do
|
|
if ESXMenu.UI.Menu.Opened[i] then
|
|
ESXMenu.UI.Menu.Opened[i].close()
|
|
ESXMenu.UI.Menu.Opened[i] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
ESXMenu.UI.Menu.GetOpened = function(type, namespace, name)
|
|
for i=1, #ESXMenu.UI.Menu.Opened, 1 do
|
|
if ESXMenu.UI.Menu.Opened[i] then
|
|
if ESXMenu.UI.Menu.Opened[i].type == type and ESXMenu.UI.Menu.Opened[i].namespace == namespace and ESXMenu.UI.Menu.Opened[i].name == name then
|
|
return ESXMenu.UI.Menu.Opened[i]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
ESXMenu.UI.Menu.GetOpenedMenus = function()
|
|
return ESXMenu.UI.Menu.Opened
|
|
end
|
|
|
|
ESXMenu.UI.Menu.IsOpen = function(type, namespace, name)
|
|
return ESXMenu.UI.Menu.GetOpened(type, namespace, name) ~= nil
|
|
end
|
|
|
|
Citizen.CreateThread(function()
|
|
local GUI, MenuType = {}, 'default'
|
|
GUI.Time = 0
|
|
|
|
local openMenu = function(namespace, name, data)
|
|
SendNUIMessage({
|
|
action = 'openMenu',
|
|
namespace = namespace,
|
|
name = name,
|
|
data = data
|
|
})
|
|
end
|
|
|
|
local closeMenu = function(namespace, name)
|
|
SendNUIMessage({
|
|
action = 'closeMenu',
|
|
namespace = namespace,
|
|
name = name,
|
|
data = data
|
|
})
|
|
end
|
|
|
|
ESXMenu.UI.Menu.RegisterType(MenuType, openMenu, closeMenu)
|
|
|
|
RegisterNUICallback('menu_submit', function(data, cb)
|
|
local menu = ESXMenu.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 = ESXMenu.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 = ESXMenu.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)
|
|
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
Citizen.Wait(15)
|
|
|
|
if IsControlPressed(0, 18) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 150 then
|
|
SendNUIMessage({action = 'controlPressed', control = 'ENTER'})
|
|
GUI.Time = GetGameTimer()
|
|
end
|
|
|
|
if IsControlPressed(0, 177) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 150 then
|
|
SendNUIMessage({action = 'controlPressed', control = 'BACKSPACE'})
|
|
GUI.Time = GetGameTimer()
|
|
end
|
|
|
|
if IsControlPressed(0, 27) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 200 then
|
|
SendNUIMessage({action = 'controlPressed', control = 'TOP'})
|
|
GUI.Time = GetGameTimer()
|
|
end
|
|
|
|
if IsControlPressed(0, 173) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 200 then
|
|
SendNUIMessage({action = 'controlPressed', control = 'DOWN'})
|
|
GUI.Time = GetGameTimer()
|
|
end
|
|
|
|
if IsControlPressed(0, 174) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 150 then
|
|
SendNUIMessage({action = 'controlPressed', control = 'LEFT'})
|
|
GUI.Time = GetGameTimer()
|
|
end
|
|
|
|
if IsControlPressed(0, 175) and IsInputDisabled(0) and (GetGameTimer() - GUI.Time) > 150 then
|
|
SendNUIMessage({action = 'controlPressed', control = 'RIGHT'})
|
|
GUI.Time = GetGameTimer()
|
|
end
|
|
end
|
|
end)
|
|
end)
|
|
|
|
exports('GetMenu', function()
|
|
return ESXMenu
|
|
end)
|
|
|
|
function GetMenu()
|
|
return ESXMenu
|
|
end |