// ==UserScript==
// @name hearthstone deckcode
// @version 2.30
// @description hs deckcode
// @match *://bbs.nga.cn/read.php*
// @author fbigame
// @namespace https://hs.fbigame.com
// @downloadURL https://update.greasyfork.icu/scripts/386541/hearthstone%20deckcode.user.js
// @updateURL https://update.greasyfork.icu/scripts/386541/hearthstone%20deckcode.meta.js
// ==/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('
');
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 = '
';
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 = '';
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 += '';
});
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 += '';
cardinfo += '
';
cardinfo += '' + cost + '';
cardinfo += '
';
cardinfo += '
';
cardinfo += '

';
cardinfo += '
';
cardinfo += '' + num_show + '';
cardinfo += '
';
cardinfo += '
';
cardinfo += '
' + name + '';
cardinfo += '
';
cardinfo += '
';
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 += '';
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;
}