mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-09-04 16:23:21 +00:00
Add files
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
resource_manifest_version '44febabe-d386-4d18-afbe-5e627f4af937'
|
||||
|
||||
description 'ESX Menu Default'
|
||||
|
||||
client_scripts {
|
||||
'client/main.lua'
|
||||
}
|
||||
|
||||
ui_page {
|
||||
'html/ui.html'
|
||||
}
|
||||
|
||||
files {
|
||||
'html/ui.html',
|
||||
'html/css/app.css',
|
||||
'html/js/mustache.min.js',
|
||||
'html/js/app.js',
|
||||
'html/fonts/pdown.ttf',
|
||||
'html/fonts/bankgothic.ttf',
|
||||
'html/img/cursor.png',
|
||||
'html/img/keys/enter.png',
|
||||
'html/img/keys/return.png',
|
||||
}
|
||||
+167
@@ -0,0 +1,167 @@
|
||||
ESX = nil
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
|
||||
while ESX == nil do
|
||||
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
|
||||
Citizen.Wait(0)
|
||||
end
|
||||
|
||||
local Keys = {
|
||||
["ESC"] = 322, ["F1"] = 288, ["F2"] = 289, ["F3"] = 170, ["F5"] = 166, ["F6"] = 167, ["F7"] = 168, ["F8"] = 169, ["F9"] = 56, ["F10"] = 57,
|
||||
["~"] = 243, ["1"] = 157, ["2"] = 158, ["3"] = 160, ["4"] = 164, ["5"] = 165, ["6"] = 159, ["7"] = 161, ["8"] = 162, ["9"] = 163, ["-"] = 84, ["="] = 83, ["BACKSPACE"] = 177,
|
||||
["TAB"] = 37, ["Q"] = 44, ["W"] = 32, ["E"] = 38, ["R"] = 45, ["T"] = 245, ["Y"] = 246, ["U"] = 303, ["P"] = 199, ["["] = 39, ["]"] = 40, ["ENTER"] = 18,
|
||||
["CAPS"] = 137, ["A"] = 34, ["S"] = 8, ["D"] = 9, ["F"] = 23, ["G"] = 47, ["H"] = 74, ["K"] = 311, ["L"] = 182,
|
||||
["LEFTSHIFT"] = 21, ["Z"] = 20, ["X"] = 73, ["C"] = 26, ["V"] = 0, ["B"] = 29, ["N"] = 249, ["M"] = 244, [","] = 82, ["."] = 81,
|
||||
["LEFTCTRL"] = 36, ["LEFTALT"] = 19, ["SPACE"] = 22, ["RIGHTCTRL"] = 70,
|
||||
["HOME"] = 213, ["PAGEUP"] = 10, ["PAGEDOWN"] = 11, ["DELETE"] = 178,
|
||||
["LEFT"] = 174, ["RIGHT"] = 175, ["TOP"] = 27, ["DOWN"] = 173,
|
||||
["NENTER"] = 201, ["N4"] = 108, ["N5"] = 60, ["N6"] = 107, ["N+"] = 96, ["N-"] = 97, ["N7"] = 117, ["N8"] = 61, ["N9"] = 118
|
||||
}
|
||||
|
||||
local GUI = {}
|
||||
GUI.Time = 0
|
||||
local MenuType = 'default'
|
||||
|
||||
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
|
||||
|
||||
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)
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
|
||||
Wait(0)
|
||||
|
||||
if IsControlPressed(0, Keys['ENTER']) and (GetGameTimer() - GUI.Time) > 150 then
|
||||
|
||||
SendNUIMessage({
|
||||
action = 'controlPressed',
|
||||
control = 'ENTER'
|
||||
})
|
||||
|
||||
GUI.Time = GetGameTimer()
|
||||
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Keys['BACKSPACE']) and (GetGameTimer() - GUI.Time) > 150 then
|
||||
|
||||
SendNUIMessage({
|
||||
action = 'controlPressed',
|
||||
control = 'BACKSPACE'
|
||||
})
|
||||
|
||||
GUI.Time = GetGameTimer()
|
||||
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Keys['TOP']) and (GetGameTimer() - GUI.Time) > 150 then
|
||||
|
||||
SendNUIMessage({
|
||||
action = 'controlPressed',
|
||||
control = 'TOP'
|
||||
})
|
||||
|
||||
GUI.Time = GetGameTimer()
|
||||
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Keys['DOWN']) and (GetGameTimer() - GUI.Time) > 150 then
|
||||
|
||||
SendNUIMessage({
|
||||
action = 'controlPressed',
|
||||
control = 'DOWN'
|
||||
})
|
||||
|
||||
GUI.Time = GetGameTimer()
|
||||
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Keys['LEFT']) and (GetGameTimer() - GUI.Time) > 150 then
|
||||
|
||||
SendNUIMessage({
|
||||
action = 'controlPressed',
|
||||
control = 'LEFT'
|
||||
})
|
||||
|
||||
GUI.Time = GetGameTimer()
|
||||
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Keys['RIGHT']) and (GetGameTimer() - GUI.Time) > 150 then
|
||||
|
||||
SendNUIMessage({
|
||||
action = 'controlPressed',
|
||||
control = 'RIGHT'
|
||||
})
|
||||
|
||||
GUI.Time = GetGameTimer()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end)
|
||||
|
||||
end)
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
Config = {}
|
||||
|
||||
Config.accounts = {'bank', 'black_money'}
|
||||
Config.accountLabels = {'Banque', 'Argent Sale'}
|
||||
Config.PaycheckInterval = 7 * 60000
|
||||
Config.ShowDotAbovePlayer = false
|
||||
Config.RemoveInventoryItemDelay = 5 * 60000
|
||||
|
||||
Config.Weapons = {
|
||||
|
||||
{name = 'WEAPON_UNARMED'},
|
||||
{name = 'WEAPON_ANIMAL'},
|
||||
{name = 'WEAPON_COUGAR'},
|
||||
{name = 'WEAPON_KNIFE'},
|
||||
{name = 'WEAPON_NIGHTSTICK'},
|
||||
{name = 'WEAPON_HAMMER'},
|
||||
{name = 'WEAPON_BAT'},
|
||||
{name = 'WEAPON_GOLFCLUB'},
|
||||
{name = 'WEAPON_CROWBAR'},
|
||||
{name = 'WEAPON_PISTOL'},
|
||||
{name = 'WEAPON_COMBATPISTOL'},
|
||||
{name = 'WEAPON_APPISTOL'},
|
||||
{name = 'WEAPON_PISTOL50'},
|
||||
{name = 'WEAPON_MICROSMG'},
|
||||
{name = 'WEAPON_SMG'},
|
||||
{name = 'WEAPON_ASSAULTSMG'},
|
||||
{name = 'WEAPON_ASSAULTRIFLE'},
|
||||
{name = 'WEAPON_CARBINERIFLE'},
|
||||
{name = 'WEAPON_ADVANCEDRIFLE'},
|
||||
{name = 'WEAPON_MG'},
|
||||
{name = 'WEAPON_COMBATMG'},
|
||||
{name = 'WEAPON_PUMPSHOTGUN'},
|
||||
{name = 'WEAPON_SAWNOFFSHOTGUN'},
|
||||
{name = 'WEAPON_ASSAULTSHOTGUN'},
|
||||
{name = 'WEAPON_BULLPUPSHOTGUN'},
|
||||
{name = 'WEAPON_STUNGUN'},
|
||||
{name = 'WEAPON_SNIPERRIFLE'},
|
||||
{name = 'WEAPON_HEAVYSNIPER'},
|
||||
{name = 'WEAPON_REMOTESNIPER'},
|
||||
{name = 'WEAPON_GRENADELAUNCHER'},
|
||||
{name = 'WEAPON_GRENADELAUNCHER_SMOKE'},
|
||||
{name = 'WEAPON_RPG'},
|
||||
{name = 'WEAPON_PASSENGER_ROCKET'},
|
||||
{name = 'WEAPON_AIRSTRIKE_ROCKET'},
|
||||
{name = 'WEAPON_STINGER'},
|
||||
{name = 'WEAPON_MINIGUN'},
|
||||
{name = 'WEAPON_GRENADE'},
|
||||
{name = 'WEAPON_STICKYBOMB'},
|
||||
{name = 'WEAPON_SMOKEGRENADE'},
|
||||
{name = 'WEAPON_BZGAS'},
|
||||
{name = 'WEAPON_MOLOTOV'},
|
||||
{name = 'WEAPON_FIREEXTINGUISHER'},
|
||||
{name = 'WEAPON_PETROLCAN'},
|
||||
{name = 'WEAPON_DIGISCANNER'},
|
||||
{name = 'WEAPON_BRIEFCASE'},
|
||||
{name = 'WEAPON_BRIEFCASE_02'},
|
||||
{name = 'WEAPON_BALL'},
|
||||
{name = 'WEAPON_FLARE'},
|
||||
{name = 'WEAPON_VEHICLE_ROCKET'},
|
||||
{name = 'WEAPON_BARBED_WIRE'},
|
||||
{name = 'WEAPON_DROWNING'},
|
||||
{name = 'WEAPON_DROWNING_IN_VEHICLE'},
|
||||
{name = 'WEAPON_BLEEDING'},
|
||||
{name = 'WEAPON_ELECTRIC_FENCE'},
|
||||
{name = 'WEAPON_EXPLOSION'},
|
||||
{name = 'WEAPON_FALL'},
|
||||
{name = 'WEAPON_EXHAUSTION'},
|
||||
{name = 'WEAPON_HIT_BY_WATER_CANNON'},
|
||||
{name = 'WEAPON_RAMMED_BY_CAR'},
|
||||
{name = 'WEAPON_RUN_OVER_BY_CAR'},
|
||||
{name = 'WEAPON_HELI_CRASH'},
|
||||
{name = 'WEAPON_FIRE'}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
@font-face {
|
||||
font-family: bankgothic;
|
||||
src: url('../fonts/bankgothic.ttf');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: pcdown;
|
||||
src: url('../fonts/pdown.ttf');
|
||||
}
|
||||
.menu {
|
||||
font-family: bankgothic;
|
||||
min-width : 400px;
|
||||
color : #fff;
|
||||
box-shadow : 0px 0px 50px 0px #000;
|
||||
position : absolute;
|
||||
}
|
||||
|
||||
.menu.align-left {
|
||||
left: 40;
|
||||
top : 50%;
|
||||
transform: translate(0, -50%);
|
||||
}
|
||||
|
||||
.menu.align-top-left {
|
||||
left: 40;
|
||||
top : 40;
|
||||
}
|
||||
|
||||
.menu.align-top {
|
||||
left: 50%;
|
||||
top : 40;
|
||||
transform: translate(-50%, 0);
|
||||
}
|
||||
|
||||
.menu.align-top-right {
|
||||
right: 10;
|
||||
top : 40;
|
||||
}
|
||||
|
||||
.menu.align-right {
|
||||
right: 40;
|
||||
top : 50%;
|
||||
transform: translate(0, -50%);
|
||||
}
|
||||
|
||||
.menu.align-bottom-right {
|
||||
right : 40;
|
||||
bottom: 40;
|
||||
}
|
||||
|
||||
.menu.align-bottom {
|
||||
left : 50%;
|
||||
bottom: 40;
|
||||
transform: translate(-50%, 0);
|
||||
}
|
||||
|
||||
.menu.align-bottom-left {
|
||||
left : 40;
|
||||
bottom: 40;
|
||||
}
|
||||
|
||||
.menu.align-center {
|
||||
left : 50%;
|
||||
top : 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.menu .head {
|
||||
background-color: #506be6;
|
||||
text-align : center;
|
||||
height : 40px;
|
||||
line-height : 40px;
|
||||
}
|
||||
|
||||
.menu .menu-items {
|
||||
max-height : 600px;
|
||||
overflow-y : auto;
|
||||
}
|
||||
|
||||
.menu .menu-items .menu-item {
|
||||
height : 40px;
|
||||
display : block;
|
||||
background-color: #f1f1f1;
|
||||
box-shadow : inset 1px 0px 0px 1px #b8b8b8;
|
||||
height : 32px;
|
||||
line-height : 32px;
|
||||
color : #3A3A3A;
|
||||
text-align : center;
|
||||
}
|
||||
|
||||
.menu .menu-items .menu-item.selected {
|
||||
background-color: #d0d0d0;
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 1015 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 272 B |
Binary file not shown.
|
After Width: | Height: | Size: 941 B |
Binary file not shown.
|
After Width: | Height: | Size: 376 B |
+344
@@ -0,0 +1,344 @@
|
||||
(function(){
|
||||
|
||||
let MenuTpl =
|
||||
'<div id="menu_{{_namespace}}_{{_name}}" class="menu{{#align}} align-{{align}}{{/align}}">' +
|
||||
'<div class="head"><span>{{title}}</span></div>' +
|
||||
'<div class="menu-items">' +
|
||||
'{{#elements}}' +
|
||||
'<div class="menu-item {{#selected}}selected{{/selected}}">' +
|
||||
'{{label}}{{#isSlider}} : <{{sliderLabel}}>{{/isSlider}}' +
|
||||
'</div>' +
|
||||
'{{/elements}}' +
|
||||
'</div>'+
|
||||
'</div>' +
|
||||
'</div>'
|
||||
;
|
||||
|
||||
window.ESX_MENU = {};
|
||||
ESX_MENU.ResourceName = 'esx_menu_default';
|
||||
ESX_MENU.opened = {};
|
||||
ESX_MENU.focus = [];
|
||||
ESX_MENU.pos = {};
|
||||
|
||||
ESX_MENU.open = function(namespace, name, data){
|
||||
|
||||
if(typeof ESX_MENU.opened[namespace] == 'undefined')
|
||||
ESX_MENU.opened[namespace] = {};
|
||||
|
||||
if(typeof ESX_MENU.opened[namespace][name] != 'undefined')
|
||||
ESX_MENU.close(namespace, name);
|
||||
|
||||
if(typeof ESX_MENU.pos[namespace] == 'undefined')
|
||||
ESX_MENU.pos[namespace] = {};
|
||||
|
||||
for(let i=0; i<data.elements.length; i++)
|
||||
if(typeof data.elements[i].type == 'undefined')
|
||||
data.elements[i].type = 'default';
|
||||
|
||||
data._index = ESX_MENU.focus.length;
|
||||
data._namespace = namespace;
|
||||
data._name = name;
|
||||
|
||||
for(let i=0; i<data.elements.length; i++){
|
||||
data.elements[i]._namespace = namespace;
|
||||
data.elements[i]._name = name;
|
||||
}
|
||||
|
||||
ESX_MENU.opened[namespace][name] = data;
|
||||
ESX_MENU.pos [namespace][name] = 0;
|
||||
|
||||
for(let i=0; i<data.elements.length; i++){
|
||||
if(data.elements[i].selected)
|
||||
ESX_MENU.pos[namespace][name] = i;
|
||||
else
|
||||
data.elements[i].selected = false
|
||||
}
|
||||
|
||||
ESX_MENU.focus.push({
|
||||
namespace: namespace,
|
||||
name : name
|
||||
});
|
||||
|
||||
ESX_MENU.render();
|
||||
|
||||
$('#menu_' + namespace + '_' + name).find('.menu-item.selected')[0].scrollIntoView();
|
||||
}
|
||||
|
||||
ESX_MENU.close = function(namespace, name){
|
||||
|
||||
delete ESX_MENU.opened[namespace][name];
|
||||
|
||||
for(let i=0; i<ESX_MENU.focus.length; i++){
|
||||
if(ESX_MENU.focus[i].namespace == namespace && ESX_MENU.focus[i].name == name){
|
||||
ESX_MENU.focus.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ESX_MENU.render();
|
||||
|
||||
}
|
||||
|
||||
ESX_MENU.render = function(){
|
||||
|
||||
let menuContainer = document.getElementById('menus');
|
||||
let focused = ESX_MENU.getFocused();
|
||||
menuContainer.innerHTML = '';
|
||||
|
||||
$(menuContainer).hide();
|
||||
|
||||
for(let namespace in ESX_MENU.opened){
|
||||
for(let name in ESX_MENU.opened[namespace]){
|
||||
|
||||
let menuData = ESX_MENU.opened[namespace][name];
|
||||
let view = JSON.parse(JSON.stringify(menuData))
|
||||
|
||||
for(let i=0; i<menuData.elements.length; i++){
|
||||
|
||||
let element = view.elements[i];
|
||||
|
||||
switch(element.type){
|
||||
|
||||
case 'default' : break;
|
||||
|
||||
case 'slider' : {
|
||||
|
||||
element.isSlider = true;
|
||||
element.sliderLabel = (typeof element.options == 'undefined') ? element.value : element.options[element.value];
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default : break;
|
||||
|
||||
}
|
||||
|
||||
if(i == ESX_MENU.pos[namespace][name])
|
||||
element.selected = true;
|
||||
}
|
||||
|
||||
let menu = $(Mustache.render(MenuTpl, view))[0];
|
||||
|
||||
$(menu).hide();
|
||||
|
||||
menuContainer.appendChild(menu);
|
||||
}
|
||||
}
|
||||
|
||||
if(typeof focused != 'undefined')
|
||||
$('#menu_' + focused.namespace + '_' + focused.name).show();
|
||||
|
||||
$(menuContainer).show();
|
||||
|
||||
}
|
||||
|
||||
ESX_MENU.submit = function(namespace, name, data){
|
||||
$.post('http://' + ESX_MENU.ResourceName + '/menu_submit', JSON.stringify({
|
||||
_namespace: namespace,
|
||||
_name : name,
|
||||
current : data,
|
||||
elements : ESX_MENU.opened[namespace][name].elements
|
||||
}));
|
||||
}
|
||||
|
||||
ESX_MENU.cancel = function(namespace, name){
|
||||
$.post('http://' + ESX_MENU.ResourceName + '/menu_cancel', JSON.stringify({
|
||||
_namespace: namespace,
|
||||
_name : name
|
||||
}));
|
||||
}
|
||||
|
||||
ESX_MENU.change = function(namespace, name, data){
|
||||
$.post('http://' + ESX_MENU.ResourceName + '/menu_change', JSON.stringify({
|
||||
_namespace: namespace,
|
||||
_name : name,
|
||||
current : data,
|
||||
elements : ESX_MENU.opened[namespace][name].elements
|
||||
}));
|
||||
}
|
||||
|
||||
ESX_MENU.getFocused = function(){
|
||||
return ESX_MENU.focus[ESX_MENU.focus.length - 1];
|
||||
}
|
||||
|
||||
window.onData = (data) => {
|
||||
|
||||
switch(data.action){
|
||||
|
||||
case 'openMenu' : {
|
||||
ESX_MENU.open(data.namespace, data.name, data.data);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'closeMenu' : {
|
||||
ESX_MENU.close(data.namespace, data.name);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'controlPressed' : {
|
||||
|
||||
switch(data.control){
|
||||
|
||||
case 'ENTER' : {
|
||||
|
||||
let focused = ESX_MENU.getFocused();
|
||||
let menu = ESX_MENU.opened[focused.namespace][focused.name];
|
||||
let pos = ESX_MENU.pos[focused.namespace][focused.name];
|
||||
let elem = menu.elements[pos];
|
||||
|
||||
if(menu.elements.length > 0)
|
||||
ESX_MENU.submit(focused.namespace, focused.name, elem);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 'BACKSPACE' : {
|
||||
|
||||
let focused = ESX_MENU.getFocused();
|
||||
|
||||
ESX_MENU.cancel(focused.namespace, focused.name);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 'TOP' : {
|
||||
|
||||
let focused = ESX_MENU.getFocused();
|
||||
let menu = ESX_MENU.opened[focused.namespace][focused.name];
|
||||
let pos = ESX_MENU.pos[focused.namespace][focused.name];
|
||||
|
||||
if(pos > 0)
|
||||
ESX_MENU.pos[focused.namespace][focused.name]--;
|
||||
|
||||
let elem = menu.elements[ESX_MENU.pos[focused.namespace][focused.name]];
|
||||
|
||||
for(let i=0; i<menu.elements.length; i++){
|
||||
if(i == ESX_MENU.pos[focused.namespace][focused.name])
|
||||
menu.elements[i].selected = true
|
||||
else
|
||||
menu.elements[i].selected = false
|
||||
}
|
||||
|
||||
ESX_MENU.change(focused.namespace, focused.name, elem)
|
||||
ESX_MENU.render();
|
||||
|
||||
$('#menu_' + focused.namespace + '_' + focused.name).find('.menu-item.selected')[0].scrollIntoView();
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case 'DOWN' : {
|
||||
|
||||
let focused = ESX_MENU.getFocused();
|
||||
let menu = ESX_MENU.opened[focused.namespace][focused.name];
|
||||
let pos = ESX_MENU.pos[focused.namespace][focused.name];
|
||||
let length = menu.elements.length;
|
||||
|
||||
if(pos < length - 1)
|
||||
ESX_MENU.pos[focused.namespace][focused.name]++;
|
||||
|
||||
let elem = menu.elements[ESX_MENU.pos[focused.namespace][focused.name]];
|
||||
|
||||
for(let i=0; i<menu.elements.length; i++){
|
||||
if(i == ESX_MENU.pos[focused.namespace][focused.name])
|
||||
menu.elements[i].selected = true
|
||||
else
|
||||
menu.elements[i].selected = false
|
||||
}
|
||||
|
||||
ESX_MENU.change(focused.namespace, focused.name, elem)
|
||||
ESX_MENU.render();
|
||||
|
||||
$('#menu_' + focused.namespace + '_' + focused.name).find('.menu-item.selected')[0].scrollIntoView();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 'LEFT' : {
|
||||
|
||||
let focused = ESX_MENU.getFocused();
|
||||
let menu = ESX_MENU.opened[focused.namespace][focused.name];
|
||||
let pos = ESX_MENU.pos[focused.namespace][focused.name];
|
||||
let elem = menu.elements[pos];
|
||||
|
||||
switch(elem.type){
|
||||
|
||||
case 'default': break;
|
||||
|
||||
case 'slider' : {
|
||||
|
||||
if(elem.value > 0){
|
||||
elem.value--;
|
||||
ESX_MENU.change(focused.namespace, focused.name, elem)
|
||||
}
|
||||
|
||||
ESX_MENU.render();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default: break;
|
||||
|
||||
}
|
||||
|
||||
$('#menu_' + focused.namespace + '_' + focused.name).find('.menu-item.selected')[0].scrollIntoView();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 'RIGHT' : {
|
||||
|
||||
let focused = ESX_MENU.getFocused();
|
||||
let menu = ESX_MENU.opened[focused.namespace][focused.name];
|
||||
let pos = ESX_MENU.pos[focused.namespace][focused.name];
|
||||
let elem = menu.elements[pos];
|
||||
|
||||
switch(elem.type){
|
||||
|
||||
case 'default': break;
|
||||
|
||||
case 'slider' : {
|
||||
|
||||
if(typeof elem.options != 'undefined' && elem.value < elem.options.length - 1){
|
||||
elem.value++;
|
||||
ESX_MENU.change(focused.namespace, focused.name, elem)
|
||||
}
|
||||
|
||||
if(typeof elem.max != 'undefined' && elem.value < elem.max){
|
||||
elem.value++;
|
||||
ESX_MENU.change(focused.namespace, focused.name, elem)
|
||||
}
|
||||
|
||||
ESX_MENU.render();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default: break;
|
||||
|
||||
}
|
||||
|
||||
$('#menu_' + focused.namespace + '_' + focused.name).find('.menu-item.selected')[0].scrollIntoView();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default : break;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
window.onload = function(e){
|
||||
window.addEventListener('message', (event) => {
|
||||
onData(event.data)
|
||||
});
|
||||
}
|
||||
|
||||
})()
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="css/app.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="menus"></div>
|
||||
|
||||
<!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> -->
|
||||
<script src="nui://game/ui/jquery.js" type="text/javascript"></script>
|
||||
<script src="js/mustache.min.js"></script>
|
||||
<script src="js/app.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user