My personal preference is a single parent weapon class. Have all the firing, reload, recoil etc logic in this one class. Then create a child class for Pistol and one for Rifle.
Weapons (Parent, Actor)
– Wep_Pistol (child of Weapons)
– Wep_Rifle (child of Weapons)
From here you’d simply create children for the individual weapons.
Wep_Pistol → Pistol_Colt1911, Pistol_Beretta92, Pistol_Glock39…
Wep_Rifle → Rifle_M416, Rifle_AK47, Rifle_M16A4…
If you decide to expand on the types to have more variation such as SMG, AR, SR, DMR, Shotgun, PDW. In the parent class (Weapons) create an enum for identification. Then create a child for each type… set the enum in the child.
Weapons
– Wep_PDW → PDW_Colt1911, PDW_Beretta92 …
– Wep_AR → AR_M416, AR_AK47 …
– Wep_SMG → SMG_UMP45, SMG_MAC11 …
This method simplifies debugging drastically. 99% of the logic is in the Parent class. Children can have soft modifications (Wep_PDW, Wep_AR). Specific weapons are simply configurable classes. Nothing to code.