hearthstone deckcode

hs deckcode

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        hearthstone deckcode
// @version     2.30
// @description hs deckcode
// @match *://bbs.nga.cn/read.php*
// @author      fbigame
// @namespace https://hs.fbigame.com
// ==/UserScript==

var img_ver = 13;

var fbi_postcontent0 = document.getElementById('postcontent0').innerHTML;
if (fbi_postcontent0 != undefined) {
	var deck_code_all = [];
    deck_codes = fbi_postcontent0.split('<br>');
    deck_codes.forEach(function(value, index, arr) {
        if (value.substring(0, 3) == 'AAE') {
            deck_code_all.push(value);
        }
    });
	var fbi_userinfo = document.getElementById('posterinfo0');
	var fbi_userinfo_divs = fbi_userinfo.childNodes;
	var fbi_deck_div = null;
	for (var i = 0; i < fbi_userinfo_divs.length; i++) {
		if (fbi_userinfo_divs[i].className == "stat_spacer") {
			fbi_deck_div = fbi_userinfo_divs[i];
		} else if (fbi_userinfo_divs[i].className == "stat") {
			var fbi_user_stat_div = fbi_userinfo_divs[i].childNodes;
			for (var j = 0; j < fbi_user_stat_div.length; j++) {
				if (fbi_user_stat_div[j].className == "stat_spacer") {
					fbi_deck_div = fbi_user_stat_div[j];
				}
			}
		}
	}
	if (fbi_deck_div !== null) {
		var ele = document.createElement("div");
		ele.innerHTML = '<style>.forumbox .postrow .stat_spacer{width:auto;}.cards_rebuild li{list-style:none}.deck_containter{padding-top:7px;width:200px;z-index:1001;font-size:14px!important;font-family:"Microsoft YaHei",Arial,Helvetica,sans-serif;margin:auto;}.deck_containter .deck_hero{width:200px;height:65px}.card-tile{padding-top:2px;color:#fff;position:relative;text-align:left;cursor:pointer;margin-top:1px;text-shadow:-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000;height:34px;line-height:34px}.card-tile .card-gem{height:100%;float:left;position:relative;border-style:solid;border-color:black;border-width:1px 0 1px 1px;width:34px}.card-tile .card-cost{position:absolute;font-weight:bold;text-align:center;width:100%}.card-tile .rarity-common,.rarity-free{background:#858585}.card-tile .rarity-common,.rarity-rare{background:#315376}.card-tile .rarity-common,.rarity-epic{background:#644c82}.card-tile .rarity-common,.rarity-legendary{background:#855c25}.card-tile .card-frame{position:relative;border:solid 1px black;height:100%;overflow:hidden}.card-tile .card-frame .card-fade-countbox{position:absolute;width:100%;height:100%;background:linear-gradient(65deg,rgba(49,49,9,1) 0,rgba(49,49,49,1) calc(100% - 120px),rgba(49,49,49,0) calc(100% - 50px),rgba(49,49,49,0) 100%)}.card-tile .card-frame .card-fade-no-countbox{position:absolute;width:100%;height:100%;background:linear-gradient(65deg,rgba(49,49,9,1) 0,rgba(49,49,49,1) calc(100% - 96px),rgba(49,49,49,0) calc(100% - 26px),rgba(49,49,49,0) 100%)}.card-tile .card-frame .card-name{position:absolute;font-weight:bold;left:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-tile .card-frame .card-asset{position:absolute;height:100%;background-color:#313131}.card-tile .card-countbox{float:right;position:relative;background-color:#313131;border-left:solid 1px black;height:100%}.card-tile .card-legendicon{position:absolute;top:-1px}.card-tile .card-count{position:absolute;width:100%;color:#f4d442;font-weight:bold;text-align:center}.card-tile .card-image{position:fixed;z-index:1000}.card-tile .predicted{opacity:.4;filter:grayscale(1)}.card-tile .predicted :hover{filter:grayscale(0)}.card-tile .predicted .craftable{opacity:.6}.card-tile .predicted .craftable a:hover,.card-tile .predicted .craftable a:focus{opacity:.8}.card-tile .predicted .craftable a:hover,.card-tile .predicted .craftable a:focus{cursor:pointer}.card-tile .predicted .craftable.card-image{filter:none}#card-tooltip .card-image-container{position:relative}#card-tooltip .card-image-subtitle{position:absolute;width:100%;left:0;text-align:center;bottom:5%;font-weight:bold;text-shadow:-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000}.card-tooltip{background-color:rgba(0,0,0,0.95);border-radius:4px;border:1px rgba(255,255,255,0.25) solid;color:white;font-family:"Noto Sans",sans-serif;font-size:14px;font-weight:normal;margin-top:10px;min-width:250px;max-width:300px;padding:8px 8px;position:fixed;white-space:normal;pointer-events:none;z-index:1000}.no-background{background:transparent;border:unset}.card-image{position:absolute;z-index:1000;width:256px}</style><div id="tooltip-container"></div>';
		fbi_deck_div.appendChild(ele);
		
		var deck_index;
		var fbi_ajax = [];
		var ajax_status = false;
		var const_index = 0;
		for (deck_index = 0; deck_index < 1; deck_index ++) {
			console.log('deck_index: ' + deck_index);
			console.log('deck_code_all.length: ' + deck_code_all.length);
			var deck_code = deck_code_all[deck_index];
			if (ajax_status == true){
				const_index = deck_index;
			}
			if (deck_code != '') {
				var ele = document.createElement("div");
				ele.innerHTML = '<div class="deck_containter"><div id="cards_rebuild_' + deck_index + '" class="cards_rebuild"></div><div class="deck_wrap"><div id="cards_list_' + deck_index + '" class="cards_list"></div></div></div>';
				fbi_deck_div.appendChild(ele);
				
				
				fbi_ajax[const_index] = new XMLHttpRequest();
				
				fbi_ajax[const_index].open('get', 'https://hs.fbigame.com/ajax.php?mod=deck_decode&index=' + const_index + '&source=nga&deck_code=' + encodeURIComponent(deck_code));
				fbi_ajax[const_index].send();
				fbi_ajax[const_index].onreadystatechange = function() {
					if (fbi_ajax[const_index].readyState == 4 && fbi_ajax[const_index].status == 200) {
						ajax_status = true;
						var fbi_json = JSON.parse(fbi_ajax[const_index].responseText);
						if (fbi_json.ec == 0) {
							if (fbi_json.deck) {
								rebuild_deck_code(fbi_json.deck, fbi_json.index);
							} else {
								console.log('cant find deck');
							}
						} else {
							console.log(fbi_json.em);
						}
					}
				}
			
			} else {
				console.log('deck code empty');
			}
		}
	} else {
		console.log('cant find stat div');
	}
		
}
	
	
function rebuild_deck_code(deck, fbi_json_index) {
	var select_class = '';
	var class_name = '';
	window.all_cards = [];
	var decode_all_cards = '';
	for (var index in deck.cards) {
		for (var i = 0; i < deck.cards[index]; i ++ ) {
			if (decode_all_cards == '') {
				decode_all_cards += index;
			} else {
				decode_all_cards += '|' + index;
			}
		}
	};
	if (decode_all_cards != '') {
		var fbi_ajax = new XMLHttpRequest();
		fbi_ajax.open('get', 'https://hs.fbigame.com/ajax.php?mod=get_cards_detail&source=nga&cards=' + decode_all_cards);
		fbi_ajax.send();
		fbi_ajax.onreadystatechange = function() {
			if (fbi_ajax.readyState == 4 && fbi_ajax.status == 200) {
				var fbi_json = JSON.parse(fbi_ajax.responseText);
				if (fbi_json.ec == 0) {
					if (fbi_json.num > 0) {
						var all_cards = '';
						
						fbi_json.list.forEach(function(value, index, arr) {
							var datas = '';
							datas += 'data-CardID="' + value.CardID + '" ';
							datas += 'id="card_' + value.Id + '" ';
							datas += 'data-CARDNAME="' + value.CARDNAME + '" ';
							datas += 'data-COST="' + value.COST + '" ';
							datas += 'data-RARITY="' + value.RARITY + '" ';
							datas += 'data-auth_key="' + value.auth_key + '" ';
							all_cards += '<li ' + datas + '></li>';
						});
						console.log('cards_rebuild_' + fbi_json_index);
						document.getElementById('cards_rebuild_' + fbi_json_index).innerHTML = all_cards;
						for (var index in deck.cards) {
							for (var i = 0; i < deck.cards[index]; i ++ ) {
								add_to_deck(index, fbi_json_index);
							}
						}
					}
				}
			}
		}
	}
	return true;
}
function add_to_deck(id, index) {
	var card = document.getElementById('card_' + id);
	var cardid = card.attributes["data-cardid"].nodeValue;
	var name = card.attributes["data-cardname"].nodeValue;
	var cost = card.attributes["data-cost"].nodeValue;
	var card_rarity = card.attributes["data-rarity"].nodeValue;
	var auth_key = card.attributes["data-auth_key"].nodeValue;
	
	var rarity = '';
	switch (card_rarity) {
	case '1':
		rarity = 'rarity-free';
		break;
	case '2':
		rarity = 'rarity-free';
		break;
	case '3':
		rarity = 'rarity-rare';
		break;
	case '4':
		rarity = 'rarity-epic';
		break;
	case '5':
		rarity = 'rarity-legendary';
		break;
	}

	if (window.all_cards['"' + id + '"'] > 0) {
		window.all_cards['"' + id + '"'] = window.all_cards['"' + id + '"'] + 1;
		document.getElementById('card_count_' + id).innerHTML = window.all_cards['"' + id + '"'];
		removeClass(document.getElementById('card_countbox_' + id), 'hide');
		addClass(document.getElementById('card-fade-no-countbox_' + id), 'card-fade-countbox');
		removeClass(document.getElementById('card-fade-no-countbox_' + id), 'card-fade-no-countbox');
		document.getElementById('card_asset_' + id).setAttribute('style', 'right: 22px !important');
	} else {
		window.all_cards['"' + id + '"'] = 1;
		if (card_rarity == 5) {
			var num_show = '★';
			var count_box_hide = '';
			var card_fade_countbox = 'card-fade-countbox';
			var card_assets_style = 'right: 22px;';
		} else {
			var num_show = window.all_cards['"' + id + '"'];
			var count_box_hide = 'hide';
			var card_fade_countbox = 'card-fade-no-countbox';
			var card_assets_style = 'right: 0px;';
		}
		var cardinfo = '';
		cardinfo += '<div class="card-tile" name="card_tile" aria-label="' + name + '" data-cardid="' + cardid + '" data-id="' + id + '" data-cost="' + cost + '" data-rarity="' + rarity + '" data-auth_key="' + auth_key + '">';
		cardinfo += '<div class="card-gem ' + rarity + '">';
		cardinfo += '<span class="card-cost" style="font-size: 1.25em;">' + cost + '</span>';
		cardinfo += '</div>';
		cardinfo += '<div class="card-frame">';
		cardinfo += '<img id="card_asset_' + id + '" class="card-asset" src="https://hs.fbigame.com/static/images/tiles/' + cardid + '.png" alt="' + name + '" style="' + card_assets_style + '">';
		cardinfo += '<div id="card_countbox_' + id + '" class="card-countbox ' + count_box_hide + '" style="width: 24px;">';
		cardinfo += '<span id="card_count_' + id + '" class="card-count" data-id="' + id + '" style="font-size: 1.15em; top: 0px;">' + num_show + '</span>';
		cardinfo += '</div>';
		cardinfo += '<span id="' + card_fade_countbox + '_' + id + '" class="' + card_fade_countbox + '" data-id="' + id + '"></span>';
		cardinfo += '<span class="card-name" style="width: calc(100% - 28px);">' + name + '</span>';
		cardinfo += '</div>';
		cardinfo += '</div>';
		
		var ele = document.createElement("div");
		ele.innerHTML = cardinfo;
		document.getElementById('cards_list_' + index).appendChild(ele);
	}
	var card_tiles = document.getElementsByName('card_tile');
	var arr = [];
	for (var i = 0; i < card_tiles.length; i++) {
		arr.push(card_tiles[i]);
		card_tiles[i].addEventListener("mousemove",function(e){
			var iDiffX = e.pageX - this.offsetLeft;
			var iDiffY = e.pageY - this.offsetTop;
			var x = e.clientX - iDiffX + 90;
			var y = e.clientY - iDiffY - 191;
			show_tooltip(this.attributes["data-cardid"].nodeValue, this.attributes["data-auth_key"].nodeValue, x, y);
		},false);
		card_tiles[i].addEventListener("mouseout",function(e){
			hide_tooltip();
		},false);
	}
	arr.sort(function(a,b){
		return a.getAttribute('data-cost') - b.getAttribute('data-cost')
	});
	for(var i = 0; i < arr.length; i ++) {
		document.getElementById('cards_list_' + index).appendChild(arr[i]);
	}
}


function show_tooltip(cardid, auth_key, x, y) {
	var content = '';
	content += '<div id="card-tooltip" class="card-tooltip no-background" role="tooltip" style="left: 506px; top: 118px;">';
	content += '<img class="card-image" src="https://res.fbigame.com/hs/v' + img_ver + '/' + cardid + '.png?auth_key=' + auth_key + '">';
	content += '</div>';
	document.getElementById('tooltip-container').innerHTML = content;
	document.getElementById('card-tooltip').setAttribute('style', 'left: ' + x + 'px !important;top: ' + y + 'px !important');
	document.getElementById('tooltip-container').setAttribute('style', 'display:block');
}
function hide_tooltip() {
	document.getElementById('tooltip-container').setAttribute('style', 'display:none');
}

function addClass(obj, cls) {
    var obj_class = obj.className,
    blank = (obj_class != '') ? ' ': '';
    added = obj_class + blank + cls;
    obj.className = added;
}

function removeClass(obj, cls) {
    var obj_class = ' ' + obj.className + ' ';
    obj_class = obj_class.replace(/(\s+)/gi, ' '),
    removed = obj_class.replace(' ' + cls + ' ', ' ');
    removed = removed.replace(/(^\s+)|(\s+$)/g, '');
    obj.className = removed;
}

function hasClass(obj, cls) {
    var obj_class = obj.className,
    obj_class_lst = obj_class.split(/\s+/);
    x = 0;
    for (x in obj_class_lst) {
        if (obj_class_lst[x] == cls) {
            return true;
        }
    }
    return false;
}