Files
VnUtest/garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_bodygroups.lua
2026-03-31 10:27:04 +03:00

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