Esempio n. 1
0
        public override OrderReceipt Transfer(AvatarState seller, AvatarState buyer, long blockIndex)
        {
            if (seller.inventory.TryGetLockedItem(new OrderLock(OrderId), out var inventoryItem))
            {
                if (inventoryItem.item is INonFungibleItem nonFungibleItem)
                {
                    nonFungibleItem.RequiredBlockIndex = blockIndex;
                    seller.inventory.RemoveItem(inventoryItem);

                    if (nonFungibleItem is Costume costume)
                    {
                        buyer.UpdateFromAddCostume(costume, false);
                    }
                    else
                    {
                        buyer.UpdateFromAddItem((ItemUsable)nonFungibleItem, false);
                    }
                }

                return(new OrderReceipt(OrderId, buyer.agentAddress, buyer.address, blockIndex));
            }

            throw new ItemDoesNotExistException(
                      $"Aborted because the tradable item({TradableId}) was failed to load from avatar's inventory.");
        }
Esempio n. 2
0
        public override OrderReceipt Transfer(AvatarState seller, AvatarState buyer, long blockIndex)
        {
            if (seller.inventory.TryGetLockedItem(new OrderLock(OrderId), out var inventoryItem))
            {
                var tradableItem = (TradableMaterial)inventoryItem.item;
                seller.inventory.RemoveItem(inventoryItem);

                var copy = (TradableMaterial)tradableItem.Clone();
                copy.RequiredBlockIndex = blockIndex;
                buyer.UpdateFromAddItem(copy, ItemCount, false);
                return(new OrderReceipt(OrderId, buyer.agentAddress, buyer.address, blockIndex));
            }

            throw new ItemDoesNotExistException(
                      $"Aborted because the tradable item({TradableId}) was failed to load from seller's inventory.");
        }