Files
call-of-duty-tdm/lua/entities/mg_attachment.lua
2026-03-30 10:39:52 +03:00

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