Hi,
To distinguish between virtual goods and shippable goods, you can use the "weight" setting of the products. A product without weight will be virtual. A product with weight will be shippable.
Make sure that the "force shipping regardless of weight" setting is turned off in the HikaShop configuration so that when the cart of the user only has virtual goods, no shipping is charged and the shipping address is not asked.
Regarding the download aspect, it's easy. When you edit a product, you have an "Images and Files" section. In it, you can upload files in the Files area. These files will be available as a download to the customer after the purchase of the product, regardless of whether the product has a weight or not.
Note that for the download link to be provided to the user, the status of the order needs to be "confirmed". When an order is created, before the payment, the order's status is "created". Only after the payment does the payment plugin changes the status of the order to "confirmed", which allows the download of the files linked to the products of the order.
The download link will be available on the order details page of the order in the frontend, and in the order status notification email the user will receive after the payment.