Hey there.
I’m trying to create an esx style menu, for the civilian. To get an idea, it’s like the f6 menu as police, that I’m trying to recreate for civilians. I tried a few things, and am sharing my current state. I’m nowhere near my result, i just don’t know what I’m doing wrong, and would greatly appreciate some help heh. I have basically to noncoding experience, but I sure wanna learn. Please tell me what I’m doing wrong, here’s all my progress so far.
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
}
ESX = nil
local GUI = {}
GUI.Time = 0
Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end
end)
function OpenCivilianActionsMenu()
ESX.UI.Menu.CloseAll()
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'menu',
{
title = 'Civil',restart Testmenu
align = 'top-left',
elements = {
{label = _U('citizen_interaction'), value = 'citizen_interaction'},
{label = _U('vehicle_interaction'), value = 'vehicle_interaction'},
{label = _U('object_spawner'), value = 'object_spawner'},
},
},
function(data, menu)
if data.current.value == 'citizen_interaction' then
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'citizen_interaction',
{
title = _U('citizen_interaction'),
align = 'top-left',
elements = {
{label = _U('id_card'), value = 'identity_card'},
},
},
function(data2, menu2)
local player, distance = ESX.Game.GetClosestPlayer()
if distance ~= -1 and distance <= 3.0 then
if data2.current.value == 'identity_card' then
OpenIdentityCardMenu(player)
end
end,
function(data2, menu2)
menu2.close()
end
)
end
if data.current.value == 'vehicle_interaction' then
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'vehicle_interaction',
{
title = _U('vehicle_interaction'),
align = 'top-left',
elements = {
{label = _U('vehicle_info'), value = 'vehicle_infos'},
{label = _U('pick_lock'), value = 'hijack_vehicle'},
},
},
function(data2, menu2)
local playerPed = GetPlayerPed(-1)
local coords = GetEntityCoords(playerPed)
local vehicle = GetClosestVehicle(coords.x, coords.y, coords.z, 3.0, 0, 71)
if DoesEntityExist(vehicle) then
local vehicleData = ESX.Game.GetVehicleProperties(vehicle)
if data2.current.value == 'vehicle_infos' then
OpenVehicleInfosMenu(vehicleData)
end
if data2.current.value == 'hijack_vehicle' then
local playerPed = GetPlayerPed(-1)
local coords = GetEntityCoords(playerPed)
if IsAnyVehicleNearPoint(coords.x, coords.y, coords.z, 3.0) then
local vehicle = GetClosestVehicle(coords.x, coords.y, coords.z, 3.0, 0, 71)
if DoesEntityExist(vehicle) then
Citizen.CreateThread(function()
TaskStartScenarioInPlace(playerPed, "WORLD_HUMAN_WELDING", 0, true)
Wait(20000)
ClearPedTasksImmediately(playerPed)
SetVehicleDoorsLocked(vehicle, 1)
SetVehicleDoorsLockedForAllPlayers(vehicle, false)
TriggerEvent('esx:showNotification', _U('vehicle_unlocked'))
end)
end
end
end
else
ESX.ShowNotification(_U('no_vehicles_nearby'))
end
end,
function(data2, menu2)
menu2.close()
end
)
end
if data.current.value == 'object_spawner' then
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'citizen_interaction',
{
title = _U('traffic_interaction'),
align = 'top-left',
elements = {
{label = _U('cone'), value = 'prop_roadcone02a'},
{label = _U('barrier'), value = 'prop_barrier_work06a'},
{label = _U('spikestrips'), value = 'p_ld_stinger_s'},
{label = _U('box'), value = 'prop_boxpile_07d'},
{label = _U('cash'), value = 'hei_prop_cash_crate_half_full'}
},
},
function(data2, menu2)
local model = data2.current.value
local playerPed = GetPlayerPed(-1)
local coords = GetEntityCoords(playerPed)
local forward = GetEntityForwardVector(playerPed)
local x, y, z = table.unpack(coords + forward * 1.0)
if model == 'prop_roadcone02a' then
z = z - 2.0
end
ESX.Game.SpawnObject(model, {
x = x,
y = y,
z = z
}, function(obj)
SetEntityHeading(obj, GetEntityHeading(playerPed))
PlaceObjectOnGroundProperly(obj)
end)
end,
function(data2, menu2)
menu2.close()
end
)
end
end,
function(data, menu)
menu.close()
end
)
Citizen.CreateThread(function()
while true do
Wait(0)
if IsControlPressed(0, Keys["F6"]) and not ESX.UI.Menu.IsOpen('default', GetCurrentResourceName(), 'Testmenu') and (GetGameTimer() - GUI.Time) > 150 then
OpenCivilianActionsMenu()
GUI.Time = GetGameTimer()
end
end
end)
I named that file Main.lua, inside client folder.
My resource file looks like this:
resource_manifest_version '44febabe-d386-4d18-afbe-5e627f4af937'
description 'Test Menu'
version '1.0.4'
client_scripts {
'client/Main.lua'
}
(I havent filled out all the commands or options i want for civilians yet, (Also would love some advice on commands for that) I just wanna make sure this could work out, before i start really working into it)
I been taking code from esx_billing & police
Please don’t use this, bc well, first off it doesn’t work, and also I don’t wanna disrespect the creators of the original code…
This is solely for educational purposes and personal use. This is my first ever post, and i only been in the community for a week-ish… Soo please dont blame me too hard, im just trying to figure things out heh
Any help will be appreciated…