Skip to content

Instantly share code, notes, and snippets.

@hot-2130
Last active May 13, 2019 13:35
Show Gist options
  • Select an option

  • Save hot-2130/68ba50ee9787a10b326655e880bce595 to your computer and use it in GitHub Desktop.

Select an option

Save hot-2130/68ba50ee9787a10b326655e880bce595 to your computer and use it in GitHub Desktop.
RAPT様の同盟員一覧の情報収集・プロフ変わって取れなくなったのを修正
// ==UserScript==
// @name bro3_alliance_info
// @namespace https://gist.github.com/RAPT21/
// @description 同盟員一覧の情報収集 by RAPT with hot
// @include http://*.3gokushi.jp/user/*
// @include http://*.3gokushi.jp/alliance/info.php*
// @include https://*.3gokushi.jp/user/*
// @include https://*.3gokushi.jp/alliance/info.php*
// @connect 3gokushi.jp
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js
// @require http://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @resource jqueryui_css http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// @author RAPT
// @version 2017.01.21
// ==/UserScript==
// 2017.01.21 Beyond から同盟情報ソート機能と CSV 取得機能のみ抽出
// リンクを同盟内ランキングの上に表示するようにした
// 2017.01.21.2 2019/04/04 プロフのフォーマットが変わって取得できなくなったのを修正
// load jQuery
jQuery.noConflict();
j$ = jQuery;
var d = document;
var $ = function(id) { return d.getElementById(id); };
var $x = function(xp,dc) { return d.evaluate(xp, dc||d, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; };
var $a = function(xp,dc) { var r = d.evaluate(xp, dc||d, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var a=[]; for(var i=0; i<r.snapshotLength; i++){ a.push(r.snapshotItem(i)); } return a; };
var $e = function(dc,e,f) { if (!dc) return; dc.addEventListener(e, f, false); };
var BASE_X = -9999;
var BASE_Y = -9999;
var USER_ID = "";
var ALLY_ID = "";
var URL_PARAM = {};
var IMG_DIR = "/20100510-01/img/";
//////////////////////
//同盟表示の改善
//////////////////////
var SID = ''
initUrlParams();
initPanel();
allianceSort();
allianceCSV();
//同盟表示のソート
function allianceSort()
{
if( location.pathname != "/alliance/info.php" ) return;
var sort_kind, sort_order;
var sort_list = ["num", "str", "num", "num", "num", "str", "str"];
for(var i=0 ; i<8 ; i++) {
var th = $x("//table[@summary=\"ランキング\"]//tr[2]//th[" + (i+1) + "]");
if( th ) {
sort_kind = sort_list[i];
if( th.id == "alliance_info_ally_xy" ) sort_kind = "xy";
th.appendChild(d.createElement("br"));
var a = d.createElement("a");
a.href = "javascript:void(0)";
(function(n, k){
$e(a, "click", function(){row_sort(n, k, "asc"); } );
})(i+1, sort_kind);
var img = d.createElement("img");
img.src= IMG_DIR + "trade/icon_up.gif";
img.alt = "昇順に並べ替え";
img.title = img.alt;
a.appendChild(img);
th.appendChild(a);
th.appendChild(d.createTextNode(" "));
a = d.createElement("a");
a.href = "javascript:void(0)";
(function(n, k){
$e(a, "click", function(){row_sort(n, k, "dsc"); } );
})(i+1, sort_kind);
img = d.createElement("img");
img.src= IMG_DIR + "trade/icon_down.gif";
img.alt = "降順に並べ替え";
img.title = img.alt;
a.appendChild(img);
th.appendChild(a);
}
}
function row_sort(col, kind, order) {
var tbl = $x("//table[@summary=\"ランキング\"]");
var trs = $a("descendant::tr[position()>2]", tbl);
sort_kind = kind;
sort_order = order;
var strs = new Array();
if( col == 2 || kind == "xy" ) {
//名前 or座標はaの下
for(var i=0; i<trs.length ; i++) {
var td = $x("descendant::td[" + col + "]", trs[i]);
var a = $x("descendant::a", td);
if( a ) strs.push({"node":trs[i], "value":a.innerHTML});
else strs.push({"node":trs[i], "value":""});
}
} else {
for(var i=0; i<trs.length ; i++) {
var td = $x("descendant::td[" + col + "]", trs[i]);
strs.push({"node":trs[i], "value":td.innerHTML});
}
}
strs.sort(row_cmp);
for(var i=0 ; i<trs.length ; i++) {
strs[i].node.parentNode.removeChild(strs[i].node);
tbl.appendChild(strs[i].node);
}
}
function row_cmp(a, b)
{
var ret = 0;
if( sort_kind == "num" ){
ret = parseInt(a.value, 10) - parseInt(b.value, 10);
}else if (sort_kind == "xy") {
//座標
if( !a.value && !b.value ) ret = 0;
else if( !a.value ) ret = 1;
else if( !b.value ) ret = -1;
else {
var a_xy = a.value.split(",");
var b_xy = b.value.split(",");
ret = ( Math.pow(parseInt(a_xy[0], 10), 2) + Math.pow(parseInt(a_xy[1], 10), 2) ) -
( Math.pow(parseInt(b_xy[0], 10), 2) + Math.pow(parseInt(b_xy[1], 10), 2) );
}
}else {
if( a.value == b.value ) {
ret = 0;
} else if( a.value > b.value ) {
ret = 1;
}else {
ret = -1;
}
}
if( sort_order == "dsc") {
ret = 0 - ret;
}
return ret;
}
}
function getDatafromUserHTML(html)
{
var ret = [];
var tmp = html.match(/<td[^>]*>ランク<\/td>[^<]*<td[^>]*>([0-9]+|-)<\/td>/);
if( !tmp ) return null;
if (tmp[1]!='-'){
ret["all_rank"] = parseInt(tmp[1] ,10);
} else {
ret["all_rank"] = "-";
}
tmp = html.match(/<td[^>]*>総合<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["all_point"] = "-";
} else {
ret["all_point"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>寄付<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["contribution"] = "-";
} else {
ret["contribution"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>総人口<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["jinko"] = "-";
} else {
ret["jinko"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>攻撃<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["attack"] = "-";
} else {
ret["attack"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>防御<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["defence"] = "-";
} else {
ret["defence"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>破壊<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["destroy"] = "-";
} else {
ret["destroy"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>南蛮撃退<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["npc_assault"] = "-";
} else {
ret["npc_assault"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>撃破スコア<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["attack_score"] = "-";
} else {
ret["attack_score"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>防衛スコア<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["defence_score"] = "-";
} else {
ret["defence_score"] = parseInt(tmp[1] ,10);
}
tmp = html.match(/<td[^>]*>破砕スコア<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) {
ret["destroy_score"] = "-";
} else {
ret["destroy_score"] = parseInt(tmp[1] ,10);
}
   tmp = html.match(/<\/a>\n\t+\(本拠地\)\t+<\/td>[^<]*<td[^>]*>[^<]*<a href=(.*)>/);
if ( !tmp ) return null;
var match1 = tmp[1].match(/map.php\?x=([\-0-9]+)&y=([\-0-9]+)/);
ret["x"] = parseInt(match1[1],10);
ret["y"] = parseInt(match1[2],10);
return ret;
}
function getXYListfromUserHTML(html)
{
var ret = new Array();
var tmp = html.match(/<td[^>]*>君主<\/td>[^<]*<td[^>]*>([^<]+)<img[^>]*>([^<]+)/); //W12専用
if (!tmp) {
var tmp = html.match(/<td[^>]*>君主<\/td>[^<]*<td[^>]*>([^<]+)/); //それ以外の鯖
if( !tmp ) return null;
var user_name = tmp[1].replace(/(^\s+|\s+$)/g, "");
} else {
var user_name = tmp[2].replace(/(^\s+|\s+$)/g, "");
}
tmp = html.match(/<td[^>]*>同盟<\/td>[^<]*<td[^>]*>[^>]*><a href="[^"]*">([^<]+)<\/a>[^>]*<\/td>/);
if (!tmp) {
tmp = html.match(/<td[^>]*>同盟<\/td>[^<]*<td[^>]*>[^>]*<a href="[^"]*">([^<]+)<\/a>[^>]*<\/td>/);
if( !tmp ) return;
}
if( !tmp ) return;
var ally_name = tmp[1];
var pos;
//var reg = /<a href="\.\.\/(?:land|village_change)\.php[^"]*">\s*([^<\s]+)\s*<\/a>[^<]*<\/td>[^<]*<td[^>]*>[^<]*<a[^>]*>\(([\-0-9]+),([\-0-9]+)\)[^<]<\/a>[^<]*<\/td>[^<]*<td[^>]*>([0-9]+|&nbsp;)<\/td>/;
var reg = /<a href="\.\.\/(?:land|village_change)\.php[^"]*">\s*([^<\s]+)\s*<\/a>[^<]*<\/td>[^<]*<td[^>]*>[^<]*<a[^>]*>[^(]*\(([\-0-9]+), ([\-0-9]+)\)[^<]*<\/a>[^<]*<\/td>[^<]*<td[^>]*>([^<]*)<\/td>/;
var honkyo = 1;
while((pos = html.search(reg) ) != -1 ) {
html = html.substr(pos);
var dat = html.match(reg);
if( !dat ) break;
//if( dat[4] == "" ) dat[4] = "";
var match1 = dat[4].match(/\b\d{1,3}(,\d{3})*\b/);
if (match1) {
dat[4] = match1[0];
} else {
dat[4] = "";
}
ret.push({"user_name":user_name, "ally_name":ally_name, "area_name":dat[1].replace(/(^\s+|\s+$)/g, ""), "x":dat[2], "y":dat[3], "jinko":dat[4], "honkyo":honkyo});
honkyo="";
html = html.substr(dat[0].length);
}
return ret;
}
function allianceCSV()
{
if( location.pathname != "/alliance/info.php" ) return;
var aid;
if( URL_PARAM.id ) aid = URL_PARAM.id;
else aid = ALLY_ID;
//CSV出力用
var tbl = $x("//table[@summary=\"ランキング\"]");
if( !tbl ) return;
var box = d.createElement("table");
box.className = "tables";
box.summary = "CSV出力";
var tbody = d.createElement("tbody");
box.appendChild(tbody);
var trh = d.createElement("tr");
tbody.appendChild(trh);
var th = d.createElement("th");
th.className="ttl";
th.colspan="1"
th.innerHTML="CSV出力";
trh.appendChild(th);
var tr = d.createElement("tr");
tbody.appendChild(tr);
var td = d.createElement("td");
tr.appendChild(td);
tbl.parentNode.insertBefore(box, tbl);
var lnk = d.createElement("a");
lnk.href = "javascript:void(0)";
lnk.innerHTML ="同盟員詳細情報csv";
td.appendChild(lnk);
// tbl.parentNode.insertBefore(lnk, tbl);
$e(lnk, "click", function() {
if( $("alliance_info_csvWindow") ) return;
if( confirm("同盟員の情報を一気に取得するためサーバに負荷をかけます。\n何度も実行するとDoS攻撃と同じなので、実行には注意して下さい") == false ) return;
//窓作成
var elm_xy = cgetElementXY( this );
var yy = elm_xy.y - 420;
if( yy < 0 ) yy = 0;
createCSVWindow(10, yy);
var trs = $a("//table[@summary=\"ランキング\"]//tr[position()>2]");
var elm_msg = $("alliance_info_csvWindow_message");
if( !elm_msg ) return;
var elm_csv = $("alliance_info_csvWindow_csv");
if( !elm_csv ) return;
var now_num = 0;
var all_num = trs.length;
if( all_num == 0 ) return;
var csv_txt = "同盟内ランク\tuser_id\t名前\t同盟内point\t寄付\t拠点\t全体ランク\t全体point\t人口\t攻撃\t防御\t撃破スコア\t防御スコア\t本拠X座標\t本拠Y座標\n";
window.setTimeout(timerFunc ,0 );
function timerFunc()
{
if( !$("alliance_info_csvWindow") ) return;
var tds = $a("descendant::td",trs[now_num]);
if( tds.length < 5 ) {
alert("ページフォーマットが変わったみたい");
return ;
}
var ids = tds[1].innerHTML.match(/\/user\/\?user_id\=(\d+).*\">(.+)<\/a>/);
if( !ids ) {
alert("ページフォーマットが変わったみたい");
return ;
}
var uid = parseInt(ids[1], 10);
cajaxRequest("/user/?user_id=" + uid, "GET", "", function(req) {
var dt = getDatafromUserHTML(req.responseText);
if( dt ) {
csv_txt += parseInt(tds[0].innerHTML, 10) + "\t";
csv_txt += uid + "\t";
csv_txt += ids[2] + "\t";
csv_txt += parseInt(tds[2].innerHTML, 10) + "\t";
csv_txt += parseInt(tds[3].innerHTML, 10) + "\t";
csv_txt += parseInt(tds[4].innerHTML, 10) + "\t";
csv_txt += dt.all_rank + "\t";
csv_txt += dt.all_point + "\t";
csv_txt += dt.jinko + "\t";
csv_txt += dt.attack + "\t";
csv_txt += dt.defence + "\t";
csv_txt += dt.attack_score + "\t";
csv_txt += dt.defence_score + "\t";
csv_txt += dt.x + "\t";
csv_txt += dt.y + "\n";
var xytd = $("alliance_info_xylink_" + uid );
if(xytd) {
csetUserXY(aid, uid, dt.x, dt.y);
xytd.innerHTML = cgetXYHtml(dt.x, dt.y );
}
now_num ++;
elm_msg.innerHTML = "取得中... ( " + now_num + " / " + all_num + " )";
if( now_num < all_num ) {
window.setTimeout(timerFunc, 0);
}else{
elm_msg.innerHTML += ".. 完了しました。CTRL + A → CTRL + Cでコピーし、Excelなどに貼りつけてください";
elm_csv.value = csv_txt;
elm_csv.focus();
}
} else {
alert("user_id="+uid+"の取得に失敗しました" );
now_num ++;
elm_msg.innerHTML = "取得中... ( " + now_num + " / " + all_num + " )";
if( now_num < all_num ) {
window.setTimeout(timerFunc, 0);
}else{
elm_msg.innerHTML += ".. 完了しました。CTRL + A → CTRL + Cでコピーし、Excelなどに貼りつけてください";
elm_csv.value = csv_txt;
elm_csv.focus();
}
}
}, function(req){
alert("サーバからエラーが返りましたよ" );
});
}
});
var lnk2 = d.createElement("a");
lnk2.href = "javascript:void(0)";
lnk2.innerHTML ="同盟員全領地座標csv";
td.insertBefore(lnk2, lnk.nextSibling);
td.insertBefore(d.createTextNode("  "), lnk2);
// tbl.parentNode.insertBefore(lnk2, lnk.nextSibling);
// tbl.parentNode.insertBefore(d.createTextNode("  "), lnk2);
$e(lnk2, "click", function() {
if( $("alliance_info_csvWindow") ) return;
if( confirm("同盟員の情報を一気に取得するためサーバに負荷をかけます。\n何度も実行するとDoS攻撃と同じなので、実行には注意して下さい") == false ) return;
if( navigator.userAgent.toLowerCase().indexOf('chrome') == -1 ) {
if( confirm("終盤の巨大同盟だと、CTRL+AやCTRL+Cの操作で10分くらい掛かります。\nChromeだとそんなに時間掛からないみたいです。続けますか?") == false ) return;
}
//窓作成
var elm_xy = cgetElementXY( this );
var yy = elm_xy.y - 420;
if( yy < 0 ) yy = 0;
createCSVWindow(10, yy);
var trs = $a("//table[@summary=\"ランキング\"]//tr[position()>2]");
var elm_msg = $("alliance_info_csvWindow_message");
if( !elm_msg ) return;
var elm_csv = $("alliance_info_csvWindow_csv");
if( !elm_csv ) return;
var now_num = 0;
var all_num = trs.length;
if( all_num == 0 ) return;
var csv_txt = "同盟\t君主\t領地名\tX\tY\t人口\t本拠\n";
window.setTimeout(timerFunc ,0 );
function timerFunc()
{
if( !$("alliance_info_csvWindow") ) return;
var tds = $a("descendant::td",trs[now_num]);
if( tds.length < 5 ) {
alert("ページフォーマットが変わったみたい");
return ;
}
var ids = tds[1].innerHTML.match(/\/user\/\?user_id\=(\d+).*\">(.+)<\/a>/);
if( !ids ) {
alert("ページフォーマットが変わったみたい");
return ;
}
var uid = parseInt(ids[1], 10);
cajaxRequest("/user/?user_id=" + uid, "GET", "", function(req) {
var dt = getXYListfromUserHTML(req.responseText);
if( dt ) {
for(var i=0 ; i<dt.length ; i++) {
csv_txt += dt[i].ally_name + "\t";
csv_txt += dt[i].user_name + "\t";
csv_txt += dt[i].area_name + "\t";
csv_txt += dt[i].x + "\t";
csv_txt += dt[i].y + "\t";
csv_txt += dt[i].jinko + "\t";
csv_txt += dt[i].honkyo + "\n";
}
now_num ++;
elm_msg.innerHTML = "取得中... ( " + now_num + " / " + all_num + " )";
if( now_num < all_num ) {
window.setTimeout(timerFunc, 0);
}else{
elm_msg.innerHTML += ".. 完了しました。CTRL + A → CTRL + Cでコピーし、Excelなどに貼りつけてください";
elm_csv.value = csv_txt;
elm_csv.focus();
}
} else {
alert("取得に失敗しました" );
}
}, function(req){
alert("サーバからエラーが返りましたよ" );
});
}
});
function createCSVWindow(x, y)
{
var cc = $("alliance_info_csvWindow");
if( cc ) cc.parentNode.removeChild(cc);
cc = d.createElement("div");
cc.id = "alliance_info_csvWindow";
cc.style.left = x + "px";
cc.style.top = y + "px";
cc.style.position = "absolute";
cc.style.backgroundColor = "lightgray";
cc.style.border = "outset 2px lightgray";
cc.style.fontSize = "12px";
cc.style.padding = "15px";
cc.style.zIndex = 1000;
cc.style.padding = "10px";
var dv = d.createElement("div");
dv.id = "alliance_info_csvWindow_message";
cc.appendChild(dv);
var tx = d.createElement("textarea");
tx.id = "alliance_info_csvWindow_csv";
tx.rows = 25;
tx.cols = 140;
tx.style.overflow = "scroll";
cc.appendChild(tx);
cc.appendChild(d.createElement("br") );
ccreateButton(cc, "閉じる", "", function(){
var cc = $("alliance_info_csvWindow");
if( cc ) cc.parentNode.removeChild(cc);
});
$("alliance_info_floatpanel").appendChild(cc);
}
}
//------------------------------------
// 共通系そとだす
//------------------------------------
function csaveData(key, value, local, ev)
{
if( local ) key = location.hostname + key;
if( ev ) {
if (window.opera || typeof JSON != 'object') {
value = toJSON(value);
}
else {
value = JSON.stringify( value );
}
}
GM_setValue(key, value );
}
function cgetXYHtml(x,y)
{
var img_send = IMG_DIR + "report/icon_go.gif";
var img_mp = IMG_DIR + "report/icon_scout.gif";
var m = "";
var dist = cgetDistanceFromBase(x, y);
if( dist != -1 ) {
m = " 距離[" + dist.toFixed(2) + "]";
}
var txt = '';
txt += '<a href="'+caddSessionId('/land.php?x=' + x + '&y=' + y + '#ptop')+'" title="表示" style="color:#0099cc; text-decoration: none;" onmouseover="';
txt += "this.style.textDecoration='underline';"+'" onmouseout="'+"this.style.textDecoration='none';"+'">' + x + ',' + y + '</a>';
txt += '<a href="'+caddSessionId('/map.php?x=' + x + '&y=' + y + '#ptop')+'" title="マップ' + x + ',' + y + '"><img src="' + img_mp + '" style="width:12px; height:12px; vertical-align:middle;"></a>';
txt += '<a href="'+caddSessionId('/facility/castle_send_troop.php?x=' + x + '&y=' + y + '#ptop')+'" title="兵を送る' + x + ',' + y + m + '">';
txt += '<img src="' + img_send + '" style="width:12px; height:12px; vertical-align:middle;"></a>';
return txt;
}
function csetUserXY(aid, uid, x, y)
{
var allylists = cloadData( "allyXYAllyList", "[]", true, true );
if( allylists.indexOf(aid) == -1 ) {
allylists.push(aid);
csaveData( "allyXYAllyList", allylists, true, true );
}
var lists = cloadData( "allyXYList" + aid, "[]", true, true );
for(var i=0 ; i<lists.length ; i++) {
if( lists[i].id == uid ) {
return;
}
}
lists.push({"id":uid, "x":x, "y":y});
csaveData( "allyXYList" + aid, lists, true, true );
}
function initUrlParams() {
var matches = location.search.match(/(?:\?|&)?([^=]+)(?:=([^&]+))?/g);
if (matches) {
var param;
var key;
var data;
for(var i = 0 ; i < matches.length ; i++) {
param = matches[i].match(/(?:\?|&)?([^=]+)(?:=([^&]+))?/);
key = param[1];
data = param[2];
URL_PARAM[key] = '';
if( param.length == 3 && typeof data == 'string') {
URL_PARAM[key] = decodeURIComponent(data);
// session id
if (key.toLowerCase() == 'ssid') {
SID = key + '=' +data;
}
}
}
}
}
function cajaxRequest(url, method, param, func_success, func_fail){
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200){
func_success(req);
}
else if (req.readyState == 4 && req.status != 200){
func_fail(req);
}
};
if (SID) {
var sdata = method.toLowerCase() == 'get' ? url : param;
if (sdata.search(/(\?|&)SSID=[^&]+&?/i) < 0) {
if (method.toLowerCase() == 'get') {
url += (0 <= url.indexOf('?')) ? '&' : '?';
url += SID;
}
else {
if (typeof param != 'string') param = '';
if (0 < param.length) param += '&';
param += SID;
}
}
}
req.open(method, url, true);
if (method == 'POST'){
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
req.send(param);
}
function cloadData(key, value, local, ev)
{
if( local ) key = location.hostname + key;
var ret = GM_getValue(key, value);
return ev ? eval('ret='+ret) : ret;
}
function ccreateButton(container, text, title, func, width)
{
var btn = d.createElement("input");
btn.style.padding = "0px";
btn.type = "button";
btn.value = text;
if (width == undefined) {
btn.style.width = "54px";
} else {
btn.style.width = width + "px";
}
btn.style.height = "22px";
btn.style.verticalAlign = "middle";
btn.title = title;
container.appendChild(d.createTextNode(" "));
container.appendChild(btn);
container.appendChild(d.createTextNode(" "));
$e(btn, "click", func);
return btn;
}
// その他拡張
//JSONとprototype.jsの衝突回避用
function toJSON(obj) {
switch (typeof obj) {
case 'string':
return quote(obj);
case 'number':
return isFinite(obj) ? String(obj) : 'null';
case 'boolean':
case 'null':
return String(obj);
case 'object':
if (!obj) {
return 'null';
}
if (obj instanceof Date) {
return isFinite(obj) ? obj.getUTCFullYear() + '-'
+ complementZero(obj.getUTCMonth() + 1) + '-'
+ complementZero(obj.getUTCDate()) + 'T'
+ complementZero(obj.getUTCHours()) + ':'
+ complementZero(obj.getUTCMinutes()) + ':'
+ complementZero(obj.getUTCSeconds()) + 'Z' : 'null';
}
var partial = new Array();
var prefix = '{';
var suffix = '}';
if (obj instanceof Array) {
prefix = '[';
suffix = ']';
length = obj.length;
for ( var i = 0; i < length; i++) {
partial[i] = toJSON(obj[i]) || 'null';
}
} else {
for ( var key in obj) {
if (Object.hasOwnProperty.call(obj, key)) {
partial.push(quote(key) + ':'
+ (toJSON(obj[key]) || 'null'));
}
}
}
return prefix + partial.join(',') + suffix;
break;
default:
return null;
}
function quote(str) {
var escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
var meta = { // table of character substitutions
'\b' : '\\b',
'\t' : '\\t',
'\n' : '\\n',
'\f' : '\\f',
'\r' : '\\r',
'"' : '\\"',
'\\' : '\\\\'
};
return escapable.test(str) ? '"'
+ str.replace(escapable,
function(a) {
var c = meta[a];
return typeof c === 'string' ? c : '\\u'
+ ('0000' + a.charCodeAt(0).toString(16))
.slice(-4);
}) + '"' : '"' + str + '"';
}
function complementZero(number) {
return number < 10 ? '0' + number : number;
}
}
function cgetDistanceFromBase(x, y)
{
if( BASE_X == -9999 ) {
var xy = cgetCurrentBaseXY();
if( xy ) {
BASE_X = xy.x;
BASE_Y = xy.y;
}
}
if( BASE_X != -9999 ) {
var a = parseInt(x, 10);
var b = parseInt(y, 10);
return Math.sqrt(Math.pow(BASE_X - a, 2) + Math.pow(BASE_Y - b, 2));
}
return -1;
}
function cgetCurrentBaseXY()
{
var nowLoc = $x('id("gnavi")//a[contains(@href,"map.php")]');
if (!nowLoc) nowLoc = $x('id("gNav")//a[contains(@href,"map.php")]');
if (!nowLoc) return null;
var xy = nowLoc.href.match(/x=([\-0-9]+)&y=([\-0-9]+)/i);
if( xy ) {
return {'x':parseInt(xy[1], 10), 'y':parseInt(xy[2], 10)};
}
}
function cgetElementXY(elm) {
if( !elm ) return null;
var xx = 0;
var yy = 0;
while(elm){
xx += elm.offsetLeft;
yy += elm.offsetTop;
elm = elm.offsetParent;
}
return {"x":xx, "y":yy};
}
function initPanel()
{
var panelBox = $("sidebar");
if( !panelBox ) return false;
var basepanel = d.createElement("div");
basepanel.id = "alliance_info_basepanel";
var fixpanel = d.createElement("div");
fixpanel.id = "alliance_info_fixpanel";
var floatpanel = d.createElement("div");
floatpanel.id = "alliance_info_floatpanel";
var tmppanel = d.createElement("div");
tmppanel.id = "alliance_info_tmp";
tmppanel.style.display = "none";
basepanel.appendChild(fixpanel);
basepanel.appendChild(floatpanel);
basepanel.appendChild(tmppanel);
panelBox.appendChild(basepanel);
return true;
}
@taketakemi
Copy link

はじめまして。
こちらのツール使用させていただきましたが、プロフィールの,カンマのついたデータをキャッチしてくれないようです。
お手すきのときに修正お願いします

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment