Inital Commit

This commit is contained in:
2026-02-11 18:22:33 -05:00
parent 2f71b475d8
commit 217cf67ab5
17 changed files with 106489 additions and 1 deletions

View File

@@ -0,0 +1,98 @@
local function safeRequire(moduleName)
local ok, result = pcall(require, moduleName)
if ok and type(result) == "table" then
return result
end
return {}
end
local function appendArray(target, source)
if type(source) ~= "table" then
return
end
for _, value in ipairs(source) do
target[#target + 1] = value
end
end
local function mergeSpec(baseSpec, extraSpec)
local merged = {
items = {},
prefixes = {},
}
if type(baseSpec) == "table" then
appendArray(merged.items, baseSpec.items)
appendArray(merged.prefixes, baseSpec.prefixes)
end
if type(extraSpec) == "table" then
appendArray(merged.items, extraSpec.items)
appendArray(merged.prefixes, extraSpec.prefixes)
end
return merged
end
local function mergeAliasTables(baseAliases, extraAliases)
local merged = {}
if type(baseAliases) == "table" then
for key, list in pairs(baseAliases) do
merged[key] = merged[key] or {}
appendArray(merged[key], list)
end
end
if type(extraAliases) == "table" then
for key, list in pairs(extraAliases) do
merged[key] = merged[key] or {}
appendArray(merged[key], list)
end
end
return merged
end
local function mergeRuleTables(baseRules, extraRules)
local merged = {}
appendArray(merged, baseRules)
appendArray(merged, extraRules)
return merged
end
local function mergeByList(baseByList, extraByList)
local merged = {}
if type(baseByList) == "table" then
for listName, spec in pairs(baseByList) do
merged[listName] = mergeSpec(nil, spec)
end
end
if type(extraByList) == "table" then
for listName, spec in pairs(extraByList) do
merged[listName] = mergeSpec(merged[listName], spec)
end
end
return merged
end
local defaults = safeRequire("OFBlockRules_Default")
local user = safeRequire("OFBlockRules_User")
local sourceCatalog = safeRequire("OFSourceCatalog")
local aliasCatalog = {
firearms = sourceCatalog.firearms or {},
attachments = sourceCatalog.attachments or {},
ggs_all = sourceCatalog.ggs_all or {},
}
local merged = {
global = mergeSpec(defaults.global, user.global),
byList = mergeByList(defaults.byList, user.byList),
rules = mergeRuleTables(defaults.rules, user.rules),
aliases = mergeAliasTables(defaults.aliases, user.aliases),
}
merged.aliases = mergeAliasTables(aliasCatalog, merged.aliases)
return merged