What I'd like to see is a way to confirm delivery. For example, there is llGiveMoney(); this does NOT confirm receipt of L$. llTransferLindenDollars()
does
confirm receipt by providing transaction key and data returned via the transaction_result event.
I can see no reason why a similar thing could not be done for inventory; it could otherwise work as llGiveInventoryList currently does.
key llTransferInventoryList( key destination, string folder, list inventory )
The confirmation process could probably be piggy-backed onto the existing transaction_result event. For successful transfers, 'success' would be TRUE and 'data' would contain a CSV of the transfer information relevant to the inventory transfer. For unsuccessful transfers, 'success' would be FALSE, and 'data' would contain suitable error codes. Many of the ones already in place for L$ transfers would be applicable; for those that are not (e.g., L$ transfers require a valid agent; an inventory transfer can also be to an object), add the following three error codes:
INVENTORY_TRANSFER_ITEM_NOT_IN_GIVER
  • giving object did not have specified item(s) in its contents
INVENTORY_TRANSFER_ENTITY_DOES_NOT_EXIST
  • destination agent or object does not exist (this is necessary since LINDENDOLLAR_ENTITYDOESNOTEXIST is specific to agents only)
INVENTORY_TRANSFER_TIMED_OUT
  • inventory transfer timed out
Example of use:
...
key AvatarKey = <some avatar or object's UUID>
key TransactionID = llTransferInventory( AvatarKey, "Item Folder", ["Test Dunsel"] )
...
transaction_result( key id, integer success, string data )
{
if( id == TransactionID )
{
if( success )
llOwnerSay( "Item successfully transferred to " + llKey2Name( AvatarKey );
else
llOwnerSay( "Item failed to transfer; error code was " + data );
}
}