From 3b76b15bb4108a63584c65dcd4d686af3463235e Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Fri, 4 Jul 2025 15:20:02 +0100 Subject: [PATCH] Add starting support for lation_ui Added support for: - Menus - Draw Text - Notifications - Skillchecks - ProgressBar TODO: - Input dialogs --- shared/contextmenus.lua | 90 +++++++++++++++++++----------------- shared/drawText.lua | 19 +++++++- shared/make/progressBars.lua | 30 ++++++++++++ shared/notify.lua | 14 ++++++ shared/skillcheck.lua | 19 ++++++++ 5 files changed, 128 insertions(+), 44 deletions(-) diff --git a/shared/contextmenus.lua b/shared/contextmenus.lua index d4d8f15..3ef65b4 100644 --- a/shared/contextmenus.lua +++ b/shared/contextmenus.lua @@ -47,48 +47,7 @@ --- }) --- ``` function openMenu(Menu, data) - if Config.System.Menu == "jim" then - if data.onBack then - table.insert(Menu, 1, { - icon = "fas fa-circle-arrow-left", - header = " ", - txt = "Return", - params = { - isAction = true, - event = data.onBack, - }, - }) - elseif data.canClose then - table.insert(Menu, 1, { - icon = "fas fa-circle-xmark", - header = " ", - txt = "Close", - params = { - isAction = true, - event = data.onExit and data.onExit or (function() exports[QBMenuExport]:closeMenu() end), - }, - }) - end - if data.header ~= nil then - local tempMenu = {} - for k, v in pairs(Menu) do tempMenu[k + 1] = v end - tempMenu[1] = { header = data.header, txt = data.headertxt or "", isMenuHeader = true } - Menu = tempMenu - end - for k in pairs(Menu) do - if not Menu[k].params or not Menu[k].params.event then - Menu[k].params = { - isAction = true, - event = Menu[k].onSelect or function() end, - } - end - if not Menu[k].header then Menu[k].header = " " end - if Menu[k].arrow then Menu[k].icon = "fas fa-angle-right" end - Menu[k].isMenuHeader = Menu[k].isMenuHeader or Menu[k].disable - end - TriggerEvent("jim_bridge:client:openMenu", Menu) - - elseif Config.System.Menu == "ox" then + if Config.System.Menu == "ox" then local index = nil if data.onBack and not data.onSelected then table.insert(Menu, 1, { @@ -286,11 +245,56 @@ function openMenu(Menu, data) function(data, menu) menu.close() end) + + elseif Config.System.Menu == "lation" then + if data.onBack then + table.insert(Menu, 1, { + icon = "fas fa-circle-arrow-left", + onSelect = data.onBack, + header = "Return", + }) + end + + for k in pairs(Menu) do + if data.onSelected and Menu[k].arrow then + Menu[k].icon = "fas fa-angle-right" + end + -- If no title, use header or txt as title/label. + if not Menu[k].title then + if Menu[k].header ~= nil and Menu[k].header ~= "" then + Menu[k].title = Menu[k].header + Menu[k].label = Menu[k].header + if Menu[k].txt then Menu[k].description = Menu[k].txt else Menu[k].description = "" end + else + Menu[k].title = Menu[k].txt + Menu[k].label = Menu[k].txt + end + end + -- Copy parameters from 'params' if available. + if Menu[k].params then + Menu[k].event = Menu[k].params.event + Menu[k].args = Menu[k].params.args or {} + end + if Menu[k].isMenuHeader then + Menu[k].readOnly = true + end + end + + exports.lation_ui:registerMenu({ + id = 'menu', + title = data.header, + subtitle = (data.headertxt and data.headertxt or ""), + options = Menu, + }) + + -- Show menu + exports.lation_ui:showMenu('menu') + end end --- A line break constant used for menu header formatting. -br = (Config.System.Menu == "ox" or Config.System.Menu == "gta") and "\n" or "
" +br = (Config.System.Menu == "ox" or Config.System.Menu == "gta" or Config.System.Menu == "lation") and "\n" or "
" --- Checks if the current menu system is 'ox' or 'gta' for formatting purposes. --- @return boolean boolean True if using ox or gta menus, otherwise false. diff --git a/shared/drawText.lua b/shared/drawText.lua index 62ccb1f..35471ff 100644 --- a/shared/drawText.lua +++ b/shared/drawText.lua @@ -35,11 +35,26 @@ function drawText(image, input, style, oxStyleTable) elseif Config.System.drawText == "ox" then -- Append newline spacing to each input line. + local inputnum = countTable(input) for k, v in pairs(input) do - input[k] = v.." \n" + input[k] = v..(inputnum ~= k and " \n" or "") end lib.showTextUI(table.concat(input), { icon = (image and radarTable[image] or image) or nil, position = 'left-center', style = oxStyleTable }) + elseif Config.System.drawText == "lation" then + local inputnum = countTable(input) + for k, v in pairs(input) do + input[k] = v..(inputnum ~= k and " \n" or "") + end + exports.lation_ui:showText({ + --title = " ", + description = table.concat(input), + keybind = nil, + icon = (image and radarTable[image] or image) or nil, + iconColor = '#3B82F6', + position = 'center-left' + }) + elseif Config.System.drawText == "gta" then -- Concatenate input lines and apply GTA style formatting. for i = 1, #input do @@ -88,6 +103,8 @@ function hideText() exports[QBExport]:HideText() elseif Config.System.drawText == "ox" then lib.hideTextUI() + elseif Config.System.drawText == "lation" then + exports.lation_ui:hideText() elseif Config.System.drawText == "gta" then ClearAllHelpMessages() elseif Config.System.drawText == "esx" then diff --git a/shared/make/progressBars.lua b/shared/make/progressBars.lua index 56296f1..21b413e 100644 --- a/shared/make/progressBars.lua +++ b/shared/make/progressBars.lua @@ -135,6 +135,34 @@ function progressBar(data) end }) + elseif Config.System.ProgressBar == "lation" then + if exports.lation_ui:progressBar({ + label = data.label, + description = nil, + duration = debugMode and 1000 or data.time, + icon = data.icon, + useWhileDead = data.dead or false, + disable = { + combat = data.combat or true, + move = data.disableMovement or false, + car = data.disableMovement or false, + }, + anim = { + dict = data.dict, + clip = data.anim, + }, + prop = { + model = data.prop and data.prop.model, + pos = data.prop and (data.prop.pos or vec3(0, 0, 0)), + rot = data.prop and (data.prop.rot or vec3(0, 0, 0)), + bone = data.prop and (data.prop.bone or 0) + } + }) then + result = true + else + result = true + end + elseif Config.System.ProgressBar == "red" then -- Currently only uses jim-redui if you choose this option if exports["jim_bridge"]:redProgressBar({ @@ -204,6 +232,8 @@ function stopProgressBar() exports[OXLibExport]:cancelProgress() elseif Config.System.ProgressBar == "qb" then TriggerEvent("progressbar:client:cancel") + elseif Config.System.ProgressBar == "lation" then + exports.lation_ui:cancelProgress() elseif Config.System.ProgressBar == "gta" or Config.System.ProgressBar == "red" then exports["jim_bridge"]:stopProgressBar() end diff --git a/shared/notify.lua b/shared/notify.lua index fde1e41..76e8fcd 100644 --- a/shared/notify.lua +++ b/shared/notify.lua @@ -62,6 +62,20 @@ function triggerNotify(title, message, type, src) else TriggerClientEvent(getScript()..":DisplayESXNotify", src, type, message) end + elseif Config.System.Notify == "lation" then + if not src then + exports.lation_ui:notify({ + title = title, + message = message, + type = type or "success", + }) + else + TriggerClientEvent("lation_ui:notify", src, { + title = title, + message = message, + type = type or "success", + }) + end elseif Config.System.Notify == "red" then if isStarted("jim-redui") then diff --git a/shared/skillcheck.lua b/shared/skillcheck.lua index f4d3c79..55940ae 100644 --- a/shared/skillcheck.lua +++ b/shared/skillcheck.lua @@ -32,6 +32,25 @@ function skillCheck(data) elseif Config.System.skillCheck == "gta" then exports.jim_bridge:skillCheck() + elseif Config.System.skillCheck == "lation" then + local Skillbar = exports.lation_ui:skillCheck("", + { + "easy", + "easy", + "easy" + }, + { + "1", + "2", + "3", + "4" + }) + + if Skillbar then + result = true + else + result = false + end else result = true end