Output markdown to trade for 1:1 card sets on steamtrades.com
当前为
// ==UserScript==
// @name SteamTools, List up duplicate card sets
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Output markdown to trade for 1:1 card sets on steamtrades.com
// @author You
// @match https://steam.tools/cards/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @grant GM.xmlHttpRequest
// @runat document-end
// @nowrap
// ==/UserScript==
(function() {
'use strict';
$(function () {/*
<div>
<h3>Duplicate card sets</h3>
<textarea id="haveOutput" readonly />
<h3>Aready lvl 5 / Enough to create lvl 5 badge</h3>
<textarea id="enoughOutput" readonly />
<h3>Log</h3>
<textarea style="max-height: 150px;" id="logOutput" readonly></textarea>
<p>
<button id="checkDuplicateButton">Check duplicate sets</button>
<button id="outputLastButton">Output latest result</button>
</p>
</div>
*/}.toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1]).appendTo("#container");
var $haveOutput = $("#haveOutput");
var $enoughOutput = $("#enoughOutput");
var $logOutput = $("#logOutput");
var $button = $("#checkDuplicateButton").click(main);
$("#outputLastButton").click(function () {
$haveOutput.text(localStorage["lastHaveOutput"]);
$enoughOutput.text(localStorage["lasEnoughOutput"]);
});
function logging (log) {
console.log("Logging: " + log);
$logOutput.text($logOutput.text() + log + "\n");
}
function sleepAsyc (ms) {
return new Promise((resolve, reject) => { setTimeout(resolve, ms); });
}
async function main () {
$button.text("checking");
$button[0].disabled = "true";
var headerIndex = $("#set_table_wrapper .dataTables_scrollHead th").map(function () {
return $(this).text();
}).toArray();
var sets = {};
$("#set_table tbody tr").each(function () {
var $td = $(this).find("td");
var title = $($td[headerIndex.indexOf("Game")]).text();
var links = {};
$($td[headerIndex.indexOf("Links")]).find("a").each(function () {
links[$(this).text().substr(1, 1)] = $(this).attr("href");
});
var owned = parseInt($($td[headerIndex.indexOf("# Owned")]).text());
var cards = parseInt($($td[headerIndex.indexOf("# Cards")]).text());
var level = parseInt($($td[headerIndex.indexOf("Badge Lvl")]).text());
// var setPrice = parseInt($($td[headerIndex.indexOf("Set Price")]).text());
sets[title] = {
title: title,
links: links,
owned: owned,
cards: cards,
level: level,
// setPrice: setPrice,
};
});
console.log(sets);
var enough = [];
for (var title in sets) {
var s = sets[title];
if (s.level == 5) {
s.enough = "lvl5";
enough.push(s);
} else if (s.level * s.cards + s.owned >= s.cards * 5) {
s.enough = "enough";
enough.push(s);
}
}
console.log(enough);
var have = [];
var targets = [];
for (var title in sets) {
var s = sets[title];
if ((s.level == 5 && s.owned / s.cards >= 2) || (s.level < 5 && s.owned - s.level * s.cards / s.cards >= 4)) {
targets.push(s);
}
}
for (var i = 0; i < targets.length; i++) {
var s = targets[i];
await new Promise((resolve, reject) => {
logging("Checking duplicates (" + i + "/" + targets.length + ") : " + s.title);
GM.xmlHttpRequest({
method: "GET",
url: s.links.B,
onload: function (xhr) {
resolve(xhr);
},
onerror: function () {
reject();
}
});
})
.then(xhr => {
var min = Infinity;
var $html = $(xhr.responseText);
$html.find(".badge_card_set_card").each(function (i) {
var qty = 0;
var $qty = $(this).find(".badge_card_set_text_qty");
if ($qty[0]) {
min = Math.min(parseInt($qty.text().match(/\d+/)), min);
} else {
min = 0;
}
});
if (min > 0) {
s.duplicates = min;
have.push(s);
}
logging(min + " duplicate");
})
.catch(()=> console.log("faild"));
await sleepAsyc(3000);
}
console.log(have);
var output = "## Blacklist\n";
for (var i = 0; i < enough.length; i++) {
var s = enough[i];
output += "- [{title}]({url}) *{enough}*\n"
.replace("{title}", s.title)
.replace("{url}", s.links.B)
.replace("{enough}", s.enough);
}
$enoughOutput.text(output);
localStorage["lastEnoughOutput"] = output;
output = "|Available card sets|Quantity|Cards in set|\n";
output = "|:-|: |: |\n"
for (var i = 0; i < have.length; i++) {
var s = have[i];
output += "|[{title}]({url})|x{duplicates}|{cards}|\n"
.replace("{title}", s.title)
.replace("{url}", s.links.B)
.replace("{duplicates}", s.duplicates)
.replace("{cards}", s.cards);
}
$haveOutput.text(output);
localStorage["lastHaveOutput"] = output;
$button.text("Check duplicate sets");
$button[0].disabled = "";
}
// Your code here...
// .toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
})();