forked from Simnation/Main
175 lines
5.5 KiB
Lua
175 lines
5.5 KiB
Lua
---Loads a resource file provided the file path
|
|
---@param filePath string
|
|
---@param resourceName string|nil The resource to load the file from, uses CURRENT_RESOURCE if not spesified
|
|
---@return table
|
|
local function loadFile(filePath, resourceName)
|
|
local file = LoadResourceFile(resourceName or CURRENT_RESOURCE, filePath)
|
|
local path = string.format('%s/%s', resourceName or CURRENT_RESOURCE, filePath)
|
|
|
|
if not file then
|
|
warn(string.format('No file was found with path %s', path))
|
|
return {}
|
|
end
|
|
|
|
local func, err = load(file, path)
|
|
if not func or err then
|
|
error(err, 0)
|
|
end
|
|
|
|
return func()
|
|
end
|
|
|
|
---Checks if a export exist in the spesified resouce
|
|
---@param resource string
|
|
---@param export string
|
|
---@return boolean
|
|
local function doesExportExist(resource, export)
|
|
return pcall(function()
|
|
return exports[resource][export]
|
|
end)
|
|
end
|
|
|
|
---Force loads init.lua from ox_lib
|
|
local function forceIncludeOxLib()
|
|
loadFile('init.lua', 'ox_lib')
|
|
warn("ox_lib was force included by the script, please add it to the fxmanifest if you intend to use ox_lib with this script, otherwise configure the config file differently.")
|
|
end
|
|
|
|
local environment = IsDuplicityVersion() and 'server' or 'client'
|
|
local EXPORTS <const> = {
|
|
QB = doesExportExist('qb-core', 'GetCoreObject'),
|
|
ESX = doesExportExist('es_extended', 'getSharedObject')
|
|
}
|
|
|
|
local framework = Config.Framework
|
|
if framework == 'auto' then
|
|
if GetResourceState('ox_core') == 'started' then
|
|
framework = 'ox'
|
|
elseif EXPORTS.QB then
|
|
framework = 'qb'
|
|
elseif EXPORTS.ESX then
|
|
framework = 'esx'
|
|
elseif doesExportExist('ND_Core', 'GetCoreObject') then
|
|
framework = 'nd'
|
|
else
|
|
framework = 'standalone'
|
|
end
|
|
end
|
|
|
|
-- People are stupid and don't read instructions, so let's force include ox_lib if needed.
|
|
if (framework == 'ox' or framework == 'nd') and not lib then
|
|
forceIncludeOxLib()
|
|
end
|
|
|
|
loadFile(string.format('bridge/framework/%s/%s.lua', framework, environment))
|
|
|
|
---@type string|boolean
|
|
local dispatch = Config.Dispatch
|
|
if dispatch then
|
|
if dispatch == 'auto' or dispatch == true then
|
|
if GetResourceState('ps-dispatch') == 'started' then
|
|
dispatch = 'ps'
|
|
elseif GetResourceState('ND_MDT') == 'started' then
|
|
dispatch = 'nd'
|
|
elseif GetResourceState('ox_mdt') == 'started' then
|
|
dispatch = 'ox'
|
|
elseif doesExportExist('core_dispatch', 'addCall') then
|
|
dispatch = 'core'
|
|
elseif GetResourceState('rcore_dispatch') == 'started' then
|
|
dispatch = 'rcore'
|
|
elseif doesExportExist('qs-dispatch', 'GetPlayerInfo') then
|
|
dispatch = 'quasar'
|
|
else
|
|
dispatch = false
|
|
|
|
-- Force disable to prevent server attempting to call on function
|
|
Config.Dispatch = false
|
|
end
|
|
end
|
|
|
|
if dispatch then
|
|
loadFile(string.format('bridge/dispatch/%s/%s.lua', dispatch, environment))
|
|
end
|
|
end
|
|
|
|
local inventory = Config.Inventory
|
|
if inventory == 'auto' then
|
|
if doesExportExist('ox_inventory', 'Items') then
|
|
inventory = 'ox'
|
|
elseif EXPORTS.QB then
|
|
inventory = 'qb'
|
|
elseif EXPORTS.ESX then
|
|
inventory = 'esx'
|
|
else
|
|
inventory = 'standalone'
|
|
end
|
|
end
|
|
|
|
loadFile(string.format('bridge/inventory/%s/%s.lua', inventory, environment))
|
|
|
|
if environment == 'client' then
|
|
local notification = Config.Notification
|
|
|
|
---@type string|boolean
|
|
local helptext = Config.HelpText
|
|
|
|
---@type string|boolean
|
|
local target = Config.Target
|
|
|
|
if notification then
|
|
if notification == 'auto' then
|
|
if doesExportExist('ox_lib', 'notify') then
|
|
notification = 'ox'
|
|
elseif EXPORTS.QB then
|
|
notification = 'qb'
|
|
elseif EXPORTS.ESX then
|
|
notification = 'esx'
|
|
else
|
|
notification = 'standalone'
|
|
end
|
|
end
|
|
|
|
loadFile(string.format('bridge/notification/%s.lua', notification))
|
|
end
|
|
|
|
if helptext then
|
|
if helptext == 'auto' then
|
|
if doesExportExist('ox_lib', 'showTextUI') then
|
|
helptext = 'ox'
|
|
elseif doesExportExist('qb-core', 'DrawText') then
|
|
helptext = 'qb'
|
|
elseif EXPORTS.ESX then
|
|
helptext = 'esx'
|
|
else
|
|
helptext = 'standalone'
|
|
end
|
|
end
|
|
|
|
-- People are stupid and don't read instructions, so let's force include ox_lib if needed.
|
|
if helptext == 'ox' and not lib then
|
|
forceIncludeOxLib()
|
|
end
|
|
|
|
loadFile(string.format('bridge/helptext/%s.lua', helptext))
|
|
end
|
|
|
|
if target then
|
|
if target == 'auto' or target == true then
|
|
if doesExportExist('ox_target', 'addGlobalVehicle') then
|
|
target = 'ox_target'
|
|
elseif doesExportExist('qb-target', 'AddTargetBone') then
|
|
target = 'qb-target'
|
|
elseif doesExportExist('qtarget', 'AddTargetBone') then
|
|
target = 'qtarget'
|
|
elseif doesExportExist('bt-target', 'AddTargetModel') then
|
|
target = 'bt-target'
|
|
else
|
|
target = false
|
|
end
|
|
end
|
|
|
|
if target then
|
|
loadFile(string.format('bridge/target/%s.lua', target))
|
|
end
|
|
end
|
|
end
|