// ==UserScript== // @name AuTo Redeemer Steamkey(自动激活Steamkey) // @namespace HCLonely // @author HCLonely // @description 复制网页中的Steamkey后自动打开激活页面并激活 // @include *://*/* // @exclude *store.steampowered.com/widget/* // @version 2.4.0 // @grant GM_setClipboard // @grant GM_addStyle // @run-at document-end // @require https://greasyfork.org/scripts/376437-hclonely-function/code/HCLonely_function.js?version=660229 // @require https://cdn.bootcss.com/sweetalert/2.1.2/sweetalert.min.js // @downloadURL none // ==/UserScript== (function() { 'use strict'; try{ let url = window.location.href; //选中激活功能 const iconSize = 24; const translationTestSize = 16; let icon = document.createElement('div'); const style = '' + 'width:32px;' + 'height:32px;' + 'margin:0px!important;' + ''; icon.innerHTML = '' + '' ''; icon.setAttribute('style', '' + 'width:32px!important;' + 'height:32px!important;' + 'display:none!important;' + 'background:#fff!important;' + 'border-radius:16px!important;' + 'box-shadow:4px 4px 8px #888!important;' + 'position:absolute!important;' + 'z-index:2147483647!important;' + 'cursor:pointer;'+ ''); icon.setAttribute("title","激活"); // 添加激活图标到 DOM document.documentElement.appendChild(icon); // 鼠标事件:防止选中的文本消失 document.addEventListener('mousedown', function (e) { if (e.target == icon || (e.target.parentNode && e.target.parentNode == icon) || (e.target.parentNode.parentNode && e.target.parentNode.parentNode == icon)) {// 点击了激活图标 e.preventDefault(); } }); // 选中变化事件:当点击已经选中的文本的时候,隐藏激活图标和激活面板(此时浏览器动作是:选中的文本已经取消选中了) document.addEventListener("selectionchange", ()=> { if (!window.getSelection().toString().trim()) { icon.style.display = 'none'; } }); // 鼠标事件:防止选中的文本消失;显示、隐藏激活图标 document.addEventListener('mouseup', function (e) { if (e.target == icon || (e.target.parentNode && e.target.parentNode == icon) || (e.target.parentNode.parentNode && e.target.parentNode.parentNode == icon)) {// 点击了激活图标 e.preventDefault(); return; } let text = window.getSelection().toString().trim(); let productKey = window.getSelection().toString().trim() || e.target.value; if (/^([\w\W]*)?([\d\w]{5}(\-[\d\w]{5}){2}(\r||,||,)?){1,}/.test(productKey) && text && icon.style.display == 'none') { icon.style.top = e.pageY + 12 + 'px'; icon.style.left = e.pageX + 18 + 'px'; icon.style.display = 'block'; } else if (!text) { icon.style.display = 'none'; } }); // 激活图标点击事件 icon.addEventListener('click', function (e) { let productKey = window.getSelection().toString().trim() || e.target.value; productKey=productKey.replace(/\r\n/g,",").replace(/\n/g,","); window.open("https://store.steampowered.com/account/registerkey?key=" + productKey, "_blank"); }); //复制激活功能 if (!/https?:\/\/store\.steampowered\.com\/account\/registerkey[\w\W]{0,}/.test(url)){//非激活页面 let activateProduct = function(e) { let productKey = window.getSelection().toString().trim() || e.target.value; if (/^([\w\W]*)?([\d\w]{5}(\-[\d\w]{5}){2}(\r||,||,)?){1,}/.test(productKey)&&(confirm("检测到神秘key,是否进入steam激活页面并激活?"))) { productKey=productKey.replace(/\r\n/g,",").replace(/\n/g,","); window.open("https://store.steampowered.com/account/registerkey?key=" + productKey, "_blank"); } }; window.addEventListener("copy", activateProduct, false); } //激活页面自动激活 if (/^https?:\/\/store\.steampowered\.com\/account\/registerkey*/.test(url)){ const autoDivideNum = 9; const waitingSeconds = 20; const ajaxTimeout = 15; let keyCount = 0; let recvCount = 0; let timer; let allUnusedKeys = []; const failureDetail = { 14: '无效激活码', 15: '重复激活', 53: '次数上限', 13: '地区限制', 9: '已拥有', 24: '缺少主游戏', 36: '需要PS3?', 50: '这是充值码', }; const myTexts = { fail: '失败', success: '成功', network: '网络错误或超时', line: '——', nothing: '', others: '其他错误', unknown: '未知错误', redeeming: '激活中', waiting: '等待中', showUnusedKey: '显示未使用的Key', hideUnusedKey: '隐藏未使用的Key', }; const unusedKeyReasons = [ '次数上限', '地区限制', '已拥有', '缺少主游戏', '其他错误', '未知错误', '网络错误或超时', ]; function redeemKey(key) { jQuery.ajax({ url: 'https://store.steampowered.com/account/ajaxregisterkey/', data: { product_key: key, sessionid: g_sessionID }, type: 'post', dataType: 'json', timeout: 1000 * ajaxTimeout, beforeSend: function(){ if (jQuery('table').is(':hidden')) { jQuery('table').fadeIn(); } }, error: function() { tableUpdateKey(key, myTexts.fail, myTexts.network, 0, myTexts.nothing); return; }, success: function(data) { if (data.success == 1) { tableUpdateKey(key, myTexts.success, myTexts.line, data.purchase_receipt_info.line_items[0].packageid, data.purchase_receipt_info.line_items[0].line_item_description); return; } else if (data.purchase_result_details !== undefined && data.purchase_receipt_info) { if (!data.purchase_receipt_info.line_items[0]) { tableUpdateKey(key, myTexts.fail, failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.others, 0, myTexts.nothing); } else { tableUpdateKey(key, myTexts.fail, failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.others, data.purchase_receipt_info.line_items[0].packageid, data.purchase_receipt_info.line_items[0].line_item_description); } return; } tableUpdateKey(key, myTexts.fail, myTexts.nothing, 0, myTexts.nothing); } }); } function setUnusedKeys(key, success, reason, subId, subName) { if (success && allUnusedKeys.includes(key)) { var listObject; allUnusedKeys = allUnusedKeys.filter(function(keyItem){ return keyItem != key; }); jQuery('li').map((i,e)=>{ if(jQuery(e).innerHTML.includes(key)) { listObject.remove(); } }); } else if (!success && !allUnusedKeys.includes(key) && unusedKeyReasons.includes(reason)) { listObject = jQuery('
  • '); listObject.html(key + ' ( ' + reason + (subId != 0 ? (': ' + subId + ' ' + subName) : '') + ' )'); jQuery('#unusedKeys').append(listObject); allUnusedKeys.push(key); } } function tableInsertKey(key) { keyCount++; let row = jQuery(''); // number row.append('' + keyCount + ''); //key row.append('' + key + ''); //redeeming... row.append('' + myTexts.redeeming + '...'); jQuery('tbody').prepend(row); } function tableWaitKey(key) { keyCount++; let row = jQuery(''); // number row.append('' + keyCount + ''); //key row.append('' + key + ''); //waiting... row.append('' + myTexts.waiting + ' (' + waitingSeconds + '秒)...'); jQuery('tbody').prepend(row); } function tableUpdateKey(key, result, detail, subId, subName) { setUnusedKeys(key, result === myTexts.success, detail, subId, subName); recvCount++; if (recvCount == keyCount) { jQuery('#buttonRedeem').fadeIn(); jQuery('#inputKey').removeAttr('disabled'); } var rowObjects = jQuery('tr'); for (let i = 1; i < rowObjects.length; i++) { let rowElement = rowObjects[i]; let rowObject = jQuery(rowElement); if (rowObject.children()[1].innerHTML.includes(key)&&rowObject.children()[2].innerHTML.includes(myTexts.redeeming)) { rowObject.children()[2].remove(); // result if (result == myTexts.fail) rowObject.append('' + result + ''); else rowObject.append('' + result + ''); // detail rowObject.append('' + detail + ''); // sub if (subId === 0) { rowObject.append('——'); } else { rowObject.append('' + subId + ' ' + subName + ''); } break; } } } function getKeysByRE(text) { text = text.trim().toUpperCase(); let reg = new RegExp('([0-9,A-Z]{5}-){2,4}[0-9,A-Z]{5}', 'g'); let keys = []; let result = void 0; while (result = reg.exec(text)) { keys.push(result[0]); } return keys; } function startTimer() { timer = setInterval(function() { let flag = false; let nowKey = 0; let rowObjects = jQuery('tr'); for (let i = rowObjects.length - 1; i >= 1; i--) { let rowElement = rowObjects[i]; let rowObject = jQuery(rowElement); if (rowObject.children()[2].innerHTML.includes(myTexts.waiting)) { nowKey++; if (nowKey <= autoDivideNum) { let key = rowObject.children()[1].innerHTML.substring(6); key = key.substring(0, key.indexOf('')); rowObject.children()[2].innerHTML = '' + myTexts.redeeming + '...'; redeemKey(key); } else { flag = true; break; } } } if (!flag) { clearInterval(timer); } }, 1000 * waitingSeconds); } function redeem(keys){ if (keys.length <= 0) { return; } jQuery('#buttonRedeem').hide(); jQuery('#inputKey').attr('disabled', 'disabled'); let nowKey = 0; keys.forEach(function (key) { nowKey++; if (nowKey <= autoDivideNum) { tableInsertKey(key); redeemKey(key); } else { tableWaitKey(key); } }); if (nowKey > autoDivideNum) { startTimer(); } } function redeemKeys() { let keys = getKeysByRE(jQuery('#inputKey').val().trim()); redeem(keys); } function toggleUnusedKeyArea() { if (jQuery('#unusedKeyArea').is(':hidden')) { jQuery('#unusedKeyArea').show(); } else { jQuery('#unusedKeyArea').hide(); } } jQuery('#registerkey_examples_text').html( '' + '
    ' + '' + '' + '' + '

    '); jQuery('.registerkey_input_box_text').parent().css("float","none"); jQuery('.registerkey_input_box_text').parent().append('
    '); /^https?:\/\/store\.steampowered\.com\/account\/registerkey\?key\=[\w\W]+/.test(url)&&(document.getElementById("inputKey").value=url.replace(/https?:\/\/store\.steampowered\.com\/account\/registerkey\?key\=/i,"")); jQuery('.registerkey_input_box_text').hide(); jQuery('#purchase_confirm_ssa').hide(); jQuery('#register_btn').parent().css("margin","10px 0") jQuery('#register_btn').parent().append('激活key' + '   ' + '激活sub' + '   ' + '激活礼物卡或钱包充值码' + '   ' + '更换国家/地区' + '   '); jQuery('#register_btn').remove(); /^https?:\/\/store\.steampowered\.com\/account\/registerkey\?key\=[\w\W]+/.test(url)&&(redeem(getKeysByRE(url.replace(/https?:\/\/store\.steampowered\.com\/account\/registerkey\?key\=/i,"").trim()))); jQuery('#redeemKey').click(redeemKeys); jQuery('#redeemSub').click(redeemSubs); jQuery('#redeemCode').click(redeemCode); jQuery('#changeCountry').click(cc); jQuery(".block_content.checkout_content_box").append(` `); function DisplayPage( page ) { $('error_display').innerHTML = ''; $('error_display').style.display = 'none'; switch ( page ) { case 'code': $('wallet_code_form').style.display = ''; $('redeem_wallet_code_upsell_text').style.display = ''; $('address_form').style.display = 'none'; $('redeem_amount_form').style.display = 'none'; $('validate_btn').style.display = ''; $('validate_btn_in_progress').style.display = 'none'; jQuery('#inputKey').val(''); break; case 'address': $('address_btn').style.display = ''; $('address_btn_in_progress').style.display = 'none'; $('wallet_code_form').style.display = 'none'; $('redeem_wallet_code_upsell_text').style.display = 'none'; $('main_content').style.backgroundImage = "url('')"; $('address_form').style.display = ''; $('redeem_amount_form').style.display = 'none'; break; case 'redeem_amount': $('redeem_btn').style.display = ''; $('redeem_btn_in_progress').style.display = 'none'; $('wallet_code_form').style.display = 'none'; $('redeem_wallet_code_upsell_text').style.display = 'none'; $('main_content').style.backgroundImage = "url('')"; $('address_form').style.display = 'none'; $('redeem_amount_form').style.display = ''; break; } } function UpdateStateSelection() { try { if ( $('billing_country').value == 'US' ) { $('billing_state_text').style.display = 'none'; $('billing_state_select_dselect_container').style.display = 'block'; } else { $('billing_state_text').style.display = 'block'; $('billing_state_select_dselect_container').style.display = 'none'; } } catch( e ) { ReportRedeemJSError( 'Failed in UpdateStateSelection()', e ); } } function ReportRedeemJSError( message, e ) { try { if (typeof e == 'string') e = new Error(e); ReportError( '/public/javascript/redeemwalletcode.js?l=schinese', message, message+":\n\n Exception: "+e.name+" - "+e.message+"\n" ); } catch( e ) { } } var g_bValidateWalletCodeCallRunning = false; function ValidateWalletCode() { if( g_bValidateWalletCodeCallRunning ) return; if ( jQuery('#inputKey').val().trim() == '' ) { DisplayErrorMessage( '您必须输入钱包充值码来继续。' ); } else { try { g_bValidateWalletCodeCallRunning = true; $('validate_btn').style.display = 'none'; $('validate_btn_in_progress').style.display = ''; new Ajax.Request('https://store.steampowered.com/account/validatewalletcode/', { method:'post', parameters: { 'wallet_code' : jQuery('#inputKey').val().trim(), 'sessionid' : g_sessionID }, onSuccess: function(transport){ g_bValidateWalletCodeCallRunning = false; if ( transport.responseText ){ try { var result = transport.responseText.evalJSON(true); } catch ( e ) { // Failure OnValidateWalletCodeFailure( 2 ); } // Success... if ( result.success == 1 && result.detail == 0 ) { OnValidateWalletCodeSuccess( result ); return; } else { OnValidateWalletCodeFailure( result.detail ); return; } } OnValidateWalletCodeFailure( 0 ); }, onFailure: function(){ g_bValidateWalletCodeCallRunning = false; OnValidateWalletCodeFailure( 0 ); } }); } catch(e) { ReportRedeemJSError( 'Failed gathering form data and calling ValidateWalletCode', e ); } } } var g_sWalletCodeAmount; var g_sExchangedWalletCodeAmount; function OnValidateWalletCodeSuccess( result ) { try { $('error_display').innerHTML = ''; $('error_display').style.display = 'none'; g_sWalletCodeAmount = result.formattedcodeamount; g_sExchangedWalletCodeAmount = g_sWalletCodeAmount; UpdateRedeemForm( result ); if ( result.haswallet ) { if ( result.currency == result.wallet.currencycode ) { RedeemWalletCode(); } else { CreateWalletAndCheckFunds( false ); } } else { DisplayPage( 'address' ); UpdateStateSelection(); } } catch( e ) { ReportRedeemJSError( 'Failed handling ValidateWalletCode success', e ); } } function OnValidateWalletCodeFailure( detail ) { try { var sErrorMessage = '发生了一个意外错误。您的 Steam 钱包充值码目前无法被兑换。请在 30 分钟后重新兑换该充值码。如果您仍然遇到问题,请联系 Steam 客服寻求进一步的帮助。'; switch ( detail ) { case 14: sErrorMessage = '您输入的 Steam 钱包充值码无效。重新输入时请仔细核对字符。'; break; case 15: sErrorMessage = '您输入的 Steam 钱包充值码已被兑换。Steam 客服无法向您发放新的充值码。'; break; case 58: sErrorMessage = '您输入的 Steam 钱包充值码尚未被激活。请注意,充值码可能在购买几小时后才会由您的零售商完成激活。如果您仍然遇到问题,请联系充值码的卖家寻求进一步的帮助。'; break; case 9: sErrorMessage = '您输入的 Steam 钱包充值码已于先前兑换到您的帐户中了。'; break; default: sErrorMessage = '发生了一个意外错误。您的 Steam 钱包充值码目前无法被兑换。请在 30 分钟后重新兑换该充值码。如果您仍然遇到问题,请联系 Steam 客服寻求进一步的帮助。'; break; } DisplayErrorMessage( sErrorMessage ); $('validate_btn').style.display = ''; $('validate_btn_in_progress').style.display = 'none'; } catch (e) { ReportRedeemJSError( 'Failed handling ValidateWalletCode failure', e ); } } function SubmitAddressForm() { var errorString = ''; var rgBadFields = { billing_address : false, billing_city : false, billing_state_text : false, billing_postal_code : false, billing_state_select_trigger : false } try { if ( $( 'billing_address' ).value.length < 1 ) { errorString += '请输入您的账单地址。
    '; rgBadFields.billing_address = true; } if ( $( 'billing_city' ).value.length < 1 ) { errorString += '请输入您的账单城市。
    '; rgBadFields.billing_city = true; } if ( $( 'billing_country' ).value == 'US' ) { if ( $('billing_state_select').value.length < 1 ) { errorString += '请输入一个州或省。
    '; rgBadFields.billing_state_select_trigger = true; } } if ( $( 'billing_country' ).value == 'US' ) { if ( $( 'billing_postal_code' ).value.length < 5 ) { errorString += '请输入您所在地区的邮政编码。
    '; rgBadFields.billing_postal_code = true; } } else if ( $( 'billing_postal_code' ).value.length < 1 ) { errorString += '请输入您所在地区的邮政编码。
    '; rgBadFields.billing_postal_code = true; } } catch(e) { ReportRedeemJSError( 'Failed validating address info form', e ); } try { for ( var key in rgBadFields ) { if ( rgBadFields[key] ) { ValidationMarkFieldBad( key ); } else { ValidationMarkFieldOk( key ); } } if ( errorString != '' ) { var rgErrors = errorString.split( '
    ' ); if ( rgErrors.length > 3 ) { errorString = ''; errorString = rgErrors[0] + '
    ' + rgErrors[1] + '
    ' + '并查看下面突出显示的更多错误。' + '
    '; } DisplayErrorMessage( errorString ); } else { $('error_display').innerHTML = ''; $('error_display').style.display = 'none'; CreateWalletAndCheckFunds( true ); } } catch(e) { ReportRedeemJSError( 'Failed showing error or submitting payment info form', e ); } } var g_bCreateWalletAndCheckFundsRunning = false; function CreateWalletAndCheckFunds( bCreateFromAddress ) { if( g_bCreateWalletAndCheckFundsRunning ) return; try { g_bCreateWalletAndCheckFundsRunning = true; $('address_btn').style.display = 'none'; $('address_btn_in_progress').style.display = ''; new Ajax.Request('https://store.steampowered.com/account/createwalletandcheckfunds/', { method:'post', parameters: { 'wallet_code' : jQuery('#inputKey').val().trim(), 'CreateFromAddress' : bCreateFromAddress ? 1 : 0, 'Address' : $('billing_address').value, 'City' : $('billing_city').value, 'Country' : $('billing_country').value, 'State' : ($('billing_country').value == 'US' ? $('billing_state_select').value : $('billing_state_text').value), 'PostCode' : $('billing_postal_code').value, 'sessionid' : g_sessionID }, onSuccess: function(transport){ g_bCreateWalletAndCheckFundsRunning = false; if ( transport.responseText ){ try { var result = transport.responseText.evalJSON(true); } catch ( e ) { // Failure OnCreateWalletAndCheckFundsFailure( 2 ); } // Success... if ( result.success == 1 ) { OnCreateWalletAndCheckFundsSuccess( result ); return; } else { OnCreateWalletAndCheckFundsFailure( result.success ); return; } } OnCreateWalletAndCheckFundsFailure( 2 ); }, onFailure: function(){ g_bCreateWalletAndCheckFundsRunning = false; OnCreateWalletAndCheckFundsFailure( 2 ); } }); } catch(e) { ReportRedeemJSError( 'Failed gathering form data and calling CreateWallet', e ); } } function UpdateRedeemForm( result ) { $('redeem_wallet_success_description').innerHTML = result.success_message; $('redeem_wallet_success_upsell_text').innerHTML = result.upsell_text; $('redeem_wallet_success_app_image_link').href = result.redirect_url; $('redeem_wallet_success_button').href = result.redirect_url; $('redeem_wallet_success_button_text').innerHTML = result.redirect_button_text; if ( result.bRedirectToApp ) { $('redeem_wallet_success_default_image').style.display = 'none'; $('redeem_wallet_success_image').src = result.redirect_image; $('redeem_wallet_success_app_image').style.display = ''; } else { $('redeem_wallet_success_default_image').style.display = ''; $('redeem_wallet_success_app_image').style.display = 'none'; } } function OnCreateWalletAndCheckFundsSuccess( result ) { try { $('error_display').innerHTML = ''; $('error_display').style.display = 'none'; g_sExchangedWalletCodeAmount = result.formattedcodeexchangeamount; UpdateRedeemForm( result ); if ( result.currency != result.grant_currency ) { $('code_amount').innerHTML = g_sWalletCodeAmount; $('code_exchange_amount').innerHTML = g_sExchangedWalletCodeAmount; DisplayPage( 'redeem_amount' ); } else { RedeemWalletCode(); } } catch( e ) { ReportRedeemJSError( 'Failed handling CreateWallet success', e ); } } function OnCreateWalletAndCheckFundsFailure( detail ) { try { DisplayErrorMessage( '确认钱包时出现错误。您的钱包充值码尚未被兑换。
    请联系 Steam 客服。' ); $('address_btn').style.display = ''; $('address_btn_in_progress').style.display = 'none'; $('validate_btn').style.display = ''; $('validate_btn_in_progress').style.display = 'none'; } catch (e) { ReportRedeemJSError( 'Failed handling CreateWallet failure', e ); } } var g_bRedeemWalletCodeRunning = false; function RedeemWalletCode() { if( g_bRedeemWalletCodeRunning ) return; try { g_bRedeemWalletCodeRunning = true; $('redeem_btn').style.display = 'none'; $('redeem_btn_in_progress').style.display = ''; new Ajax.Request('https://store.steampowered.com/account/confirmredeemwalletcode/', { method:'post', parameters: { 'wallet_code' : jQuery('#inputKey').val().trim(), 'sessionid' : g_sessionID }, onSuccess: function(transport){ g_bRedeemWalletCodeRunning = false; if ( transport.responseText ){ try { var result = transport.responseText.evalJSON(true); } catch ( e ) { // Failure OnRedeemWalletCodeFailure( 2 ); } // Success... if ( result.success == 1 ) { OnRedeemWalletCodeSuccess( result ); return; } else { OnRedeemWalletCodeFailure( result.success, result.detail ); return; } } OnRedeemWalletCodeFailure( 2, 0 ); }, onFailure: function(){ g_bRedeemWalletCodeRunning = false; OnRedeemWalletCodeFailure( 2, 0 ); } }); } catch(e) { ReportRedeemJSError( 'Failed gathering form data and calling RedeemWalletCode', e ); } } function OnRedeemWalletCodeSuccess( result ) { try { $('wallet_current_balance').innerHTML = result.formattednewwalletbalance; DisplayPage( 'code' ); showModal ( 'redirectStorePageModal', true ); } catch( e ) { ReportRedeemJSError( 'Failed handling RedeemWalletCode success', e ); } } function OnRedeemWalletCodeFailure( success, detail ) { try { var sErrorMessage = '发生了一个意外错误。您的 Steam 钱包充值码目前无法被兑换。请在 30 分钟后重新兑换该充值码。如果您仍然遇到问题,请联系 Steam 客服寻求进一步的帮助。'; switch ( success ) { case 16: sErrorMessage = '发生了一个意外错误。您的 Steam 钱包充值码目前无法被兑换。请在 30 分钟后重新兑换该充值码。如果您仍然遇到问题,请联系 Steam 客服寻求进一步的帮助。'; break; default: switch ( detail ) { case 48: sErrorMessage = '您输入的 Steam 钱包充值码无效。重新输入时请仔细核对字符。'; break; case 14: sErrorMessage = '您输入的 Steam 钱包充值码无效。重新输入时请仔细核对字符。'; break; case 44: sErrorMessage = '您输入的 Steam 钱包充值码似乎有效;然而,您的 Steam 帐户目前在激活 Steam 钱包充值码时受到限制。请联系 Steam 客服寻求进一步的帮助。'; break; case 68: sErrorMessage = '您输入的 Steam 钱包充值码似乎有效,然而受制于美国政府法规,Steam 钱包一天内的流动金额为 2000 美元。请于 24 小时后重试。'; break; default: sErrorMessage = '发生了一个意外错误。您的 Steam 钱包充值码目前无法被兑换。请在 30 分钟后重新兑换该充值码。如果您仍然遇到问题,请联系 Steam 客服寻求进一步的帮助。'; break; } break; } DisplayErrorMessage( sErrorMessage ); $('redeem_btn').style.display = ''; $('redeem_btn_in_progress').style.display = 'none'; $('validate_btn').style.display = ''; $('validate_btn_in_progress').style.display = 'none'; } catch (e) { ReportRedeemJSError( 'Failed handling RedeemWalletCode failure', e ); } } function DisplayErrorMessage( strMessage ) { $('error_display').innerHTML = strMessage; $('error_display').style.display = 'block'; Effect.ScrollTo( 'error_display' ); new Effect.Highlight( 'error_display', { endcolor : '#000000', startcolor : '#ff9900' } ); } function ValidationMarkFieldBad( elem ) { if ( $(elem) ) { if ( $(elem).hasClassName( 'highlight_on_error' ) ) new Effect.Morph( elem, {style: 'color: #FF9900', duration: 0.5 } ); else new Effect.Morph( elem, {style: 'border-color: #FF9900', duration: 0.5 } ) } } function ValidationMarkFieldOk( elem ) { if ( $(elem) ) { if ( $(elem).hasClassName( 'highlight_on_error' ) ) $(elem).style.color=''; else $(elem).style.borderColor = ''; } } function redeemSubs(){ redeemSub(jQuery('#inputKey').val().trim()); } function redeemCode(){ ValidateWalletCode(); } toggleUnusedKeyArea(); function copyKey(){ let infoHtml=jQuery("#unusedKeys>li"); let stmcnInfo=""; if(infoHtml&&(infoHtml.length==0)){ return "没有未使用的key"; }else{ for (let i=0;i[\d]+?<\/code>/gim)[0].replace(/<\/?code>/gim,""); let name=info.match(/<\/code>[\w\W]*?\)/gim)[0].replace(/<\/code>|\)/gim,"").replace(/(^\s*)|(\s*$)/g, ""); stmcnInfo = stmcnInfo + "[url=https://store.steampowered.com/account/registerkey?key=" + key + "]" + key+ "[/url] [url=https://steamdb.info/sub/" + code + "]" + name + "[/url] \n"; }else{ return "没有已拥有的key"; } } } return stmcnInfo; } css('table a {color: pink;}td {white-space: nowrap;overflow: hidden;}code {padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:3px}' + '.notice_box_content {border: 1px solid #a25024;border-radius: 3px;width: 525px;color: #acb2b8;font-size: 14px;font-family: "Motiva Sans", Sans-serif;font-weight: normal;padding: 15px 15px;margin-bottom: 15px;}' + '.notice_box_content b {font-weight: normal;color: #f47b20;}li {white-space: nowrap;overflow: hidden;}'+ '.link-toast{position:absolute;padding:12px 24px;font-size:15px;border-radius:8px;white-space:nowrap;color:#fff;-webkit-animation:h cubic-bezier(.22,.58,.12,.98) .4s;animation:h cubic-bezier(.22,.58,.12,.98) .4s;z-index:10000}'+ '.link-toast.info{background-color:#48bbf8;-webkit-box-shadow:0 .2em .1em .1em rgba(72,187,248,.2);box-shadow:0 .2em .1em .1em rgba(72,187,248,.2)}'+ '.link-toast.success{background-color:#47d279;-webkit-box-shadow:0 .2em .1em .1em rgba(71,210,121,.2);box-shadow:0 .2em .1em .1em rgba(71,210,121,.2)}'); jQuery("body").append(''+ ''); jQuery("#unusedKeyArea>b").after(''); function copySteamKey(){ let unk=copyKey(); if(unk=="没有未使用的key"){ jQuery("#copyInfo").html("没有未使用的key"); jQuery("#copyInfo").show(); setTimeout(function(){ jQuery("#copyInfo").fadeOut(); },2000); }else if(unk=="没有已拥有的key"){ jQuery("#copyInfo").html("没有已拥有的key"); jQuery("#copyInfo").show(); setTimeout(function(){ jQuery("#copyInfo").fadeOut(); },2000); }else{ copy(unk); jQuery("#suc").show(); setTimeout(function(){ jQuery("#suc").fadeOut(); },2000); } } jQuery("#copy").click(copySteamKey); }else{//点击添加链接 let htmlEl; if(window.document.body){ window.document.body.onclick = function(event){ htmlEl = event.target;//鼠标每经过一个元素,就把该元素赋值给变量htmlEl if(htmlEl.tagName!=='A' && htmlEl.tagName!=='BUTTON' && htmlEl.getAttribute("type")!=='button' && htmlEl.tagName!=='TEXTAREA' && htmlEl.getAttribute("type")!=='text'){ let elCn = htmlEl.childNodes; let elNum = elCn.length; for(let i = 0;i${steamKey}`):ele.innerHTML.replace(steamKey,`${steamKey}`); } } //激活页面内所有key function redeemAllKey(){ let len=0; let keyList=""; let hasKey=[]; function arr(arr) { return [...new Set(arr)]; } function addBtn(){ let div = document.createElement("div"); div.setAttribute("id", "keyDiv"); div.setAttribute("style", "position:fixed;left:5px;bottom:5px"); div.innerHTML = ``; document.getElementsByTagName('body')[0].appendChild(div); } addBtn(); setInterval(function(){ let allSteamKey=document.getElementsByTagName('body')[0].innerText; allSteamKey=allSteamKey.match(/[\w\d]{5}(-[\w\d]{5}){2}/gim)||[]; allSteamKey=arr(allSteamKey)||[]; len=allSteamKey.length; if(len>0){ for(let i=0;i{ if(document.getElementById("freepackages")){ document.getElementById("freepackages").onclick=activateConsole; clearInterval(fp); } },1000); } if (/https?:\/\/store\.steampowered\.com\/account\/licenses\/(\?sub\=[\w\W]{0,})?/.test(url)){//自动添加sub jQuery('.pageheader').parent().append('
    ' + '' + '   ' + '
    ' + '激活SUB'+ '更改国家/地区'); jQuery('#buttonSUB').click(()=>{redeemSub()}); jQuery('#changeCountry').click(cc); if (/https?:\/\/store\.steampowered\.com\/account\/licenses\/\?sub\=([\d]{1,},){1,}/.test(url)){ setTimeout(()=>{redeemSub(url)},2000); } } function redeemSub(e){ let subText=e||document.getElementById("gameSub").value; if(subText){ let ownedPackages = {}; jQuery( '.account_table a' ).each( function( i, el ){ let match = el.href.match( /javascript:RemoveFreeLicense\( ([0-9]+), '/ ); if( match !== null ){ ownedPackages[ +match[ 1 ] ] = true; } } ); console.log(subText); let freePackages =subText.match(/[\d]{2,}/g); let i = 0, loaded = 0, packae = 0, total = freePackages.length, modal = swal( '正在执行…','请等待所有请求完成。 忽略所有错误,让它完成。' ); for( ; i < total; i++ ){ packae = freePackages[ i ]; if( ownedPackages[ packae ] ){ loaded++; continue; } jQuery.post('//store.steampowered.com/checkout/addfreelicense',{ action: 'add_to_cart', sessionid: g_sessionID, subid: packae }).always(function(){ loaded++; //modal.Dismiss(); if( loaded >= total ){ if(url.includes("licenses")){ window.open("https://store.steampowered.com/account/licenses/","_self"); }else{ swal("全部激活完成,是否前往账户页面查看结果?", { buttons: { cancel: "取消", "确定": true, }, }) .then((value) => { if(value) window.open("https://store.steampowered.com/account/licenses/","_blank"); }); } }else{ modal = swal( '正在激活…','进度:' + loaded + '/' + total + '.' ); } }); } } } function cc(){ jQuery.ajax({ url:"//store.steampowered.com/cart/", type:"get", success:function(data){ if(data.match(/id\=\"usercountrycurrency_trigger\"[\w\W]*?\>[w\W]*?\<\/a/gim)){ let c=data.match(/id\=\"usercountrycurrency_trigger\"[\w\W]*?\>[w\W]*?\<\/a/gim)[0].replace(/id\=\"usercountrycurrency_trigger\"[\w\W]*?\>|\<\/a/g,""); let thisC=data.match(/id\=\"usercountrycurrency\"[\w\W]*?value=\".*?\"/gim)[0].match(/value=\".*?\"/gim)[0].replace(/value=\"|\"/g,""); let div=data.match(/\
    [\w\W]*?\

    "; jQuery("body").append(`

    转换商店和钱包     当前国家/地区:${c}
    ${div}
    `); jQuery(".currency_change_option").click(function(){ changeCountry(jQuery(this).attr("data-country")); }); jQuery(".newmodal_close").click(function(){ jQuery("#ccDiv").remove(); }); }else{ swal("需要挂相应地区的梯子!","","warning"); } }, error:()=>{ swal("获取当前国家/地区失败!","","error"); } }); } function changeCountry(country){ jQuery.ajax({ url:"//store.steampowered.com/account/setcountry", type:"post", data:{ sessionid:document.cookie.match(/sessionid\=.*?\;/gim)[0].replace(/sessionid\=|\;/g,""), "cc":country }, complete:function(data){ jQuery.ajax({ url:"//store.steampowered.com/cart/", type:"get", success:function(data){ let c=data.match(/id\=\"usercountrycurrency_trigger\"[\w\W]*?\>[w\W]*?\<\/a/gim)[0].replace(/id\=\"usercountrycurrency_trigger\"[\w\W]*?\>|\<\/a/g,""); let thisC=data.match(/id\=\"usercountrycurrency\"[\w\W]*?value=\".*?\"/gim)[0].match(/value=\".*?\"/gim)[0].replace(/value=\"|\"/g,""); let div=data.match(/\
    [\w\W]*?\

    "; jQuery("#ccDiv").html(`

    转换商店和钱包     当前国家/地区:${c}
    ${div}
    `); jQuery(".currency_change_option").click(function(){ changeCountry(jQuery(this).attr("data-country")); }); jQuery(".newmodal_close").click(function(){ jQuery("#ccDiv").remove(); }); if(thisC===country){ swal("更换成功!","","success"); }else{ swal("更换失败!","","error"); } }, error:()=>{ swal("获取当前国家/地区失败!","","error"); } }); } }); } GM_addStyle(` .currency_change_option_ctn { vertical-align: top; margin: 0 6%; } .currency_change_option_ctn:first-child { margin-bottom: 12px; } .currency_change_option_ctn > p { font-size: 12px; margin: 8px 8px 0 8px; } .currency_change_option_ctn { vertical-align: top; margin: 0 6%; } .currency_change_option_ctn:first-child { margin-bottom: 12px; } .currency_change_option { font-family: "Motiva Sans", Sans-serif; font-weight: 300; /* light */ display: block; } .currency_change_option > span { display: block; padding: 9px 19px; } .currency_change_option .country { font-size: 20px; } .currency_change_option .notes { font-size: 13px; line-height: 18px; } .currency_change_option_ctn > p { font-size: 12px; margin: 8px 8px 0 8px; } `) }catch(e){ console.log("AuTo Redeemer Steamkey脚本执行出错: \n",e.stack); } }());