diff --git a/[esx_addons]/esx_billing/client/main.lua b/[esx_addons]/esx_billing/client/main.lua index 8d11628b..ec15c725 100644 --- a/[esx_addons]/esx_billing/client/main.lua +++ b/[esx_addons]/esx_billing/client/main.lua @@ -3,28 +3,22 @@ local isDead = false function ShowBillsMenu() ESX.TriggerServerCallback('esx_billing:getBills', function(bills) if #bills > 0 then - ESX.UI.Menu.CloseAll() - local elements = {} + local elements = { + {unselectable = true, icon = "fas fa-scroll", title = TranslateCap('invoices')} + } for k,v in ipairs(bills) do - table.insert(elements, { - label = ('%s - %s'):format(v.label, TranslateCap('invoices_item', ESX.Math.GroupDigits(v.amount))), + elements[#elements+1] = { + icon = "fas fa-scroll", + title = ('%s - %s'):format(v.label, TranslateCap('invoices_item', ESX.Math.GroupDigits(v.amount))), billId = v.id - }) + } end - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'billing', { - title = TranslateCap('invoices'), - align = 'bottom-right', - elements = elements - }, function(data, menu) - menu.close() - + ESX.OpenContext("right", elements, function(menu,element) ESX.TriggerServerCallback('esx_billing:payBill', function() ShowBillsMenu() - end, data.current.billId) - end, function(data, menu) - menu.close() + end, element.billId) end) else ESX.ShowNotification(TranslateCap('no_invoices')) diff --git a/[esx_addons]/esx_dmvschool/client/main.lua b/[esx_addons]/esx_dmvschool/client/main.lua index 453004f9..1cbdce5d 100644 --- a/[esx_addons]/esx_dmvschool/client/main.lua +++ b/[esx_addons]/esx_dmvschool/client/main.lua @@ -92,70 +92,68 @@ function OpenDMVSchoolMenu() ownedLicenses[Licenses[i].type] = true end - local elements = {} + local elements = { + {unselectable = true, icon = "fas fa-car", title = TranslateCap("driving_school")} + } if not ownedLicenses['dmv'] then - table.insert(elements, { - label = (('%s: %s'):format(TranslateCap('theory_test'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['dmv'])))), - value = 'theory_test' - }) + elements[#elements+1] = { + icon = "fas fa-car", + title = (('%s: %s'):format(TranslateCap('theory_test'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['dmv'])))), + value = "theory_test" + } end if ownedLicenses['dmv'] then if not ownedLicenses['drive'] then - table.insert(elements, { - label = (('%s: %s'):format(TranslateCap('road_test_car'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive'])))), - value = 'drive_test', - type = 'drive' - }) + elements[#elements+1] = { + icon = "fas fa-car", + title = (('%s: %s'):format(TranslateCap('road_test_car'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive'])))), + value = "drive_test", + type = "drive" + } end if not ownedLicenses['drive_bike'] then - table.insert(elements, { - label = (('%s: %s'):format(TranslateCap('road_test_bike'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive_bike'])))), - value = 'drive_test', - type = 'drive_bike' - }) + elements[#elements+1] = { + icon = "fas fa-car", + title = (('%s: %s'):format(TranslateCap('road_test_bike'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive_bike'])))), + value = "drive_test", + type = "drive_bike" + } end if not ownedLicenses['drive_truck'] then - table.insert(elements, { - label = (('%s: %s'):format(TranslateCap('road_test_truck'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive_truck'])))), - value = 'drive_test', - type = 'drive_truck' - }) + elements[#elements+1] = { + icon = "fas fa-car", + title = (('%s: %s'):format(TranslateCap('road_test_truck'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive_truck'])))), + value = "drive_test", + type = "drive_truck" + } end end - ESX.UI.Menu.CloseAll() - - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'dmvschool_actions', { - title = TranslateCap('driving_school'), - elements = elements, - align = 'bottom-right' - }, function(data, menu) - if data.current.value == 'theory_test' then - menu.close() + ESX.OpenContext("right", elements, function(menu,element) + if element.value == "theory_test" then ESX.TriggerServerCallback('esx_dmvschool:canYouPay', function(haveMoney) if haveMoney then + ESX.CloseContext() StartTheoryTest() else ESX.ShowNotification(TranslateCap('not_enough_money')) end end, 'dmv') - elseif data.current.value == 'drive_test' then - menu.close() + elseif element.value == "drive_test" then ESX.TriggerServerCallback('esx_dmvschool:canYouPay', function(haveMoney) if haveMoney then - StartDriveTest(data.current.type) + ESX.CloseContext() + StartDriveTest(element.type) else ESX.ShowNotification(TranslateCap('not_enough_money')) end - end, data.current.type) + end, element.type) end - end, function(data, menu) - menu.close() - + end, function(menu) CurrentAction = 'dmvschool_menu' CurrentActionMsg = TranslateCap('press_open_menu') CurrentActionData = {} @@ -190,7 +188,7 @@ end) AddEventHandler('esx_dmvschool:hasExitedMarker', function(zone) CurrentAction = nil - ESX.UI.Menu.CloseAll() + ESX.CloseContext() end) RegisterNetEvent('esx_dmvschool:loadLicenses') @@ -286,8 +284,8 @@ CreateThread(function() ESX.ShowHelpNotification(CurrentActionMsg) if (IsControlJustReleased(0, 38)) and (CurrentAction == 'dmvschool_menu') then - OpenDMVSchoolMenu() - CurrentAction = nil + OpenDMVSchoolMenu() + CurrentAction = nil end end diff --git a/[esx_addons]/esx_taxijob/client/main.lua b/[esx_addons]/esx_taxijob/client/main.lua index f8cc1614..e1161b45 100644 --- a/[esx_addons]/esx_taxijob/client/main.lua +++ b/[esx_addons]/esx_taxijob/client/main.lua @@ -97,24 +97,18 @@ function StopTaxiJob() end function OpenCloakroom() - ESX.UI.Menu.CloseAll() + local elements = { + {unselectable = true, icon = "fas fa-shirt", title = TranslateCap('cloakroom_menu')}, + {icon = "fas fa-shirt", title = TranslateCap('wear_citizen'), value = "wear_citizen"}, + {icon = "fas fa-shirt", title = TranslateCap('wear_work'), value = "wear_work"}, + } - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'taxi_cloakroom', { - title = TranslateCap('cloakroom_menu'), - align = 'top-left', - elements = {{ - label = TranslateCap('wear_citizen'), - value = 'wear_citizen' - }, { - label = TranslateCap('wear_work'), - value = 'wear_work' - }} - }, function(data, menu) - if data.current.value == 'wear_citizen' then + ESX.OpenContext("right", elements, function(menu,element) + if element.value == "wear_citizen" then ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin) TriggerEvent('skinchanger:loadSkin', skin) end) - elseif data.current.value == 'wear_work' then + elseif element.value == "wear_work" then ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin) if skin.sex == 0 then TriggerEvent('skinchanger:loadClothes', skin, jobSkin.skin_male) @@ -123,9 +117,7 @@ function OpenCloakroom() end end) end - end, function(data, menu) - menu.close() - + end, function(menu) CurrentAction = 'cloakroom' CurrentActionMsg = TranslateCap('cloakroom_prompt') CurrentActionData = {} @@ -133,54 +125,40 @@ function OpenCloakroom() end function OpenVehicleSpawnerMenu() - ESX.UI.Menu.CloseAll() - - local elements = {} + local elements = { + {unselectable = true, icon = "fas fa-car", title = TranslateCap('spawn_veh')} + } if Config.EnableSocietyOwnedVehicles then - ESX.TriggerServerCallback('esx_society:getVehiclesInGarage', function(vehicles) for i = 1, #vehicles, 1 do - table.insert(elements, { - label = GetDisplayNameFromVehicleModel(vehicles[i].model) .. ' [' .. vehicles[i].plate .. ']', + elements[#elements+1] = { + icon = "fas fa-car", + title = GetDisplayNameFromVehicleModel(vehicles[i].model) .. ' [' .. vehicles[i].plate .. ']', value = vehicles[i] - }) + } end - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'vehicle_spawner', { - title = TranslateCap('spawn_veh'), - align = 'top-left', - elements = elements - }, function(data, menu) + ESX.OpenContext("right", elements, function(menu,element) if not ESX.Game.IsSpawnPointClear(Config.Zones.VehicleSpawnPoint.Pos, 5.0) then ESX.ShowNotification(TranslateCap('spawnpoint_blocked')) return end - menu.close() - - local vehicleProps = data.current.value + local vehicleProps = element.value ESX.TriggerServerCallback("esx_taxijob:SpawnVehicle", function() return end, vehicleProps.model, vehicleProps) TriggerServerEvent('esx_society:removeVehicleFromGarage', 'taxi', vehicleProps) - end, function(data, menu) + end, function(menu) CurrentAction = 'vehicle_spawner' CurrentActionMsg = TranslateCap('spawner_prompt') CurrentActionData = {} - - menu.close() end) end, 'taxi') - else -- not society vehicles - - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'vehicle_spawner', { - title = TranslateCap('spawn_veh'), - align = 'top-left', - elements = Config.AuthorizedVehicles - }, function(data, menu) + ESX.OpenContext("right", Config.AuthorizedVehicles, function(menu,element) if not ESX.Game.IsSpawnPointClear(Config.Zones.VehicleSpawnPoint.Pos, 5.0) then ESX.ShowNotification(TranslateCap('spawnpoint_blocked')) return @@ -188,13 +166,10 @@ function OpenVehicleSpawnerMenu() ESX.TriggerServerCallback("esx_taxijob:SpawnVehicle", function() ESX.ShowNotification(TranslateCap('vehicle_spawned'), "success") end, "taxi", {plate = "TAXI JOB"}) - menu.close() - end, function(data, menu) + end, function(menu) CurrentAction = 'vehicle_spawner' CurrentActionMsg = TranslateCap('spawner_prompt') CurrentActionData = {} - - menu.close() end) end end @@ -220,45 +195,34 @@ function DeleteJobVehicle() end function OpenTaxiActionsMenu() - local elements = {{ - label = TranslateCap('deposit_stock'), - value = 'put_stock' - }, { - label = TranslateCap('take_stock'), - value = 'get_stock' - }} + local elements = { + {unselectable = true, icon = "fas fa-taxi", title = TranslateCap('taxi')}, + {icon = "fas fa-box",title = TranslateCap('deposit_stock'),value = 'put_stock'}, + {icon = "fas fa-box", title = TranslateCap('take_stock'), value = 'get_stock'} + } if Config.EnablePlayerManagement and ESX.PlayerData.job ~= nil and ESX.PlayerData.job.grade_name == 'boss' then - table.insert(elements, { - label = TranslateCap('boss_actions'), - value = 'boss_actions' - }) + elements[#elements+1] = { + icon = "fas fa-wallet", + title = TranslateCap('boss_actions'), + value = "boss_actions" + } end - ESX.UI.Menu.CloseAll() - - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'taxi_actions', { - title = TranslateCap('taxi'), - align = 'top-left', - elements = elements - }, function(data, menu) - - if Config.OxInventory and (data.current.value == 'put_stock' or data.current.value == 'get_stock') then + ESX.OpenContext("right", elements, function(menu,element) + if Config.OxInventory and (element.value == 'put_stock' or element.value == 'get_stock') then exports.ox_inventory:openInventory('stash', 'society_taxi') - return ESX.UI.Menu.CloseAll() - elseif data.current.value == 'put_stock' then + return ESX.CloseContext() + elseif element.value == 'put_stock' then OpenPutStocksMenu() - elseif data.current.value == 'get_stock' then + elseif element.value == 'get_stock' then OpenGetStocksMenu() - elseif data.current.value == 'boss_actions' then + elseif element.value == 'boss_actions' then TriggerEvent('esx_society:openBossMenu', 'taxi', function(data, menu) menu.close() end) end - - end, function(data, menu) - menu.close() - + end, function(menu) CurrentAction = 'taxi_actions_menu' CurrentActionMsg = TranslateCap('press_to_open') CurrentActionData = {} @@ -266,21 +230,14 @@ function OpenTaxiActionsMenu() end function OpenMobileTaxiActionsMenu() - ESX.UI.Menu.CloseAll() - - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'mobile_taxi_actions', { - title = TranslateCap('taxi'), - align = 'top-left', - elements = {{ - label = TranslateCap('billing'), - value = 'billing' - }, { - label = TranslateCap('start_job'), - value = 'start_job' - }} - }, function(data, menu) - if data.current.value == 'billing' then + local elements = { + {unselectable = true, icon = "fas fa-taxi", title = TranslateCap('taxi')}, + {icon = "fas fa-scroll", title = TranslateCap('billing'), value = "billing"}, + {icon = "fas fa-taxi", title = TranslateCap('start_job'), value = "start_job"}, + } + ESX.OpenContext("right", elements, function(menu,element) + if element.value == "billing" then ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'billing', { title = TranslateCap('invoice_amount') }, function(data, menu) @@ -298,15 +255,13 @@ function OpenMobileTaxiActionsMenu() 'Taxi', amount) ESX.ShowNotification(TranslateCap('billing_sent')) end - end - end, function(data, menu) menu.close() end) - - elseif data.current.value == 'start_job' then + elseif element.value == "start_job" then if OnJob then + ESX.CloseContext() StopTaxiJob() else if ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'taxi' then @@ -315,9 +270,11 @@ function OpenMobileTaxiActionsMenu() if IsPedInAnyVehicle(playerPed, false) and GetPedInVehicleSeat(vehicle, -1) == playerPed then if tonumber(ESX.PlayerData.job.grade) >= 3 then + ESX.CloseContext() StartTaxiJob() else if IsInAuthorizedVehicle() then + ESX.CloseContext() StartTaxiJob() else ESX.ShowNotification(TranslateCap('must_in_taxi')) @@ -333,8 +290,6 @@ function OpenMobileTaxiActionsMenu() end end end - end, function(data, menu) - menu.close() end) end @@ -353,22 +308,20 @@ end function OpenGetStocksMenu() ESX.TriggerServerCallback('esx_taxijob:getStockItems', function(items) - local elements = {} + local elements = { + {unselectable = true, icon = "fas fa-box", title = TranslateCap('taxi_stock')} + } for i = 1, #items, 1 do - table.insert(elements, { - label = 'x' .. items[i].count .. ' ' .. items[i].label, + elements[#elements+1] = { + icon = "fas fa-box", + title = 'x' .. items[i].count .. ' ' .. items[i].label, value = items[i].name - }) + } end - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'stocks_menu', { - title = TranslateCap('taxi_stock'), - align = 'top-left', - elements = elements - }, function(data, menu) - local itemName = data.current.value - + ESX.OpenContext("right", elements, function(menu,element) + local itemName = element.value ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'stocks_menu_get_item_count', { title = TranslateCap('quantity') }, function(data2, menu2) @@ -378,7 +331,7 @@ function OpenGetStocksMenu() ESX.ShowNotification(TranslateCap('quantity_invalid')) else menu2.close() - menu.close() + ESX.CloseContext() -- todo: refresh on callback TriggerServerEvent('esx_taxijob:getStockItem', itemName, count) @@ -388,34 +341,34 @@ function OpenGetStocksMenu() end, function(data2, menu2) menu2.close() end) - end, function(data, menu) - menu.close() end) - end) + end, function(menu) + CurrentAction = 'taxi_actions_menu' + CurrentActionMsg = TranslateCap('press_to_open') + CurrentActionData = {} + end) end function OpenPutStocksMenu() ESX.TriggerServerCallback('esx_taxijob:getPlayerInventory', function(inventory) - local elements = {} + local elements = { + {unselectable = true, icon = "fas fa-box", title = TranslateCap('inventory')} + } for i = 1, #inventory.items, 1 do local item = inventory.items[i] - if item.count > 0 then - table.insert(elements, { - label = item.label .. ' x' .. item.count, + elements[#elements+1] = { + icon = "fas fa-box", + title = item.label .. ' x' .. item.count, type = 'item_standard', value = item.name - }) + } end end - ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'stocks_menu', { - title = TranslateCap('inventory'), - align = 'top-left', - elements = elements - }, function(data, menu) - local itemName = data.current.value + ESX.OpenContext("right", elements, function(menu,element) + local itemName = element.value ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'stocks_menu_put_item_count', { title = TranslateCap('quantity') @@ -426,7 +379,7 @@ function OpenPutStocksMenu() ESX.ShowNotification(TranslateCap('quantity_invalid')) else menu2.close() - menu.close() + ESX.CloseContext() -- todo: refresh on callback TriggerServerEvent('esx_taxijob:putStockItems', itemName, count) @@ -436,10 +389,12 @@ function OpenPutStocksMenu() end, function(data2, menu2) menu2.close() end) - end, function(data, menu) - menu.close() end) - end) + end, function(menu) + CurrentAction = 'taxi_actions_menu' + CurrentActionMsg = TranslateCap('press_to_open') + CurrentActionData = {} + end) end AddEventHandler('esx_taxijob:hasEnteredMarker', function(zone) @@ -471,7 +426,7 @@ AddEventHandler('esx_taxijob:hasEnteredMarker', function(zone) end) AddEventHandler('esx_taxijob:hasExitedMarker', function(zone) - ESX.UI.Menu.CloseAll() + ESX.CloseContext() CurrentAction = nil end)