2023-09-21 23:39:00 -07:00
---@enum PrintLevel
local printLevel = {
error = 1 ,
warn = 2 ,
info = 3 ,
verbose = 4 ,
debug = 5 ,
}
local levelPrefixes = {
'^1[ERROR]' ,
'^3[WARN]' ,
'^7[INFO]' ,
'^4[VERBOSE]' ,
'^6[DEBUG]' ,
}
2025-03-13 14:17:36 +07:00
local convarGlobal = 'ox:printlevel'
local convarResource = 'ox:printlevel:' .. cache.resource
local function getPrintLevelFromConvar ()
return printLevel [ GetConvar ( convarResource , GetConvar ( convarGlobal , 'info' ))]
end
local resourcePrintLevel = getPrintLevelFromConvar ()
2023-09-21 23:39:00 -07:00
local template = ( '^5[%s] %%s %%s^7' ): format ( cache.resource )
2024-06-26 02:17:25 -04:00
local function handleException ( reason , value )
if type ( value ) == 'function' then return tostring ( value ) end
return reason
end
local jsonOptions = { sort_keys = true , indent = true , exception = handleException }
2023-09-21 23:39:00 -07:00
---Prints to console conditionally based on what ox:printlevel is.
---Any print with a level more severe will also print. If ox:printlevel is info, then warn and error prints will appear as well, but debug prints will not.
---@param level PrintLevel
---@param ... any
local function libPrint ( level , ...)
if level > resourcePrintLevel then return end
local args = { ... }
for i = 1 , # args do
local arg = args [ i ]
args [ i ] = type ( arg ) == 'table' and json.encode ( arg , jsonOptions ) or tostring ( arg )
end
print ( template : format ( levelPrefixes [ level ], table.concat ( args , ' \t ' )))
end
lib.print = {
error = function (...) libPrint ( printLevel.error , ...) end ,
warn = function (...) libPrint ( printLevel.warn , ...) end ,
info = function (...) libPrint ( printLevel.info , ...) end ,
verbose = function (...) libPrint ( printLevel.verbose , ...) end ,
debug = function (...) libPrint ( printLevel.debug , ...) end ,
}
2025-03-13 14:17:36 +07:00
-- Update the print level when the convar changes
if ( AddConvarChangeListener ) then
AddConvarChangeListener ( 'ox:printlevel*' , function ( convarName , reserved )
if ( convarName ~= convarResource and convarName ~= convarGlobal ) then return end
resourcePrintLevel = getPrintLevelFromConvar ()
end )
else
libPrint ( printLevel.verbose , 'Convar change listener not available, print level will not update dynamically.' )
end
2023-09-21 23:39:00 -07:00
return lib.print