Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Steam-AutoCraft
- // @version 1.6.1
- // @description AutoCraft Steam Community Badges
- // @author 10101000
- // @include /^https?:\/\/steamcommunity\.com\/+(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/+[0-9]+)\/+(badges\/?|gamecards\/+[0-9]+\/?).*$/
- // @copyright 2016 10101000
- // @grant none
- // ==/UserScript==
- // Vars
- var badgesPageURL = '/badges/';
- var badgeCraftLimit = '';
- var canCraftBadge = 0;
- var craftRefreshTimeoutmsDef = 2000;
- var craftRefreshTimeoutms = craftRefreshTimeoutmsDef;
- var gamecardHref = '';
- var gamecardHrefLinks = '';
- var gameIdBlackList = '';
- var isBadgesPage = 0;
- var isGameCardsPage = 0;
- var pageRefreshTimeoutmsDef = 10000;
- var pageRefreshTimeoutms = pageRefreshTimeoutmsDef;
- var redirect = 0;
- var skipCraft = 0;
- var steamAutoCraftVersion = '1.6.1';
- // Badges
- var badgeLinks = jQuery('.badge_details_set_favorite');
- // Badges progress
- var badgeProgressTasks = jQuery('.badge_progress_tasks');
- // Gamecards
- var invLinks = jQuery('.gamecards_inventorylink');
- // Gamecard progress
- var badgeProgress = jQuery('.gamecard_badge_progress');
- // Run
- jQuery(document).ready(function(){
- // Check settings
- checkSettings();
- // Determine current page
- if (invLinks.length >= 1) {
- isGameCardsPage = 1;
- } else if ((badgeLinks.length >= 1) && (invLinks.length <= 0)) {
- isBadgesPage = 1;
- }
- // Check for badges to craft
- if (jQuery('.badge_craft_button').length >= 1){
- if ((badgeProgressTasks.length >= 1) || (badgeProgress.length >= 1)){
- canCraftBadge = 1;
- }
- }
- // Badge page logic
- if (isBadgesPage === 1) {
- window.sessionStorage.badgesPageURL = window.location.href;
- if (window.sessionStorage.craftRecursive) {
- if (canCraftBadge === 0) {
- delete window.sessionStorage.craftRecursive;
- }
- }
- }
- // Gamecard page logic
- if (isGameCardsPage === 1) {
- if ((canCraftBadge === 0) && (window.sessionStorage.craftRecursive)) {
- delete window.sessionStorage.autoCraftState;
- if(window.localStorage.badgeCraftLimit) {
- if(!window.sessionStorage.craftCount) { window.sessionStorage.craftCount = 0; }
- window.sessionStorage.craftCount = +window.sessionStorage.craftCount + 1;
- }
- if(window.sessionStorage.badgesPageURL) {
- badgesPageURL = window.sessionStorage.badgesPageURL;
- }
- delete window.sessionStorage.badgesPageURL;
- // If all badges have been crafted, load badges page
- window.location.href = badgesPageURL;
- }
- }
- // Detect conflict with userscript
- if (jQuery('#autocraft').length >= 1) {
- var steamAutoCraftConflictError = 'Conflict detected, please remove or disable either the Steam-AutoCraft extension or the userscript.';
- alert(steamAutoCraftConflictError);
- throw new Error(steamAutoCraftConflictError);
- }
- // Check blacklist and add button
- jQuery.when(checkBlacklist()).done( function() {
- addButton();
- });
- // Disable reset button when applicable
- if ((pageRefreshTimeoutms === pageRefreshTimeoutmsDef) && (craftRefreshTimeoutms === craftRefreshTimeoutmsDef) && (!gameIdBlackList)) {
- jQuery('#autocraft_button_reset').addClass('btn_disabled');
- jQuery('#autocraft_button_reset').prop('disabled',true);
- } else {
- jQuery('#autocraft_button_reset').removeClass('btn_disabled');
- }
- // Start autoCraft
- if ((canCraftBadge === 1) && ((window.sessionStorage.autoCraftState) || (window.sessionStorage.craftRecursive))) {
- if ((window.localStorage.badgeCraftLimit) && (window.sessionStorage.craftCount)) {
- if (+window.sessionStorage.craftCount >= +window.localStorage.badgeCraftLimit) {
- delete window.sessionStorage.craftRecursive;
- delete window.sessionStorage.craftCount;
- redirect = 0;
- skipCraft = 1;
- }
- }
- if (redirect === 1) {
- window.location.href = gamecardHref;
- }
- jQuery.when(checkBlacklist()).done( function() {
- if (skipCraft === 0) {
- craftBadge();
- }
- });
- }
- });
- function addButton() {
- // Set HTML vars
- var settingsDiv = `
- <div id="autocraft_settings_div" class="newmodal" style="position: fixed; z-index: 1000; left: 50%; top: 15%; display: none; transform: translateX(-50%);">
- <div class="newmodal_header_border">
- <div class="newmodal_header">
- <span id="autocraft_settings_title">Steam-AutoCraft Settings</span>
- <div id="autocraft_settings_close" class="newmodal_close"/>
- </div>
- </div>
- <div class="newmodal_content_border">
- <div class="newmodal_content">
- <div class="market_dialog_content">
- <div class="market_dialog_iteminfo">
- <div id="autocraft_settings_list" class="market_content_block market_home_listing_table market_home_main_listing_table market_listing_table">
- <form id="autocraft_settings_form" align="left">
- <div class="market_listing_row market_recent_listing_row">
- <div class="market_listing_item_name_block">
- <span class="market_listing_item_name" style="display:inline-block; width:175px">Page Refresh Timeout (ms):</span>
- <span><input type="text" class="market_dialog_input" style="width: 50px" id="autocraft_setting_refresh_timeout" name="autocraft_setting_refresh_timeout" value="`+pageRefreshTimeoutms+`"></span>
- <span class="market_listing_game_name">The the longer refresh that happens after crafting each badge in milliseconds.</span>
- </div>
- <div style="clear: both"/>
- </div>
- <div class="market_listing_row market_recent_listing_row">
- <div class="market_listing_item_name_block">
- <span class="market_listing_item_name" style="display:inline-block; width:175px">Craft Refresh Timeout (ms):</span>
- <span><input type="text" class="market_dialog_input" style="width: 50px" id="autocraft_setting_craft_refresh_timeout" name="autocraft_setting_craft_refresh_timeout" value="`+craftRefreshTimeoutms+`"></span>
- <span class="market_listing_game_name">The short refresh that we set immediately after beginning a craft in milliseconds.</span>
- </div>
- <div style="clear: both"/>
- </div>
- <div class="market_listing_row market_recent_listing_row">
- <div class="market_listing_item_name_block">
- <span class="market_listing_item_name" style="display:inline-block; width:175px">Game ID Blacklist (id1,id2):</span>
- <span><input type="text" class="market_dialog_input" style="width: 50px" id="autocraft_setting_blacklist" name="autocraft_setting_blacklist" value="`+gameIdBlackList+`"></span>
- <span class="market_listing_game_name">Game ID blacklisting in the form of 12345,67890. We skip these games.</span>
- </div>
- <div style="clear: both"/>
- </div>
- <div class="market_listing_row market_recent_listing_row">
- <div class="market_listing_item_name_block">
- <span class="market_listing_item_name" style="display:inline-block; width:175px">Badge Crafting Limit:</span>
- <span><input type="text" class="market_dialog_input" style="width: 50px" id="autocraft_setting_badgelimit" name="autocraft_setting_badgelimit" value="`+badgeCraftLimit+`"></span>
- <span class="market_listing_game_name">Number of badges to craft. Stop once we hit this limit.</span>
- </div>
- <div style="clear: both"/>
- </div>
- <br>
- <div class="market_dialog_content_separator"></div>
- <div class="market_dialog_content market_dialog_content_dark">
- <div class="market_sell_dialog_input_area">
- <input id="autocraft_button_reset" type="button" class="btn_grey_grey btn_small_thin" name="Reset" value="Reset" align="center">
- <input id="autocraft_button_save" type="button" class="btn_grey_grey btn_small_thin" name="Save" value="Save" align="center">
- </div>
- </div>
- </form>
- </div>
- </div>
- </div>
- <p align="center" class="market_listing_game_name">Steam-AutoCraft Version: `+steamAutoCraftVersion+`</p>
- </div>
- </div>`;
- jQuery('body').append('<div id="autocraft_settings_background_div" class="newmodal_background" style="opacity: 0.8; display: none;">');
- // Load economy.css
- var economyCSS = '/public/css/skin_1/economy.css';
- if(jQuery("link[href*='"+economyCSS+"']").attr('rel') !== 'stylesheet'){
- jQuery('head').append('<link href="'+economyCSS+'" rel="stylesheet" type="text/css">');
- }
- // Load economy.css
- var economyMarketCSS = '/public/css/skin_1/economy_market.css';
- if(jQuery("link[href*='"+economyMarketCSS+"']").attr('rel') !== 'stylesheet'){
- jQuery('head').append('<link href="'+economyMarketCSS+'" rel="stylesheet" type="text/css">');
- }
- // Add button to badge details page
- if (isGameCardsPage === 1){
- // Add settings div
- jQuery(settingsDiv).insertAfter('.gamecards_inventorylink');
- jQuery('#autocraft_button_reset').click(function(){ resetSettings(); });
- jQuery('#autocraft_button_save').click(function(){ saveSettings(); });
- // Buttons
- invLinks.append(`
- <a class="btn_grey_grey btn_small_thin btn_disabled" id="autocraft">
- <span>AutoCraft </span>
- </a>
- <a class="btn_grey_grey btn_small_thin" id="autocraft_settings">
- <span>⚙</span>
- </a>`);
- // Set initial position
- var position = jQuery('#autocraft').position();
- var x = position.left;
- var y = position.top;
- x -= (jQuery('#autocraft_settings').outerWidth() - jQuery('#autocraft').outerWidth());
- jQuery('#autocraft_settings').css({
- position: 'absolute',
- zIndex: 500,
- top: y,
- left: x
- });
- // Transform to overlay
- jQuery('#autocraft_settings').css({
- position: 'element(#autocraft)',
- zIndex: 500,
- transform: 'translateX(-100%)',
- 'background-color': 'transparent',
- 'background-repeat': 'no-repeat',
- border: 'none',
- cursor: 'pointer',
- overflow: 'hidden',
- outline: 'none',
- top: '',
- left: ''
- });
- jQuery('#autocraft_settings').click(function(){ toggleSettings(); });
- jQuery('#autocraft_settings_close').click(function(){ toggleSettings(); });
- if (canCraftBadge == 1){
- jQuery('#autocraft').click(function(){ autoCraft(); });
- jQuery('#autocraft').removeClass('btn_disabled');
- jQuery('#autocraft').prop('disabled',false);
- }
- return;
- }
- // Add button to badges page
- if (isBadgesPage === 1){
- // Add settings div
- jQuery(settingsDiv).insertAfter('.badge_details_set_favorite');
- jQuery('#autocraft_button_reset').click(function(){ resetSettings(); });
- jQuery('#autocraft_button_save').click(function(){ saveSettings(); });
- // Buttons
- var autoCraftButtonText = 'AutoCraft all badges';
- if (window.localStorage.badgeCraftLimit) {
- if (+window.localStorage.badgeCraftLimit === 1) {
- autoCraftButtonText = 'AutoCraft 1 badge';
- } else {
- autoCraftButtonText = 'AutoCraft '+window.localStorage.badgeCraftLimit+' badges';
- }
- }
- badgeLinks.append(`
- <a class="btn_grey_black btn_small_thin btn_disabled" id="autocraft">
- <span>`+autoCraftButtonText+` </span>
- </a>
- <a class="btn_grey_black btn_small_thin" id="autocraft_settings">
- <span>⚙</span>
- </a>`);
- // Set initial position
- var autocraft_position = jQuery('#autocraft').position();
- var autocraft_x = autocraft_position.left;
- var autocraft_y = autocraft_position.top;
- autocraft_x -= (jQuery('#autocraft_settings').outerWidth() - jQuery('#autocraft').outerWidth());
- jQuery('#autocraft_settings').css({
- position: 'absolute',
- zIndex: 500,
- top: autocraft_y,
- left: autocraft_x
- });
- // Transform to overlay
- jQuery('#autocraft_settings').css({
- position: 'element(#autocraft)',
- zIndex: 500,
- transform: 'translateX(-100%)',
- 'background-color': 'transparent',
- 'background-repeat': 'no-repeat',
- border: 'none',
- cursor: 'pointer',
- overflow: 'hidden',
- outline: 'none',
- top: '',
- left: ''
- });
- jQuery('#autocraft_settings').click(function(){ toggleSettings(); });
- jQuery('#autocraft_settings_close').click(function(){ toggleSettings(); });
- if (canCraftBadge == 1){
- gamecardHrefLinks = jQuery('div').find('.badge_row .badge_craft_button');
- gamecardHref = gamecardHrefLinks[0];
- if (typeof gamecardHref !== 'undefined') {
- jQuery('#autocraft').removeClass('btn_disabled');
- jQuery('#autocraft').prop('disabled',false);
- jQuery('#autocraft').click(function(){ window.sessionStorage.craftRecursive = 1; window.location.href = gamecardHref; });
- } else {
- delete window.sessionStorage.autoCraftState;
- }
- }
- return;
- }
- }
- // Auto-craft
- function autoCraft() {
- craftBadge();
- setTimeout(function(){ window.location.reload(true); }, pageRefreshTimeoutms);
- window.sessionStorage.autoCraftState = 1;
- }
- // Check settings
- function checkSettings() {
- // Use localStorage for persistence across browser sessions
- if (window.localStorage.pageRefreshTimeoutms) {
- pageRefreshTimeoutms = window.localStorage.pageRefreshTimeoutms;
- }
- if (window.localStorage.craftRefreshTimeoutms) {
- craftRefreshTimeoutms = window.localStorage.craftRefreshTimeoutms;
- }
- if (window.localStorage.gameIdBlackList) {
- gameIdBlackList = window.localStorage.gameIdBlackList;
- }
- if (window.localStorage.badgeCraftLimit) {
- badgeCraftLimit = window.localStorage.badgeCraftLimit;
- }
- }
- // Check blacklist
- function checkBlacklist() {
- if (isGameCardsPage === 1) { return; }
- // Join csv blacklist with pipe for use inside regex
- var blacklist = gameIdBlackList.replace(/[ \t]*,[ \t]*/g, '|');
- var regex = "^https?:\/\/steamcommunity\.com\/+(id\/+[A-Za-z0-9$-_.+!*'(),]+|profiles\/+[0-9]+)\/gamecards\/"+blacklist+"\/.*$";
- var re = new RegExp(regex);
- // Get badge links
- gamecardHrefLinks = jQuery('div').find('.badge_row .badge_craft_button');
- gamecardHrefLinks.each(function() {
- gamecardHrefLink = jQuery(this).attr('href');
- // Disable badge link
- if (blacklist.length > 0) {
- if (gamecardHrefLink.match(re)) {
- jQuery('a[href="'+gamecardHrefLink+'"]').filter('.badge_craft_button').replaceWith('5 of 5 cards collected');
- }
- }
- });
- // Redirect or clean up
- if (jQuery('.badge_craft_button').length >= 1) {
- redirect = 1;
- } else {
- delete window.sessionStorage.craftRecursive;
- jQuery('#autocraft').addClass('btn_disabled');
- jQuery('#autocraft').prop('disabled',true);
- }
- }
- // Craft badge and refresh page
- function craftBadge() {
- jQuery('.badge_craft_button').click();
- if (isGameCardsPage === 1) {
- setTimeout(function(){ window.location.reload(true); }, craftRefreshTimeoutms);
- }
- }
- // Reset settings
- function resetSettings() {
- var resetConfirm = confirm("Reset all settings?");
- if (resetConfirm === true) {
- pageRefreshTimeoutms = pageRefreshTimeoutmsDef;
- delete window.localStorage.pageRefreshTimeoutms;
- jQuery('#autocraft_setting_refresh_timeout').val( pageRefreshTimeoutmsDef );
- craftRefreshTimeoutms = craftRefreshTimeoutmsDef;
- delete window.localStorage.craftRefreshTimeoutms;
- jQuery('#autocraft_setting_craft_refresh_timeout').val( craftRefreshTimeoutmsDef );
- gameIdBlackList = '';
- delete window.localStorage.gameIdBlackList;
- jQuery('#autocraft_setting_blacklist').val( gameIdBlackList );
- badgeCraftLimit = '';
- delete window.localStorage.badgeCraftLimit;
- jQuery('#autocraft_setting_badgelimit').val( badgeCraftLimit );
- toggleSettings();
- window.location.reload(true);
- }
- }
- // Save settings
- function saveSettings() {
- var problemState = 0;
- var settingsArray = jQuery('#autocraft_settings_form').serializeArray();
- jQuery.each(settingsArray, function (i, setting) {
- if (setting.name === 'autocraft_setting_refresh_timeout') {
- // Ensure that only integers are entered
- if (setting.value.match(/^[0-9]+$/)) {
- pageRefreshTimeoutms = setting.value;
- window.localStorage.pageRefreshTimeoutms = setting.value;
- } else {
- alert("Invalid input: "+setting.value+", 'Page Refresh Timeout (ms)' requires an integer!");
- problemState = 1;
- }
- }
- if (setting.name === 'autocraft_setting_craft_refresh_timeout') {
- // Ensure that only integers are entered
- if (setting.value.match(/^[0-9]+$/)) {
- craftRefreshTimeoutms = setting.value;
- window.localStorage.craftRefreshTimeoutms = setting.value;
- } else {
- alert("Invalid input: "+setting.value+", 'Craft Refresh Timeout (ms)' requires an integer!");
- problemState = 1;
- }
- }
- if (setting.name === 'autocraft_setting_blacklist') {
- // Allow only integers and commas
- if ((setting.value.match(/^([ \t]*,?[0-9]+,?[ \t]*)+$/)) || (setting.value === '')) {
- gameIdBlackList = setting.value;
- window.localStorage.gameIdBlackList = setting.value;
- } else {
- alert("Invalid input: "+setting.value+", 'Game ID Blacklist (id1,id2)' requires an integer with optional comma!");
- problemState = 1;
- }
- }
- if (setting.name === 'autocraft_setting_badgelimit') {
- // Ensure that only integers are entered
- if (((! setting.value.match(/^0$/)) && (setting.value.match(/^[0-9]+$/))) || (setting.value === '')) {
- badgeCraftLimit = setting.value;
- window.localStorage.badgeCraftLimit = setting.value;
- } else {
- alert("Invalid input: "+setting.value+", 'Badge Limit requires an integer greater than 0!");
- problemState = 1;
- }
- }
- });
- if (problemState === 0) {
- toggleSettings();
- window.location.reload(true);
- }
- }
- // Settings toggle
- function toggleSettings() {
- // Toggle the settings
- jQuery('#autocraft_settings_div').toggle();
- jQuery('#autocraft_settings_background_div').fadeToggle();
- // Change look on view
- if (jQuery('#autocraft_settings_div').is(':visible')) {
- jQuery('#autocraft_settings').addClass('btn_disabled');
- } else {
- jQuery('#autocraft_settings').removeClass('btn_disabled');
- }
- // Close on outside click
- var inside_autocraft_settings=false;
- jQuery('#autocraft_settings_div').hover(function(){
- inside_autocraft_settings=true;
- }, function(){
- inside_autocraft_settings=false;
- });
- jQuery('body').mouseup(function(){
- if((jQuery('#autocraft_settings_div').is(':visible')) && (!inside_autocraft_settings)) {
- jQuery('#autocraft_settings_div').hide();
- jQuery('#autocraft_settings_background_div').fadeOut();
- jQuery('#autocraft_settings').removeClass('btn_disabled');
- }
- });
- }
Add Comment
Please, Sign In to add comment