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; }