To handle firing, I suggest you use a module called fast cast. To handle the equipping and unequipping, you can use ContextActionService to bind functions to inputs.
In terms of using CFrame, you need to be a bit more specific. I would suggest using animations for firing and reloading instead of lerping only because it is significantly more efficient.
This should provide you with a solid place to start.