CSGO Market Tool

A script that display float value and stickers of guns in market list.

目前為 2017-10-09 提交的版本,檢視 最新版本

// ==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 = "&nbsp;Go!&nbsp;";
        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 = "&nbsp;修改&nbsp;";
        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;