【问题标题】:Node.js getting TF2 Prices in USDNode.js 以美元获得 TF2 价格
【发布时间】:2017-10-21 21:06:31
【问题描述】:

我本来打算使用backpacktf模块,但它不想工作,只是给了我一个json错误,所以我继续使用这个模块:

https://github.com/KenanY/backpack.tf

但我这样做了,我得到了这个错误

C:\Users\datpe\Desktop\d\bot.js:94 他们的价值 += 数据[项目]. 价值; ^

TypeError:无法读取 null 的属性“Rainy Day Cosmetic Case” 在 C:\Users\datpe\Desktop\d\bot.js:94:24 在 BufferList._callback (C:\Users\datpe\node_modules\jsonist\jsonist.js:12:14) 在 BufferList.end (C:\Users\datpe\node_modules\bl\bl.js:75:10) 在 Stream.onend (internal/streams/legacy.js:44:10) 在 emitNone (events.js:110:20) 在 Stream.emit (events.js:207:7) 在排水管 (C:\Users\datpe\node_modules\through\index.js:33:23) 在 Stream.stream.queue.stream.push (C:\Users\datpe\node_modules\through\index.js:41:5) 在传入消息。 (C:\Users\datpe\node_modules\hyperquest\index.js:60:48) 在 emitNone (events.js:110:20)

我猜是因为我试图获取无效或不存在的信息?

这是我使用的代码:

function processOffer(offer){
    if (offer.isGlitched() || offer.state === 11) {
        console.log('Offer was glitched, declining.');
        declineOffer(offer);
    //} else if(offer.partner.getSteamID64() == config.ownerID) {
    //  acceptOffer(offer);
    } else {
        var ourItems = offer.itemsToGive;
        var theirItems= offer.itemsToReceive;
        var ourValue = 0;
        var theirValue = 0;

        for(var i in ourItems) {
            var item = ourItems[i].market_name;

            b.getPrices(function(error, data) {
                if(error){
                    throw error;
                }else {
                    ourValue += data[item].value;
                }
            });

        }
        for(var i in theirItems){
            var item = theirItems[i].market_name;
            b.getPrices(function(error, data) {
                if(error){
                    throw error;
                }else {
                    theirValue += data[item].value;
                }
            });
        }
    }
    console.log('Our Value: ' + ourValue);
    console.log('Their Value: ' + theirValue);
    if (ourValue <= theirValue){
        acceptOffer(offer);
    } else {
        declineOffer(offer);
    }
}

【问题讨论】:

    标签: javascript node.js steam


    【解决方案1】:
    var ourItems = offer.itemsToGive;
    var theirItems= offer.itemsToReceive;
    var ourValue = 0;
    var theirValue = 0;
    
    b.getPrices(function(error, data) {
        if(error){
            throw error;
        }else {
            for(var i in ourItems){
                let item = i.market_name;
                if(data[item] && Object.prototype.hasOwnProperty.call(data[item], 'value')){
                    ourValue += data[item].value;
                }
            }
    
            for(var i in theirItems){
                let item = i.market_name;
                if(data[item] && Object.prototype.hasOwnProperty.call(data[item], 'value')){
                    theirValue += data[item].value;
                }
            }
        }
    });
    

    【讨论】:

    • 您是否在程序中使用了两个不同的 Backpack 实例?您应该有一个用于“给予者”和一个用于“接收者”,但在代码中您只使用 b 对象
    • 不,我只使用一个 Backpack 实例,但它们仅用于检查所提供物品的价格。
    • 这就是问题所在。在offer 中有itemsToGive(假设玩家A 给玩家B 物品)和itemsToReceive(玩家B 从玩家A 那里收到物品)。您想要对两个项目集合的值求和,因此您首先遍历 itemsToGive,从 A 玩家的背包中获取信息:b。然后,您遍历itemsToReceive,但同时也在获取玩家A 的背包b 中玩家B 的物品theirItems 的信息。你需要一个玩家 B 的背包实例才能达到你想要的结果
    • 我觉得你夸大了这个,我只是通过背包.tf 价格获得他们放入的物品的价格。 b = 新背包tf(apikey)
    • 没错,我并没有真正检查过您正在使用的背包.tf 模块。当您对 API 进行两次调用并且问题是第二次调用时,也许在同一个回调中执行所有操作会产生更好的结果。检查我编辑的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2021-04-10
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多