# 2.0.1

Engine support: 5.2



# Highlights

  • Custom shaped items.
  • Rotations support for 180 and 270 degrees added.
  • QA validation system for data assets.
  • Increased focus on Objects for item data.
  • Improvements to how item and container widgets are referenced.
  • Mutlithreaded sorting function

# Items

  • A validation system has been added to the data asset to help with QA.
    • This is achieved through a validation class (so you can write your validation at a blueprint level) and a interface function from I_Validation. The plugin comes with a basic example.
  • Items can now be rotated 0, 90, 180 and 270 degrees.
    • The function CheckBothRotationsForSpace has been deprecated because the name does not make sense anymore. Has been replaced with CheckAllRotationsForSpace
  • Items now support custom shapes. This can be enabled by adding the "Custom Shape" object to an items data asset.
  • Helper functions for rotating and evaluating an items shape have been added.
  • Added GetNearbyItems function.
  • The following enums have been deprecated and replaced with the items tags:
    • Item rarity
    • Equipment slot
    • Equipment type
    • Weapon type
    • Attachment type
      This change has a host of benefits. It is one less reason to install locally, easier to expand, manage and more. This also has the benefit of allowing all of these to be easily overridable during runtime.
      This also means CompatibilitySettings and CheckCompatibility has been updated. CheckCompatibility will no longer check the deprecated enums to reduce confusion for new people.
  • The following variables have been deprecated and replaced with objects:
    • Price and Default Accepted Currencies moved to IO_Pricing
  • The first multithreaded sorting function has been added. For now I'm starting with just sorting by name to find out if the current approach works. If the current approach works, I'll start working on more sorting functions and hopefully make a tutorial on how to make your own custom sorting function.
  • Added AssetTags and AssetTagValues to the data asset. These are similar to the default tags, except they are NOT added to the item struct and can not be modified, removed or added during runtime.
  • When an item is equipped and using a blueprint actor as it's physical representation, the root items UniqueID is now passed to the actor and stored inside RootItemID, allowing the spawned actor to access it's true item data.

# Tag system

  • Various functions have been added to validate if a tag and tag values can or can not be added, removed or set for both items and containers.
  • The Tag value struct now has a custom editor slate widget to make it easier to work with and take up less space.
    • Note: As of 5.2, there's a bug with some custom structs and editor utility widgets not displaying the custom struct correctly. To get around this, I've made it so it displays the default struct widget while inside a editor utility widget.
  • TileTags have been added for containers to replace HiddenSlots and LockedSlots, which are now deprecated. This is a prototype, it currently can not be modified during runtime for multiplayer and there are no events for when a tag is removed or added.

# Widgets

  • Both the drag and highlight widget have been updated to behave more intuitively with custom shaped items. This also means both have been reworked quite heavily. For non-grid containers, the behavior should remain the same as before.
  • The drag and drop operation no longer has a visual and WBP_Drag is now added to the screen (You might have to set the ZOrder). This is to resolve a interpoloation issue you could not control inside the drag and drop operation drag visual and improve the consistency of WBP_Drag.
  • Attachment widgets no longer need a reference to the parent items widget.
  • Attachment widgets now remove themselves correctly from the parent item when it is destroyed.
  • Both the item struct and container struct now reference the item widget and container widget respectively.
  • AC_Inventory -> ContainerWidgets has been deprecated as the container struct now references the container widgets. Added GetAllContainerWidgets and RemoveAllContainerWidgets to replace the array.

# Objects and drivers

  • Objects have had their hierarchy changed. There is now a "pure" (O_PureItemObject) item object below the regular item object, which is now meant for data only objects. This is to optimize memory footprint as the framework becomes more focused on objects and for projects that are heavily utilizing the object system.
  • ConstructionMethod is getting deprecated. You should reparent your data-only objects to O_PureItemObject.
  • Objects can now prevent multiple copies of themselves inside an item assets ObjectsAndDrivers array. By default this is set to false, to change it you must override the AllowMultipleCopiesInDataAsset function.
  • Objects now get notified when they are added to the item assets array with AddedToItemAsset. Allowing for more complicated default variables.
  • Added object for pricing (IO_Pricing).

# Tools

  • A shape editor has been added to the ItemEditor's toolbox.
  • A conversion tool has been added to help convert the deprecated enums listed above into gameplay tags and move some deprecated variables into their new objects. This tool will be removed in 2.1 and is only meant to help those upgrading from 1.2 to 2.0.
  • Container handle bar context menu has been removed from the inventory helper.

# Bug fixes

  • When removing an item as listen server, it would attempt to remove the item twice.
  • Attachment widgets were not being removed correctly in some scenarios.
  • GetItemDriver was not returning client-only objects for single player sessions.
  • Skeletal mesh equipment animations could end up in an infinite loop if they contained a MontageNotify with the same name as their WaitForNotify.
  • Equipment system for clients would try to play an animation on skeletal meshes with WaitForNotify and then create it, causing the animation to not play as the mesh had not been replicated yet.
  • Updating the unequip location for static and skeletal meshes was not functioning correctly.
  • CheckCompatibility would not take the items default tags and tag values into consideration while in the editor.
  • Increase and Decrease item count could crash if invalid item data was passed in.
  • TryAddNewItem could cause issues with CheckCompatibility