Files
OpinionatedFirearms/common/media/lua/client/OpinionatedFirearms_BetterContainersGuns93ModPackInjector.lua
2026-02-16 00:33:14 -05:00

150 lines
3.3 KiB
Lua

local OFBCGuns93ModPackInjector = {
installed = false,
tickHookAdded = false,
}
local APPLY_MODS_MODULE = "BetterContainers/Categorize/Categories/_applyMods"
local GUNS93_PACK_PATH = "mods/guns93_items"
local BC_MOD_IDS = {
"EURY_CONTAINERS",
"REORDER_CONTAINERS",
"\\EURY_CONTAINERS",
"\\REORDER_CONTAINERS",
}
local GUNS93_MOD_IDS = {
"guns93",
"\\guns93",
}
local function isSortingToggleEnabled()
local vars = SandboxVars and SandboxVars.OpinionatedFirearms
if vars and vars.AddSorting ~= nil then
return vars.AddSorting == true
end
return true
end
local function getActivatedModsList()
if type(getActivatedMods) ~= "function" then
return nil
end
local mods = getActivatedMods()
if not mods or type(mods.contains) ~= "function" then
return nil
end
return mods
end
local function isBetterContainersActive()
local mods = getActivatedModsList()
if not mods then
return nil
end
for i = 1, #BC_MOD_IDS do
if mods:contains(BC_MOD_IDS[i]) then
return true
end
end
return false
end
local function isGuns93Active()
local mods = getActivatedModsList()
if not mods then
return false
end
for i = 1, #GUNS93_MOD_IDS do
if mods:contains(GUNS93_MOD_IDS[i]) then
return true
end
end
return false
end
local function installApplyModsWrapper()
if OFBCGuns93ModPackInjector.installed then
return true
end
if not isSortingToggleEnabled() then
OFBCGuns93ModPackInjector.installed = true
return true
end
local bcState = isBetterContainersActive()
if bcState == false then
OFBCGuns93ModPackInjector.installed = true
return true
end
if bcState == nil then
return false
end
if _G.OF_GUNS93_BC_APPLYMODS_WRAPPED then
OFBCGuns93ModPackInjector.installed = true
return true
end
local ok, applyMods = pcall(require, APPLY_MODS_MODULE)
if not ok or type(applyMods) ~= "function" then
return false
end
if type(package) ~= "table" or type(package.loaded) ~= "table" then
return false
end
local function wrappedApplyMods(loadCategoryFile, dlog)
applyMods(loadCategoryFile, dlog)
if not isGuns93Active() then
return
end
if type(loadCategoryFile) == "function" then
loadCategoryFile(GUNS93_PACK_PATH)
if dlog then
dlog("Loaded category pack guns93_items")
end
end
end
package.loaded[APPLY_MODS_MODULE] = wrappedApplyMods
_G.OF_GUNS93_BC_APPLYMODS_WRAPPED = true
OFBCGuns93ModPackInjector.installed = true
return true
end
local function tryInstallOnTick()
if installApplyModsWrapper() then
OFBCGuns93ModPackInjector.tickHookAdded = false
Events.OnTick.Remove(tryInstallOnTick)
end
end
local function ensureTickHook()
if OFBCGuns93ModPackInjector.tickHookAdded then
return
end
OFBCGuns93ModPackInjector.tickHookAdded = true
Events.OnTick.Add(tryInstallOnTick)
end
if not installApplyModsWrapper() then
ensureTickHook()
end
if Events.OnMainMenuEnter and type(Events.OnMainMenuEnter.Add) == "function" then
Events.OnMainMenuEnter.Add(installApplyModsWrapper)
end