385 lines
		
	
	
		
			No EOL
		
	
	
		
			13 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			385 lines
		
	
	
		
			No EOL
		
	
	
		
			13 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
-- Copyright (C) 2023 reFlow Store, licensed under Software Subscription License Agreement
 | 
						|
 | 
						|
---@class Bridge
 | 
						|
Bridge = {}
 | 
						|
Bridge.Resource = GetCurrentResourceName()
 | 
						|
Bridge.Name = GetResourceMetadata(Bridge.Resource, 'bridge', 0)
 | 
						|
Bridge.Version = GetResourceMetadata(Bridge.Name, 'version', 0)
 | 
						|
Bridge.Context = IsDuplicityVersion() and 'server' or 'client'
 | 
						|
Bridge.DebugMode = GetConvar('bridge:debug', 'false') == 'true' and true or false
 | 
						|
Bridge.Locale = GetConvar('bridge:locale', 'en')
 | 
						|
Bridge.Disabled = {}
 | 
						|
Bridge.Framework = nil
 | 
						|
Bridge.FrameworkName = nil
 | 
						|
Bridge.FrameworkEvent = nil
 | 
						|
Bridge.FrameworkPrefix = nil
 | 
						|
Bridge.Inventory = nil
 | 
						|
Bridge.InventoryDisabled = false
 | 
						|
Bridge.InventoryName = nil
 | 
						|
Bridge.InventoryEvent = nil
 | 
						|
Bridge.InventoryImagePath = nil
 | 
						|
Bridge.Target = nil
 | 
						|
Bridge.TargetName = nil
 | 
						|
Bridge.Zone = nil
 | 
						|
Bridge.ZoneName = nil
 | 
						|
Bridge.Database = nil
 | 
						|
Bridge.DatabaseName = nil
 | 
						|
 | 
						|
---@class Cache
 | 
						|
Cache = {}
 | 
						|
 | 
						|
---@class Framework
 | 
						|
Framework = {}
 | 
						|
 | 
						|
---@class Target
 | 
						|
Target = {}
 | 
						|
 | 
						|
---@class Zone
 | 
						|
Zone = {}
 | 
						|
 | 
						|
---@class Database
 | 
						|
Database = {}
 | 
						|
 | 
						|
if not Bridge.Name then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s^0'):format("Bridge Not Found, Bridge Tag Must Be Included In Resource Manifest."))
 | 
						|
    return
 | 
						|
end
 | 
						|
 | 
						|
if not _VERSION:find('5.4') then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s^0'):format("Lua 5.4 Must Be Enabled In The Resource Manifest."))
 | 
						|
    return
 | 
						|
end
 | 
						|
 | 
						|
if GetResourceState(Bridge.Name) ~= 'started' then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s %s^0'):format(Bridge.Name, "Must Be Started Before This Resource."))
 | 
						|
    return
 | 
						|
end
 | 
						|
 | 
						|
-- ❗ FRAMEWORK VERSION ❗
 | 
						|
if Bridge.DebugMode then 
 | 
						|
    print(('[^2BRIDGE^0] ^1Version^0 %s'):format(Bridge.Version))
 | 
						|
end
 | 
						|
 | 
						|
-- ❗ MODULE DISABLE ❗
 | 
						|
for i = 1, GetNumResourceMetadata(Bridge.Resource, 'bridge_disable') do
 | 
						|
    local name = GetResourceMetadata(Bridge.Resource, 'bridge_disable', i - 1)
 | 
						|
    Bridge.Disabled[name] = true
 | 
						|
    if Bridge.DebugMode then print(('[^2BRIDGE^0] ^1Module Disabled^0 %s'):format(name)) end
 | 
						|
end
 | 
						|
 | 
						|
-- ❗ DATABASE DETECTION ❗
 | 
						|
 | 
						|
-- ❕ OVERRIDE DATABASE ❕
 | 
						|
if GetConvar('bridge:database', '') ~= '' then
 | 
						|
    Bridge.Database = GetConvar('bridge:database', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE DATABASE NAME ❕
 | 
						|
if GetConvar('bridge:databasename', '') ~= '' then
 | 
						|
    Bridge.DatabaseName = GetConvar('bridge:databasename', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OXMYSQL ❕
 | 
						|
if not Bridge.Database and GetResourceState('oxmysql') ~= 'missing' then
 | 
						|
    if not Bridge.DatabaseName then Bridge.DatabaseName = 'oxmysql' end
 | 
						|
    Bridge.Database = 'oxmysql'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ CUSTOM DATABASE ❕
 | 
						|
-- if not Bridge.Database and GetResourceState('custom') ~= 'missing' then
 | 
						|
--     if not Bridge.DatabaseName then Bridge.DatabaseName = 'custom' end
 | 
						|
--     Bridge.Database = 'custom'
 | 
						|
-- end
 | 
						|
 | 
						|
if not Bridge.Disabled['database'] and not Bridge.Database then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s^0'):format("No Compatible Database Resource Found. Please ensure you're using a supported database and that it's running before the bridge."))
 | 
						|
    return
 | 
						|
end
 | 
						|
 | 
						|
-- ❗ FRAMEWORK DETECTION ❗
 | 
						|
 | 
						|
-- ❕ OVERRIDE FRAMEWORK ❕
 | 
						|
if GetConvar('bridge:framework', '') ~= '' then
 | 
						|
    Bridge.Framework = GetConvar('bridge:framework', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE FRAMEWORK NAME ❕
 | 
						|
if GetConvar('bridge:frameworkname', '') ~= '' then
 | 
						|
    Bridge.FrameworkName = GetConvar('bridge:frameworkname', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE FRAMEWORK EVENT ❕
 | 
						|
if GetConvar('bridge:frameworkevent', '') ~= '' then
 | 
						|
    Bridge.FrameworkEvent = GetConvar('bridge:frameworkevent', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE FRAMEWORK PREFIX ❕
 | 
						|
if GetConvar('bridge:frameworkprefix', '') ~= '' then
 | 
						|
    Bridge.FrameworkPrefix = GetConvar('bridge:frameworkprefix', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ ESX ❕ 
 | 
						|
if not Bridge.Framework and GetResourceState('es_extended') ~= 'missing' then
 | 
						|
    if not Bridge.FrameworkName then Bridge.FrameworkName = 'es_extended' end
 | 
						|
    if not Bridge.FrameworkEvent then Bridge.FrameworkEvent = 'esx:getSharedObject' end
 | 
						|
    if not Bridge.FrameworkPrefix then Bridge.FrameworkPrefix = 'esx' end
 | 
						|
    Bridge.Framework = 'esx'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ QBox ❕
 | 
						|
if not Bridge.Framework and GetResourceState('qbx_core') ~= 'missing' then
 | 
						|
    if not Bridge.FrameworkName then Bridge.FrameworkName = 'qbx_core' end
 | 
						|
    if not Bridge.FrameworkPrefix then Bridge.FrameworkPrefix = 'QBCore' end
 | 
						|
    Bridge.Framework = 'qbox'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ QBCore ❕
 | 
						|
if not Bridge.Framework and GetResourceState('qb-core') ~= 'missing' then
 | 
						|
    if not Bridge.FrameworkName then Bridge.FrameworkName = 'qb-core' end
 | 
						|
    if not Bridge.FrameworkEvent then Bridge.FrameworkEvent = 'QBCore:GetObject' end
 | 
						|
    if not Bridge.FrameworkPrefix then Bridge.FrameworkPrefix = 'QBCore' end
 | 
						|
    Bridge.Framework = 'qb'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ CUSTOM FRAMEWORK ❕
 | 
						|
-- if not Bridge.Framework and GetResourceState('custom') ~= 'missing' then
 | 
						|
--     if not Bridge.FrameworkName then Bridge.FrameworkName = 'custom' end
 | 
						|
--     Bridge.Framework = 'custom'
 | 
						|
-- end
 | 
						|
 | 
						|
if not Bridge.Disabled['framework'] and not Bridge.Framework then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s^0'):format("No Compatible Framework Resource Found. Please ensure you're using a supported framework and that it's running before the bridge."))
 | 
						|
    return
 | 
						|
end
 | 
						|
 | 
						|
-- ❗ INVENTORY DETECTION ❗
 | 
						|
 | 
						|
-- ❕ OVERRIDE INVENTORY ❕
 | 
						|
if GetConvar('bridge:inventory', '') ~= '' then
 | 
						|
    Bridge.Inventory = GetConvar('bridge:inventory', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE INVENTORY NAME ❕
 | 
						|
if GetConvar('bridge:inventoryname', '') ~= '' then
 | 
						|
    Bridge.InventoryName = GetConvar('bridge:inventoryname', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE INVENTORY PATH ❕
 | 
						|
if GetConvar('bridge:inventoryimagepath', '') ~= '' then
 | 
						|
    Bridge.InventoryImagePath = GetConvar('bridge:inventoryimagepath', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE INVENTORY EVENT ❕
 | 
						|
if GetConvar('bridge:inventoryevent', '') ~= '' then
 | 
						|
    Bridge.InventoryEvent = GetConvar('bridge:inventoryevent', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ QB-INVENTORY | LJ-INVENTORY | AJ-INVENTORY | AX-INVENTORY | PS-INVENTORY ❕
 | 
						|
if not Bridge.Inventory and Bridge.Framework == 'qb' and (GetResourceState('qb-inventory') ~= 'missing' or GetResourceState('lj-inventory') ~= 'missing' or GetResourceState('aj-inventory') ~= 'missing' or GetResourceState('ax-inventory') ~= 'missing' or GetResourceState('ps-inventory') ~= 'missing') then
 | 
						|
    
 | 
						|
    if not Bridge.InventoryName then 
 | 
						|
        if GetResourceState('qb-inventory') ~= 'missing' then Bridge.InventoryName = 'qb-inventory' end
 | 
						|
        if GetResourceState('lj-inventory') ~= 'missing' then Bridge.InventoryName = 'lj-inventory' end
 | 
						|
        if GetResourceState('aj-inventory') ~= 'missing' then Bridge.InventoryName = 'aj-inventory' end
 | 
						|
        if GetResourceState('ax-inventory') ~= 'missing' then Bridge.InventoryName = 'ax-inventory' end
 | 
						|
        if GetResourceState('ps-inventory') ~= 'missing' then Bridge.InventoryName = 'ps-inventory' end
 | 
						|
    end
 | 
						|
 | 
						|
    Bridge.InventoryImagePath = ('%s/html/images/'):format(Bridge.InventoryName)
 | 
						|
    Bridge.Inventory = 'qb-inventory'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ AK47_INVENTORY ❕
 | 
						|
if not Bridge.Inventory and GetResourceState('ak47_inventory') ~= 'missing' then
 | 
						|
    if not Bridge.InventoryName then Bridge.InventoryName = 'ak47_inventory' end
 | 
						|
    Bridge.InventoryImagePath = ('%s/html/images/'):format(Bridge.InventoryName)
 | 
						|
    Bridge.Inventory = 'ak47_inventory'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OX_INVENTORY ❕
 | 
						|
if not Bridge.Inventory and GetResourceState('ox_inventory') ~= 'missing' then
 | 
						|
    if not Bridge.InventoryName then Bridge.InventoryName = 'ox_inventory' end
 | 
						|
    Bridge.InventoryImagePath = ('%s/web/images/'):format(Bridge.InventoryName)
 | 
						|
    Bridge.Inventory = 'ox_inventory'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ QS-INVENTORY ❕
 | 
						|
if not Bridge.Inventory and GetResourceState('qs-inventory') ~= 'missing' then
 | 
						|
    if not Bridge.InventoryName then Bridge.InventoryName = 'qs-inventory' end
 | 
						|
    Bridge.InventoryImagePath = ('%s/html/images/'):format(Bridge.InventoryName)
 | 
						|
    Bridge.Inventory = 'qs-inventory'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ CODEM-INVENTORY ❕
 | 
						|
if not Bridge.Inventory and GetResourceState('codem-inventory') ~= 'missing' then
 | 
						|
    if not Bridge.InventoryName then Bridge.InventoryName = 'codem-inventory' end
 | 
						|
    Bridge.InventoryImagePath = ('%s/html/itemimages/'):format(Bridge.InventoryName)
 | 
						|
    Bridge.Inventory = 'codem-inventory'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ TGIANN-INVENTORY ❕
 | 
						|
if not Bridge.Inventory and GetResourceState('tgiann-inventory') ~= 'missing' then
 | 
						|
    if not Bridge.InventoryName then Bridge.InventoryName = 'tgiann-inventory' end
 | 
						|
    Bridge.InventoryImagePath = 'inventory_images/images/'
 | 
						|
    Bridge.Inventory = 'tgiann-inventory'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ CUSTOM INVENTORY ❕
 | 
						|
-- if not Bridge.Inventory and GetResourceState('inventory') ~= 'missing' then
 | 
						|
--     if not Bridge.InventoryName then Bridge.InventoryName = 'inventory' end
 | 
						|
--     Bridge.Inventory = 'inventory'
 | 
						|
-- end
 | 
						|
 | 
						|
if not Bridge.Disabled['inventory'] and not Bridge.Inventory then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s^0'):format("No Compatible Inventory Resource Found. Please ensure you're using a supported inventory and that it's running before the bridge."))
 | 
						|
    return
 | 
						|
end
 | 
						|
 | 
						|
-- ❗ TARGET DETECTION ❗
 | 
						|
 | 
						|
-- ❕ OVERRIDE TARGET ❕
 | 
						|
if GetConvar('bridge:target', '') ~= '' then
 | 
						|
    Bridge.Target = GetConvar('bridge:target', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE TARGET NAME ❕
 | 
						|
if GetConvar('bridge:targetname', '') ~= '' then
 | 
						|
    Bridge.TargetName = GetConvar('bridge:targetname', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OX_TARGET ❕
 | 
						|
if not Bridge.Target and GetResourceState('ox_target') ~= 'missing' then
 | 
						|
    if not Bridge.TargetName then Bridge.TargetName = 'ox_target' end
 | 
						|
    Bridge.Target = 'ox_target'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ QB-TARGET ❕
 | 
						|
if not Bridge.Target and GetResourceState('qb-target') ~= 'missing' then
 | 
						|
    if not Bridge.TargetName then Bridge.TargetName = 'qb-target' end
 | 
						|
    Bridge.Target = 'qb-target'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ QTARGET ❕
 | 
						|
if not Bridge.Target and GetResourceState('qtarget') ~= 'missing' then
 | 
						|
    if not Bridge.TargetName then Bridge.TargetName = 'qtarget' end
 | 
						|
    Bridge.Target = 'qtarget'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ CUSTOM TARGET ❕
 | 
						|
-- if not Bridge.Target and GetResourceState('target') ~= 'missing' then
 | 
						|
--     if not Bridge.TargetName then Bridge.TargetName = 'target' end
 | 
						|
--     Bridge.Target = 'target'
 | 
						|
-- end
 | 
						|
 | 
						|
if not Bridge.Disabled['target'] and not Bridge.TargetName then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s^0'):format("No Compatible Target Resource Found. Please ensure you're using a supported target and that it's running before the bridge."))
 | 
						|
    return
 | 
						|
end
 | 
						|
 | 
						|
-- ❗ ZONES DETECTION ❗
 | 
						|
 | 
						|
-- ❕ OVERRIDE ZONE ❕
 | 
						|
if GetConvar('bridge:zone', '') ~= '' then
 | 
						|
    Bridge.Zone = GetConvar('bridge:zone', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OVERRIDE ZONE NAME ❕
 | 
						|
if GetConvar('bridge:zonename', '') ~= '' then
 | 
						|
    Bridge.ZoneName = GetConvar('bridge:zonename', '')
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ OX_LIB ❕
 | 
						|
if not Bridge.Zone and GetResourceState('ox_lib') ~= 'missing' then
 | 
						|
    if not Bridge.ZoneName then Bridge.ZoneName = 'ox_lib' end
 | 
						|
    Bridge.Zone = 'ox_lib'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ PolyZone ❕
 | 
						|
if not Bridge.Zone and GetResourceState('PolyZone') ~= 'missing' then
 | 
						|
    if not Bridge.ZoneName then Bridge.ZoneName = 'PolyZone' end
 | 
						|
    Bridge.Zone = 'polyzone'
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ CUSTOM ZONE ❕
 | 
						|
-- if not Bridge.Zone and GetResourceState('zone') ~= 'missing' then
 | 
						|
--     if not Bridge.ZoneName then Bridge.ZoneName = 'zone' end
 | 
						|
--     Bridge.Zone = 'zone'
 | 
						|
-- end
 | 
						|
 | 
						|
if not Bridge.Disabled['zone'] and not Bridge.ZoneName then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s^0'):format("No Compatible Zone Resource Found. Please ensure you're using a supported zone resource and that it's running before the bridge."))
 | 
						|
    return
 | 
						|
end
 | 
						|
 | 
						|
/*
 | 
						|
if not Bridge.Disabled['dispatch'] and not Bridge.DispatchName then
 | 
						|
    print('[^1BRIDGE ERROR^0]')
 | 
						|
    print(('^3%s^0'):format("No Compatible Dispatch Resource Found. Please ensure you're using a supported dispatch resource and that it's running before the bridge."))
 | 
						|
    return
 | 
						|
end
 | 
						|
*/
 | 
						|
 | 
						|
-- ❗ LOADERS ❗
 | 
						|
 | 
						|
-- ❕ LOAD MODULE LOADER ❕
 | 
						|
local resource = LoadResourceFile(Bridge.Name, 'shared/loader.lua')
 | 
						|
if not resource then return error('Unable To Load Module Loader') end
 | 
						|
local moduleloader, err = load(resource, ('@@%s/%s'):format(Bridge.Name, 'shared/loader.lua'))
 | 
						|
if not moduleloader or err then return error(err) end
 | 
						|
moduleloader()
 | 
						|
 | 
						|
-- ❕ LOAD UTILS ❕
 | 
						|
module(('utils/%s'):format(Bridge.Context))
 | 
						|
 | 
						|
module('utils/shared')
 | 
						|
 | 
						|
-- ❕ LOAD VERSION ❕
 | 
						|
module('shared/version')
 | 
						|
 | 
						|
-- ❕ LOAD CACHE ❕
 | 
						|
if not Bridge.Disabled['cache'] then
 | 
						|
    module(('cache/%s'):format(Bridge.Context))
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ LOAD POINTS ❕
 | 
						|
if not Bridge.Disabled['points'] then
 | 
						|
    module(('points/%s'):format(Bridge.Context))
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ LOAD DATABASE ❕
 | 
						|
if not Bridge.Disabled['database'] then
 | 
						|
    module(('database/%s/%s'):format(Bridge.Database, Bridge.Context))
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ LOAD FRAMEWORK ❕
 | 
						|
if not Bridge.Disabled['framework'] then
 | 
						|
    module(('framework/%s/%s'):format(Bridge.Framework, Bridge.Context))
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ LOAD INVENTORY ❕
 | 
						|
if not Bridge.Disabled['inventory'] then
 | 
						|
    module(('inventory/%s/%s'):format(Bridge.Inventory, Bridge.Context))
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ LOAD TARGET ❕
 | 
						|
if not Bridge.Disabled['target'] then
 | 
						|
    module(('target/%s/%s'):format(Bridge.Target, Bridge.Context))
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ LOAD ZONE ❕
 | 
						|
if not Bridge.Disabled['zone'] then
 | 
						|
    module(('zone/%s/%s'):format(Bridge.Zone, Bridge.Context))
 | 
						|
end
 | 
						|
 | 
						|
-- ❕ LOAD LOCALE ❕
 | 
						|
if not Bridge.Disabled['locale'] then
 | 
						|
    module('shared/locale')
 | 
						|
end |