Follow same format for notify.lua and drawText.lua

place functions into a table to better handle compatibility of each scripts function
This commit is contained in:
Jim Shield
2025-08-13 18:13:08 +01:00
parent 981563df6a
commit 748e5e2201
2 changed files with 191 additions and 130 deletions

View File

@@ -5,6 +5,102 @@
various frameworks: QB, OX, GTA, and ESX. various frameworks: QB, OX, GTA, and ESX.
]] ]]
-- Text system handlers
local textHandlers = {
qb = {
show = function(text, image)
if image then
text = '<img src="'..(radarTable[image] or "")..'" style="width:12px;height:12px">'..text
end
exports[QBExport]:DrawText(text, 'left')
end,
hide = function()
exports[QBExport]:HideText()
end
},
ox = {
show = function(input, image, oxStyleTable)
local inputCount = #input
for i = 1, inputCount do
input[i] = input[i] .. (i ~= inputCount and " \n" or "")
end
lib.showTextUI(table.concat(input), {
icon = (image and radarTable[image] or image) or nil,
position = 'left-center',
style = oxStyleTable
})
end,
hide = function()
lib.hideTextUI()
end
},
lation = {
show = function(input, image)
local inputCount = #input
for i = 1, inputCount do
input[i] = input[i] .. (i ~= inputCount and " \n" or "")
end
exports.lation_ui:showText({
description = table.concat(input),
keybind = nil,
icon = (image and radarTable[image] or image) or nil,
iconColor = '#3B82F6',
position = 'left-center'
})
end,
hide = function()
exports.lation_ui:hideText()
end
},
gta = {
show = function(input, image, style)
local text = ""
for i = 1, #input do
if input[i] ~= "" then
text = text .. input[i] .. "\n~s~"
end
end
if image then
text = "~BLIP_" .. image .. "~ " .. text
end
DisplayHelpMsg(text:gsub("%:", ":~" .. (style or "g") .. "~"))
end,
hide = function()
ClearAllHelpMessages()
end
},
esx = {
show = function(text, image)
if image then
text = '<img src="'..(radarTable[image] or "")..'" style="width:12px;height:12px">'..text
end
ESX.TextUI(text, nil)
end,
hide = function()
ESX.HideUI()
end
},
red = {
show = function(input)
local text = ""
for i = 1, #input do
if input[i] ~= "" then
text = text .. input[i] .. "\n~q~"
end
end
TriggerEvent("jim-redui:DrawText", text)
end,
hide = function()
TriggerEvent("jim-redui:HideText")
end
}
}
--- Displays text on the screen using the configured draw text system. --- Displays text on the screen using the configured draw text system.
--- ---
--- Depending on Config.System.drawText, this function will use different methods to --- Depending on Config.System.drawText, this function will use different methods to
@@ -20,73 +116,33 @@
--- drawText("img_link", { "Test line 1", "Test Line 2" }, "~g~") --- drawText("img_link", { "Test line 1", "Test Line 2" }, "~g~")
--- ``` --- ```
function drawText(image, input, style, oxStyleTable) function drawText(image, input, style, oxStyleTable)
local text = ""
if not radarTable then radarTable = {} end if not radarTable then radarTable = {} end
if Config.System.drawText == "qb" then
-- Concatenate lines for QB system with HTML line breaks. local systemType = Config.System.drawText
local handler = textHandlers[systemType]
if not handler then return end
if systemType == "qb" or systemType == "esx" then
-- Concatenate lines for QB/ESX system with HTML line breaks.
local text = ""
for i = 1, #input do for i = 1, #input do
text = text .. input[i] .. "</span>" .. (input[i + 1] and "<br>" or "") text = text .. input[i] .. "</span>" .. (input[i + 1] and "<br>" or "")
end end
text = text:gsub("%:", ":<span style='color:yellow'>") text = text:gsub("%:", ":<span style='color:yellow'>")
if image then handler.show(text, image)
text = '<img src="'..(radarTable[image] or "")..'" style="width:12px;height:12px">'..text
end
exports[QBExport]:DrawText(text, 'left')
elseif Config.System.drawText == "ox" then elseif systemType == "ox" then
-- Append newline spacing to each input line. handler.show(input, image, oxStyleTable)
local inputnum = countTable(input)
for k, v in pairs(input) do
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 elseif systemType == "lation" then
local inputnum = countTable(input) handler.show(input, image)
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 = 'left-center'
})
elseif Config.System.drawText == "gta" then elseif systemType == "gta" then
-- Concatenate input lines and apply GTA style formatting. handler.show(input, image, style)
for i = 1, #input do
if input[i] ~= "" then
text = text..input[i].."\n~s~"
end
end
if image then
text = "~BLIP_"..image.."~ "..text
end
DisplayHelpMsg(text:gsub("%:", ":~"..(style or "g").."~"))
elseif Config.System.drawText == "esx" then
-- ESX-based text UI uses similar HTML formatting as QB.
for i = 1, #input do
text = text..input[i].."</span>"..(input[i + 1] and "<br>" or "")
end
text = text:gsub("%:", ":<span style='color:yellow'>")
if image then
text = '<img src="'..(radarTable[image] or "")..'" style="width:12px;height:12px">'..text
end
ESX.TextUI(text, nil)
elseif Config.System.drawText == "red" then
-- Concatenate input lines and apply GTA style formatting.
for i = 1, #input do
if input[i] ~= "" then
text = text..input[i].."\n~q~"
end
end
TriggerEvent("jim-redui:DrawText", text)
elseif systemType == "red" then
handler.show(input)
end end
end end
@@ -99,17 +155,8 @@ end
--- hideText() --- hideText()
--- ``` --- ```
function hideText() function hideText()
if Config.System.drawText == "qb" then local handler = textHandlers[Config.System.drawText]
exports[QBExport]:HideText() if handler and handler.hide then
elseif Config.System.drawText == "ox" then handler.hide()
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
ESX.HideUI()
elseif Config.System.drawText == "red" then
TriggerEvent("jim-redui:HideText")
end end
end end

View File

@@ -8,10 +8,79 @@
• okok • okok
• qb • qb
• ox • ox
• red (default)
• gta (default) • gta (default)
• qs-interface
• lation
• esx • esx
]] ]]
local notifyFunc = {
okok = {
client = function(title, message, type)
TriggerEvent('okokNotify:Alert', title, message, 6000, type)
end,
server = function(title, message, type, src)
TriggerClientEvent('okokNotify:Alert', src, title, message, 6000, type)
end,
},
qb = {
client = function(title, message, type)
TriggerEvent("QBCore:Notify", message, type)
end,
server = function(title, message, type, src)
TriggerClientEvent("QBCore:Notify", src, message, type)
end,
},
qs = {
client = function(title, message, type)
exports['qs-interface']:AddNotify(message, title, 6000)
end,
server = function(title, message, type, src)
TriggerClientEvent('interface:notification', src, message, title, 6000)
end,
},
ox = {
client = function(title, message, type)
exports.ox_lib:notify({ title = title, description = message, type = type or "success" })
end,
server = function(title, message, type, src)
TriggerClientEvent('ox_lib:notify', src, { title = title, description = message, type = type or "success" })
end,
},
gta = {
client = function(title, message, type)
exports.jim_bridge:Notify(title, message, type)
end,
server = function(title, message, type, src)
TriggerClientEvent("jim-bridge:Notify", src, title, message, type)
end,
},
esx = {
client = function(title, message, type)
exports["esx_notify"]:Notify(type, 4000, message)
end,
server = function(title, message, type, src)
TriggerClientEvent(getScript()..":DisplayESXNotify", src, type, message)
end,
},
lation = {
client = function(title, message, type)
exports.lation_ui:notify({ title = title, message = message, type = type or "success", })
end,
server = function(title, message, type, src)
TriggerClientEvent("lation_ui:notify", src, { title = title, message = message, type = type or "success", })
end,
},
red = {
client = function(title, message, type)
TriggerEvent("jim-redui:Notify", title, message, type)
end,
server = function(title, message, type, src)
TriggerClientEvent("jim-redui:Notify", src, title, message, type)
end,
},
}
--- Displays notifications to the player using the configured notification system. --- Displays notifications to the player using the configured notification system.
--- ---
--- Supports multiple notification systems based on Config.System.Notify. Can be triggered from both --- Supports multiple notification systems based on Config.System.Notify. Can be triggered from both
@@ -32,65 +101,11 @@
--- ``` --- ```
function triggerNotify(title, message, type, src) function triggerNotify(title, message, type, src)
if not Config.System or not Config.System.Notify then debugPrint("Notify triggered but not set up") return end if not Config.System or not Config.System.Notify then debugPrint("Notify triggered but not set up") return end
if Config.System.Notify == "okok" then
if not src then
TriggerEvent('okokNotify:Alert', title, message, 6000, type)
else
TriggerClientEvent('okokNotify:Alert', src, title, message, 6000, type)
end
elseif Config.System.Notify == "qb" then
if not src then
TriggerEvent("QBCore:Notify", message, type)
else
TriggerClientEvent("QBCore:Notify", src, message, type)
end
elseif Config.System.Notify == "qs" then
if not src then
exports['qs-interface']:AddNotify(message, title, 6000)
else
TriggerClientEvent('interface:notification', src, message, title, 6000)
end
elseif Config.System.Notify == "ox" then
if not src then
TriggerEvent('ox_lib:notify', { title = title, description = message, type = type or "success" })
else
TriggerClientEvent('ox_lib:notify', src, { title = title, description = message, type = type or "success" })
end
elseif Config.System.Notify == "gta" then
if not src then
exports.jim_bridge:Notify(title, message, type)
else
TriggerClientEvent("jim-bridge:Notify", src, title, message, type)
end
elseif Config.System.Notify == "esx" then
if not src then
exports["esx_notify"]:Notify(type, 4000, message)
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 src then
if isStarted("jim-redui") then notifyFunc[Config.System.Notify].server(title, message, type, src)
if not src then
TriggerEvent("jim-redui:Notify", title, message, type)
else else
TriggerClientEvent("jim-redui:Notify", src, title, message, type) notifyFunc[Config.System.Notify].client(title, message, type)
end
end
end end
end end
@@ -103,7 +118,6 @@ end
--- Listens for DisplayESXNotify events and triggers the ESX notification on the client. --- Listens for DisplayESXNotify events and triggers the ESX notification on the client.
--- ---
--- @param type string The notification type. --- @param type string The notification type.
--- @param title string The notification title.
--- @param text string The notification message. --- @param text string The notification message.
--- ---
--- @usage --- @usage