We’ve both posted on this subject in many other threads over the years.
Overall the link is similar to what I’m doing. I have enums for primary config. Like subclass, slot compatibility etc. versus creating nested subclasses and child building from there.
e.g.
weapon subclass: AR, DMR, SMG, LMG, SR, Pistol, Shotgun, RPG etc.
Inventory Slot type: Primary, Secondary
For firing logic on child classes I overwrite the parent event.
e.g. Parent fire logic has single, burst and automatic firing modes. For a shotgun with only single fire you’d overwrite its logic (looped projectile spawn with deviation). For anti-cheat you’d overwrite the burst and auto to simply output nothing.
Like Burst Fire : → branch … do nothing on true/false.