hearthstone deckcode

hs deckcode

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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;
}