// ==UserScript== // @name Steam Gems-to-Price Helper // @namespace http://nota.moe/ // @version 0.4 // @description 处理垃圾库存的好帮手 ╰( ̄▽ ̄)╭ // @author NotaStudio // @match *://steamcommunity.com/*/inventory/* // @grant GM_info // @grant GM_setValue // @grant GM_getValue // @run-at document-end // @license GPLv3 // @downloadURL none // ==/UserScript== /* * ChangeLog * 20161224 0.4 * 添加初始设置 * 添加手动设置货币单位功能 * 修复了快速点击物品时同时显示多个价格的 bug * 降低了请求宝珠价格的频率,可能会有微弱的性能提升(或性能下降 o(≧v≦)o~~ ) * 圣诞快乐~ * 20161217 0.3 * 临时修复国区价格显示为美元的 bug * 20161217 0.2 * 修复价格显示为"约为 undefined NaN" 的 bug * 20161216 0.1-alpha * 初次发布 */ (function($) { const ver = GM_info.script.version, dateVer = '2016.12.24'; console.log(`Steam Gems-to-Price Helper ${ver}\nCreated by Nota\n${dateVer}`); let gemsCount, gemsPrice, gemsValue, valueSpan, localAmountToken; let currency = { "USD": 1, "GBP": 2, "EUR": 3, "CHF": 4, "RUB": 5, "PLN": 6, "BRL": 7, "JPY": 8, "NOK": 9, "IDR": 10, "MYR": 11, "PHP": 12, "SGD": 13, "THB": 14, "VND": 15, "KRW": 16, "TRY": 17, "UAH": 18, "MXN": 19, "CAD": 20, "AUD": 21, "NZD": 22, "CNY": 23, "INR": 24, "CLP": 25, "PEN": 26, "COP": 27, "ZAR": 28, "HKD": 29, "TWD": 30, "SAR": 31, "AED": 32 }; let setup = (init) => { let initTips = [`Steam Gems-to-Price Helper 已升级到 ${ver} 版本! 请进行初始设置.

`, `

以后, 您可以随时按下 Alt+G 更改本页设置.`], form = `
我的币种代码是
不支持符号写在数字后方的货币单位,如欧元
不支持符号大于一位的货币单位,如港币
`; if (init) form = initTips[0] + form + initTips[1]; ShowAlertDialog('设置 Steam Gems-to-Price Helper 币种', form); let nowID = GM_getValue('currencyId',23); for (let c in currency) { let opt = $(``); if (currency[c] == nowID) opt.attr('selected', 'selected'); opt.appendTo($('.sg2ph_select')); } let realButton = $('.newmodal:not(#market_sell_dialog) .btn_grey_white_innerfade'); realButton.css('visibility', 'hidden'); let overrideButton = $(`
确定(将会刷新页面)
`); overrideButton.insertAfter(realButton); overrideButton.on('click', (() => { GM_setValue('currencyId',$('.sg2ph_select').val()); GM_setValue('currentVersion',ver); realButton.click(); location.reload(); })); // Steam 提供的模态窗口不支持回调函数,所以小小地 hack 了一下,用自定义的确认按钮替换掉原来的 }; if (GM_getValue('currentVersion') !== ver) setup(true); // 初始设置 let parseAmount = (amount) => Number.parseFloat(amount.slice(2)); // 去除货币符号和空格 let showValue = (xhr) => { gemsCount = Number.parseFloat(xhr.responseJSON.goo_value); // 获取当前物品可分解的宝珠数量 gemsValue = (gemsPrice / 1000 * gemsCount).toFixed(2); valueSpan = $('span.item_scrap_value:visible')[0]; // span.item_scrap_value 会对应两个 SPAN 元素,其中可见者则为当前宝珠价值 valueSpan.innerHTML += `    约为${localAmountToken} ${gemsValue}`; }; let ajaxHandler = (event, xhr, settings) => { if (settings.url.match(/ajaxgetgoovalueforitemtype/)) { // Steam 会在点击某一库存物品时进行 3 次 jQuery AJAX 请求.筛选出请求宝珠数量的那一次 setTimeout((() => (showValue(xhr))), 100); $('.sg2ph_valueBox').remove(); } }; let refreshPrice = () => { let apiUrl = `https://steamcommunity.com/market/priceoverview/?appid=753¤cy=${GM_getValue('currencyId',1)}&market_hash_name=753-Sack%20of%20Gems`, xhr = new XMLHttpRequest(), data; xhr.open('GET', apiUrl, false); xhr.send(); data = JSON.parse(xhr.responseText); localAmountToken = data.lowest_price.slice(0, 1); gemsPrice = parseAmount(data.lowest_price); // 获取当前"一袋宝珠"价格 setTimeout(refreshPrice, 45000); }; let keyHandler = (e) => { if (e.keyCode == 71 && e.altKey) setup(false); // 同时按下 Alt+G }; refreshPrice(); $(document).keydown(keyHandler); $(document).ajaxComplete(ajaxHandler); })(jQuery);