PacketData CGameServerPlayer::GetInventoryInfo()
{
	auto playerActor = m_instance.GetActor<CPlayerActor>(PLAYER_ID);
	const auto& inventory = playerActor->GetInventory();

	PacketData outgoingPacket;

	unsigned int itemCount = inventory.size();		//Item count can be less than 200, but we have to make sure no equipped items are using item indices over the itemCount
	assert(itemCount <= 200);
	while(itemCount != 0)
	{
		CCompositePacket compositePacket;
		{
			unsigned int itemsToCopy = std::min<unsigned int>(itemCount, 32);
			unsigned int itemBase = itemCount - itemsToCopy;
			CSetInventoryPacket setInventoryPacket;
			setInventoryPacket.SetSourceId(PLAYER_ID);
			setInventoryPacket.SetTargetId(PLAYER_ID);
			setInventoryPacket.SetItemCount(itemsToCopy);
			for(unsigned int i = 0; i < itemsToCopy; i++)
			{
				const auto& inventoryItem = inventory[i + itemBase];
				setInventoryPacket.SetItemIndex(i, i + itemBase + 1);
				setInventoryPacket.SetItemId(i, inventoryItem.itemId);
				setInventoryPacket.SetItemDefinitionId(i, inventoryItem.itemDefId);
			}
			compositePacket.AddPacket(setInventoryPacket.ToPacketData());
			itemCount -= itemsToCopy;
		}
		auto compositePacketData = compositePacket.ToPacketData();
		outgoingPacket.insert(std::end(outgoingPacket), std::begin(compositePacketData), std::end(compositePacketData));
	}

	return outgoingPacket;
}