// ==UserScript== // @name Steam Game Marker (Humble Bundle) // @icon https://humblebundle-a.akamaihd.net/static/hashed/47e474eed38083df699b7dfd8d29d575e3398f1e.ico // @namespace jaege // @version 1.0 // @description Adds steam links and wishlist/owned/unowned icons to Humble Bundle games. Please login Steam's official website in your broswer first. Based on https://greasyfork.org/scripts/27373-humble-bundle-steam-links-adder and https://greasyfork.org/en/scripts/26273-steam-store-game-owned-checker // @author jaege // @contributor Royalgamer06 // @include *://www.humblebundle.com/* // @grant GM_xmlhttpRequest // @run-at document-idle // @connect api.steampowered.com // @connect store.steampowered.com // @require https://code.jquery.com/jquery-3.3.1.min.js // @downloadURL none // ==/UserScript== // ==Configuration== var selectors = ["em", ".entity-title", ".deal-title", ".product-name", ".text-holder > h2", ".product-title > h2", "h1[data-entity-kind=product]", ".desktop:has(.hb-steam) .dd-image-box-caption", ".humble-original-title", ".game-name > h4", ".sr-key-heading > span", ".heading-text > h4"]; const wishlistIcon = "❤"; // HTML entity code for '❤' (default). const wishlistColor = "hotpink"; // Color of the icon for wishlisted apps. const ownedIcon = "✔"; // HTML entity code for '✔' (default). const ownedColor = "green"; // Color of the icon for owned apps and subs. const unownedIcon = "✘"; // HTML entity code for '✘' (default). const unownedColor = "red"; // Color of the icon for unowned apps and subs. // ==/Configuration== // ==Code== this.$ = this.jQuery = jQuery.noConflict(true); var userdata = []; var wishlist = []; var ownedApps = []; //var ownedPackages = []; var applist = []; GM_xmlhttpRequest({ method: "GET", url: "http://store.steampowered.com/dynamicstore/userdata/", onload: function(response) { userdata = JSON.parse(response.responseText); wishlist = userdata.rgWishlist; ownedApps = userdata.rgOwnedApps; //ownedPackages = userdata.rgOwnedPackages; console.log("userdata loaded"); var selector = selectors.join(":not(.steamified):not(a):not(:has(a)), ") + ":not(.steamified):not(a):not(:has(a))"; GM_xmlhttpRequest({ method: "GET", url: "https://api.steampowered.com/ISteamApps/GetAppList/v2/", onload: function(response) { applist = JSON.parse(response.responseText).applist.apps; console.log("applist loaded"); $(document).on("contentchanged", selector, function() { steamify(this); }).ready(function() { var domwatcher = setInterval(function() { $(selector).each(function() { steamify(this); }, 100); }); }); } }); } }); function steamify(titleElem) { $(titleElem).addClass("steamified"); setTimeout(function() { var title = $(titleElem).text().toLowerCase().replace(/\(early access\)|\(pre\-order\)|\:|\-|\–|\\|\/|\™|\®| |\'|\.|\?|\!/g, "").trim(); var obj = applist.filter(function(v) { return v.name.toLowerCase().replace(/\:|\-|\–|\\|\/|\™|\®| |\'|\.|\?|\!/g, "").trim() == title; })[0]; if (obj !== undefined) { var appID = obj.appid; var lcs = new Date().toLocaleString(); var icon; if (ownedApps.includes(appID)) { //if owned icon = " " + ownedIcon + ""; //✔ } else { //else not owned if (wishlist.includes(appID)) { //if wishlisted icon = " " + wishlistIcon + ""; //❤ } else { //else not wishlisted icon = " " + unownedIcon + ""; //✘ } } $(titleElem).append(icon); $(titleElem).replaceWith("" + titleElem.outerHTML + ""); } }, 0); } // ==/Code==