104 lines
2.9 KiB
Lua
104 lines
2.9 KiB
Lua
require("mw_utils")
|
|
AddCSLuaFile()
|
|
MW_ATTS = {}
|
|
|
|
function GetAttachmentBaseClass(base)
|
|
MW_ATTS[base] = MW_ATTS[base] || {}
|
|
|
|
return MW_ATTS[base]
|
|
end
|
|
|
|
function LoadAttachment(path, fileName)
|
|
ATTACHMENT = {}
|
|
|
|
if (mw_utils.CompileFile(path..fileName)) then
|
|
local name = string.Replace(fileName, ".lua", "")
|
|
ATTACHMENT.ClassName = name
|
|
ATTACHMENT.Folder = path
|
|
table.Merge(GetAttachmentBaseClass(name), table.Copy(ATTACHMENT))
|
|
end
|
|
end
|
|
|
|
local oldModel = Model
|
|
function Model(dir) --sorry
|
|
if (GetConVar("mgbase_precacheatts"):GetInt() > 0) then
|
|
util.PrecacheModel(dir)
|
|
end
|
|
return dir
|
|
end
|
|
|
|
local function loadAttachments(dir)
|
|
dir = dir .. "/"
|
|
local File, Directory = file.Find(dir.."*", "LUA")
|
|
for k, v in ipairs(File) do
|
|
if (string.EndsWith(v, ".lua")) then
|
|
LoadAttachment(dir, v)
|
|
end
|
|
end
|
|
|
|
for k, v in ipairs(Directory) do
|
|
loadAttachments(dir..v)
|
|
end
|
|
end
|
|
|
|
loadAttachments("weapons/mg_base/modules/attachmentss")
|
|
Model = oldModel
|
|
|
|
--check baseclass
|
|
local function checkBaseClassInAttachments()
|
|
for name, att in pairs(MW_ATTS) do
|
|
if (istable(name)) then
|
|
mw_utils.ErrorPrint("checkBaseClassInAttachments: You may have defined BaseClass twice! "..(name.Name || "error class"))
|
|
MW_ATTS[name] = nil
|
|
end
|
|
|
|
if (name != "att_base") then
|
|
if (att.Base == nil) then
|
|
mw_utils.ErrorPrint("checkBaseClassInAttachments: "..name.." doesn't inherit from anything! This will cause problems...")
|
|
MW_ATTS[name] = nil
|
|
end
|
|
|
|
if (att.Base == name) then
|
|
mw_utils.ErrorPrint("checkBaseClassInAttachments: You are inheriting from self (Base = myself)! This would freeze your game. ("..name..")")
|
|
MW_ATTS[name] = nil
|
|
end
|
|
|
|
if (MW_ATTS[att.Base] == nil) then
|
|
mw_utils.ErrorPrint("checkBaseClassInAttachments: "..name.." is trying to inherit from missing attachment! ("..(att.Base || "missing class")..")")
|
|
MW_ATTS[name] = nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
checkBaseClassInAttachments()
|
|
|
|
--inherit
|
|
local function inherit(current, base)
|
|
for k, v in pairs(base) do
|
|
if (!istable(v)) then
|
|
if (current[k] == nil) then
|
|
current[k] = v
|
|
end
|
|
else
|
|
if (current[k] == nil) then
|
|
current[k] = {}
|
|
end
|
|
inherit(current[k], v)
|
|
end
|
|
end
|
|
end
|
|
|
|
function DoAttachmentInheritance(att)
|
|
local baseClass = MW_ATTS[att.Base]
|
|
while (baseClass != nil) do
|
|
inherit(att, baseClass)
|
|
baseClass = MW_ATTS[baseClass.Base]
|
|
end
|
|
end
|
|
|
|
local function finishAttachments()
|
|
for name, att in pairs(MW_ATTS) do
|
|
DoAttachmentInheritance(att)
|
|
end
|
|
end
|
|
finishAttachments() |