public override ITradableItem Sell(AvatarState avatarState) { if (avatarState.inventory.TryGetTradableItems(TradableId, StartedBlockIndex, ItemCount, out List <Inventory.Item> items)) { int totalCount = ItemCount; // Copy ITradableFungible item for separate inventory slots. ITradableFungibleItem copy = (ITradableFungibleItem)((ITradableFungibleItem)items.First().item).Clone(); foreach (var item in items) { int removeCount = Math.Min(totalCount, item.count); ITradableFungibleItem tradableFungibleItem = (ITradableFungibleItem)item.item; avatarState.inventory.RemoveTradableItem(TradableId, tradableFungibleItem.RequiredBlockIndex, removeCount); totalCount -= removeCount; if (totalCount < 1) { break; } } // Lock item. copy.RequiredBlockIndex = ExpiredBlockIndex; avatarState.inventory.AddItem((ItemBase)copy, ItemCount, new OrderLock(OrderId)); return(copy); } throw new ItemDoesNotExistException( $"Can't find available item in seller inventory. TradableId: {TradableId}. RequiredBlockIndex: {StartedBlockIndex}, Count: {ItemCount}"); }
public override ITradableItem Cancel2(AvatarState avatarState, long blockIndex) { if (avatarState.inventory.TryGetTradableItem(TradableId, ExpiredBlockIndex, ItemCount, out Inventory.Item inventoryItem)) { ITradableFungibleItem copy = (ITradableFungibleItem)((ITradableFungibleItem)inventoryItem.item).Clone(); avatarState.inventory.RemoveTradableItem(TradableId, ExpiredBlockIndex, ItemCount); copy.RequiredBlockIndex = blockIndex; avatarState.inventory.AddItem2((ItemBase)copy, ItemCount); return(copy); } throw new ItemDoesNotExistException( $"Aborted because the tradable item({TradableId}) was failed to load from avatar's inventory."); }
protected AttachmentActionResult(BxDictionary serialized) { itemUsable = serialized.ContainsKey("itemUsable") ? (ItemUsable)ItemFactory.Deserialize((BxDictionary)serialized["itemUsable"]) : null; costume = serialized.ContainsKey("costume") ? (Costume)ItemFactory.Deserialize((BxDictionary)serialized["costume"]) : null; tradableFungibleItem = serialized.ContainsKey("tradableFungibleItem") ? (ITradableFungibleItem)ItemFactory.Deserialize( (BxDictionary)serialized["tradableFungibleItem"]) : null; tradableFungibleItemCount = serialized.ContainsKey("tradableFungibleItemCount") ? serialized["tradableFungibleItemCount"].ToInteger() : default; }