Inital Commit
This commit is contained in:
98
common/media/lua/shared/OFBlockConfig.lua
Normal file
98
common/media/lua/shared/OFBlockConfig.lua
Normal 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
|
||||
Reference in New Issue
Block a user