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 | 
