UE5 Inventory and Item System
This page is part of the documentaiton for my UE5 Inventory and Item System

Version 3 Changelog

UE5 Inventory and Item System Version: 3.0

    Before you upgrade your project make sure you back it up. This is a major version upgrade, which means things did change including the data tables. There is no easy way to upgrade a system when it has this many features and while it is possible it is just as big of an undertaking as starting fresh. I recommend starting fresh if you can.

    There is all kinds of new stuff for you to check out in version 3, below are the highlights, make sure you check out the documentation when you get a chance, it has been completely rewritten for this version.

    Videos for the different sections of the documentation will roll out over the coming weeks after this release is public.

    New Systems in Version 3

    • An Equipment System starting point has been added to assist you with gearing up your player’s modular and non-modular pawns. All the foundation, link to item system and handling of equipping and unequipping is handled for you, you just need to configure your pawns to use the equipment system (I show you how in the docs) and create your equipment. Includes the ability to add functionality to equipped items, and supports both static and skeletal mesh assets. You can mirror static meshes, and it even supports alternative slots (like for multiple rings and trinkets). Includes an equipment UI and a variety of equipment functionality examples. All the boring stuff has been handled for you, leaving you to work on just the fun parts after you get everything setup. If you do not want to use the equipment system you can easily disable it using a boolean on the AC_InventoryItemSystem equipment section.
    • A Currency System has been added to the asset as a way for your players to build and produce wealth from the items they find and create without consuming valuable inventory and storage space. You can have multiple currencies, and the player can see all of their currencies right from the inventory. The player can also change the currency that is tracked on the inventory as well as drop currency in the world for others to pick up. If you do not want to use the currency system you can easily disable it using a boolean on the AC_InventoryItemSystem equipment section.
    • Spoilable Items are now a thing! This new system that lets you create items that decay over time. The spoilable items system is multiplayer friendly and uses timestamps instead of counters for maximum efficiency. Spoilable items even continue to spoil while the player is offline (even in single player games). Each item can have a different decay rate, and you can change the spoil speed of the container the item is in so you can make things like the freezer and rapid spoiler in the demo world. If you don’t want to use the spoil system just don’t use the item data activator for it and it will never be used.
    • The Item Data System is a brand new feature that lets you store, get and change data on items. You can set defaults and override them later in the game. Also includes integrated tap in points to easily add in advanced custom logic that is used at various points in the system such as creation, transfer, and rendering of the UI item icons and tooltips. Item data is private by default but can be exposed and displayed on the tooltip to the player using custom string formatting. The spoil system is an advanced use of the Item Data system and uses all of the available tap in points.

    Input Changes

    • Gamepad support has been integrated! View the notes inside the Gamepad sections of the Input / Key Bindings section of the documentation for more information. Thank you to everyone who has been patiently waiting for this feature.
    • Enhanced Input support has been added. Now all major key bindings are routed through it, as well as all new gamepad specific key bindings. You can view the full list of bindings on the Input & Key Bindings section of the documentation.

    Interaction System Changes

    • The interaction system has been overhauled and now uses an interface to detect and interact with interactables in the world instead of the previous use of overlap events on the interactable.
    • The notice that appears on the UI has been touched up and toned down, it will now also tell different things and actions based on what is nearby. For example if you get near a stack of things you can pickup it will tell you to press the pickup everything input action instead of the interact nearby input action.
    • You can now move while interacting with something that creates a UI window, but if you move too far away the window will be closed automatically.
    • You can now hold down the interacting nearby input action to continuously pick up multiple things nearby one at a time. This can be disabled by setting “canPickupHold?” to false on the AC_InventoryItemSystem component attached to your player controller.
    • You can press F to pickup multiple nearby items all at once. This isn’t new, but what is new is that you can easily disable this by setting “canPickupMultiple?” to false on the AC_InventoryItemSystem.

    Item System Changes

    • Usable items now have a flag to mark them as reusable which will not remove the item when it is used, this is set inside the ItemOnUse specified for your item.
    • Reusable items have an optional item data key called “charges”. Set this key’s value to an integer to specify a number of times the item can be used before it is removed. Leaving out this data variable will cause the reusable item to have infinite uses. (Since we are using item data to manage the charges you should not make reusable items with “charges” stackable, the charge counts will merge to the value of the destination (when moving) or first available stack (when adding)).
    • When using the “charges” item data key you can further customize the way the item responds when the charges are empty. By default the usable item will be destroyed when charges reach 0. Set IsDestroyOnEmptyCharges? to false to disable removing an item when charges reach 0. This is good if you want to have some kind of rechargeable reusable item that is charges based.
    • You can now create starter items which will be given to the player at the very start of the game.
    • You can now provide an optional second static meshes for each item in your items data table, this new mesh if provided will be used if the quantity is multiple. The original mesh will be used if it is just 1 of the item. If you don’t provide the multiple mesh and it is a multiple quantity it will use the default one. In the demo world if you drop 1 coin it will appear as one coin, but if you drop multiple it will appear as multiple. This is not a feature of the currency system but actually part of the item system (under the surface currency is treated as an item when it is represented in our world).
    • Items placed or spawned in the world with the BP_Interactable_Item now have the option to apply a decay timer to them which will destroy the item after a certain amount of time. Leave the value at 0 to disable, by default it is disabled. You can also override the item data for items placed in the world through the BP_Interactable_Item.
    • In this version I have included a way to easily specify the quality of your items. The only thing quality currently does is set the color used for the item title on the tooltip, loot window and item notifications, as well as the item background color in containers. You can change the quality types using the enum found in the Blueprints/Variables/Enums folder. To specify colors see the getItemQualityColor function inside of the BP_SharedFunctions function library found in the Blueprints/Variables/ folder. Remember, the higher the quality the rarer the player will think it is, give your highest quality items to the player sparingly. Higher qualities should be represented by a vibrant color, where lower quality should be represented by duller colors.
    • The BP_Interactable_Item will now render on the construction script to make placing it in your world easier while in the editor mode. Previously they would not render until begin play, so in the editor you would see a bunch of white balls. Now the actual item will be shown.
    • AC_Inventory components can now be reset by calling the ResetInventory event.
    • There is now a way to add multiple inventory items in one event call, see the BulkAddInventory event inside of the AC_Inventory component to use it.

    Inventory System Changes

    • The handling of overflow items has changed, and additional checks have been added throughout the various systems to stop it from occurring. It is still possible to occur through spawning and if it does the overflow items will appear in the inventory but not be accessible until space in the inventory is freed up for them. Overflow items will appear at the very bottom of the inventory and will have a red color tint with the word OVERFLOW written across it.
    • The tooltips have had a big upgrade to support all the new item data features. I have also updated the tooltip appearance to slightly clean it up. Tooltips now have the option to show item counters on them. The counters will show how many of that item the player has in all of their systems (inventory, bank, hotbar, equipment). You can turn off the counters using a boolean on the AC_InventoryItemSystem attached to your player controller.
    • If you hold down ALT while hovering over an item tooltip it will show you all possible shortcuts using mouse and keyboard.
    • Anchor points have been added to the left and right side of the inventory window, these are used to show things like the equipment and currency tabs. In a future version there will be more uses for these.
    • A currency widget will now appear at the bottom right hand corner, this will show the currency the player is currently tracking. This tracked currency can be changed anytime by the player by expanding the currency tab (by clicking the currency widget) and selecting a new currency from the tab. This widget will be hidden if you disable the currency system. You can also force it to hide without disabling the system using a boolean found in the currency section of the variable on the AC_InventoryItemSystem.
    • An equipment toggle will now appear in the bottom left hand corner, this can be used to toggle showing and hiding the equipment tab. You can hide this using a boolean found in the equipment section of the variables on the AC_InventoryItemSystem.
    • Changing the column count in the inventory, bank and storage containers is easier now, just change the value of the Columns variable (integer) inside the widget graph.

    Vendor System Changes

    • The vendor can now sell items for different currencies or even for other items.
    • Items can now be sold to the vendor for different currencies, the currency is something you set in the data table for each item. You are also not limited to using actual currencies but you can have things sold for other items as well!

    Loot System Changes

    • The Looting subsystem has been revamped and simplified. The loot component has been renamed from AC_Loot to AC_Looting.
    • You can now specify both the loot source (Loot Table, Inventory Component, Custom Loot) and loot distribution (Looting UI, Spawn Items in World, Spawn Items in Container) for each looting component.
    • Any containers using the Looting UI (withdraw only window) will now list items as stacks based on the slot criteria instead of combining them all together.
    • There is now a Treasure Chest container example, this container comes with the looting component already attached to it.
    • The Player Drop Loot Container is now a child of the new Treasure Chest container blueprint.
    • You can now easily create reusable Loot Tables to reward loots based on a chance driver. With loot tables you can also randomize the quantity. The Looting System supports the use of these loot tables as a loot source. There is also a loot box usable item example that uses the new advanced loot tables.

    Other Changes

    • The demo world has been rebuilt to better reflect the current offerings of what is included with this asset.
    • The GetItemData & GetRecipeData functions have been renamed to just GetItem & GetRecipe.
    • You can also wipe the player by calling the ResetPlayerNow event inside the AC_InventoryItemSystem. Wiping the player will reset all AC_Inventory components attached to the player controller as well as their currency. There is also a Reset Player button you can drop in the world to make debugging a little easier, just jump on the button to wipe the player, the BP_Button_ResetPlayer button can be found in the Demo/MapHelpers/WorldButtons.
    • The way items drop into the world via drag and drop has been updated. Now when the drag starts the HUD will change its visibility to properly catch the item when it is dropped, and when the drop occurs the HUD will switch the visibility back to allow clicks through it. This will resolve potential clicking issues with non-system widgets that were layered under the Item System’s HUD in previous versions.
    • The ZOrder of all widgets has been updated. The HUD has been set to 997. The Hotbar and other system windows have been set to 998. The Inventory has been set to 999 and Important windows like the loot window, drop loot, and split stack widget have been set to 1000. Use the Find in Blueprints tool with these numbers to see where they are being assigned if you need to make changes.
    • The Drop item quantity selector that appears when you hold Shift and Drop a stackable item into the world has had it’s UI simplified a little bit, it is now about half the size as it was but offers all the same functionality.
    • Interactable items now have an option to visualize the net cull distance within the editor, enabling the DebugCullDistance? boolean on an interactable to see it.
    • You can now change the way the system handles the input mode when UI windows are opened and closed. See the variables inside the UI section of the details panel on the AC_InventoryItemSystem component added to your player controller.
    • Multiplayer has been further optimized to reduce the bandwidth consumption when an inventory component receives an update from an item (add, remove, move, data change). Now instead of sending the entire contents of the inventory component just the slots specific to the change are transmitted.
    This documentation and asset version are new. If you encounter any bugs or if anything doesn't make sense, please let me know.