Ejemplo n.º 1
0
        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}");
        }
Ejemplo n.º 2
0
 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.");
 }
Ejemplo n.º 3
0
 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;
 }