Use the data table setup I posted for world item info (name, icon etc). This will reduce your sm actors “weight”, which reduces client and server memory usage.
For the heavy data items like skeletal mesh guns (attached/equipped to characters) you can either go with a lot of data table and row lookups (recoil, sway, rof, projectile class, muzzle velocity, sm variant, icon zeroing etc) or preferably and highly recommended stored in wepSK class structs.
The SK classes contain all the weapons logic. Firing (single, burst, auto), Reloading etc. Not the character. When you fire/reload you call an event on the currently equipped weapon. It executes the local logic. do i have ammo, which montage to use (shotgun vs AR vs SR etc).
I’d also create a weapon attachment inventory in the weapon class itself. Slot based, where each slot has a config of what can be attached.
muzzle: can attach (A, B, C, D) … on attach: Get attachment name → find (tmap, can attach) → true RPC server to attach.
Obviously there’s a lot to it. Plot out everything, then prototype BP, then translate to C++.