From 22062a1bdb5e4b96c2ea5b9843f6996fda2cd492 Mon Sep 17 00:00:00 2001 From: iLLeniumStudios <104288623+TheiLLeniumStudios@users.noreply.github.com> Date: Sun, 23 Jul 2023 18:00:52 +0200 Subject: [PATCH] feat(esx/managementoutfits): Boss Managed Outfits support via Command (#341) * feat(esx/managementoutfits): Initial implementation * Add missing translations for bossmanagedoutfits command * Add grade check for command --- client/client.lua | 12 ++---------- client/framework/esx/main.lua | 14 ++++++++++++-- client/management/common.lua | 27 +++++++++++++++++++++++++++ client/management/esx.lua | 15 +++++++++++++++ client/management/management.lua | 13 ++----------- client/management/qb.lua | 2 ++ client/management/qbx.lua | 2 ++ fxmanifest.lua | 3 +++ locales/ar.lua | 3 +++ locales/bg.lua | 3 +++ locales/de.lua | 3 +++ locales/en.lua | 3 +++ locales/es-ES.lua | 3 +++ locales/fr.lua | 3 +++ locales/hu.lua | 3 +++ locales/it.lua | 3 +++ locales/nl.lua | 3 +++ locales/pt-BR.lua | 3 +++ locales/ro-RO.lua | 3 +++ server/framework/esx/callbacks.lua | 2 +- server/framework/esx/main.lua | 11 +++++++++-- server/framework/esx/management.lua | 26 ++++++++++++++++++++++++++ 22 files changed, 134 insertions(+), 26 deletions(-) create mode 100644 client/management/common.lua create mode 100644 client/management/esx.lua create mode 100644 server/framework/esx/management.lua diff --git a/client/client.lua b/client/client.lua index 4f0f286..7a2b92e 100644 --- a/client/client.lua +++ b/client/client.lua @@ -413,11 +413,6 @@ local function RegisterDeleteOutfitMenu(id, parent, outfits, deleteEvent) end RegisterNetEvent("illenium-appearance:client:OutfitManagementMenu", function(args) - local bossMenuEvent = "qb-bossmenu:client:OpenMenu" - if args.type == "Gang" then - bossMenuEvent = "qb-gangmenu:client:OpenMenu" - end - local outfits = lib.callback.await("illenium-appearance:server:getManagementOutfits", false, args.type, Framework.GetGender()) local managementMenuID = "illenium_appearance_outfit_management_menu" local changeManagementOutfitMenuID = "illenium_appearance_change_management_outfit_menu" @@ -444,15 +439,12 @@ RegisterNetEvent("illenium-appearance:client:OutfitManagementMenu", function(arg title = _L("outfits.delete.title"), description = string.format(_L("outfits.delete.description"), args.type), menu = deleteManagementOutfitMenuID, - }, - { - title = _L("menu.returnTitle"), - icon = "fa-solid fa-angle-left", - event = bossMenuEvent } } } + Management.AddBackMenuItem(managementMenu, args) + lib.registerContext(managementMenu) lib.showContext(managementMenuID) end) diff --git a/client/framework/esx/main.lua b/client/framework/esx/main.lua index cd4de7e..37d3fbe 100644 --- a/client/framework/esx/main.lua +++ b/client/framework/esx/main.lua @@ -21,6 +21,17 @@ RegisterNetEvent("esx:setJob", function(job) client.gang = Framework.PlayerData.job end) +local function getRankInputValues(rankList) + local rankValues = {} + for k, v in pairs(rankList) do + rankValues[#rankValues + 1] = { + label = v.label, + value = v.grade + } + end + return rankValues +end + function Framework.GetPlayerGender() Framework.PlayerData = ESX.GetPlayerData() if Framework.PlayerData.sex == "f" then @@ -52,10 +63,9 @@ function Framework.IsPlayerAllowed(citizenid) return citizenid == Framework.PlayerData.identifier end --- Not implemented entirely function Framework.GetRankInputValues(type) local jobGrades = lib.callback.await("illenium-appearance:server:esx:getGradesForJob", false, client[type].name) - return jobGrades + return getRankInputValues(jobGrades) end function Framework.GetJobGrade() diff --git a/client/management/common.lua b/client/management/common.lua new file mode 100644 index 0000000..cf00309 --- /dev/null +++ b/client/management/common.lua @@ -0,0 +1,27 @@ +if not Config.BossManagedOutfits then return end + +if Framework.ESX() then return end + +function Management.RemoveItems() + if GetResourceState(Management.ResourceName) ~= "started" then return end + + if Management.ItemIDs.Boss then + exports[Management.ResourceName]:RemoveBossMenuItem(Management.ItemIDs.Boss) + end + if Management.ItemIDs.Gang then + exports[Management.ResourceName]:RemoveGangMenuItem(Management.ItemIDs.Gang) + end +end + +function Management.AddBackMenuItem(managementMenu, args) + local bossMenuEvent = "qb-bossmenu:client:OpenMenu" + if args.type == "Gang" then + bossMenuEvent = "qb-gangmenu:client:OpenMenu" + end + + managementMenu.options[#managementMenu.options+1] = { + title = _L("menu.returnTitle"), + icon = "fa-solid fa-angle-left", + event = bossMenuEvent + } +end diff --git a/client/management/esx.lua b/client/management/esx.lua new file mode 100644 index 0000000..e06c7b0 --- /dev/null +++ b/client/management/esx.lua @@ -0,0 +1,15 @@ +if not Config.BossManagedOutfits then return end + +if not Framework.ESX() then return end + +function Management.RemoveItems() + -- Do nothing +end + +function Management.AddItems() + -- Do nothing +end + +function Management.AddBackMenuItem() + -- Do nothing +end diff --git a/client/management/management.lua b/client/management/management.lua index 67e062c..faf9d84 100644 --- a/client/management/management.lua +++ b/client/management/management.lua @@ -1,3 +1,5 @@ +if not Config.BossManagedOutfits then return end + Management = {} Management.ItemIDs = { @@ -22,14 +24,3 @@ function Management.IsQBX() end return false end - -function Management.RemoveItems() - if GetResourceState(Management.ResourceName) ~= "started" then return end - - if Management.ItemIDs.Boss then - exports[Management.ResourceName]:RemoveBossMenuItem(Management.ItemIDs.Boss) - end - if Management.ItemIDs.Gang then - exports[Management.ResourceName]:RemoveGangMenuItem(Management.ItemIDs.Gang) - end -end diff --git a/client/management/qb.lua b/client/management/qb.lua index d76856d..5ffd0d4 100644 --- a/client/management/qb.lua +++ b/client/management/qb.lua @@ -1,3 +1,5 @@ +if not Config.BossManagedOutfits then return end + if not Management.IsQB() then return end function Management.AddItems() diff --git a/client/management/qbx.lua b/client/management/qbx.lua index 4052ac4..bb9982d 100644 --- a/client/management/qbx.lua +++ b/client/management/qbx.lua @@ -1,3 +1,5 @@ +if not Config.BossManagedOutfits then return end + if not Management.IsQBX() then return end function Management.AddItems() diff --git a/fxmanifest.lua b/fxmanifest.lua index 38ed0eb..07c79e4 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -26,8 +26,10 @@ client_scripts { "client/target/qb.lua", "client/target/ox.lua", "client/management/management.lua", + "client/management/common.lua", "client/management/qb.lua", "client/management/qbx.lua", + "client/management/esx.lua", "client/radial/radial.lua", "client/radial/qb.lua", "client/radial/ox.lua", @@ -53,6 +55,7 @@ server_scripts { "server/framework/esx/main.lua", "server/framework/esx/migrate.lua", "server/framework/esx/callbacks.lua", + "server/framework/esx/management.lua", "server/util.lua", "server/server.lua", "server/permissions.lua" diff --git a/locales/ar.lua b/locales/ar.lua index 5b05986..baa4b83 100644 --- a/locales/ar.lua +++ b/locales/ar.lua @@ -314,6 +314,9 @@ Locales["ar"] = { }, gangoutfits = { title = "يفتح قائمة أزياء العصابات" + }, + bossmanagedoutfits = { + title = "يفتح قائمة ملابس المدير" } }, textUI = { diff --git a/locales/bg.lua b/locales/bg.lua index be5199e..18052b0 100644 --- a/locales/bg.lua +++ b/locales/bg.lua @@ -314,6 +314,9 @@ Locales["bg"] = { }, gangoutfits = { title = "Отваря менюто Gang Outfits" + }, + bossmanagedoutfits = { + title = "Отваря менюто за управление на дрехи на шефа" } }, textUI = { diff --git a/locales/de.lua b/locales/de.lua index d1f6f87..afb0729 100644 --- a/locales/de.lua +++ b/locales/de.lua @@ -314,6 +314,9 @@ Locales["de"] = { }, gangoutfits = { title = "Öffnet das Gang-Outfits-Menü" + }, + bossmanagedoutfits = { + title = "Öffnet das Menü für verwaltete Outfits des Chefs" } }, textUI = { diff --git a/locales/en.lua b/locales/en.lua index 1bf45bd..a6de158 100644 --- a/locales/en.lua +++ b/locales/en.lua @@ -314,6 +314,9 @@ Locales["en"] = { }, gangoutfits = { title = "Opens Gang Outfits Menu" + }, + bossmanagedoutfits = { + title = "Opens Boss Managed Outfits Menu" } }, textUI = { diff --git a/locales/es-ES.lua b/locales/es-ES.lua index d0ce802..812bb7d 100644 --- a/locales/es-ES.lua +++ b/locales/es-ES.lua @@ -314,6 +314,9 @@ Locales["es-ES"] = { }, gangoutfits = { title = "Abre el menú de atuendos de pandillas" + }, + bossmanagedoutfits = { + title = "Abre el menú de conjuntos gestionados por el jefe" } }, textUI = { diff --git a/locales/fr.lua b/locales/fr.lua index c353a13..23bf2d2 100644 --- a/locales/fr.lua +++ b/locales/fr.lua @@ -314,6 +314,9 @@ Locales["fr"] = { }, gangoutfits = { title = "Ouvre le menu des tenues de gang" + }, + bossmanagedoutfits = { + title = "Ouvre le menu des tenues gérées par le patron" } }, textUI = { diff --git a/locales/hu.lua b/locales/hu.lua index e44b774..81884d3 100644 --- a/locales/hu.lua +++ b/locales/hu.lua @@ -314,6 +314,9 @@ Locales["hu"] = { }, gangoutfits = { title = "Megnyitja a Gang Outfits menüt" + }, + bossmanagedoutfits = { + title = "Főnök által kezelt ruhák menü megnyitása" } }, textUI = { diff --git a/locales/it.lua b/locales/it.lua index 6463964..db01e77 100644 --- a/locales/it.lua +++ b/locales/it.lua @@ -314,6 +314,9 @@ Locales["it"] = { }, gangoutfits = { title = "Apre il menu degli abiti da gang" + }, + bossmanagedoutfits = { + title = "Apre il menu delle outfit gestite dal capo" } }, textUI = { diff --git a/locales/nl.lua b/locales/nl.lua index 827192e..96082bc 100644 --- a/locales/nl.lua +++ b/locales/nl.lua @@ -314,6 +314,9 @@ Locales["nl"] = { }, gangoutfits = { title = "Opent het menu Bende-outfits" + }, + bossmanagedoutfits = { + title = "Opent het menu met door de baas beheerde outfits" } }, textUI = { diff --git a/locales/pt-BR.lua b/locales/pt-BR.lua index b30c83c..01895ab 100644 --- a/locales/pt-BR.lua +++ b/locales/pt-BR.lua @@ -314,6 +314,9 @@ Locales["pt-BR"] = { }, gangoutfits = { title = "Abre o menu de trajes de gangue" + }, + bossmanagedoutfits = { + title = "Abre o menu de roupas gerenciadas pelo chefe" } }, textUI = { diff --git a/locales/ro-RO.lua b/locales/ro-RO.lua index 6c68b9b..c4e8f58 100644 --- a/locales/ro-RO.lua +++ b/locales/ro-RO.lua @@ -314,6 +314,9 @@ Locales["ro-RO"] = { }, gangoutfits = { title = "Deschide meniul Gang Outfits" + }, + bossmanagedoutfits = { + title = "Deschide meniul pentru outfit-urile administrate de șef" } }, textUI = { diff --git a/server/framework/esx/callbacks.lua b/server/framework/esx/callbacks.lua index 0105bbe..230c818 100644 --- a/server/framework/esx/callbacks.lua +++ b/server/framework/esx/callbacks.lua @@ -13,6 +13,6 @@ ESX.RegisterServerCallback("esx_skin:getPlayerSkin", function(source, cb) }) end) -lib.callback.register("illenium-appearance:server:esx:getGradesForJob", function(jobName) +lib.callback.register("illenium-appearance:server:esx:getGradesForJob", function(_, jobName) return Database.JobGrades.GetByJobName(jobName) end) diff --git a/server/framework/esx/main.lua b/server/framework/esx/main.lua index 7516685..a638875 100644 --- a/server/framework/esx/main.lua +++ b/server/framework/esx/main.lua @@ -29,14 +29,21 @@ function Framework.RemoveMoney(src, type, money) return false end +function normalizeGrade(job) + job.grade = { + level = job.grade + } + return job +end + function Framework.GetJob(src) local Player = ESX.GetPlayerFromId(src) - return Player.getJob() + return normalizeGrade(Player.getJob()) end function Framework.GetGang(src) local Player = ESX.GetPlayerFromId(src) - return Player.getJob() + return normalizeGrade(Player.getJob()) end function Framework.SaveAppearance(appearance, citizenID) diff --git a/server/framework/esx/management.lua b/server/framework/esx/management.lua new file mode 100644 index 0000000..f7f338e --- /dev/null +++ b/server/framework/esx/management.lua @@ -0,0 +1,26 @@ +if Config.BossManagedOutfits then + function isBoss(grades, grade) + local highestGrade = grades[1].grade + for i = 2, #grades do + if grades[i].grade > highestGrade then + highestGrade = grades[i].grade + end + end + return highestGrade == grade + end + lib.addCommand("bossmanagedoutfits", { help = _L("commands.bossmanagedoutfits.title"), }, function(source) + local job = Framework.GetJob(source) + local grades = Database.JobGrades.GetByJobName(job.name) + if not grades then + return + end + + if not isBoss(grades, job.grade.level) then + return + end + + TriggerClientEvent("illenium-appearance:client:OutfitManagementMenu", source, { + type = "Job" + }) + end) +end