Greasy Fork

Greasy Fork is available in English.

hearthstone deckcode

hs deckcode

当前为 2019-06-19 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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;

	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;
		for (deck_index = 0; deck_index < deck_code_all.length; deck_index ++) {
			var deck_code = deck_code_all[deck_index];
			var fbi_deck_div = null;
			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);
				var fbi_ajax = new XMLHttpRequest();
				fbi_ajax.open('get', 'https://hs.fbigame.com/ajax.php?mod=deck_decode&source=nga&deck_code=' + encodeURIComponent(deck_code));
				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.deck) {
								rebuild_deck_code(fbi_json.deck, deck_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, deck_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>';
						});
						document.getElementById('cards_rebuild_' + deck_index).innerHTML = all_cards;
						
						for (var index in deck.cards) {
							for (var i = 0; i < deck.cards[index]; i ++ ) {
								add_to_deck(index);
							}
						}
					}
				}
			}
		}
	}
}
function add_to_deck(id) {
	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').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 + 70;
			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').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/v9/' + 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;
}