// ==UserScript== // @name Steam市场 价格/比例/汇率 换算器 // @namespace http://pronax.wtf/ // @version 0.3.17 // @description try to take over the world! // @author Pronax // @include *://steamcommunity.com/market/* // @require https://code.jquery.com/jquery-1.12.4.min.js // @connect v6.exchangerate-api.com // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @downloadURL none // ==/UserScript== (function () { 'use strict'; var ratesUpdateApi = "https://v6.exchangerate-api.com/v6/6c4647edadf8a30d48167bab/latest/CNY"; var ratesUpdateTimes = 0; function getUrlParam(name, url) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 var result if (url) { result = url.substr(34).match(reg); //匹配目标参数 } else { result = window.location.search.substr(1).match(reg); //匹配目标参数 } if (result != null) return unescape(result[2]); return null; //返回参数值 } function updateRate() { GM_xmlhttpRequest({ url: ratesUpdateApi, method: "get", onload: function (response) { var data = JSON.parse(response.responseText); if (data.result == "success") { data.conversion_rates.time_next_update_unix = data.time_next_update_unix; data.conversion_rates.time_update_unix = new Date().getTime(); exchangeRateList = data.conversion_rates; GM_setValue("time_next_update_unix", data.time_next_update_unix); GM_setValue("exchangeRateList", data.conversion_rates); } else if (data["error-type"] == "quota-reached" && ratesUpdateTimes <= 1) { ratesUpdateTimes++; ratesUpdateApi = "https://v6.exchangerate-api.com/v6/f87873f2dcc5ba5c076737e1/latest/CNY"; updateRate(); } else { console.log("更新汇率时出错:", data["error-type"]); } }, onerror: function (err) { console.log("更新汇率时出错:", err); } }); } function roundToTwo(num) { return Math.round((num * 100)) / 100; } var exchangeRateList = GM_getValue("exchangeRateList"); let timestamp = GM_getValue("time_next_update_unix"); if (exchangeRateList && timestamp) { if (Math.round(new Date().getTime() / 1000) >= timestamp) { updateRate(); } } else { updateRate(); } console.log("已同步最新汇率,时间戳:" + exchangeRateList.time_update_unix); GM_addStyle( ".price_tool_input{width:4.9rem;height:1rem;font-size:small!important;border:1px solid transparent!important}.price_tool_div{position:fixed;border-radius:.3rem;padding:.05rem .3rem .25rem;right:.6rem;top:35%;background-color:#53a3C399;text-align:center}.price_tool_input_div{margin:.2rem 0}.price_tool_rate_chose{height:1.4rem;border-radius:0;border:0;display:inline-block;background-color:#171a2185;cursor:pointer;color:#d2d2d2;text-align-last:center}.price_tool_rate_div{margin-top:1px}.price_tool_rate_input{height:.9rem;width:4.5rem;border:0!important}.price_tool_input_btn{display:inline-block;line-height:1.65rem;background-color:#eaeaea33;cursor:pointer;padding:0 12px;width:1.8rem;color:#d2d2d2}.price_tool_disabled{background-color:#0009}.price_tool_input_btn_toggle{display:inline-block;border:1px transparent;padding:0 .2rem;cursor:pointer;color:#d2e885;line-height:1.5rem}.price_tool_checkbox{display:none}.price_tool_pagebtn{padding:0 10px;color:#f9f9f9;background-color:#f5f5f53b;width:.8rem}" ); GM_addStyle( ".market_listing_their_price{width:7rem;}.market_listing_their_price>span.market_table_value,.market_listing_my_price>span.market_table_value,.market_listing_num_listings>span.market_table_value{font-size:100%}.csgo_sticker>.stickers{margin-right:10px !important;}" ); var demo_price_tool = "
" + "
" + "
<切换为买家>
"; document.getElementById("BG_bottom").insertAdjacentHTML("beforeEnd", demo_price_tool); let rateChose = GM_getValue("rate_chose"); if (rateChose) { document.getElementsByClassName("price_tool_rate_chose")[0].value = rateChose; } $(".price_tool_rate_input").keyup(function () { var form = $("#price_tool_rate_form")[0]; var targ = form.currency_origin; if (this.name == "rate_origin") { form.rate_result.value = roundToTwo(form.rate_origin.value / exchangeRateList[targ.value]); } else { form.rate_origin.value = roundToTwo(form.rate_result.value * exchangeRateList[targ.value]); $("#real_price").val(form.rate_origin.value).trigger("keyup"); } }); let buffPrice = getUrlParam("buffPrice"); if (buffPrice) { let rmb = $(".price_tool_rate_input")[1]; $(rmb).val(buffPrice).trigger("keyup"); } $(".price_tool_rate_chose").change(function () { GM_setValue("rate_chose", this.value); $(this.siblings()[0]).trigger("keyup"); }); var input_btn = document.getElementsByClassName("price_tool_input_btn"); var checkbox = document.getElementsByClassName("price_tool_checkbox"); for (let i = 0; i < input_btn.length - 2; i++) { input_btn[i].onclick = function () { let checkArr = []; for (let j = 0; j < checkbox.length; j++) { if (checkbox[j].checked) { checkArr.push(1); } } let checked = checkbox[i].checked; if (checked) { input_btn[i].style.backgroundColor = "#eaeaea33" } else { if (checkArr.length > 1) { return; } input_btn[i].style.backgroundColor = "#00000099" } checkbox[i].checked = !checked; } } var toggle_btn = document.getElementsByClassName("price_tool_input_btn_toggle")[0]; input_btn[3].onclick = function () { let checkArr = []; for (let j = 0; j < checkbox.length; j++) { if (checkbox[j].checked) { checkArr.push(1); } } let checked = checkbox[2].checked; if (checked) { input_btn[3].style.backgroundColor = "#eaeaea33" } else { if (checkArr.length > 1) { return; } input_btn[3].style.backgroundColor = "#00000099" } checkbox[2].checked = !checked; if (toggle_btn.dataset.status == "false") { input_btn[2].style.backgroundColor = input_btn[3].style.backgroundColor; } } input_btn[2].onclick = function () { input_btn[3].click(); } var real_price = document.getElementById("real_price"); var scale = document.getElementById("scale"); var saved_scale = GM_getValue("price_tool_scale"); if (saved_scale != null) { scale.value = saved_scale; } var money_receive = document.getElementById("money_receive"); var money_pays = document.getElementById("money_pays"); var toggle_div = document.getElementsByClassName("price_tool_input_div")[2]; var tool_targ = document.getElementsByClassName("price_tool_div")[0]; tool_targ.onselectstart = function () { return false; } toggle_btn.onclick = function () { if (toggle_btn.dataset.status == "false") { this.style.color = "#65C3F7"; this.innerHTML = "切换为卖家"; toggle_btn.dataset.status = true; money_receive.disabled = true; tool_targ.style.backgroundColor = "#95b40699"; toggle_div.style.opacity = "0.3"; money_receive.value = ""; input_btn[2].style.backgroundColor = "#eaeaea33" } else { this.style.color = "#ACD032"; this.innerHTML = "切换为买家"; toggle_btn.dataset.status = false; money_receive.disabled = false; tool_targ.style.backgroundColor = "#53A3C399"; toggle_div.style.opacity = "1"; input_btn[2].style.backgroundColor = input_btn[3].style.backgroundColor; } } real_price.onkeyup = function () { let checkArr = []; for (let j = 0; j < checkbox.length; j++) { checkArr.push(checkbox[j].checked); } if (toggle_btn.dataset.status == "false") { if (checkArr[1]) { if (checkArr[2]) { money_receive.value = ""; money_pays.value = ""; scale.value = ""; return; } money_receive.value = Math.round(this.value / scale.value * 100) / 100; money_pays.value = Math.round(money_receive.value * 115) / 100; } else { scale.value = Math.round(this.value / money_receive.value * 100) / 100; } } else { if (checkArr[1]) { if (checkArr[2]) { scale.value = ""; money_pays.value = ""; return; } money_pays.value = Math.round(this.value / scale.value * 100) / 100; } else { scale.value = Math.round(this.value / money_pays.value * 100) / 100; } } } scale.onkeyup = function () { GM_setValue("price_tool_scale", this.value); let checkArr = []; for (let j = 0; j < checkbox.length; j++) { checkArr.push(checkbox[j].checked); } if (toggle_btn.dataset.status == "false") { if (checkArr[0]) { if (checkArr[2]) { money_receive.value = ""; money_pays.value = ""; real_price.value = ""; return; } money_receive.value = Math.round(real_price.value / this.value * 100) / 100; money_pays.value = Math.round(money_receive.value * 115) / 100; } else { real_price.value = Math.round(money_receive.value * this.value * 100) / 100; if (checkArr[2]) { return; } real_price.value = ""; money_receive.value = ""; money_pays.value = ""; } } else { if (checkArr[0]) { if (checkArr[2]) { money_pays.value = ""; real_price.value = ""; return; } money_pays.value = Math.round(real_price.value / this.value * 100) / 100; } else { if (checkArr[2]) { real_price.value = Math.round(money_pays.value * this.value * 100) / 100; return; } real_price.value = ""; money_pays.value = ""; } } } money_receive.onkeyup = function () { let checkArr = []; for (let j = 0; j < checkbox.length; j++) { checkArr.push(checkbox[j].checked); } if (toggle_btn.dataset.status == "false") { money_pays.value = Math.round(this.value * 115) / 100; if (checkArr[1]) { if (checkArr[0]) { real_price.value = ""; scale.value = ""; return; } real_price.value = Math.round(this.value * scale.value * 100) / 100; } else { if (checkArr[0]) { scale.value = Math.round(real_price.value / this.value * 100) / 100; return; } real_price.value = ""; scale.value = ""; } } } money_pays.onkeyup = function () { let checkArr = []; for (let j = 0; j < checkbox.length; j++) { checkArr.push(checkbox[j].checked); } if (toggle_btn.dataset.status == "false") { money_receive.value = (Math.round(this.value / 0.0115) + 1) / 100; if (checkArr[1]) { if (checkArr[0]) { real_price.value = ""; scale.value = ""; return; } real_price.value = Math.round(money_receive.value * scale.value * 100) / 100; } else { if (checkArr[0]) { scale.value = Math.round(real_price.value / money_receive.value * 100) / 100; return; } real_price.value = ""; scale.value = ""; } } else { if (checkArr[1]) { if (checkArr[0]) { real_price.value = ""; scale.value = ""; return; } real_price.value = Math.round(this.value * scale.value * 100) / 100; } else { if (checkArr[0]) { scale.value = Math.round(real_price.value / this.value * 100) / 100; return; } real_price.value = ""; scale.value = ""; } } } console.log("买卖价格插件加载成功--Pronax"); })();