// ==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(
'' +
'' +
'
' +
'激活记录 No. Key ' +
'结果 详情 Sub ' +
'
');
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('提取已拥有key(steamcn论坛格式) ');
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 = `激活本页面所有key(共${len}个) `;
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(`
`);
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(`
${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);
}
}());