// ==UserScript==
// @name CSGO Market Tool
// @namespace https://coding.net/u/sffxzzp
// @version 0.72
// @description A script that display float value and stickers of guns in market list.
// @author sffxzzp
// @match http://steamcommunity.com/market/listings/730/*
// @icon http://steamcommunity.com/favicon.ico
// @grant GM_xmlhttpRequest
// @connect metjm.net
// ==/UserScript==
(function() {
function guid() {
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
function getFloatValue(listId, guid, itemLink, itemId) {
var cButton = document.getElementById(listId).children[4].children[0].children[0].children[0];
if (itemId == "first") {
GM_xmlhttpRequest({
method: 'get',
url: "http://metjm.net/shared/screenshots-v5.php?cmd=request_new_link&user_uuid="+guid+"&user_client=1&custom_rotation_id=0&use_logo=0&mode=7&resolution=2&forceOpskins=0&inspect_link=" + itemLink,
onload: function(response) {
var result = JSON.parse(response.responseText);
if (result.success===true) {
cButton.parentNode.parentNode.parentNode.onclick = function() {};
setTimeout(function(){getFloatValue(listId, guid, itemLink, result.result.screen_id);}, 1000);
}
else if (result.success===false) {
cButton.innerHTML = "查询失败";
}
}
});
} else {
GM_xmlhttpRequest({
method: 'get',
url: "http://metjm.net/shared/screenshots-v5.php?cmd=request_screenshot_status&id="+itemId,
onload: function(response) {
var result = JSON.parse(response.responseText);
if (result.success===true) {
if (result.result.status==1) {
if (result.result.item_floatvalue===0) {
cButton.innerHTML = "队列中:第"+result.result.place_in_queue+"位";
setTimeout(function(){getFloatValue(listId, guid, itemLink, itemId);}, 10000);
}
else if (result.result.item_floatvalue > 0) {
cButton.innerHTML = result.result.item_floatvalue;
setTimeout(function(){getFloatValue(listId, guid, itemLink, itemId);}, 10000);
}
}
else if (result.result.status==2) {
cButton.innerHTML = result.result.item_floatvalue;
cButton.parentNode.className="floatvalue_button btn_green_white_innerfade btn_small";
cButton.parentNode.parentNode.parentNode.onclick = function() {
window.open(result.result.image_url);
};
}
}
else if (result.success===false) {
cButton.innerHTML = "查询失败";
}
}
});
}
}
function removeDiv (id) {
var del = document.getElementById(id);
del.parentNode.removeChild(del);
}
function addPanel () {
var helpContent = "<div><p>使用方法较简单,只需要按下「点击查询磨损」按钮即可。</p><p>如果想批量查询当前页,按「查询所有物品磨损」。</p><p>查询会显示磨损值,此时按钮颜色可能为蓝色或绿色。</p><p>蓝色说明截图暂未准备就绪,变为绿色后点击可打开截图。</p><p>当插件未加载时,可「重新加载」。</p><p>插件运行正常请不要点击「重新加载」按钮。</p></div>";
var panelHeader = document.createElement("div");
panelHeader.setAttribute("class", "newmodal_header");
var panelCont = document.createElement("div");
panelCont.setAttribute("class", "newmodal_close");
panelCont.onclick = function () {
removeDiv("panel");
removeDiv("panel_background");
};
panelHeader.appendChild(panelCont);
panelCont = document.createElement("div");
panelCont.setAttribute("class", "ellipsis");
panelCont.innerHTML = "使用帮助";
panelHeader.appendChild(panelCont);
var panelHeaderBorder = document.createElement("div");
panelHeaderBorder.setAttribute("class", "newmodal_header_border");
panelHeaderBorder.appendChild(panelHeader);
var panelContBorder = document.createElement("div");
panelContBorder.setAttribute("class", "newmodal_content_border");
panelContBorder.innerHTML = "<div class=\"newmodal_content\" style=\"max-height: 501px;\"><div><div id=\"market_buy_commodity_popup\" style=\"display: block;\">"+helpContent+"</div></div></div>";
var newPanel = document.createElement("div");
newPanel.setAttribute("id", "panel");
newPanel.setAttribute("class", "newmodal");
if (window.innerWidth)
winWidth = window.innerWidth;
else if ((document.body) && (document.body.clientWidth))
winWidth = document.body.clientWidth;
if (window.innerHeight)
winHeight = window.innerHeight;
else if ((document.body) && (document.body.clientHeight))
winHeight = document.body.clientHeight;
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth)
{
winHeight = document.documentElement.clientHeight;
winWidth = document.documentElement.clientWidth;
}
newPanel.setAttribute("style", "position: fixed; z-index: 1000; left: "+(winWidth-788)/2+"px; top: "+(winHeight-258)/2+"px;");
newPanel.appendChild(panelHeaderBorder);
newPanel.appendChild(panelContBorder);
var panelBack =document.createElement("div");
panelBack.setAttribute("id", "panel_background");
panelBack.setAttribute("class", "newmodal_background");
panelBack.setAttribute("style", "opacity: 0.8;");
document.body.appendChild(newPanel);
document.body.appendChild(panelBack);
}
function addButton () {
var oriButtonDiv = document.getElementById('market_buyorder_info').children[0];
var oriButton = document.getElementById('market_commodity_buyrequests');
var newButton = document.createElement("div");
newButton.setAttribute("style", "float: right; padding-right: 10px");
newButton.innerHTML = "<a class=\"btn_darkblue_white_innerfade btn_medium market_noncommodity_buyorder_button\" href=\"javascript:void(0)\"><span>重新加载</span></a>";
newButton.onclick = function () {handlePage();};
oriButtonDiv.insertBefore(newButton, oriButton);
newButton = document.createElement("div");
newButton.setAttribute("style", "float: right; padding-right: 10px");
newButton.innerHTML = "<a class=\"btn_grey_white_innerfade btn_medium market_noncommodity_buyorder_button\" href=\"javascript:void(0)\"><span>使用帮助</span></a>";
newButton.onclick = function () {addPanel();};
oriButtonDiv.insertBefore(newButton, oriButton);
}
function addPageCtl () {
var oriPageCtl = document.getElementsByClassName('market_paging_summary')[0];
var oriPageDiv = document.getElementById('searchResults_ctn');
var newPageCtl = document.createElement("div");
newPageCtl.setAttribute("style", "float: right; padding-right: 20px");
var newPageInput = document.createElement("input");
newPageInput.setAttribute("class", "filter_search_box market_search_filter_search_box");
newPageInput.setAttribute("style", "width: 20px;");
newPageInput.setAttribute("type", "text");
newPageInput.setAttribute("autocomplete", "off");
newPageCtl.appendChild(newPageInput);
var newPageGo = document.createElement("span");
newPageGo.setAttribute("class", "btn_darkblue_white_innerfade btn_small");
newPageGo.onclick = function () {
g_oSearchResults.GoToPage( (newPageInput.value-1), true );
setTimeout(function(){reloadScript(document.getElementsByClassName("market_recent_listing_row")[0].id);}, 100);
};
newPageGo.innerHTML = " Go! ";
newPageCtl.appendChild(newPageGo);
oriPageDiv.insertBefore(newPageCtl, oriPageCtl);
var newPageSizeInput = document.createElement("input");
newPageSizeInput.setAttribute("class", "filter_search_box market_search_filter_search_box");
newPageSizeInput.setAttribute("style", "width: 30px;");
newPageSizeInput.setAttribute("type", "text");
newPageSizeInput.setAttribute("autocomplete", "off");
var newPageSizeGo = document.createElement("span");
newPageSizeGo.setAttribute("class", "btn_darkblue_white_innerfade btn_small");
newPageSizeGo.onclick = function () {
if (g_oSearchResults.m_cPageSize != newPageSizeInput.value && newPageSizeInput.value < 101) {
var oldPageSize = g_oSearchResults.m_cPageSize;
g_oSearchResults.m_cPageSize = newPageSizeInput.value;
g_oSearchResults.m_cMaxPages = Math.ceil(g_oSearchResults.m_cTotalCount / newPageSizeInput.value);
g_oSearchResults.GoToPage(g_oSearchResults.m_iCurrentPage, true);
setTimeout(function(){reloadScript(oldPageSize);}, 10);
}
};
newPageSizeGo.innerHTML = " 修改 ";
var newPageSizeCtl = document.createElement("div");
newPageSizeCtl.setAttribute("class", "market_pagesize_options");
newPageSizeCtl.setAttribute("style", "margin: 0 0 2em 0; font-size: 12px;");
newPageSizeCtl.innerHTML = "每页显示数: ";
newPageSizeCtl.appendChild(newPageSizeInput);
newPageSizeCtl.appendChild(newPageSizeGo);
document.getElementById('searchResults_ctn').appendChild(newPageSizeCtl);
}
function addBanner() {
var listBanner = document.getElementsByClassName('market_listing_table_header')[0];
var childBanner = document.createElement("span");
var nameBanner = listBanner.children[2];
childBanner.setAttribute("style", "padding-left:4vw;");
nameBanner.appendChild(childBanner);
childBanner = document.createElement("a");
childBanner.setAttribute("id", "getAllFloat");
childBanner.setAttribute("class", "floatvalue_button btn_darkblue_white_innerfade btn_small");
childBanner.innerHTML = "<span>查询所有物品磨损</span>";
nameBanner.appendChild(childBanner);
childBanner = document.createElement("span");
childBanner.setAttribute("style", "width:20%");
childBanner.setAttribute("class", "market_listing_right_cell market_listing_stickers_buttons market_listing_sticker");
childBanner.innerHTML = "印花";
listBanner.insertBefore(childBanner, nameBanner);
childBanner = document.createElement("span");
childBanner.setAttribute("style", "width:15%");
childBanner.setAttribute("class", "market_listing_right_cell market_listing_action_buttons market_listing_wear");
childBanner.innerHTML = "磨损值";
listBanner.insertBefore(childBanner, nameBanner);
}
function addStyle() {
var customstyle = document.createElement("style");
customstyle.innerHTML = '.csgo-stickers-show img:hover{opacity:1;width:96px;margin:-16px -24px -24px -24px;z-index:4;-moz-transition:.2s;-o-transition:.2s;-webkit-transition:.2s;transition:.2s;} .csgo-sticker{width: 48px;opacity: 1;vertical-align: middle;z-index: 3;-moz-transition: .1s; -o-transition: .1s; -webkit-transition: .1s; transition: .1s;}';
document.head.appendChild(customstyle);
}
function reloadScript(oriId) {
var loaded = document.getElementsByClassName("market_listing_wear");
if (typeof(oriId) === "number") {
if (document.getElementById('searchResultsRows').getElementsByClassName('market_listing_row').length == oriId) {
setTimeout(function(){reloadScript(oriId);}, 200);
}
else {
if (loaded.length === 0) {
handlePage();
}
}
}
else {
var newId = document.getElementsByClassName("market_recent_listing_row")[0].id;
if (newId == oriId) {
setTimeout(function(){reloadScript(oriId);}, 200);
}
else {
if (loaded.length === 0) {
handlePage();
}
}
}
}
function handlePage() {
var isHandled = document.getElementsByClassName("market_listing_table_header")[0].children.length;
if (isHandled > 3) {return False;}
addBanner();
addStyle();
var itemDetails = g_rgAssets[730][2];
var itemLinks = [];
var itemStickers = [];
var NameTags = [];
var reStickers = /(https+:\/\/.+?\.png)/gi;
var reStickerDes = /Sticker\:\ (.+?)<\/center>/;
var StickerImgs, StickerDes, StickerInfo, lastCount;
var i = 0;
for (var itemDetail in itemDetails) {
itemLinks[i] = itemDetails[itemDetail].actions[0].link.replace("%assetid%", itemDetails[itemDetail].id);
itemStickers[i] = '<div class="market_listing_right_cell market_listing_stickers_buttons"><div class="csgo-stickers-show" style="top: 12px;right: 300px;z-index: 3;">';
lastCount = itemDetails[itemDetail].descriptions.length - 1;
NameTags[i] = itemDetails[itemDetail].hasOwnProperty('fraudwarnings')?itemDetails[itemDetail].fraudwarnings[0]:'';
StickerInfo = itemDetails[itemDetail].descriptions[lastCount].value;
if (StickerInfo.length > 1) {
StickerImgs = StickerInfo.match(reStickers);
StickerDes = StickerInfo.match(reStickerDes)[1].split(', ');
for (var j=0;j<StickerImgs.length;j++) {
itemStickers[i] += '<img class="csgo-sticker" src="'+StickerImgs[j]+'" title="'+StickerDes[j]+'">';
}
} else {
itemStickers[i] += '<img class="csgo-sticker">';
}
itemStickers[i] += '</div></div>';
i++;
}
var itemList = document.getElementsByClassName('market_recent_listing_row');
var nameList, clickedButton;
var getAllFloat = document.getElementById('getAllFloat');
getAllFloat.onclick = function() {
var subButton = document.getElementsByClassName('floatvalue_button');
for (i=1;i<11;i++) {
subButton[i].children[0].innerHTML = '磨损查询中…';
getFloatValue(itemList[i-1].id, guid(), encodeURIComponent(itemLinks[i-1]), "first");
}
getAllFloat.onclick = function () {};
};
for (i=0;i<itemList.length;i++) {
nameList = itemList[i].children[3];
document.getElementsByClassName('market_listing_game_name')[i].innerHTML = NameTags[i];
document.getElementsByClassName('market_listing_game_name')[i].setAttribute("style", "color: #FFFF00;");
var itemSticker = document.createElement("span");
itemSticker.setAttribute("style", "width:20%");
itemSticker.setAttribute("class", "market_listing_right_cell market_listing_sticker");
itemSticker.innerHTML = itemStickers[i];
itemList[i].insertBefore(itemSticker, nameList);
var floatButton = document.createElement("span");
floatButton.setAttribute("style", "width:15%");
floatButton.setAttribute("class", "market_listing_right_cell market_listing_action_buttons market_listing_wear");
floatButton.onclick = function() {
clickedButton = this.children[0].children[0];
clickedButton.children[0].innerHTML = '磨损查询中…';
getFloatValue(clickedButton.id, guid(), encodeURIComponent(itemLinks[clickedButton.getAttribute('buttonid')]), "first");
};
floatButton.innerHTML = '<div class="market_listing_right_cell market_listing_action_buttons" style="float:left;"><a buttonid='+i+' id='+itemList[i].id+' class="floatvalue_button btn_darkblue_white_innerfade btn_small"><span>点击查询磨损</span></a></div>';
itemList[i].insertBefore(floatButton, nameList);
}
var pagelinks = document.getElementsByClassName('market_paging_pagelink');
for (var pagelink in pagelinks) {
pagelinks[pagelink].onclick = function() {
setTimeout(function(){reloadScript(document.getElementsByClassName("market_recent_listing_row")[0].id);}, 10);
};
}
var pageButtons = document.getElementsByClassName('pagebtn');
for (var pageButton in pageButtons) {
pageButtons[pageButton].onclick = function() {
setTimeout(function(){reloadScript(document.getElementsByClassName("market_recent_listing_row")[0].id);}, 10);
};
}
}
addButton();
handlePage();
addPageCtl();
})();
function resize() {
if (window.innerWidth)
winWidth = window.innerWidth;
else if ((document.body) && (document.body.clientWidth))
winWidth = document.body.clientWidth;
if (window.innerHeight)
winHeight = window.innerHeight;
else if ((document.body) && (document.body.clientHeight))
winHeight = document.body.clientHeight;
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth)
{
winHeight = document.documentElement.clientHeight;
winWidth = document.documentElement.clientWidth;
}
var newPanel = document.getElementById("panel");
if (newPanel) {
newPanel.setAttribute("style", "position: fixed; z-index: 1000; left: "+(winWidth-788)/2+"px; top: "+(winHeight-258)/2+"px;");
}
}
window.onresize = resize;