Inventory Systems (IS) should be designed from the ground up considering the entire scope of items that it will contain and their customizations. Every IS is unique to the project.
Group items by Type and Same data needs.
Weapons, Ammo, Gear, Grenades, Meds, Boosters, etc.
Define the data needs of each group. If items in a group diverge create a sub type classification.
Weapons: [AR, DMR, SR, SMG, LMG, Pistol, Shotgun]
Gear: [Helmet, Vest, BackPack]
Develop a universal Item Identification structure that ALL items will use. This will ease your interaction and lookup code.
For example you can use GameplayTags as ItemID
Items
Items.Weapon
Items.Weapon.AK47
An ID of Items.Weapon.AK47 tells me the Actor is a world item (player can add it to inventory). It’s a Weapon and it’s an AK47.
Using string nodes I can split the gameplay tag into its chunks [Item, Weapon, AK47]. This can be used to tell me to use the weapons data table and the row name ak47.
Define every item type, item grouping/sub grouping, base needs of each before starting on the IS structure.
End of Day an Inventory system should be simplistic identification data and counts (int) where needed. You can use the ID’s of items to do data table lookups to get Icons, classes, meshes and any other UI elements.

