Item Instance & Entry
UCrimsonInventoryItemInstance is the runtime, replicated representation of a live item. FCrimsonInventoryEntry is the slot record that wraps an instance with placement payload.
Integer and float tag stacks on instances
// Authority-only mutationsInstance->AddStatTagStack(TAG_Item_Charges, 5);Instance->RemoveStatTagStack(TAG_Item_Charges, 1);Instance->AddFloatTagStack(TAG_Item_Quality, 0.85f);// Read from anywhereint32 Charges = Instance->GetStatTagStackCount(TAG_Item_Charges);float Quality = Instance->GetFloatTagStackCount(TAG_Item_Quality);
FCrimsonInventoryEntry - the slot record
Each entry has a stable EntryId, an instance, a stack count, and layout-payload fields. Layout-payload fields are interpreted by the active layout; layouts that don't use them leave them at defaults.
USTRUCT(BlueprintType)struct FCrimsonInventoryEntry : public FFastArraySerializerItem{int64 GetEntryId() const; // server-assigned, stable across delta reordersint32 GetSlotIndex() const; // display-order index for flat/weight layoutsFIntPoint GetGridPosition() const; // top-left cell for grid layoutsECrimsonItemRotation GetRotation() const;int32 GetLayoutGroupId() const; // bag-of-bags / typed-tabbool IsLocked() const; // sort / quick-loot / quick-sell skip lockedUCrimsonInventoryItemInstance* GetItemInstance() const;int32 GetStackCount() const;FCrimsonPlacementTarget GetPlacementTarget() const;};
// Iterate all entriesfor (const FCrimsonInventoryEntry& Entry : InventoryComponent->GetSlottedEntries()){int64 Id = Entry.GetEntryId();if (Entry.IsLocked()) continue;UCrimsonInventoryItemInstance* Inst = Entry.GetItemInstance();// ...}// Lookups by EntryId or targetconst FCrimsonInventoryEntry* Entry = InventoryComponent->FindEntryByEntryId(SomeId);const FCrimsonInventoryEntry* Hit = InventoryComponent->FindEntryAtTarget(SomeTarget);