From e81ec7570c81a2ab7dc2fd840ba19ea8aeed3380 Mon Sep 17 00:00:00 2001
From: Taavi <97351942+Taavi-AU@users.noreply.github.com>
Date: Sun, 9 Oct 2022 21:52:22 +0800
Subject: [PATCH] update
---
[esx_addons]/esx_society/client/main.lua | 369 ++++++++++++-----------
1 file changed, 196 insertions(+), 173 deletions(-)
diff --git a/[esx_addons]/esx_society/client/main.lua b/[esx_addons]/esx_society/client/main.lua
index 4f23a489..331368de 100644
--- a/[esx_addons]/esx_society/client/main.lua
+++ b/[esx_addons]/esx_society/client/main.lua
@@ -64,15 +64,19 @@ end
function OpenBossMenu(society, close, options)
options = options or {}
- local elements = {}
+ local elements = {
+ {unselectable = true, icon = "fas fa-user", title = TranslateCap('boss_menu')}
+ }
ESX.TriggerServerCallback('esx_society:isBoss', function(isBoss)
if isBoss then
local defaultOptions = {
+ checkBal = true,
withdraw = true,
deposit = true,
wash = true,
employees = true,
+ salary = true,
grades = true
}
@@ -82,266 +86,283 @@ function OpenBossMenu(society, close, options)
end
end
+ if options.checkBal then
+ elements[#elements+1] = {icon = "fas fa-wallet", title = TranslateCap('check_society_balance'), value = "check_society_balance"}
+ end
if options.withdraw then
- table.insert(elements, {label = TranslateCap('withdraw_society_money'), value = 'withdraw_society_money'})
+ elements[#elements+1] = {icon = "fas fa-wallet", title = TranslateCap('withdraw_society_money'), value = "withdraw_society_money"}
end
-
if options.deposit then
- table.insert(elements, {label = TranslateCap('deposit_society_money'), value = 'deposit_money'})
+ elements[#elements+1] = {icon = "fas fa-wallet", title = TranslateCap('deposit_society_money'), value = "deposit_money"}
end
-
if options.wash then
- table.insert(elements, {label = TranslateCap('wash_money'), value = 'wash_money'})
+ elements[#elements+1] = {icon = "fas fa-wallet", title = TranslateCap('wash_money'), value = "wash_money"}
end
-
if options.employees then
- table.insert(elements, {label = TranslateCap('employee_management'), value = 'manage_employees'})
+ elements[#elements+1] = {icon = "fas fa-users", title = TranslateCap('employee_management'), value = "manage_employees"}
+ end
+ if options.salary then
+ elements[#elements+1] = {icon = "fas fa-wallet", title = TranslateCap('salary_management'), value = "manage_salary"}
end
-
if options.grades then
- table.insert(elements, {label = TranslateCap('salary_management'), value = 'manage_grades'})
+ elements[#elements+1] = {icon = "fas fa-scroll", title = TranslateCap('grade_management'), value = "manage_grades"}
end
- ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'boss_actions_' .. society, {
- title = TranslateCap('boss_menu'),
- align = 'top-left',
- elements = elements
- }, function(data, menu)
- if data.current.value == 'withdraw_society_money' then
- ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'withdraw_society_money_amount_' .. society, {
- title = TranslateCap('withdraw_amount')
- }, function(data2, menu2)
- local amount = tonumber(data2.value)
-
- if amount == nil then
- ESX.ShowNotification(TranslateCap('invalid_amount'))
- else
- menu2.close()
- TriggerServerEvent('esx_society:withdrawMoney', society, amount)
- end
- end, function(data2, menu2)
- menu2.close()
- end)
- elseif data.current.value == 'deposit_money' then
- ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'deposit_money_amount_' .. society, {
- title = TranslateCap('deposit_amount')
- }, function(data2, menu2)
- local amount = tonumber(data2.value)
-
- if amount == nil then
- ESX.ShowNotification(TranslateCap('invalid_amount'))
- else
- menu2.close()
- TriggerServerEvent('esx_society:depositMoney', society, amount)
- end
- end, function(data2, menu2)
- menu2.close()
- end)
- elseif data.current.value == 'wash_money' then
- ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'wash_money_amount_' .. society, {
- title = TranslateCap('wash_money_amount')
- }, function(data2, menu2)
- local amount = tonumber(data2.value)
-
- if amount == nil then
- ESX.ShowNotification(TranslateCap('invalid_amount'))
- else
- menu2.close()
- TriggerServerEvent('esx_society:washMoney', society, amount)
- end
- end, function(data2, menu2)
- menu2.close()
- end)
- elseif data.current.value == 'manage_employees' then
+ ESX.OpenContext("right", elements, function(menu,element)
+ if element.value == "check_society_balance" then
+ TriggerServerEvent('esx_society:checkSocietyBalance', society)
+ elseif element.value == "withdraw_society_money" then
+ local elements = {
+ {unselectable = true, icon = "fas fa-wallet", title = TranslateCap('withdraw_amount'), description = "Withdraw money from the society account"},
+ {icon = "fas fa-wallet", title = "Amount", input = true, inputType = "number", inputPlaceholder = "Amount to withdraw..", inputMin = 1, inputMax = 250000, name = "withdraw"},
+ {icon = "fas fa-check", title = "Confirm", value = "confirm"}
+ }
+ ESX.RefreshContext(elements)
+ elseif element.value == "confirm" then
+ local amount = tonumber(menu.eles[2].inputValue)
+ if amount == nil then
+ ESX.ShowNotification(TranslateCap('invalid_amount'))
+ else
+ TriggerServerEvent('esx_society:withdrawMoney', society, amount)
+ ESX.CloseContext()
+ end
+ elseif element.value == "deposit_money" then
+ local elements = {
+ {unselectable = true, icon = "fas fa-wallet", title = TranslateCap('deposit_amount'), description = "Deposit some money into the society account"},
+ {icon = "fas fa-wallet", title = "Amount", input = true, inputType = "number", inputPlaceholder = "Amount to deposit..", inputMin = 1, inputMax = 250000, name = "deposit"},
+ {icon = "fas fa-check", title = "Confirm", value = "confirm2"}
+ }
+ ESX.RefreshContext(elements)
+ elseif element.value == "confirm2" then
+ local amount = tonumber(menu.eles[2].inputValue)
+ if amount == nil then
+ ESX.ShowNotification(TranslateCap('invalid_amount'))
+ else
+ TriggerServerEvent('esx_society:depositMoney', society, amount)
+ ESX.CloseContext()
+ end
+ elseif element.value == "wash_money" then
+ local elements = {
+ {unselectable = true, icon = "fas fa-wallet", title = TranslateCap('wash_money_amount'), description = "Deposit some money into the money wash"},
+ {icon = "fas fa-wallet", title = "Amount", input = true, inputType = "number", inputPlaceholder = "Amount to wash..", inputMin = 1, inputMax = 250000, name = "wash"},
+ {icon = "fas fa-check", title = "Confirm", value = "confirm3"}
+ }
+ ESX.RefreshContext(elements)
+ elseif element.value == "confirm3" then
+ local amount = tonumber(menu.eles[2].inputValue)
+ if amount == nil then
+ ESX.ShowNotification(TranslateCap('invalid_amount'))
+ else
+ TriggerServerEvent('esx_society:washMoney', society, amount)
+ ESX.CloseContext()
+ end
+ elseif element.value == "manage_employees" then
OpenManageEmployeesMenu(society)
- elseif data.current.value == 'manage_grades' then
+ elseif element.value == "manage_salary" then
+ OpenManageSalaryMenu(society)
+ elseif element.value == "manage_grades" then
OpenManageGradesMenu(society)
end
- end, function(data, menu)
- if close then
- close(data, menu)
- end
end)
end
end, society)
end
function OpenManageEmployeesMenu(society)
- ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'manage_employees_' .. society, {
- title = TranslateCap('employee_management'),
- align = 'top-left',
- elements = {
- {label = TranslateCap('employee_list'), value = 'employee_list'},
- {label = TranslateCap('recruit'), value = 'recruit'}
- }}, function(data, menu)
- if data.current.value == 'employee_list' then
+ local elements = {
+ {unselectable = true, icon = "fas fa-users", title = TranslateCap('employee_management')},
+ {icon = "fas fa-users", title = TranslateCap('employee_list'), value = "employee_list"},
+ {icon = "fas fa-users", title = TranslateCap('recruit'), value = "recruit"}
+ }
+ ESX.OpenContext("right", elements, function(menu,element)
+ if element.value == "employee_list" then
OpenEmployeeList(society)
- elseif data.current.value == 'recruit' then
- OpenRecruitMenu(society)
+ elseif element.value == "recruit" then
+ OpenRecruitMenu(society)
end
- end, function(data, menu)
- menu.close()
end)
end
function OpenEmployeeList(society)
ESX.TriggerServerCallback('esx_society:getEmployees', function(employees)
-
local elements = {
- head = {TranslateCap('employee'), TranslateCap('grade'), TranslateCap('actions')},
- rows = {}
+ {unselectable = true, icon = "fas fa-user", title = "Employees"}
}
for i=1, #employees, 1 do
local gradeLabel = (employees[i].job.grade_label == '' and employees[i].job.label or employees[i].job.grade_label)
- table.insert(elements.rows, {
- data = employees[i],
- cols = {
- employees[i].name,
- gradeLabel,
- '{{' .. TranslateCap('promote') .. '|promote}} {{' .. TranslateCap('fire') .. '|fire}}'
- }
- })
+ elements[#elements+1] = {icon = "fas fa-user", title = employees[i].name .. " | " ..gradeLabel, gradeLabel = gradeLabel, data = employees[i]}
end
- ESX.UI.Menu.Open('list', GetCurrentResourceName(), 'employee_list_' .. society, elements, function(data, menu)
- local employee = data.data
+ elements[#elements+1] = {icon = "fas fa-arrow-left", title = "Return", value = "return"}
- if data.value == 'promote' then
- menu.close()
- OpenPromoteMenu(society, employee)
- elseif data.value == 'fire' then
- ESX.ShowNotification(TranslateCap('you_have_fired', employee.name))
+ ESX.OpenContext("right", elements, function(menu,element)
+ if element.value == "return" then
+ OpenManageEmployeesMenu(society)
+ else
+ local elements2 = {
+ {unselectable = true, icon = "fas fa-user", title = element.title},
+ {icon = "fas fa-user", title = "Promote", value = "promote"},
+ {icon = "fas fa-user", title = "Fire", value = "fire"},
+ {icon = "fas fa-arrow-left", title = "Return", value = "return"}
+ }
+ ESX.OpenContext("right", elements2, function(menu2,element2)
+ local employee = element.data
+ if element2.value == "promote" then
+ ESX.CloseContext()
+ OpenPromoteMenu(society, employee)
+ elseif element2.value == "fire" then
+ ESX.ShowNotification(TranslateCap('you_have_fired', employee.name))
- ESX.TriggerServerCallback('esx_society:setJob', function()
- OpenEmployeeList(society)
- end, employee.identifier, 'unemployed', 0, 'fire')
+ ESX.TriggerServerCallback('esx_society:setJob', function()
+ OpenEmployeeList(society)
+ end, employee.identifier, 'unemployed', 0, 'fire')
+ elseif element2.value == "return" then
+ OpenEmployeeList(society)
+ end
+ end)
end
- end, function(data, menu)
- menu.close()
- OpenManageEmployeesMenu(society)
end)
end, society)
end
function OpenRecruitMenu(society)
ESX.TriggerServerCallback('esx_society:getOnlinePlayers', function(players)
- local elements = {}
+ local elements = {
+ {unselectable = true, icon = "fas fa-user", title = TranslateCap('recruiting')}
+ }
for i=1, #players, 1 do
if players[i].job.name ~= society then
- table.insert(elements, {
- label = players[i].name,
- value = players[i].source,
- name = players[i].name,
- identifier = players[i].identifier
- })
+ elements[#elements+1] = {icon = "fas fa-user", title = players[i].name, value = players[i].source, name = players[i].name, identifier = players[i].identifier}
end
end
- ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'recruit_' .. society, {
- title = TranslateCap('recruiting'),
- align = 'top-left',
- elements = elements
- }, function(data, menu)
- ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'recruit_confirm_' .. society, {
- title = TranslateCap('do_you_want_to_recruit', data.current.name),
- align = 'top-left',
- elements = {
- {label = TranslateCap('no'), value = 'no'},
- {label = TranslateCap('yes'), value = 'yes'}
- }}, function(data2, menu2)
- menu2.close()
+ elements[#elements+1] = {icon = "fas fa-arrow-left", title = "Return", value = "return"}
- if data2.current.value == 'yes' then
- ESX.ShowNotification(TranslateCap('you_have_hired', data.current.name))
+ ESX.OpenContext("right", elements, function(menu,element)
+ if element.value == "return" then
+ OpenManageEmployeesMenu(society)
+ else
+ local elements2 = {
+ {unselectable = true, icon = "fas fa-user", title = "Confirm"},
+ {icon = "fas fa-times", title = TranslateCap('no'), value = "no"},
+ {icon = "fas fa-check", title = TranslateCap('yes'), value = "yes"},
+ }
+ ESX.OpenContext("right", elements2, function(menu2,element2)
+ if element2.value == "yes" then
+ ESX.ShowNotification(TranslateCap('you_have_hired', element.name))
- ESX.TriggerServerCallback('esx_society:setJob', function()
- OpenRecruitMenu(society)
- end, data.current.identifier, society, 0, 'hire')
- end
- end, function(data2, menu2)
- menu2.close()
- end)
- end, function(data, menu)
- menu.close()
+ ESX.TriggerServerCallback('esx_society:setJob', function()
+ OpenRecruitMenu(society)
+ end, element.identifier, society, 0, 'hire')
+ end
+ end)
+ end
end)
end)
end
function OpenPromoteMenu(society, employee)
ESX.TriggerServerCallback('esx_society:getJob', function(job)
- local elements = {}
+ local elements = {
+ {unselectable = true, icon = "fas fa-user", title = TranslateCap('promote_employee', employee.name)}
+ }
for i=1, #job.grades, 1 do
local gradeLabel = (job.grades[i].label == '' and job.label or job.grades[i].label)
- table.insert(elements, {
- label = gradeLabel,
- value = job.grades[i].grade,
- selected = (employee.job.grade == job.grades[i].grade)
- })
+ elements[#elements+1] = {icon = "fas fa-user", title = gradeLabel, value = job.grades[i].grade, selected = (employee.job.grade == job.grades[i].grade)}
end
- ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'promote_employee_' .. society, {
- title = TranslateCap('promote_employee', employee.name),
- align = 'top-left',
- elements = elements
- }, function(data, menu)
- menu.close()
- ESX.ShowNotification(TranslateCap('you_have_promoted', employee.name, data.current.label))
+ elements[#elements+1] = {icon = "fas fa-arrow-left", title = "Return", value = "return"}
- ESX.TriggerServerCallback('esx_society:setJob', function()
+ ESX.OpenContext("right", elements, function(menu,element)
+ if element.value == "return" then
OpenEmployeeList(society)
- end, employee.identifier, society, data.current.value, 'promote')
- end, function(data, menu)
- menu.close()
+ else
+ ESX.ShowNotification(TranslateCap('you_have_promoted', employee.name, element.title))
+
+ ESX.TriggerServerCallback('esx_society:setJob', function()
+ OpenEmployeeList(society)
+ end, employee.identifier, society, element.value, 'promote')
+ end
+ end, function(menu)
OpenEmployeeList(society)
end)
end, society)
end
-function OpenManageGradesMenu(society)
+function OpenManageSalaryMenu(society)
ESX.TriggerServerCallback('esx_society:getJob', function(job)
- local elements = {}
+ local elements = {
+ {unselectable = true, icon = "fas fa-wallet", title = TranslateCap('salary_management')}
+ }
for i=1, #job.grades, 1 do
local gradeLabel = (job.grades[i].label == '' and job.label or job.grades[i].label)
- table.insert(elements, {
- label = ('%s - %s'):format(gradeLabel, TranslateCap('money_generic', ESX.Math.GroupDigits(job.grades[i].salary))),
+ elements[#elements+1] = {
+ icon = "fas fa-wallet",
+ title = ('%s - %s'):format(gradeLabel, TranslateCap('money_generic', ESX.Math.GroupDigits(job.grades[i].salary))),
value = job.grades[i].grade
- })
+ }
end
- ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'manage_grades_' .. society, {
- title = TranslateCap('salary_management'),
- align = 'top-left',
- elements = elements
- }, function(data, menu)
- ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'manage_grades_amount_' .. society, {
- title = TranslateCap('salary_amount')
- }, function(data2, menu2)
+ ESX.OpenContext("right", elements, function(menu,element)
+ local elements = {
+ {unselectable = true, icon = "fas fa-wallet", title = element.title, description = "Change a grade salary amount", value = element.value},
+ {icon = "fas fa-wallet", title = "Amount", input = true, inputType = "number", inputPlaceholder = "Amount to change grade salary..", inputMin = 1, inputMax = Config.MaxSalary, name = "gradesalary"},
+ {icon = "fas fa-check", title = "Confirm", value = "confirm"}
+ }
- local amount = tonumber(data2.value)
+ ESX.RefreshContext(elements)
+ if element.value == "confirm" then
+ local amount = tonumber(menu.eles[2].inputValue)
if amount == nil then
ESX.ShowNotification(TranslateCap('invalid_amount'))
elseif amount > Config.MaxSalary then
ESX.ShowNotification(TranslateCap('invalid_amount_max'))
else
- menu2.close()
-
+ ESX.CloseContext()
ESX.TriggerServerCallback('esx_society:setJobSalary', function()
- OpenManageGradesMenu(society)
- end, society, data.current.value, amount)
+ OpenManageSalaryMenu(society)
+ end, society, menu.eles[1].value, amount)
end
- end, function(data2, menu2)
- menu2.close()
- end)
- end, function(data, menu)
- menu.close()
+ end
+ end)
+ end, society)
+end
+
+function OpenManageGradesMenu(society)
+ ESX.TriggerServerCallback('esx_society:getJob', function(job)
+ local elements = {
+ {unselectable = true, icon = "fas fa-wallet", title = TranslateCap('grade_management')}
+ }
+
+ for i=1, #job.grades, 1 do
+ local gradeLabel = (job.grades[i].label == '' and job.label or job.grades[i].label)
+
+ elements[#elements+1] = {icon = "fas fa-wallet", title = ('%s'):format(gradeLabel), value = job.grades[i].grade}
+ end
+
+ ESX.OpenContext("right", elements, function(menu,element)
+ local elements = {
+ {unselectable = true, icon = "fas fa-wallet", title = element.title, description = "Change a grade label", value = element.value},
+ {icon = "fas fa-wallet", title = "Label", input = true, inputType = "text", inputPlaceholder = "Label to change job grade label..", name = "gradelabel"},
+ {icon = "fas fa-check", title = "Confirm", value = "confirm"}
+ }
+
+ ESX.RefreshContext(elements)
+ if element.value == "confirm" then
+ local label = tostring(menu.eles[2].inputValue)
+
+ ESX.TriggerServerCallback('esx_society:setJobLabel', function()
+ OpenManageGradesMenu(society)
+ end, society, menu.eles[1].value, label)
+ end
end)
end, society)
end
@@ -349,3 +370,5 @@ end
AddEventHandler('esx_society:openBossMenu', function(society, close, options)
OpenBossMenu(society, close, options)
end)
+
+if ESX.PlayerLoaded then RefreshBussHUD() end