# 2.8.1

Engine support: 5.4

The "Need for Speed" edition

This is one of the biggest updates since 2.0 and was on the border of becoming version 3.0. This update changes a good chunk of behaviour under the hood and brings lots of optimizations. `IFP` is already extremely fast and is probably the fastest and most feature-rich inventory system on the marketplace, but that doesn't mean there isn't room for improvements.

Highlights:

* Added **ItemStructObject**'s, which are a brand new way of handling gameplay logic for items. This is one of the biggest and most exciting features added to `IFP` since release.
* Improved editor workflow.
* Several performance improvements.
* Updated documentation.

***

## Items

* Added **ItemStructObject**'s, which are a brand new way of handling gameplay logic for items. [Documentation](https://inventoryframework.github.io/classes-and-settings/da_coreitem/) has been added
* You can now drag the item data asset into the viewport to place the item actor. This is also possible by clicking and dragging the asset icon in the `ItemEditor` tool.
* The `VerifyData` button has been removed. The logic has been moved into the `IsDataValid` function, which is ran whenever an asset is saved.
* Added buttons for opening the item actor and item struct object.
* Item assets thumbnails in the content browser and drop down windows now use their inventory image or the developer image as the thumbnail image.
* Added **ItemType** tag to items to simplify the item type logic for items.
* Shape is now baked into the data asset, greatly improving the performance of several functions that relied on the items shape.
* **GetItemDescription** will now replace any text that includes "< Tag value name >" with the value of that tag value. For example; "Current Durability: \<IFP.Items.Stat.Durability>" will be changed to Current Durability: 20" if the tag value was 20. The apple, helmet and gun items uses this for an example. You can also style your floats with the new `Rich Text Wrapper` parameter. (Read code comment for more info)
* Items can now have sockets, just like a static mesh or a skeletal mesh. This is achieved through the socket manager object on the item asset and can be edited through the `ItemEditor` toolbox.

## Inventory

* When replicating containers to clients, server now clears the tile map when sending the RPC and has clients regenerate it when it reaches them, resulting in an average 20% smaller RPC sizes.
* A new **ID\_Map** system has been added. This allows the system to find ANY container or item in constant time, meaning it takes the same amount of time to find a container or item in index 0 as it takes to find a container or item at index 1000. This also means that **GetItemByUniqueID** has been reworked and is virtually free and this has had a tremendous performance improvement for projects with hundreds of containers or items in one inventory component.
* A new **IndexCoordinates** system has been added, allowing the system to instantly convert a tile into an index. This wasn't expensive, but the system used this convertion so much, the small cost started to pile up.
* **GetFirstAvailableTile** is no longer blueprint overridable.
* The inventory component now has a custom icon.
* Added **GetItemCount** function.
* Added **GetItemsByType** function.
* Added **GetItemsParentContainer** function.
* Added a **DoNotBind** parameter to **CreateAttachmentWidgetForItem** so it's easier for people to do custom bindings.

## Interfaces

* The **I\_WidgetUpdates** interface has been renamed to **I\_ExternalObjects**. The \`ExternalWidgets system has also been reworked to not be limited to just widgets.
* Many of the functions inside of **I\_WidgetUpdates** have been reworked to expose more parameters and have better categories.

## Tools

* The `ItemEditor` tool has had a layout make-over.
* The `ItemInspector` tool has been disabled for runtime. Should only be used in the `ItemEditor` from now on.

## Preview Actor

* The collider actor has been removed. This actor was a overkill solution to a rare bug. This has also improved the garbage collector performance.
* Added a new option to skip the cloning process. If enabled, it'll just attach itself to the owner. This has almost doubled its performance.
* All actors spawned by the preview actor now get labeled as one with the new **I\_Inventory** -> **SetIsPreviewActor** function. You can then use the **I\_Inventory** -> **IsPreviewActor** to find out if that actor instance is a part of the preview actor system or not.
* Preview actor now supports leader poses. Documentation has been updated.

## Documentation

* `DA_CoreItem` has been updated.
* A new `Optimizations` page has been added.

## Bugs

* Default items declared in the item data asset containers would fail to spawn.
* Item struct in item data asset containers would say "No Item Available"
* Widget factories were using the wrong blueprint type.
* Crash if invalid data was passed into **GetItemsTagValues**
* Generated item icons would go into the wrong folder.
* Clicking on a specific spot on non-custom shaped items did not treat that spot as the anchor point.

### 2.8.1

* Disabled struct object creation on preview actor instances.

Bug fixes:

* Clients item data would not include the item struct object in some scenarios.
* Moving an item via double click could cause item duplication.
* Dropped items would not have their containers setup correctly, which would also cause those containers to get lost when picking up a dropped item.
* The stack variables inside the data asset would get hidden if max stack was set to 1.

***

## Color Sheet:

**functions** - **variable** - **category** - **class**
