114 lines
2.9 KiB
Lua
114 lines
2.9 KiB
Lua
function SWEP:DoBodygroups(wm, custom_wm)
|
|
if wm == nil then
|
|
wm = false
|
|
self:DoBodygroups(true)
|
|
end
|
|
if !wm and (!IsValid(self:GetOwner()) or self:GetOwner():IsNPC()) then return end
|
|
|
|
local dbg = self:GetValue("DefaultBodygroups")
|
|
|
|
local mdl
|
|
|
|
if wm then
|
|
mdl = custom_wm or self
|
|
dbg = self:GetValue("DefaultWMBodygroups")
|
|
else
|
|
mdl = self:GetVM()
|
|
end
|
|
|
|
if !IsValid(mdl) then return end
|
|
|
|
mdl:SetBodyGroups(dbg or "")
|
|
|
|
local sk = self:GetValue("DefaultSkin")
|
|
|
|
local eles = self:GetElements()
|
|
|
|
for i, k in ipairs(eles) do
|
|
if wm then
|
|
for _, j in pairs(k.BGs_WM or {}) do
|
|
if _ == "BaseClass" then continue end
|
|
mdl:SetBodygroup(j[1], j[2] or 0)
|
|
end
|
|
if k.Skin_WM != nil then sk = k.Skin_WM end
|
|
else
|
|
for _, j in pairs(k.BGs_VM or {}) do
|
|
if _ == "BaseClass" then continue end
|
|
mdl:SetBodygroup(j[1] or 0, j[2] or 0)
|
|
end
|
|
if k.Skin_VM != nil then sk = k.Skin_VM end
|
|
end
|
|
end
|
|
|
|
mdl:SetSkin(sk)
|
|
|
|
local bbg = self:GetValue("BulletBodygroups")
|
|
|
|
if bbg then
|
|
local amt = self:Clip1()
|
|
|
|
if self:GetReloading() then
|
|
amt = self:GetLoadedRounds()
|
|
end
|
|
|
|
for c, bgs in pairs(bbg) do
|
|
if amt < c then
|
|
mdl:SetBodygroup(bgs[1], bgs[2])
|
|
if !self.BulletBodygroupsSetAll then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
self:RunHook("Hook_PostDoBodygroups")
|
|
end
|
|
|
|
function SWEP:GetElements(holster)
|
|
if !self.AttachmentElements then return {} end
|
|
local eles = {}
|
|
|
|
for i, k in pairs(self.Attachments) do
|
|
if k.Installed then
|
|
table.Add(eles, k.InstalledElements or {})
|
|
|
|
local atttbl = TacRP.GetAttTable(k.Installed)
|
|
|
|
table.Add(eles, atttbl.InstalledElements or {})
|
|
else
|
|
table.Add(eles, k.UnInstalledElements or {})
|
|
end
|
|
end
|
|
local eleatts = {}
|
|
|
|
local foldstock = false
|
|
for i, k in pairs(eles) do
|
|
if self.AttachmentElements[k] then
|
|
table.insert(eleatts, self.AttachmentElements[k])
|
|
foldstock = foldstock or k == "foldstock"
|
|
end
|
|
end
|
|
|
|
-- Bipod bodygroup
|
|
if self:GetInBipod() and self.AttachmentElements["bipod"] then
|
|
table.insert(eleatts, self.AttachmentElements["bipod"])
|
|
end
|
|
|
|
-- Hack: Always fold stock when weapon is holstered
|
|
if IsValid(self:GetOwner()) and self:GetOwner():IsPlayer()
|
|
and self:GetOwner():GetActiveWeapon() != self and !foldstock
|
|
and self.AttachmentElements["foldstock"] then
|
|
table.insert(eleatts, self.AttachmentElements["foldstock"])
|
|
end
|
|
|
|
table.sort(eleatts, function(a, b)
|
|
return (a.SortOrder or 1) < (b.SortOrder or 1)
|
|
end)
|
|
|
|
return eleatts
|
|
end
|
|
|
|
function SWEP:DoBulletBodygroups()
|
|
self:DoBodygroups(false)
|
|
end
|