function SWEP:ReceiveWeapon(ids)
    for slot, slottbl in pairs(self.Attachments) do
        local attid = ids and ids[slot] or net.ReadUInt(TacRP.Attachments_Bits)

        if attid == 0 then
            slottbl.Installed = nil
        else
            slottbl.Installed = TacRP.Attachments_Index[attid]
        end
    end

    self:InvalidateCache()

    self:SetupModel(true)
    self:SetupModel(false)

    self.CertainAboutAtts = true
end

function SWEP:UpdateHolster()
    local ply = self:GetOwner()
    if IsValid(ply) and ply:IsPlayer() and ply:GetActiveWeapon() != self then
        local visible = self:GetValue("HolsterVisible")
        local slot = self:GetValue("HolsterSlot")

        if visible and slot then
            ply.TacRP_Holster = ply.TacRP_Holster or {}
            ply.TacRP_Holster[slot] = self
        end
    end
end

function SWEP:RequestWeapon()
    net.Start("tacrp_networkweapon")
    net.WriteEntity(self)
    net.SendToServer()
end
