You can make 1 weapon that has all the functions and expose a bool to enable/disable each function. Then you just extend from it (make a child BP) and change the mesh and bullets…
(In content browser right click on a BP and Create BP based on this. This child wont see the parents code at all. The only thing you can change is the Defaults so it is worth exposing as many vars as you can )