カード情報を抽出してリスト化するスクリプト | 戦国IXA お茶タイム

戦国IXA お茶タイム

1+2鯖でプレイ中。デッキ構築が最大の関心ごとでっす。たまに他ゲーも。

自分が欲しかったので作ってみました。
待機武将一覧の全カード情報リストを作成するChrome拡張機能スクリプトです。

インストールしたら待機武将一覧の右隣に「カードリスト」というリンクができます。
それをクリックすると、デッキと待機武将の間に一覧リストが作成されます。

カードリスト



// ==UserScript==
// @name ixacardext
// @version 0.0
// @description 戦国IXA カード情報抽出スクリプト
// @include http://*.sengokuixa.jp/card/deck.php
// ==/UserScript


function getListElement()
{
var list = document.getElementById("sol_list");
if (!list) {
list = document.createElement('table');
list.id = "sol_list";

var attrname = ["カードNo","名前","レアリティ","コスト","LV","HP","指揮兵士数","兵種","攻撃力","防御力","兵法","統率(槍)","統率(馬)","統率(弓)","統率(器)","技1","技2","技3"];
var attr = ["no","name","rare","cost","lv","hp","sol_num","sol_type","stt_atk","stt_def","stt_int","leads_yari","leads_uma","leads_yumi","leads_utuwa","skill1","skill2","skill3"];
var sortable = [0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0];

row = document.createElement('tr');
row.id = "sol_list_header"
for (j=0;j<attrname.length;j++) {
e = document.createElement('th');
e.id="sol_list_" + attr[j];
e.innerHTML = attrname[j];
row.appendChild(e);
}
list.appendChild(row);


var file = document.getElementById("ig_decksection3");
file.insertBefore(list,file.firstChild);

sortableTable(list);
for (j=0;j<attrname.length;j++) {
if (sortable[j]==1) list.setSortable(j);
}
}
return list;
}

function sortableTable(tbl)
{
tbl.setSortable = function (col,mode)
{
var e = tbl.childNodes[0].childNodes[col];
e.style.cursor = "pointer";
e.orgClassName = e.className;
e.addEventListener('click',function(s){return function(){tbl.sortTable(s);};}(col),false);
e.addEventListener('mouseover',function(){this.className+=" hover";},false);
e.addEventListener('mouseout' ,function(){this.className=this.orgClassName;},false);
};

tbl.sortTable = function sortTable(col)
{
rows= new Array();
for (i=1;i<tbl.childNodes.length;i++) {rows[i-1]=tbl.childNodes[i];}
rows.sort(function(a,b){
ea=a.childNodes[col];
eb=b.childNodes[col];
if (!ea) return -1;
if (!eb) return 1;
return parseFloat(eb.firstChild.nodeValue)-parseFloat(ea.firstChild.nodeValue);
});
for (i=0;i<rows.length;i++) {tbl.appendChild(rows[i]);}
}

return tbl;
}


function addcards(d){
var list = getListElement();
var cards = d.getElementsByClassName("ig_deck_smallcardarea clearfix");

//var attr = ["ig_card_cost","ig_card_cardno","ig_card_name","ig_card_level","ig_card_status_hp","ig_card_status_att","ig_card_status_def","ig_card_status_int","commandsol_no"];
var attr1 = ["ig_deck_smallcard_cardnumber","ig_deck_smallcard_cardname","ig_deck_smallcard_cardrarety"];
var attr2 = ["cost","lv","hp","sol_num","sol_type"];
var attr3 = ["stt_atk","stt_def","stt_int","dummy","leads_yari","leads_uma","leads_yumi","leads_utuwa"];
var attr4 = ["skill1","skill2","skill3"];


for (i=0;i<cards.length;i++) {
var carddata1 = cards[i].getElementsByClassName("ig_deck_smallcarddata");
row = document.createElement("tr");
row.className="infile";

//カードNo,名前,レアリティ
for (j=0;j<attr1.length;j++) {
t = cards[i].getElementsByClassName(attr1[j]);
e = document.createElement("td");
e.className="cell_" + attr1[j];
e.innerHTML = t[0].innerHTML;
row.appendChild(e);
}

//コスト、LV、HP、指揮兵士数、兵種
t = carddata1[0].getElementsByTagName("td");
for (j=0;j<attr2.length;j++) {
e = document.createElement("td");
e.className="cell_" + attr2[j];
e.innerHTML = t[j].innerHTML;
row.appendChild(e);
}

//攻撃力、防御力、兵法、統率
t = carddata1[1].getElementsByTagName("td");
for (j=0;j<attr3.length;j++) {
if(j == 3) continue;
e = document.createElement("td");
e.className="cell_" + attr3[j];
e.innerHTML = t[j].innerHTML;
row.appendChild(e);
}

//スキル
t = carddata1[2].getElementsByTagName("td");
for (j=0;j<attr4.length;j++) {
e = document.createElement("td");
e.className="cell_" + attr4[j];
e.innerHTML = t[j].innerHTML;
row.appendChild(e);
}

list.appendChild(row);
}
}


function createlist(){
addcards(document);
//return;

var dummy = document.getElementsByClassName("pager cardstock");
if(dummy.length == 0){
t = 0;
}
else{
t = 12;
}
for(i=0;i<t;i++) {
var url_deck = "/card/deck.php?ano=0&dmo=nomal&p="
url_deck += i+2

httpRequest = new XMLHttpRequest();
httpRequest.open('GET', url_deck, true);

httpRequest.onreadystatechange = function (){
var req = arguments[0];
return function(){
if(req.readyState == 4 && req.status == 200) {
var d = document.createElement('html');
d.innerHTML=req.responseText;
addcards(d);
}
};
}(httpRequest);
httpRequest.send(null);

}
}


( function(){

GM_addStyle(""
+ "#sol_list{border-style:solid;border-spacing: 2px;border-collapse: separate;width:100%;}"
+ "#sol_list tr{height:22px;}"
+ "#sol_list tr td{height:1.2em;padding-left:4px;}"
+ "#sol_list tr th{background-color:#ccc;text-align:center;}"
+ "#sol_list tr th.hover{background-color:#ddd;}"
+ "#sol_list tr td{background-color:#ddf;}"
);

var link = document.createElement("a");
link.addEventListener('click',createlist,false);
link.href="javascript:void(0)";
link.innerHTML = "カードリスト"
var menu = document.getElementsByClassName("ig_decksection_top");
menu[0].appendChild(document.createTextNode(" | "));
menu[0].appendChild(link);

}) ();



#本ツールはこちらを参考にさせていただきました。
#Excelなどに張り付けて活用する想定ですが、画面上でもコスト、攻撃、防御、兵法はソート可能。
#chromeの動作確認のみ
#個人作成のアドオンなので例によって自己責任でお願いしま