74 lines
2.0 KiB
Lua
74 lines
2.0 KiB
Lua
AddCSLuaFile()
|
|
|
|
ENT.Type = "anim"
|
|
ENT.RenderGroup = RENDERGROUP_OTHER
|
|
|
|
function ENT:SetupDataTables()
|
|
self:NetworkVar("Int", 0, "Slot")
|
|
self:NetworkVar("Int", 1, "Index")
|
|
end
|
|
|
|
function ENT:Initialize()
|
|
if (!IsValid(self:GetOwner())) then
|
|
error("Invalid weapon for attachment!")
|
|
end
|
|
|
|
self:AddEFlags(EFL_KEEP_ON_RECREATE_ENTITIES)
|
|
self:AddEFlags(EFL_FORCE_CHECK_TRANSMIT)
|
|
self:AddEFlags(EFL_NO_THINK_FUNCTION)
|
|
self:AddEFlags(EFL_NO_GAME_PHYSICS_SIMULATION)
|
|
self:AddEFlags(EFL_DONTBLOCKLOS)
|
|
self:AddEFlags(EFL_DONTWALKON)
|
|
self:AddEFlags(EFL_NO_DISSOLVE)
|
|
self:AddEFlags(EFL_NO_PHYSCANNON_INTERACTION)
|
|
self:AddEFlags(EFL_NO_DAMAGE_FORCES)
|
|
|
|
self:AddFlags(FL_NOTARGET)
|
|
self:AddFlags(FL_DONTTOUCH)
|
|
self:AddFlags(FL_STEPMOVEMENT)
|
|
self:SetNoDraw(true)
|
|
|
|
self:SetMoveType(MOVETYPE_NONE)
|
|
self:SetSolid(SOLID_NONE)
|
|
|
|
self:Attach()
|
|
end
|
|
|
|
function ENT:Attach()
|
|
local weapon = self:GetOwner()
|
|
|
|
if (SERVER) then
|
|
for _, child in pairs(weapon:GetChildren()) do
|
|
if (child:GetClass() == "mg_attachment" && child:GetSlot() == self:GetSlot() && child != self) then
|
|
child:Remove()
|
|
end
|
|
end
|
|
|
|
weapon:Attach(self:GetSlot(), self:GetIndex())
|
|
return
|
|
end
|
|
|
|
--on client we do this gibberish
|
|
local identifier = "mg_attachment_fixup"..self:EntIndex()
|
|
|
|
timer.Create(identifier, 0, 0, function()
|
|
if (!IsValid(weapon)) then
|
|
timer.Destroy(identifier)
|
|
return
|
|
end
|
|
|
|
if (weapon.Attach != nil && self.GetSlot != nil) then
|
|
weapon:Attach(self:GetSlot(), self:GetIndex())
|
|
timer.Destroy(identifier)
|
|
end
|
|
end)
|
|
end
|
|
|
|
--sorryyyyy garrysmod-issues/issues/5344
|
|
local oldCleanup = game.CleanUpMap
|
|
function game.CleanUpMap(dontSendToClients, ExtraFilters)
|
|
dontSendToClients = dontSendToClients || false
|
|
ExtraFilters = ExtraFilters || {}
|
|
table.insert(ExtraFilters, "mg_attachment")
|
|
oldCleanup(dontSendToClients, ExtraFilters)
|
|
end |