ig redeem

激活ig key

当前为 2017-09-01 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        ig redeem
// @namespace   steam
// @author      伟大鱼塘
// @description 激活ig key
// @include     https://www.indiegala.com/gift?*
// @match       https://www.indiegala.com/game?*
// @match       https://www.indiegala.com/gift?*
// @version     0.1.7
// @require     https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
// @grant       GM_xmlhttpRequest
// @grant       GM_addStyle
// ==/UserScript==

(function($) {

	//添加样式
	{
		let modalstyle = '.redeem-moadal {visibility:hidden;opacity:0;transition: all .4s ease-out 0s;position:fixed;width:300px;height:280px;left:50%;top:50%;transform: translate(-50%,-50%);-webkit-transform: translate(-50%,-50%);background:#fff;z-index:5000;border-radius:15px;text-align:center;} .redeem-moadal p {line-height:1.8;color:#666;letter-spacing:0.5px;} .redeem-moadal p i{font-style:normal;color:#ccc;} #closemodal {visibility;hidden;opacity:0;border: 1px solid rgba(0, 0, 0, 0.3);padding:5px;width:100%;}';
		let bgstyle = '.blackbg {visibility:hidden;opacity:0;transition: all .4s ease-out 0s;position:fixed;left:0;top:0;height:100%;width:100%;background:rgba(0,0,0,.5);z-index:4000;}  .redeem-moadal.open,.blackbg.open,#closemodal.open {visibility:visible;opacity:1;}';
		let gameStyle = '.game-key-string {height:115px;transition: all .4s ease-out 0s;} .act {background-color:rgba(89, 204, 103,.2) !important;} .failed {background-color:rgba(229, 68, 90,.4) !important;} button {transition: all .4s ease-out 0s;} .redeemsteamkey:hover {color:#fff !important;background-color:rgba(0, 0, 0, 0.3) !important;} #redeemselectedsteamkey:hover {background:rgba(155, 89, 182,1) !important;} #redeemallsteamkey:hover {background:rgba(88, 94, 100,1) !important;}';
		GM_addStyle(modalstyle + bgstyle + gameStyle);
	}

	//添加状态框
	{
		let modal = '<div class="redeem-moadal"><div style="padding-top:30px;"><p>激活总数:<i id="ra">0</i></p><p>激活成功数:<i id="rs" style="color:#80CF35;">0</i></p><p>激活失败数:<i id="rf" style="color:#DD4141;">0</i></p><p class="rdone"><p></div><div style="padding:15px"><button id="closemodal" type="button">关闭窗口</button></div></div>';
		let bg = '<div class="blackbg"></div>';
		$('body').append(modal, bg);

		$('#closemodal').on('click', function() {
			$('.redeem-moadal,.blackbg').removeClass('open');
			$(this).removeClass('open');
		});
	}

	//添加相关dom组件
	{
		$.each($('.game-key-string'), (i, e) => {
			let btn = '<button class="redeemsteamkey input-block-level margin text_align_center keys" style="margin-top:20px;">激活</button>';
			$(e).find('.span-key>div:last-child').append(btn);
		});
		let mulbtn = '<button id="redeemselectedsteamkey" style="display:block;color:#fff;background:rgba(155, 89, 182,0.7);text-align:center;padding:10px;width:60%;margin:auto;border-radius:10px;">激活选中游戏</button>';
		let allbtn = '<button id="redeemallsteamkey" style="display:block;color:#fff;background:rgba(88, 94, 100,0.7);text-align:center;padding:10px;width:60%;margin:auto;margin-top:20px;border-radius:10px;">激活全部游戏</button>';
		$('#steam-key').append(mulbtn, allbtn);
		let sessioninput = '<div style="height: 61px;margin:0 25px;"><div class="span-title"><h4 class="title_game"><a target="_blank" class="game-steam-url"><b>你的Session ID</b></a></h4></div><div class="span-key steam-btn"><div class="option"><input id="g_sessionID" class="input-block-level margin text_align_center keys" type="text" value="" style="margin:0 ;"></div></div></div>';
		$('#steam-key-games').after(sessioninput);

		$('.game-key-string').on('click', function() {
			let that = $(this);
			$(this).removeClass('failed');
			if (!that.hasClass('act')) {
				that.addClass('act');
			} else {
				that.removeClass('act');
			}
		});
	}


	//获取session id
	let sessionid = null;
	$('#g_sessionID').on('input', function() {
		sessionid = $(this).val();
	});

	//单激活
	$('.redeemsteamkey').on('click', function() {
		let that = $(this);
		redeem('s', that);
	});

	//批量激活
	$('#redeemselectedsteamkey').on('click', function() {
		redeem('m', null, $('.act'));
	});
	//全部
	$('#redeemallsteamkey').on('click', function() {
		redeem('m', null, $('.game-key-string'));
	});


	//激活
	function redeem(type, that, selector) {
		let mark = {
			ifsuccess: 0, //异步成功标识
			successful: 0, //成功数
			failed: 0 //失败数
		};
		//type参数为判断是否是批量激活,m为多激活,s为单激活
		if (type == "m") {
			let keys = [];
			let position = [];
			let i = 1; //循环定时器以及position数组,从1开始,第0次直接执行不通过loop函数
			let all = selector.length;
			$.each(selector, (i, e) => {
				let key = $(e).find('input.input-block-level').val();
				let posi = $(e).index();
				position.push(posi);
				keys.push(key);
			});
			if (!sessionid) {
				alert('请输入你的Session ID!');
			} else if (keys.length) {
				$('.rdone').html('');
				$('#rs,#rf').html(0);
				$('.redeem-moadal,.blackbg').addClass('open');
				$('#ra').html(all);
				redeemResquest(keys[0], sessionid, mark, all, position[0]);
				loopRequest(keys, sessionid, mark, all, position, i);
			} else {
				alert('请先选择要激活的游戏!');
			}
		} else {
			let key = that.parent().find('input.input-block-level').val();
			let posi = that.parents('.game-key-string').index();
			if (!sessionid) {
				return alert('请输入你的Session ID!');
			}
			redeemResquest(key, sessionid, mark, 1, posi).then((mark) => {
				if (mark.successful)
					alert('激活成功!');
				else
					alert('激活失败!');
			}).catch((error) => {
				alert(`出错了!错误原因:${error}`);
			});
		}
	}

	//多激活延迟
	function loopRequest(keys, sessionid, mark, all, p, i) {
		setTimeout(function() {
			if (i > (keys.length - 1)) {
				return;
			}
			redeemResquest(keys[i], sessionid, mark, all, p[i]);
			i++;
			loopRequest(keys, sessionid, mark, all, p, i);
		}, 10000);
	}

	//激活请求 all参数用来保存请求总数 p参数用来确定哪一个div.game-key-string激活失败并加failed类
	function redeemResquest(key, sessionid, mark, all, p) {
		return new Promise((resolve, reject) => {
			GM_xmlhttpRequest({
				method: 'GET',
				url: `https://store.steampowered.com/account/ajaxregisterkey/?product_key=${key}&sessionid=${sessionid}`,
				onload: response => {
					result = JSON.parse(response.responseText);
					if (result.success == 1) {
						mark.successful += 1;
						$('#rs').html(mark.successful);
					} else {
						mark.failed += 1;
						$('#rf').html(mark.failed);
						if (p || p === 0) {
							$('.game-key-string').eq(p).addClass('failed');
						}
					}
					mark.ifsuccess += 1;
					if (mark.ifsuccess == all) {
						$('#closemodal').addClass('open');
						$('.rdone').html('激活完成!');
					}
					resolve(mark);
				},
				onerror: () => {
					reject(error);
				}
			});
		});
	}

})(jQuery);