void UGISInventoryBaseComponent::AddItemOnSlot(const FGISSlotInfo& TargetSlotType, const FGISSlotInfo& LastSlotType) { //Before we start swapping item, let's check if tags match! if (!TargetSlotType.CurrentInventoryComponent->RequiredTags.MatchesAny(LastSlotType.CurrentInventoryComponent->OwnedTags, false)) return; //next check should be against item tags, but that's later! //Tabs.InventoryTabs[TargetSlotType.SlotTabIndex].TabSlots[TargetSlotType.SlotTabIndex].ItemData if (TargetSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[TargetSlotType.SlotTabIndex].TabSlots[TargetSlotType.SlotIndex].ItemData == nullptr) { TWeakObjectPtr<UGISItemData> TargetItem = LastSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[LastSlotType.SlotTabIndex].TabSlots[LastSlotType.SlotIndex].ItemData; TWeakObjectPtr<UGISItemData> LastItem = TargetSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[TargetSlotType.SlotTabIndex].TabSlots[TargetSlotType.SlotIndex].ItemData; //Tabs.InventoryTabs[TargetSlotType.SlotTabIndex].TabSlots[TargetSlotType.SlotIndex].ItemData; TargetSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[TargetSlotType.SlotTabIndex].TabSlots[TargetSlotType.SlotIndex].ItemData = TargetItem; LastSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[LastSlotType.SlotTabIndex].TabSlots[LastSlotType.SlotIndex].ItemData = nullptr; TargetItem->OnItemAddedToSlot(); //FGISSlotSwapInfo SlotSwapInfo; SlotSwapInfo.LastSlotIndex = LastSlotType.SlotIndex; SlotSwapInfo.LastTabIndex = LastSlotType.SlotTabIndex; SlotSwapInfo.LastSlotData = LastItem; SlotSwapInfo.LastSlotComponent = LastSlotType.CurrentInventoryComponent; SlotSwapInfo.TargetSlotIndex = TargetSlotType.SlotIndex; SlotSwapInfo.TargetTabIndex = TargetSlotType.SlotTabIndex; SlotSwapInfo.TargetSlotData = TargetItem; SlotSwapInfo.TargetSlotComponent = TargetSlotType.CurrentInventoryComponent; if (GetNetMode() == ENetMode::NM_Standalone) OnItemSlotSwapped.Broadcast(SlotSwapInfo); ClientSlotSwap(SlotSwapInfo); } else { TWeakObjectPtr<UGISItemData> TargetItem = LastSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[LastSlotType.SlotTabIndex].TabSlots[LastSlotType.SlotIndex].ItemData; TWeakObjectPtr<UGISItemData> LastItem = TargetSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[TargetSlotType.SlotTabIndex].TabSlots[TargetSlotType.SlotIndex].ItemData; //Tabs.InventoryTabs[TargetSlotType.SlotTabIndex].TabSlots[TargetSlotType.SlotIndex].ItemData; TargetSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[TargetSlotType.SlotTabIndex].TabSlots[TargetSlotType.SlotIndex].ItemData = TargetItem; LastSlotType.CurrentInventoryComponent->Tabs.InventoryTabs[LastSlotType.SlotTabIndex].TabSlots[LastSlotType.SlotIndex].ItemData = LastItem; TargetItem->OnItemAddedToSlot(); LastItem->OnItemAddedToSlot(); //FGISSlotSwapInfo SlotSwapInfo; SlotSwapInfo.LastSlotIndex = LastSlotType.SlotIndex; SlotSwapInfo.LastTabIndex = LastSlotType.SlotTabIndex; SlotSwapInfo.LastSlotData = LastItem; SlotSwapInfo.LastSlotComponent = LastSlotType.CurrentInventoryComponent; SlotSwapInfo.TargetSlotIndex = TargetSlotType.SlotIndex; SlotSwapInfo.TargetTabIndex = TargetSlotType.SlotTabIndex; SlotSwapInfo.TargetSlotData = TargetItem; SlotSwapInfo.TargetSlotComponent = TargetSlotType.CurrentInventoryComponent; if (GetNetMode() == ENetMode::NM_Standalone) OnItemSlotSwapped.Broadcast(SlotSwapInfo); ClientSlotSwap(SlotSwapInfo); } }