diff --git a/imports/require/shared.lua b/imports/require/shared.lua index ced340e..0454e1b 100644 --- a/imports/require/shared.lua +++ b/imports/require/shared.lua @@ -17,29 +17,61 @@ local _require = require function lib.require(modname) if type(modname) ~= 'string' then return end + local modpath = modname:gsub('%.', '/') local module = loaded[modname] + if module then return module end + + local success, result = pcall(_require, modname) + + if success then + loaded[modname] = result + return result + end + + local resourceSrc + + if not modpath:find('^@') then + local idx = 1 + + while true do + local di = debug.getinfo(idx, 'S') + + if di then + if not di.short_src:find('^@ox_lib/imports/require') and not di.short_src:find('^%[C%]') and not di.short_src:find('^citizen') then + resourceSrc = di.short_src:gsub('^@(.-)/.+', '%1') + break + end + else + resourceSrc = cache.resource + break + end + + idx += 1 + end + + if resourceSrc ~= cache.resource then + modname = ('@%s.%s'):format(resourceSrc, modname) + end + end + if not module then if module == false then error(("^1circular-dependency occurred when loading module '%s'^0"):format(modname), 2) end - local success, result = pcall(_require, modname) - - if success then - loaded[modname] = result - return result + if not resourceSrc then + resourceSrc = modpath:gsub('^@(.-)/.+', '%1') + modpath = modpath:sub(#resourceSrc + 3) end - local modpath = modname:gsub('%.', '/') - for path in package.path:gmatch('[^;]+') do local scriptPath = path:gsub('?', modpath):gsub('%.+%/+', '') - local resourceFile = LoadResourceFile(cache.resource, scriptPath) + local resourceFile = LoadResourceFile(resourceSrc, scriptPath) if resourceFile then loaded[modname] = false - scriptPath = ('@@%s/%s'):format(cache.resource, scriptPath) + scriptPath = ('@@%s/%s'):format(resourceSrc, scriptPath) local chunk, err = load(resourceFile, scriptPath)