Fix typo + Add complete boss menu

This commit is contained in:
Jérémie N'gadi
2017-09-03 11:53:07 +02:00
parent 2b40d5116e
commit fefb430149
5 changed files with 609 additions and 19 deletions
+381 -3
View File
@@ -31,6 +31,380 @@ function UpdateSocietyMoneyHUDElement(money)
end
function OpenBossMenu(society, close, options)
local options = options or {}
local elements = {}
local defaultOptions = {
withdraw = true,
deposit = true,
wash = true,
employees = true,
grades = true
}
for k,v in pairs(defaultOptions) do
if options[k] == nil then
options[k] = v
end
end
if options.withdraw then
table.insert(elements, {label = _U('withdraw_society_money'), value = 'withdraw_society_money'})
end
if options.deposit then
table.insert(elements, {label = _U('deposit_society_money'), value = 'deposit_money'})
end
if options.wash then
table.insert(elements, {label = _U('wash_money'), value = 'wash_money'})
end
if options.employees then
table.insert(elements, {label = _U('employee_management'), value = 'manage_employees'})
end
if options.grades then
table.insert(elements, {label = _U('salary_management'), value = 'manage_grades'})
end
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'boss_actions_' .. society,
{
title = 'Patron',
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 = _U('withdraw_amount')
},
function(data, menu)
local amount = tonumber(data.value)
if amount == nil then
ESX.ShowNotification(_U('invalid_amount'))
else
menu.close()
TriggerServerEvent('esx_society:withdrawMoney', society, amount)
end
end,
function(data, menu)
menu.close()
end
)
end
if data.current.value == 'deposit_money' then
ESX.UI.Menu.Open(
'dialog', GetCurrentResourceName(), 'deposit_money_amount_' .. society,
{
title = _U('deposit_amount')
},
function(data, menu)
local amount = tonumber(data.value)
if amount == nil then
ESX.ShowNotification(_U('invalid_amount'))
else
menu.close()
TriggerServerEvent('esx_society:depositMoney', society, amount)
end
end,
function(data, menu)
menu.close()
end
)
end
if data.current.value == 'wash_money' then
ESX.UI.Menu.Open(
'dialog', GetCurrentResourceName(), 'wash_money_amount_' .. society,
{
title = _U('wash_money_amount')
},
function(data, menu)
local amount = tonumber(data.value)
if amount == nil then
ESX.ShowNotification(_U('invalid_amount'))
else
menu.close()
TriggerServerEvent('esx_society:washMoney', society, amount)
end
end,
function(data, menu)
menu.close()
end
)
end
if data.current.value == 'manage_employees' then
OpenManageEmployeesMenu(society)
end
if data.current.value == 'manage_grades' then
OpenManageGradesMenu(society)
end
end,
function(data, menu)
if close then
close(data, menu)
end
end
)
end
function OpenManageEmployeesMenu(society)
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'manage_employees_' .. society,
{
title = _U('employee_management'),
elements = {
{label = _U('employee_list'), value = 'employee_list'},
{label = _U('recruit'), value = 'recruit'},
}
},
function(data, menu)
if data.current.value == 'employee_list' then
OpenEmployeeList(society)
end
if data.current.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 = {_U('employee'), _U('grade'), _U('actions')},
rows = {}
}
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,
'{{' .. _U('promote') .. '|promote}} {{' .. _U('fire') .. '|fire}}'
}
})
end
ESX.UI.Menu.Open(
'list', GetCurrentResourceName(), 'employee_list_' .. society,
elements,
function(data, menu)
local employee = data.data
if data.value == 'promote' then
menu.close()
OpenPromoteMenu(society, employee)
end
if data.value == 'fire' then
ESX.TriggerServerCallback('esx_society:setJob', function()
OpenEmployeeList(society)
end, employee.identifier, 'unemployed', 0)
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 = {}
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})
end
end
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'recruit_' .. society,
{
title = _U('recruiting'),
elements = elements
},
function(data, menu)
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'recruit_confirm_' .. society,
{
title = _U('do_you_want_to_recruit', data.current.name),
elements = {
{label = _U('yes'), value = 'no'},
{label = _U('no'), value = 'yes'},
}
},
function(data2, menu2)
menu2.close()
if data2.current.value == 'yes' then
ESX.TriggerServerCallback('esx_society:setJob', function()
OpenRecruitMenu(society)
end, data.current.identifier, society, 0)
end
end,
function(data2, menu2)
menu2.close()
end
)
end,
function(data, menu)
menu.close()
end
)
end)
end
function OpenPromoteMenu(society, employee)
ESX.TriggerServerCallback('esx_society:getJob', function(job)
local elements = {}
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)})
end
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'promote_employee_' .. society,
{
title = _U('promote_employee', employee.name),
elements = elements
},
function(data, menu)
menu.close()
ESX.TriggerServerCallback('esx_society:setJob', function()
OpenEmployeeList(society)
end, employee.identifier, society, data.current.value)
end,
function(data, menu)
menu.close()
OpenEmployeeList(society)
end
)
end, society)
end
function OpenManageGradesMenu(society)
ESX.TriggerServerCallback('esx_society:getJob', function(job)
local elements = {}
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 .. ' $' .. job.grades[i].salary, value = job.grades[i].grade})
end
ESX.UI.Menu.Open(
'default', GetCurrentResourceName(), 'manage_grades_' .. society,
{
title = _U('salary_management'),
elements = elements
},
function(data, menu)
ESX.UI.Menu.Open(
'dialog', GetCurrentResourceName(), 'manage_grades_amount_' .. society,
{
title = _U('salary_amount')
},
function(data2, menu2)
local amount = tonumber(data2.value)
if amount == nil then
ESX.ShowNotification(_U('invalid_amount'))
else
menu2.close()
ESX.TriggerServerCallback('esx_society:setJobSalary', function()
OpenManageGradesMenu(society)
end, society, data.current.value, amount)
end
end,
function(data2, menu2)
menu2.close()
end
)
end,
function(data, menu)
menu.close()
end
)
end, society)
end
RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(xPlayer)
@@ -69,11 +443,15 @@ AddEventHandler('esx:setJob', function(job)
end)
RegisterNetEvent('esx_addonAccount:setMoney')
AddEventHandler('esx_addonAccount:setMoney', function(name, money)
RegisterNetEvent('esx_addonaccount:setMoney')
AddEventHandler('esx_addonaccount:setMoney', function(society, money)
if PlayerData.job ~= nil and PlayerData.job.grade_name == 'boss' and 'society_' .. PlayerData.job.name == name then
if PlayerData.job ~= nil and PlayerData.job.grade_name == 'boss' and 'society_' .. PlayerData.job.name == society then
UpdateSocietyMoneyHUDElement(money)
end
end)
AddEventHandler('esx_society:openBossMenu', function(society, close, options)
OpenBossMenu(society, close, options)
end)
+26 -5
View File
@@ -1,9 +1,30 @@
Locales['br'] = {
['have_withdrawn'] = 'Você sacou ~g~$',
['invalid_amount'] = 'Quantidade inválida',
['have_deposited'] = 'Você depositou ~r~$',
['you_have'] = 'Você tem ~g~$',
['you_have_laundered'] = 'Você ~r~lavou~s~ seu dinheiro: ~g~$',
['actions'] = 'actions',
['deposit_amount'] = 'deposit amount',
['deposit_society_money'] = 'deposit society money',
['employee'] = 'employee',
['employee_list'] = 'employee list',
['employee_management'] = 'employee management',
['fire'] = 'fire',
['grade'] = 'grade',
['have_deposited'] = 'Você depositou ~r~$',
['have_withdrawn'] = 'Você sacou ~g~$',
['invalid_amount'] = 'invalid amount',
['invalid_amount'] = 'Quantidade inválida',
['no'] = 'no',
['promote'] = 'promote',
['promote_employee'] = 'promote %s',
['recruit'] = 'recruit',
['recruiting'] = 'recruiting',
['salary_amount'] = 'salary amount',
['salary_management'] = 'salary management',
['wash_money'] = 'wash money',
['wash_money_amount'] = 'amount to wash',
['withdraw_amount'] = 'witdraw amount',
['withdraw_society_money'] = 'withdraw society money',
['yes'] = 'yes',
['you_have'] = 'Você tem ~g~$',
['you_have_laundered'] = 'Você ~r~lavou~s~ seu dinheiro: ~g~$',
}
+26 -5
View File
@@ -1,9 +1,30 @@
Locales['en'] = {
['have_withdrawn'] = 'you have withdrawn ~g~$',
['invalid_amount'] = 'invalid amount',
['have_deposited'] = 'you have deposited ~r~$',
['you_have'] = 'you have ~g~$',
['you_have_laundered'] = 'you have ~r~laundered~s~ your money: ~g~$',
['actions'] = 'actions',
['deposit_amount'] = 'deposit amount',
['deposit_society_money'] = 'deposit society money',
['employee'] = 'employee',
['employee_list'] = 'employee list',
['employee_management'] = 'employee management',
['fire'] = 'fire',
['grade'] = 'grade',
['have_deposited'] = 'you have deposited ~r~$',
['have_withdrawn'] = 'you have withdrawn ~g~$',
['invalid_amount'] = 'invalid amount',
['invalid_amount'] = 'invalid amount',
['no'] = 'no',
['promote'] = 'promote',
['promote_employee'] = 'promote %s',
['recruit'] = 'recruit',
['recruiting'] = 'recruiting',
['salary_amount'] = 'salary amount',
['salary_management'] = 'salary management',
['wash_money'] = 'wash money',
['wash_money_amount'] = 'amount to wash',
['withdraw_amount'] = 'witdraw amount',
['withdraw_society_money'] = 'withdraw society money',
['yes'] = 'yes',
['you_have'] = 'you have ~g~$',
['you_have_laundered'] = 'you have ~r~laundered~s~ your money: ~g~$',
}
+26 -5
View File
@@ -1,9 +1,30 @@
Locales['fr'] = {
['have_withdrawn'] = 'vous avez retiré ~g~$',
['invalid_amount'] = 'montant invalide',
['have_deposited'] = 'vous avez déposé ~r~$',
['you_have'] = 'vous avez ~g~$',
['you_have_laundered'] = 'Vous avez ~r~blanchi~s~ votre argent : ~g~$',
['actions'] = 'actions',
['deposit_amount'] = 'montant du dépôt',
['deposit_society_money'] = 'déposer argent société',
['employee'] = 'employé',
['employee_list'] = 'liste des employés',
['employee_management'] = 'gestion employés',
['fire'] = 'licencier',
['grade'] = 'grade',
['have_deposited'] = 'vous avez déposé ~r~$',
['have_withdrawn'] = 'vous avez retiré ~g~$',
['invalid_amount'] = 'montant invalide',
['invalid_amount'] = 'montant invalide',
['no'] = 'non',
['promote'] = 'promouvoir',
['promote_employee'] = 'promouvoir %s',
['recruit'] = 'recruter',
['recruiting'] = 'recrutement',
['salary_amount'] = 'montant du salaire',
['salary_management'] = 'gestion salaires',
['wash_money'] = 'blanchir argent',
['wash_money_amount'] = 'montant à blanchir',
['withdraw_amount'] = 'montant du retrait',
['withdraw_society_money'] = 'retirer argent société',
['yes'] = 'oui',
['you_have'] = 'vous avez ~g~$',
['you_have_laundered'] = 'vous avez ~r~blanchi~s~ votre argent : ~g~$',
}
+150 -1
View File
@@ -1,7 +1,25 @@
ESX = nil
ESX = nil
Jobs = {}
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
AddEventHandler('onMySQLReady', function()
local result = MySQL.Sync.fetchAll('SELECT * FROM jobs', {})
for i=1, #result, 1 do
Jobs[result[i].name] = result[i]
Jobs[result[i].name].grades = {}
end
local result2 = MySQL.Sync.fetchAll('SELECT * FROM job_grades', {})
for i=1, #result2, 1 do
Jobs[result2[i].job_name].grades[tostring(result2[i].grade)] = result2[i]
end
end)
RegisterServerEvent('esx_society:withdrawMoney')
AddEventHandler('esx_society:withdrawMoney', function(society, amount)
@@ -78,6 +96,137 @@ ESX.RegisterServerCallback('esx_society:getAccountMoney', function(source, cb, a
end)
end)
ESX.RegisterServerCallback('esx_society:getEmployees', function(source, cb, society)
MySQL.Async.fetchAll(
'SELECT * FROM users WHERE job = @job ORDER BY job_grade DESC',
{
['@job'] = society
},
function(result)
local employees = {}
for i=1, #result, 1 do
table.insert(employees, {
name = result[i].name,
identifier = result[i].identifier,
job = {
name = result[i].job,
label = Jobs[result[i].job].label,
grade = result[i].job_grade,
grade_name = Jobs[result[i].job].grades[tostring(result[i].job_grade)].name,
grade_label = Jobs[result[i].job].grades[tostring(result[i].job_grade)].label,
}
})
end
cb(employees)
end
)
end)
ESX.RegisterServerCallback('esx_society:getJob', function(source, cb, society)
local job = json.decode(json.encode(Jobs[society]))
local grades = {}
for k,v in pairs(job.grades) do
table.insert(grades, v)
end
table.sort(grades, function(a, b)
return a.grade < b.grade
end)
job.grades = grades
cb(job)
end)
ESX.RegisterServerCallback('esx_society:setJob', function(source, cb, identifier, job, grade)
local xPlayer = ESX.GetPlayerFromIdentifier(identifier)
if xPlayer == nil then
MySQL.Async.execute(
'UPDATE users SET job = @job, job_grade = @job_grade WHERE identifier = @identifier',
{
['@job'] = job,
['@job_grade'] = grade,
['@identifier'] = identifier
},
function(rowsChanged)
cb()
end
)
else
xPlayer.setJob(job, grade)
cb()
end
end)
ESX.RegisterServerCallback('esx_society:setJobSalary', function(source, cb, job, grade, salary)
MySQL.Async.execute(
'UPDATE job_grades SET salary = @salary WHERE job_name = @job_name AND grade = @grade',
{
['@salary'] = salary,
['@job_name'] = job,
['@grade'] = grade
},
function(rowsChanged)
Jobs[job].grades[tostring(grade)].salary = salary
local xPlayers = ESX.GetPlayers()
for i=1, #xPlayers, 1 do
local xPlayer = ESX.GetPlayerFromId(xPlayers[i])
if xPlayer.job.name == job and xPlayer.job.grade == grade then
xPlayer.setJob(job, grade)
end
end
cb()
end
)
end)
ESX.RegisterServerCallback('esx_society:getOnlinePlayers', function(source, cb)
local xPlayers = ESX.GetPlayers()
local players = {}
for i=1, #xPlayers, 1 do
local xPlayer = ESX.GetPlayerFromId(xPlayers[i])
table.insert(players, {
source = xPlayer.source,
identifier = xPlayer.identifier,
name = xPlayer.name,
job = xPlayer.job
})
end
cb(players)
end)
function WashMoneyCRON(d, h, m)
MySQL.Async.fetchAll(