From f1fc97dee2751efbb9a140cf6dce58d7118e0c15 Mon Sep 17 00:00:00 2001
From: Taavi <97351942+Taavi-AU@users.noreply.github.com>
Date: Sun, 6 Nov 2022 16:19:51 +0800
Subject: [PATCH 1/4] context implementation
---
[esx_addons]/esx_billing/client/main.lua | 24 +++++++++---------------
1 file changed, 9 insertions(+), 15 deletions(-)
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'))
From f92c3e1f7d3bf93b0c11301e635bdcd43a3e9326 Mon Sep 17 00:00:00 2001
From: Taavi <97351942+Taavi-AU@users.noreply.github.com>
Date: Sun, 6 Nov 2022 16:26:53 +0800
Subject: [PATCH 2/4] context implementation
---
[esx_addons]/esx_dmvschool/client/main.lua | 74 ++++++++++------------
1 file changed, 35 insertions(+), 39 deletions(-)
diff --git a/[esx_addons]/esx_dmvschool/client/main.lua b/[esx_addons]/esx_dmvschool/client/main.lua
index 453004f9..d4271804 100644
--- a/[esx_addons]/esx_dmvschool/client/main.lua
+++ b/[esx_addons]/esx_dmvschool/client/main.lua
@@ -92,50 +92,49 @@ 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
StartTheoryTest()
@@ -143,19 +142,16 @@ function OpenDMVSchoolMenu()
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)
+ 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 +186,7 @@ end)
AddEventHandler('esx_dmvschool:hasExitedMarker', function(zone)
CurrentAction = nil
- ESX.UI.Menu.CloseAll()
+ ESX.CloseContext()
end)
RegisterNetEvent('esx_dmvschool:loadLicenses')
@@ -286,8 +282,8 @@ CreateThread(function()
ESX.ShowHelpNotification(CurrentActionMsg)
if (IsControlJustReleased(0, 38)) and (CurrentAction == 'dmvschool_menu') then
- OpenDMVSchoolMenu()
- CurrentAction = nil
+ OpenDMVSchoolMenu()
+ CurrentAction = nil
end
end
From 540d36da36c8c2c3e2b9b66200fa064b205800fe Mon Sep 17 00:00:00 2001
From: Taavi <97351942+Taavi-AU@users.noreply.github.com>
Date: Sun, 6 Nov 2022 16:28:38 +0800
Subject: [PATCH 3/4] context implementation
---
[esx_addons]/esx_dmvschool/client/main.lua | 2 ++
1 file changed, 2 insertions(+)
diff --git a/[esx_addons]/esx_dmvschool/client/main.lua b/[esx_addons]/esx_dmvschool/client/main.lua
index d4271804..1cbdce5d 100644
--- a/[esx_addons]/esx_dmvschool/client/main.lua
+++ b/[esx_addons]/esx_dmvschool/client/main.lua
@@ -137,6 +137,7 @@ function OpenDMVSchoolMenu()
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'))
@@ -145,6 +146,7 @@ function OpenDMVSchoolMenu()
elseif element.value == "drive_test" then
ESX.TriggerServerCallback('esx_dmvschool:canYouPay', function(haveMoney)
if haveMoney then
+ ESX.CloseContext()
StartDriveTest(element.type)
else
ESX.ShowNotification(TranslateCap('not_enough_money'))
From 49d9ce73c9e2a4a47a5bb573799671c08dc2abe4 Mon Sep 17 00:00:00 2001
From: Taavi <97351942+Taavi-AU@users.noreply.github.com>
Date: Sun, 6 Nov 2022 17:03:30 +0800
Subject: [PATCH 4/4] context implementation
---
[esx_addons]/esx_taxijob/client/main.lua | 205 +++++++++--------------
1 file changed, 80 insertions(+), 125 deletions(-)
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)