public void BuildPacket(ref PacketWriter packet, bool create) { //Append the packets for each touched field type // - Order matters here so might need to reorder down the line if (isTouched(OBJECT_TYPES.TYPE_OBJECT)) { AppendPacket(ref m_objectfields, ref m_objectvalues, ref packet, create); } if (isTouched(OBJECT_TYPES.TYPE_UNIT)) { AppendPacket(ref m_unitfields, ref m_unitvalues, ref packet, create); } if (isTouched(OBJECT_TYPES.TYPE_PLAYER)) { AppendPacket(ref m_playerfields, ref m_playervalues, ref packet, create); } if (isTouched(OBJECT_TYPES.TYPE_ITEM)) { AppendPacket(ref m_itemfields, ref m_itemvalues, ref packet, create); } if (isTouched(OBJECT_TYPES.TYPE_CONTAINER)) { AppendPacket(ref m_containerfields, ref m_containervalues, ref packet, create); } if (isTouched(OBJECT_TYPES.TYPE_GAMEOBJECT)) { AppendPacket(ref m_gameobjectfields, ref m_gameobjectvalues, ref packet, create); } if (isTouched(OBJECT_TYPES.TYPE_DYNAMICOBJECT)) { AppendPacket(ref m_dynamicobjectfields, ref m_dynamicobjectvalues, ref packet, create); } if (Opcodes.SMSG_UPDATE_OBJECT == packet.Opcode) { packet.Compress(); } }