コード例 #1
0
        public Promise <MarketOrderDataObject> UpdateOrAddMarketOrder(BuyOrderType orderType, long marketId,
                                                                      MyDefinitionId itemDefinitionId, decimal pricePerOne, decimal quantity)
        {
            return(new Promise <MarketOrderDataObject>((resolve, reject) =>
            {
                using (var connection = ConnectionFactory.Open())
                {
                    var createdOn = DateTime.UtcNow.ToUnixTimestamp();

                    var definitionHash = itemDefinitionId.ToString();
                    connection.Execute(
                        SQL.INSERT_OR_UPDATE_MARKET_ORDER,
                        new
                    {
                        marketId = marketId, definitionId = definitionHash,
                        price = pricePerOne, quantity = quantity, createdOn = createdOn,
                        orderType = (int)orderType
                    });

                    GetMarketOrder(orderType, marketId, itemDefinitionId)
                    .Then(resolve)
                    .Catch(reject);
                }
            }));
        }
コード例 #2
0
        /// <summary>
        /// Allows you to retrieve all buy orders you have placed, whether active or not.
        /// </summary>
        /// <param name="app">Inventory's game id.</param>
        /// <param name="name">An item's name. (optional)</param>
        /// <param name="type">Type of buy orders. (optional)</param>
        /// <param name="page">The page number.</param>
        /// <returns>My buy orders.</returns>
        public static List <BuyOrder> GetMyBuyOrders(AppId.AppName app, string name, BuyOrderType type, int page)
        {
            CheckParameters(page);
            string          urlRequest  = GetUrlRequest(app, name, type, page);
            string          result      = Server.ServerRequest.RequestServer(urlRequest);
            List <BuyOrder> myBuyOrders = ReadMyBuyOrders(result);

            return(myBuyOrders);
        }
コード例 #3
0
        private void UpdateOrderPrice(BuyOrderType orderType, string marketNameOrId, string itemName, decimal newPrice)
        {
            var character = Context.Player.Character;

            if (character == null)
            {
                Context.Respond("You cannot do this while dead.");
                return;
            }

            if (!DefinitionResolver.TryGetDefinitionByName(itemName, out var itemDefinition))
            {
                Context.Respond($"Unable to find an item by the name of {itemName}");
                return;
            }

            if (newPrice < new decimal(0.01))
            {
                Context.Respond($"{newPrice} is too small. Please use a higher value.");
                return;
            }

            var manager      = EconomyPlugin.GetManager <MarketManager>();
            var orderManager = EconomyPlugin.GetManager <MarketOrderManager>();

            manager.GetMarkets()
            .Then(markets =>
            {
                MarketDataObject market = null;
                if (long.TryParse(marketNameOrId, out var marketId))
                {
                    market = markets.FirstOrDefault(m => m.Id == marketId);
                }
                else
                {
                    market = markets.FirstOrDefault(m =>
                                                    m.Name.Equals(marketNameOrId, StringComparison.InvariantCultureIgnoreCase));
                }

                if (market == null)
                {
                    Context.Respond($"Unable to find market by name or id of '{marketNameOrId}'.");
                    return;
                }

                orderManager.GetMarketOrder(orderType, market.Id, itemDefinition.Id)
                .Then(order =>
                {
                    orderManager.UpdateOrderPrice(order.Id, newPrice)
                    .Then(() => Context.Respond(
                              $"Successfully updated Order#{order.Id}'s price to {Utilities.FriendlyFormatCurrency(newPrice)}."))
                    .Catch(HandleError);
                })
                .Catch(HandleError);
            })
            .Catch(HandleError);
        }
コード例 #4
0
        private void CreateOrder(BuyOrderType orderType, string marketNameOrId, string itemName, decimal pricePerOne,
                                 decimal quantity)
        {
            var character = Context.Player.Character;

            if (character == null)
            {
                Context.Respond("You cannot do this while dead.");
                return;
            }

            if (quantity < new decimal(0.01))
            {
                Context.Respond($"{quantity} is too low. Please use a higher value.");
                return;
            }

            if (pricePerOne < new decimal(0.01))
            {
                Context.Respond($"{pricePerOne} is too low. Please use a higher value.");
                return;
            }

            if (!DefinitionResolver.TryGetDefinitionByName(itemName, out var itemDefinition))
            {
                Context.Respond($"Unable to find an item by the name of {itemName}");
                return;
            }

            var manager      = EconomyPlugin.GetManager <MarketManager>();
            var orderManager = EconomyPlugin.GetManager <MarketOrderManager>();

            manager.GetMarketByNameOrId(marketNameOrId, Context.Player.SteamUserId)
            .Then(market =>
            {
                if (market == null)
                {
                    Context.Respond($"Unable to find a market by the name or id of {marketNameOrId}.");
                    return;
                }

                orderManager.UpdateOrAddMarketOrder(orderType, market.Id,
                                                    itemDefinition.Id, pricePerOne, quantity)
                .Then(order =>
                {
                    Context.Respond(
                        $"Successfully created Order#{order.Id} for {quantity}x {itemDefinition.DisplayNameText} @ {Utilities.FriendlyFormatCurrency(pricePerOne)} per 1.");
                })
                .Catch(HandleError);
            })
            .Catch(HandleError);
        }
コード例 #5
0
        private static string GetUrlRequest(AppId.AppName app, string name, BuyOrderType type, int page)
        {
            Server.UrlCreator urlCreator = new Server.UrlCreator($"https://bitskins.com/api/v1/get_buy_order_history/");
            urlCreator.AppendUrl($"&app_id={(int)app}");
            urlCreator.AppendUrl($"&page={page}");
            if (!String.IsNullOrEmpty(name))
            {
                urlCreator.AppendUrl($"&market_hash_name={name}");
            }
            if (type != BuyOrderType.NotImportant)
            {
                urlCreator.AppendUrl($"&type={BuyOrderTypeToString(type)}");
            }

            return(urlCreator.ReadUrl());
        }
コード例 #6
0
        private void UpdateOrderQuantity(BuyOrderType orderType, string marketNameOrId, string itemName, decimal newQuantity)
        {
            var character = Context.Player.Character;

            if (character == null)
            {
                Context.Respond("You cannot do this while dead.");
                return;
            }

            if (!DefinitionResolver.TryGetDefinitionByName(itemName, out var itemDefinition))
            {
                Context.Respond($"Unable to find an item by the name of {itemName}");
                return;
            }

            if (newQuantity < new decimal(0.01))
            {
                Context.Respond($"{newQuantity} is too small. Please use a higher value.");
                return;
            }

            var manager      = EconomyPlugin.GetManager <MarketManager>();
            var orderManager = EconomyPlugin.GetManager <MarketOrderManager>();

            manager.GetMarketByNameOrId(marketNameOrId, Context.Player.SteamUserId)
            .Then(market =>
            {
                if (market == null)
                {
                    Context.Respond($"Unable to find market by name or id of '{marketNameOrId}'.");
                    return;
                }

                orderManager.GetMarketOrder(orderType, market.Id, itemDefinition.Id)
                .Then(order =>
                {
                    orderManager.UpdateOrderQuantity(order.Id, newQuantity)
                    .Then(() => Context.Respond(
                              $"Successfully updated Order#{order.Id}'s quantity to {newQuantity}."))
                    .Catch(HandleError);
                })
                .Catch(HandleError);
            })
            .Catch(HandleError);
        }
コード例 #7
0
        public Promise <MarketOrderDataObject> GetMarketOrder(BuyOrderType orderType, long marketId,
                                                              MyDefinitionId itemDefinitionId)
        {
            return(new Promise <MarketOrderDataObject>((resolve, reject) =>
            {
                using (var connection = ConnectionFactory.Open())
                {
                    var definitionHash = itemDefinitionId.ToString();

                    resolve(connection.QueryFirstOrDefault <MarketOrderDataObject>(
                                SQL.SELECT_MARKET_ORDER_BY_ITEM,
                                new
                    {
                        marketId = marketId, definitionId = definitionHash,
                        orderType = (int)orderType
                    }));
                }
            }));
        }
コード例 #8
0
        private static string BuyOrderTypeToString(BuyOrderType type)
        {
            switch (type)
            {
            case BuyOrderType.Listed:
                return("listed");

            case BuyOrderType.Settled:
                return("settled");

            case BuyOrderType.CancelledByUser:
                return("cancelled_by_user");

            case BuyOrderType.CancelledBySystem:
                return("cancelled_by_system");

            default:
                return("");
            }
        }
コード例 #9
0
        private void RemoveOrder(BuyOrderType orderType, string marketNameOrId, string itemName)
        {
            var character = Context.Player.Character;

            if (character == null)
            {
                Context.Respond("You cannot do this while dead.");
                return;
            }

            if (!DefinitionResolver.TryGetDefinitionByName(itemName, out var itemDefinition))
            {
                Context.Respond($"Unable to find an item by the name of {itemName}");
                return;
            }

            var manager      = EconomyPlugin.GetManager <MarketManager>();
            var orderManager = EconomyPlugin.GetManager <MarketOrderManager>();

            manager.GetMarketByNameOrId(marketNameOrId, Context.Player.SteamUserId)
            .Then(market =>
            {
                if (market == null)
                {
                    Context.Respond($"Unable to find market by name or id of '{marketNameOrId}'.");
                    return;
                }

                orderManager.GetMarketOrder(orderType, market.Id, itemDefinition.Id)
                .Then(order =>
                {
                    orderManager.DeleteOrder(order.Id)
                    .Then(() => Context.Respond(
                              $"Successfully removed Order#{order.Id}."))
                    .Catch(HandleError);
                })
                .Catch(HandleError);
            })
            .Catch(HandleError);
        }