add sborka
This commit is contained in:
113
garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_bodygroups.lua
Normal file
113
garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_bodygroups.lua
Normal file
@@ -0,0 +1,113 @@
|
||||
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
|
||||
Reference in New Issue
Block a user