Skip to content

Instantly share code, notes, and snippets.

@mitsuru
Created March 5, 2011 09:22
Show Gist options
  • Save mitsuru/856248 to your computer and use it in GitHub Desktop.
Save mitsuru/856248 to your computer and use it in GitHub Desktop.
ブラ三beyond 非公式修正版
// ==UserScript==
// @name 3gokushi-Beyond
// @namespace 3gokushi-hatt
// @description ブラウザ三国志用便利機能色々ごった煮 by hatt+ろむ+α
// @include http://*.3gokushi.jp/*
// @author hatt,romer,etc...
// @version 1.27.2.6
// ==/UserScript==
//
// FireFox / Google Chrome対応です。
// ver1.00 2010.03.19
// ver1.01 2010.03.20
// ver1.02 2010.03.20
// ver1.03 2010.03.21
// ver1.10 2010.03.22
// ver1.11 2010.03.23
// ver1.12 2010.03.25
// ver1.13 2010.03.26
// ver1.14 2010.03.27
// ver1.15 2010.03.28
// ver1.16 2010.03.29
// ver1.17 2010.03.31
// ver1.18 2010.04.02
// ver1.19 2010.04.05
// ver1.20 2010.04.08
// ver1.21 2010.04.09
// ver1.22 2010.04.13
// ver1.23 2010.04.19
// ver1.24 2010.04.28
// ver1.25 2010.05.02
// ver1.26 2010.05.10
// ver1.27 2010.05.
// ver1.27.0.1 2010.08.19
// ver1.27.0.2 2010.09.21
// ver1.27.0.4 2010.09.22
// ver1.27.1.0 2010.09.23
// ver1.27.1.2 2010.09.24
// ver1.27.1.4 2010.09.25
// ver1.27.1.7 2010.09.26
// ver1.27.2.2 2010.09.29
// ver1.27.2.3 2010.10.01
// ver1.27.2.4 2010.10.02
// ver1.27.2.5 2010.10.07
// ver1.27.2.6 2010.10.12
( function(){
if(document.getElementById("beyond_basepanel") ) return ;
var VERSION_NAME = "ブラウザ三国志Beyond Ver1.27.2.12 by hatt+ろむ+α";
var IMG_DIR = "/20100510-01/img/";
///////////////////////////////////////////////
//Chrome用GM_関数
// @copyright 2009, James Campos
// @license cc-by-3.0; http://creativecommons.org/licenses/by/3.0/
if ((typeof GM_getValue == 'undefined') || (GM_getValue('a', 'b') == undefined)) {
GM_addStyle = function(css) {
var style = document.createElement('style');
style.textContent = css;
document.getElementsByTagName('head')[0].appendChild(style);
};
GM_deleteValue = function(name) {
localStorage.removeItem(name);
};
GM_getValue = function(name, defaultValue) {
var value = localStorage.getItem(name);
if (!value)
return defaultValue;
var type = value[0];
value = value.substring(1);
switch (type) {
case 'b':
return value == 'true';
case 'n':
return Number(value);
default:
return value;
}
};
GM_log = function(message) {
if (window.opera) {
opera.postError(message);
return;
}
console.log(message);
};
GM_registerMenuCommand = function(name, funk) {
//todo
};
GM_setValue = function(name, value) {
value = (typeof value)[0] + value;
localStorage.setItem(name, value);
};
}
///////////////////////////////////////////////
///////////////////////////////////////////////
//配列のindexOf対策
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
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 isNarrow = location.host.match(/^[m|y]\d+\./i) ? true : false;
var MAP_X_MIN = -600;
var MAP_X_MAX = 600;
var MAP_Y_MIN = -600;
var MAP_Y_MAX = 600;
var OPT_VILLAGE = 0;
var OPT_BASELINK = 0;
var OPT_MAPLINK = 0;
var OPT_XYLINK = 0;
var OPT_XYLINK_NK = 0;
var OPT_LARGEICON = 0;
var OPT_TTBL = 0;
var OPT_MEMO = 0;
var OPT_DETAILS = 1;
var OPT_DETAILS_UP = 1;
var OPT_DECK = 1;
var OPT_DECK_SET = 0;
var OPT_CTIME_B = 1;
var OPT_CTIME_U = 1;
var OPT_ALLY = 1;
var OPT_ALLY_IS = 1;
var OPT_ALLY_XY = 0;
var OPT_ALLY_CSV = 0;
var OPT_RES_T = 0;
var OPT_RES_TIME = 0;
var OPT_REMOVELIST = 1;
var OPT_MAPLIST = 1;
var OPT_TTDISTANCE = 1;
var OPT_TTDISTANCE_ITEMS = new Array();
var OPT_TTALLYPRSN = 1;
var OPT_MEMO_FONT_SIZE = "10";
var OPT_MEMO_WIDTH = "20";
var OPT_MEMO_HEIGHT = "5";
var OPT_MEMO_COUNT = "1";
var OPT_MAPLINK_FONT_SIZE = "10";
var OPT_USER_STAR = 1;
var OPT_USER_LEVEL = 1;
//var OPT_REPORT_NP = 0;
var OPT_MAPCENTER = 0;
var OPT_TBREST = 0;
var OPT_DELMSG = 0;
var OPT_TSENDTIME = 0;
var OPT_SMALLBTN = 0;
var OPT_ATTACKMAP = 0;
var OPT_CARD_CMB = 0;
var OPT_PIKA_YOROZU = 0;
var OPT_PIKA_HPREST = 0;
var OPT_PIKA_MAPHELP = 0;
var OPT_PIKA_TRDHELP = 0;
var OPT_PIKA_BLINKBLD = 0;
var OPT_SUZAN_SEISAN = 0;
var OPT_CASTLE_AID = 0;
var OPT_NEXT_MEISEI = 0;
var OPT_TIMER_LINK_DEPOT = 0;
if (isNarrow) {
var OPT_VILLAGE_LIST_BOX = 0;
}
var g_MD;
var g_MX;
var g_MY;
var BASE_X = -9999;
var BASE_Y = -9999;
var USER_ID = "";
var ALLY_ID = "";
var RES_NOW = [];
var RES_MAX = [];
var RES_GROW = [];
var RES_GROW_W = [];
var RES_GROW_B = [];
var PRE_LOAD_NODES = {};
var URL_PARAM = {};
var Pika_elementQueue = [];
var VILLAGES_INFO= {};
var SID = '';
if( !initPanel() ) return;
initUrlParams();
initStyle();
initPreLoadNode();
initResources();
getMyInfo();
loadOptions();
initImages();
disp_Options();
initVillages();
initCastleSend();
if (isNarrow) initNarrow();
if ( isNarrow && OPT_VILLAGE_LIST_BOX ) disp_villageListBox();
if( OPT_VILLAGE ) disp_village();
if( OPT_BASELINK ) disp_baseLink();
if( OPT_MAPLINK ) disp_mapLink();
if( OPT_MEMO ) disp_memo();
if( OPT_ALLY ) disp_AllianceInfo();//XYリンク加工前に呼ぶ
if( OPT_XYLINK ) disp_XYLink();
if( OPT_TTBL ) disp_TTable();
if( OPT_DETAILS ) disp_Details();
if( OPT_DECK ) disp_Deck();
if( OPT_CTIME_B ) disp_CompleteTimeBuild();
if( OPT_CTIME_U ) disp_CompleteTimeUnit();
if( OPT_RES_T ) disp_ResourcesTotal();
if( OPT_RES_TIME ) disp_ResourcesTime();
if( OPT_REMOVELIST) disp_RemoveList();
if( OPT_MAPLIST) disp_MapList();
if( OPT_USER_STAR) disp_UserStar();
if( OPT_USER_LEVEL) disp_UserLevel();
//if( OPT_REPORT_NP) disp_ReportNextPrior();
if( OPT_MAPCENTER) disp_MapCenter();
if( OPT_TBREST) disp_ToubatsuRestTime();
if( OPT_DELMSG) disp_DeleteMessages();
if( OPT_TSENDTIME) disp_TSendTime();
if( OPT_SMALLBTN) disp_SmallButton();
if( OPT_ATTACKMAP) disp_AttackMap();
if( OPT_CARD_CMB) disp_CardCombine();
if( OPT_PIKA_YOROZU ) disp_PikaYorozu();
if( OPT_PIKA_HPREST ) disp_PikaHPRestTime();
if( OPT_PIKA_MAPHELP ) Pika_installMapXYHelper();
if( OPT_PIKA_TRDHELP ) Pika_installTradeHelper();
if( OPT_SUZAN_SEISAN ) disp_SuzanSeisan();
if ( OPT_CASTLE_AID ) disp_castleAidLink();
if ( OPT_NEXT_MEISEI ) disp_nextFameTimer();
if ( OPT_TIMER_LINK_DEPOT ) disp_timerLinkDepot();
if( OPT_TTALLYPRSN) disp_ToolTipsAllyPerson();
if( OPT_TTDISTANCE) disp_ToolTipsDistance();
csortSideBox();
crenumberSideBox();
Pika_blinkElements();
//////////////////////
//イメージ初期化
//////////////////////
var img_mura, img_map, img_naisei, img_ken, img_hanma, img_user, img_mail;
function initImages()
{
if( !OPT_LARGEICON ) {
img_mura = 'data:image/gif;base64,'+
'R0lGODlhCgAKAKIAAAAAAP/M/7Jlf2YAAMaAoLpxjceAoQAAACH5BAQUAP8ALAAAAAAKAAoAAAMd'+
'CBDcumE0CeOcI2vJMunYYICgZDalwEFcQSkooyQAOw==';
img_map = 'data:image/gif;base64,'+
'R0lGODlhCgAKAJEAAAAAAP//zAAAmSAgGiH5BAQUAP8ALAAAAAAKAAoAAAIaBIJplz0hRItISojx'+
'tbXuDn3ZFDANMhhnCRQAOw==';
img_naisei = 'data:image/gif;base64,'+
'R0lGODlhCgAKALMAAAAAAMPS5HWOi5kAZktYU7yw0BogILmjyMz//8LP4r641MXb6QAAAAAAAAAA'+
'AAAAACH5BAQUAP8ALAAAAAAKAAoAAAQnEBiEBkUGgGsvqUMockgxKBWnDMewdKA1UkNwJTBMU9vl'+
'CxofDxABADs=';
img_ken = 'data:image/gif;base64,'+
'R0lGODlhCgAKALMAAAAAALS0tE48PP///42NjTMzM+Li4nx8fBgAACYPD5mZmQkJCUZGRru7u+jo'+
'6AAAACH5BAQUAP8ALAAAAAAKAAoAAAQkECBAq5C1qrEyIMPQUAMZllRwhtlinB4De+ExBFniFKQ3'+
'+YAIADs=';
img_hanma = 'data:image/gif;base64,'+
'R0lGODlhCgAKAOYAAP////7+/v39/fz8/Pv7+/r6+vn5+fj4+Pb29vX19fLy8vHx8fDw8O/v7+/u'+
'7u3t7ezs7Obm5uLi4tra2tbW1tTU1NPT09LR0cjIyLq6ura0tLKysrCwsKmoqI+JiWxsbGdmZlVV'+
'VUpKSkhFRUFBQUJBQT8/Py4uLiwsLCgoKCQkJCMjIyIhISoaGhsbGxkZGRkYGBYWFhoWFhkVFRMT'+
'EyQODhQSEiILCw4ODgsLCwoKCgkJCQcGBgkGBgYGBhgAABYAAAQEBAMDAwEBAQAAAAEAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5'+
'BAQUAP8ALAAAAAAKAAoAAAdcgEQ3HiAoDwILJjRAMh0XDAgBCRkqRTYpAwCaBxE+REGZmgAFQUND'+
'oqI7OEM+C5oEsAsnLzkWChAYHxINFCQ8LBUcISIlGxMPNT46LisxMSMaDkQ/RERC1zMtPYEAOw==';
img_mail = 'data:image/gif;base64,'+
'R0lGODlhCgAKAMQAAP///5mZmSoaGhoWFhkVFRMTEyQODiILCwsLCwYGBgcGBgkGBhgAABYAAAMD'+
'AwEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAQU'+
'AP8ALAAAAAAKAAoAAAUvIHREZBkVzWCuQQC8QEsGkRvXz3PL7pO8tNorgoAZARHFERYxLIcRBmTq'+
'iBAEixAAOw==';
img_user = 'data:image/gif;base64,'+
'R0lGODlhCgAKANUAADMAAPr3s+vhKdKwHr6DEal3EPPvPYJCA+XUI/HsLPbwUcejG9m+Mvn3M9m8'+
'IP//tfj4NvXxMe/oK///M969IfLuMbR4EdzFL86wHv//O+XXKf//u//3tY5JBPj0Ue3iLvTwQu3l'+
'L9fCIda3IKp4ENnDL+DHIv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUACcALAAAAAAKAAoAAAZTwNMp'+
'oEgkFAHhEASpVCCgZMAgEFVCDomBCBkBNBqACFJsaAqfD0nTSAhMkYaz7RAoLJhMJJIZEBQbJQcL'+
'EhIjHRcbJw8XFgQEFgwPShseCAiAQkEAOw==';
}else{
img_mura = 'data:image/gif;base64,'+
'R0lGODlhDgAOAOYAAAAAAP///+Hz/gid8Ame8gmg8gmb7wmc7wqe8gqg8gqb7wqc7wug8gud7wyh'+
'8gyd7w2i8w2g8g2d7w2d7g6e8A6d7w6e7w6c7g6d7hCg8g+d7w+e7w+d7hWg7hag7huP0RyQ0h2Q'+
'0h+V1iWq8yaq8yiq9Cis9AorPSms9QoqPCqs9Syu9QsrPS6v9S6t9C+t9DGv9TGw9TOw9Taw9EW3'+
'9ke39ki49mbE+IXQ+YbQ+aLb+qPb+6Pc+8Ln/MTo/ODz/uL0/guh8g+j8xGj8iCa1yit9Cmt9Cuu'+
'9C6v9DOx9TSz9Ue59ki59km69sLo/MTp/ODz/f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5'+
'BAEAAFEALAAAAAAOAA4AAAeXgCkfHBZDK0IQLQ4LFx8pIB4WQUw4Kig5NggKHSAcGBVHPDcoKDc7'+
'JQYTHBwXD0hAP7GxJQcYGBwNCU0/Ab0BPzUIEhwPCUtOvr49NQQVB0Y8yck6JBUVDEy80sARGxgD'+
'RdrJUCMUhAVL4r4/NBkbFSbI0r09LxoWJurJAi4bIElPgAgcKNDHjBAsiCiJwZAhjIcyRJwIBAA7';
img_map = 'data:image/gif;base64,'+
'R0lGODlhDgAOAMQAAKmLAeHXp76oQP38+My7arSaIe/pz9jKi8SvUeffuK6SEdTFf7mhMci0XPTw'+
'39zPl+Tbr8OuTcq4ZN7SnOniv72mPf///8++ccm3YdTFgP///wAAAAAAAAAAAAAAAAAAACH5BAEA'+
'ABoALAAAAAAOAA4AAAVCoAaMZDmKZqqu5EIRVUUqWEkJl6XvkL2POkCmNPkBgpdS8gi0AA6lnfOX'+
'qDWlOoegN0IMKCRBgRGxsgwPAyuFWmtCADs=';
img_naisei = 'data:image/gif;base64,'+
'R0lGODlhDgAOAOYAAAAAAP///zEwMTAvMC8uLy4tLiwrLCsqKzw7PH9+fysrLImKiSkpKCgoJyYm'+
'JTk5OE5OTdvb2dfX1Xp6eXd3dnV1dGZmZWJiYebm5eLi4d7e3dra2dfX1tTU09PT0tHR0M/Pzs7O'+
'zc3NzMTEw8PDwsDAv7e3tqOjopKSkff29eLh4NnY19PS0dHQz83My8rJyMfGxcPCwcLBwMC/vr++'+
'vSkoKCYlJSUkJCsqKjQzM0xLS9DOzsnHx3t6enV0dHRzc1taWuTj4+Hg4N/e3t3c3Nva2tbV1dXU'+
'1NTT09LR0dHQ0NDPz8/OzsvKysnIyMjHx8HAwMC/v6Cfn9zc3MnJycXFxb+/v729vZ+fn5aWloWF'+
'hXNzc3FxcWpqalxcXFpaWlZWVlBQUE5OTkdHR0BAQDo6Ojg4ODc3NzExMTAwMC8vLy4uLi0tLSws'+
'LCsrKygoKCcnJyYmJiUlJSQkJCMjIyIiIiAgIB8fHx4eHv///wAAAAAAAAAAAAAAAAAAAAAAACH5'+
'BAEAAHkALAAAAAAOAA4AAAewgAKCA4SFhGkDggJuYAkUFT9cPhByBYpzCykYGRpFQhN4bIptZEVE'+
'RkkfPA9yBopqa1hEK0cfKDUNboppcBcvJCUzX3UMB4psZh8RIU1LVmhxxoJtZR4bHS0gUDkOOKNn'+
'IFMsTEpXaTYKrzdeIUQcJF93b66CdBYnWls9WFJidziJCAApEkTEmC5JXEDRYSfRABMqkLCAUeVJ'+
'DCdZ7BAYgGCIBBY7QlAZIYNGlDBsAgEAOw==';
img_ken = 'data:image/gif;base64,'+
'R0lGODlhDgAOAMQAAP9MH/9lP/9AEP9ZMP9/X/+Zf/+yn/+lj//Zz//y7/9zUP+AYP+/r/+Lbv/P'+
'w//q5f+fh//s5/9jPP+NcP/l3//Mv/////8zAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA'+
'ABgALAAAAAAOAA4AAAVCIHaNZDmKZqkYqVlZQEsORCBX1YLIhWVRstHB9wheDC8LApiC+HwES+og'+
'uAAsCcNAcUMIfJVUVEoKpyjMUZWEMmJCADs=';
img_hanma = 'data:image/gif;base64,'+
'R0lGODlhDgAOALMAAAAAAP///8zMzL+/v5mZmWZmZjIyMiYmJgwMDP///wAAAAAAAAAAAAAAAAAA'+
'AAAAACH5BAEAAAkALAAAAAAOAA4AAARF0Eg5yLxTEFE1lkIYCEGBEUMoBqyQqSQ7WlQ4mLFnDKPO'+
'tyYeifYLEUc3AylkkrR6I+Qr2krRJISWqnlBFQId7kdgEhsiADs=';
img_mail = 'data:image/gif;base64,'+
'R0lGODlhDgAOANUAAP////n6+u3t7ezs7Ojo6Kurq6ampqWkpKCgoJ6enpaWloeHh4SEhHV1dWhn'+
'Z2dmZioqKiodHR8eHh0cHBsaGiEUFBYTExMTExMSEh4NDRwKChsJCRoICAoKCgcHBwkGBhIDAwUF'+
'BQUGBhMAAAYEBBIAAAMDAxEAAAICAgQCAgEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAQUAP8ALAAAAAAOAA4AAAZxwNVm'+
's1qxjkiW53I6FZ/Qoud0GACu2OvgUOQmrNhBYnU4Ah4URVZBcQBUKsBhglkIBAvM5PCOAwwTEwwM'+
'EhIGVyohVwQIEEUQCARXLB1YAQUNDQUBWJRZn50ioKAsGaOfKxqnWSkpIyNQJiskFhEVH0EAOw==';
img_user = 'data:image/gif;base64,'+
'R0lGODlhDgAOAPcAAP7+v/3+vf39vf3+ofz6vvz9ofz5u/v8ofn2nv//O/3/Ofn3av76Nfn2af36'+
'Nf75Nfj6Nvj5Nvj4N/n1U/fzaff4N/f4NPf4Lvfzavf1TPj0Tff3Lvb1NPX0NPb1LfXzNPXwTvXw'+
'VPXwTfXyNPXyM/XuUPTyNPTyM/TxNPTwPPTwMvTwMfTvPfTvPPPxM/PwMPPwLvPvPfPvMvPwM/Pu'+
'MvPuMPPuLfLtPfLuNfLuM/LuMvLuLvPtMfLtNfLtM/LtMfLtMPHtMvHsM/HsMfLsLfLsMPLsMfHp'+
'LPDqKvHqLPDoLu7oLu/nLO3jK/HgNergK+rgKevfK+reKereKuvaM+bWJ+TRJOfOJOTOI+TJLN/K'+
'IuHCIN3AK9/BH+G/IN6/K+C+H92+IN++INq9Ida1H9W0J9ayHNWxHM+xH8uqHc2kGs2jGs+iF8ug'+
'GNGeGNCeGMmdF8WRE8SPFcSOFL+FFLt9ELp9EL59EKt0DKRyDKFwC6NpC4hdC4pVCoZQCpNFAJVE'+
'AHtGCIVBB4A5AHk3BnozADQbAjQOADQOASkQAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUAIoALAAAAAAOAA4A'+
'AAjGABUJJEABBxEiPSgQEMgQQYgUOiLqaBECQcMbMC5wGDLEgoUdNywaAAEDChgsLlyECbPEhggD'+
'GFhsEJOIDwMGgQxd8RADAw4cEbYg8uPAQZ9DXSCgQHHwwxM3Z0iQMPNmygggQJJYiaKiq9euVbQc'+
'EdKmjZIKJowYMSGhSRw4PhZ8GYQmQQcZeBWQAcRlgQANegilkVKjBpMxgvBkCKDogJM8he6sWTPn'+
'zx4qBRgemJBFTp06dMqUGMBQIIAFOZAgCdIAAMOAADs=';
}
}
//////////////////////
//スタイル初期化
//////////////////////
function initStyle()
{
GM_addStyle("span.beyond_panel_ctlbox {width:35px; height:14px; display:block; position:absolute; right:-5px; top:-4px; }" +
"span.beyond_panel_ctlbox img {width:8px;height:9px; float:right; }" +
"div#beyond_basepanel img{vertical-align:middle; margin:1px 1px 1px 0px; padding-left:2px}" +
"#beyond_basepanel fieldset{border:groove 1px black; margin:1px; padding:1px;}"
);
}
//////////////////////
//リソース変数初期化
//////////////////////
function initResources()
{
var nowNodes = PRE_LOAD_NODES['nowResources'];
var names = ['wood','stone','iron','rice'];
for (var i=0; i <names.length;i++) {
var name = names[i];
RES_NOW[name] = parseInt( nowNodes[name].innerHTML, 10 );
RES_MAX[name] = parseInt( $(name+'_max').innerHTML, 10 );
RES_GROW[name] = parseInt( $('output_'+name).innerHTML, 10 );
}
var spns = $a('(id("sidebar") | id("status_left")//p[@class="status_bottom"])//span[@class="increase" or @class="resource"]');
for(var i=0 ; i<spns.length ; i++) {
var str = spns[i].previousSibling.nodeValue.match(/(木|石|鉄|糧)\s+(-?\d+)/);
if( str ) {
var name = "";
switch( str[1] ) {
case "木":
name = 'wood';
break;
case "石":
name = 'stone';
break;
case "鉄":
name = 'iron';
break;
case "糧":
name = 'rice';
break;
}
RES_GROW_W[name] = parseInt(str[2], 10);
RES_GROW_B[name] = parseInt(spns[i].innerHTML, 10);
}
}
//名声
RES_NOW["fame"] = 0;
RES_MAX["fame"] = 0;
var fameText = $x('id("status_left")/img[contains(@src,"ico_fame.gif")]').nextSibling;
if( fameText ) {
var tmp = fameText.nodeValue.match(/\s*(\d+)\s*\/\s*(\d+)/);
RES_NOW["fame"] = parseInt(tmp[1],10);
RES_MAX["fame"] = parseInt(tmp[2],10);
}
}
//////////////////////
//ベースパネル初期化
//////////////////////
function initPanel()
{
var panelBox = $("sidebar");
if (isNarrow) {
var panelBoxWrapper = $x('id("wrapper")');
if (!panelBoxWrapper) return false;
panelBox = d.createElement("div");
panelBox.id = "sidebar";
panelBox.style.width = "auto";
panelBox.style.cssFloat = "left";
panelBox.style.marginTop = "10px";
panelBoxWrapper.appendChild(panelBox);
}
if( !panelBox ) return false;
var basepanel = d.createElement("div");
basepanel.id = "beyond_basepanel";
var fixpanel = d.createElement("div");
fixpanel.id = "beyond_fixpanel";
var floatpanel = d.createElement("div");
floatpanel.id = "beyond_floatpanel";
var tmppanel = d.createElement("div");
tmppanel.id = "beyond_tmp";
tmppanel.style.display = "none";
basepanel.appendChild(fixpanel);
basepanel.appendChild(floatpanel);
basepanel.appendChild(tmppanel);
panelBox.appendChild(basepanel);
return true;
}
//////////////////////
//オプション処理
//////////////////////
function disp_Options()
{
if( !location.pathname.match(/^(\/user\/|\/bbs\/personal_)/) ) return;
if( location.pathname.match(/ranking\.php/) ) return;
var ul = $("statMenu");
if( !ul ) return;
var cl = d.createElement("a");
cl.href = "javascript:void(0);";
cl.innerHTML = "三国志Beyond";
$e(cl, "click", function() {openOptions();});
var li = d.createElement("li");
li.appendChild(cl);
li.className = "last";
ul.appendChild(li);
var lst = $x("//li[@class=\"last\"]");
if( lst ) {
lst.className = "";
}
}
function loadOptions()
{
OPT_VILLAGE = cloadData( "OPT_VILLAGE", 1 );
OPT_BASELINK = cloadData( "OPT_BASELINK", 0 );
OPT_MAPLINK = cloadData( "OPT_MAPLINK", 1 );
OPT_XYLINK = cloadData( "OPT_XYLINK", 1 );
OPT_XYLINK_NK = cloadData( "OPT_XYLINK_NK", 0 );
OPT_LARGEICON = cloadData( "OPT_LARGEICON", 0 );
OPT_TTBL = cloadData( "OPT_TTBL", 1 );
OPT_MEMO = cloadData( "OPT_MEMO", 1 );
OPT_MEMO_FONT_SIZE = cloadData( "OPT_MEMO_FONT_SIZE", "10" );
OPT_MEMO_WIDTH = cloadData( "OPT_MEMO_WIDTH", "20" );
OPT_MEMO_HEIGHT = cloadData( "OPT_MEMO_HEIGHT", "5" );
OPT_MEMO_COUNT = cloadData( "OPT_MEMO_COUNT", "1" );
OPT_MAPLINK_FONT_SIZE = cloadData( "OPT_MAPLINK_FONT_SIZE", "10" );
OPT_DETAILS = cloadData( "OPT_DETAILS", 1 );
OPT_DETAILS_UP = cloadData( "OPT_DETAILS_UP", 0 );
// OPT_DECK = cloadData( "OPT_DECK", 1 );
OPT_DECK_SET = cloadData( "OPT_DECK_SET", 1 );
OPT_CTIME_B = cloadData( "OPT_CTIME_B", 1 );
OPT_CTIME_U = cloadData( "OPT_CTIME_U", 1 );
OPT_ALLY = cloadData( "OPT_ALLY", 1 );
OPT_ALLY_IS = cloadData( "OPT_ALLY_IS", 1 );
OPT_ALLY_XY = cloadData( "OPT_ALLY_XY", 0 );
OPT_ALLY_CSV = cloadData( "OPT_ALLY_CSV", 0 );
OPT_RES_T = cloadData( "OPT_RES_T", 0 );
OPT_RES_TIME = cloadData( "OPT_RES_TIME", 1 );
OPT_REMOVELIST = cloadData( "OPT_REMOVELIST", 1 );
OPT_MAPLIST = cloadData( "OPT_MAPLIST", 1 );
OPT_TTDISTANCE = cloadData( "OPT_DISTANCE", 1 );
OPT_TTDISTANCE_ITEMS = cloadData("OPT_DISTANCE_ITEMS", "[\"剣兵(6)\", \"槍兵(7)\", \"弓兵(5)\", \"騎兵(12)\", \"衝車(3)\"]", true, true);
OPT_TTALLYPRSN = cloadData( "OPT_TTALLYPRSN", 1 );
OPT_USER_STAR = cloadData( "OPT_USER_STAR", 1 );
OPT_USER_LEVEL = cloadData( "OPT_USER_LEVEL", 1 );
// OPT_REPORT_NP = cloadData( "OPT_REPORT_NP", 1 );
OPT_MAPCENTER = cloadData( "OPT_MAPCENTER", 1 );
OPT_TBREST = cloadData( "OPT_TBREST", 1 );
OPT_DELMSG = cloadData( "OPT_DELMSG", 1 );
OPT_TSENDTIME = cloadData( "OPT_TSENDTIME", 1 );
OPT_SMALLBTN = cloadData( "OPT_SMALLBTN", 0 );
OPT_ATTACKMAP = cloadData( "OPT_ATTACKMAP", 1 );
OPT_CARD_CMB = cloadData( "OPT_CARD_CMB", 1 );
OPT_PIKA_YOROZU = cloadData( "OPT_PIKA_YOROZU", 0 );
OPT_PIKA_HPREST = cloadData( "OPT_PIKA_HPREST", 0 );
OPT_PIKA_MAPHELP = cloadData( "OPT_PIKA_MAPHELP", 0 );
OPT_PIKA_TRDHELP = cloadData( "OPT_PIKA_TRDHELP", 0 );
OPT_PIKA_BLINKBLD = cloadData( "OPT_PIKA_BLINKBLD", 0 );
OPT_SUZAN_SEISAN = cloadData( "OPT_SUZAN_SEISAN", 0 );
OPT_CASTLE_AID = cloadData( "OPT_CASTLE_AID", 0 );
OPT_NEXT_MEISEI = cloadData( "OPT_NEXT_MEISEI", 0 );
OPT_TIMER_LINK_DEPOT = cloadData( "OPT_TIMER_LINK_DEPOT", 0 );
if (isNarrow) {
OPT_VILLAGE_LIST_BOX = cloadData( "OPT_VILLAGE_LIST_BOX", 0 );
}
}
function saveOptions()
{
OPT_VILLAGE = cgetCheckBoxValue("OPT_VILLAGE");
OPT_BASELINK = cgetCheckBoxValue("OPT_BASELINK");
OPT_MAPLINK = cgetCheckBoxValue("OPT_MAPLINK");
OPT_XYLINK = cgetCheckBoxValue("OPT_XYLINK");
OPT_XYLINK_NK = cgetCheckBoxValue("OPT_XYLINK_NK");
OPT_LARGEICON = cgetCheckBoxValue("OPT_LARGEICON");
OPT_TTBL = cgetCheckBoxValue("OPT_TTBL");
OPT_MEMO = cgetCheckBoxValue("OPT_MEMO");
OPT_MEMO_FONT_SIZE = cgetTextBoxValue("OPT_MEMO_FONT_SIZE");
OPT_MEMO_WIDTH = cgetTextBoxValue("OPT_MEMO_WIDTH");
OPT_MEMO_HEIGHT = cgetTextBoxValue("OPT_MEMO_HEIGHT");
OPT_MEMO_COUNT = cgetTextBoxValue("OPT_MEMO_COUNT");
OPT_MAPLINK_FONT_SIZE = cgetTextBoxValue("OPT_MAPLINK_FONT_SIZE");
OPT_DETAILS = cgetCheckBoxValue("OPT_DETAILS");
OPT_DETAILS_UP = cgetCheckBoxValue("OPT_DETAILS_UP");
// OPT_DECK = cgetCheckBoxValue("OPT_DECK");
OPT_DECK_SET = cgetCheckBoxValue("OPT_DECK_SET");
OPT_CTIME_B = cgetCheckBoxValue("OPT_CTIME_B");
OPT_CTIME_U = cgetCheckBoxValue("OPT_CTIME_U");
OPT_ALLY = cgetCheckBoxValue("OPT_ALLY");
OPT_ALLY_IS = cgetCheckBoxValue("OPT_ALLY_IS");
OPT_ALLY_XY = cgetCheckBoxValue("OPT_ALLY_XY");
OPT_ALLY_CSV = cgetCheckBoxValue("OPT_ALLY_CSV");
OPT_RES_T = cgetCheckBoxValue("OPT_RES_T");
OPT_RES_TIME = cgetCheckBoxValue("OPT_RES_TIME");
OPT_REMOVELIST = cgetCheckBoxValue("OPT_REMOVELIST");
OPT_MAPLIST = cgetCheckBoxValue("OPT_MAPLIST");
OPT_TTDISTANCE = cgetCheckBoxValue("OPT_DISTANCE");
OPT_TTDISTANCE_ITEMS = getDistanceBox(5);
OPT_TTALLYPRSN = cgetCheckBoxValue("OPT_TTALLYPRSN");
OPT_USER_STAR = cgetCheckBoxValue("OPT_USER_STAR");
OPT_USER_LEVEL = cgetCheckBoxValue("OPT_USER_LEVEL");
// OPT_REPORT_NP = cgetCheckBoxValue("OPT_REPORT_NP");
OPT_MAPCENTER = cgetCheckBoxValue("OPT_MAPCENTER");
OPT_TBREST = cgetCheckBoxValue("OPT_TBREST");
OPT_DELMSG = cgetCheckBoxValue("OPT_DELMSG");
OPT_TSENDTIME = cgetCheckBoxValue("OPT_TSENDTIME");
OPT_SMALLBTN = cgetCheckBoxValue("OPT_SMALLBTN");
OPT_ATTACKMAP = cgetCheckBoxValue("OPT_ATTACKMAP");
OPT_CARD_CMB = cgetCheckBoxValue("OPT_CARD_CMB");
OPT_PIKA_YOROZU = cgetCheckBoxValue("OPT_PIKA_YOROZU");
OPT_PIKA_HPREST = cgetCheckBoxValue("OPT_PIKA_HPREST");
OPT_PIKA_MAPHELP = cgetCheckBoxValue("OPT_PIKA_MAPHELP");
OPT_PIKA_TRDHELP = cgetCheckBoxValue("OPT_PIKA_TRDHELP");
OPT_PIKA_BLINKBLD = cgetCheckBoxValue("OPT_PIKA_BLINKBLD");
OPT_SUZAN_SEISAN = cgetCheckBoxValue("OPT_SUZAN_SEISAN");
OPT_CASTLE_AID = cgetCheckBoxValue("OPT_CASTLE_AID");
OPT_NEXT_MEISEI = cgetCheckBoxValue("OPT_NEXT_MEISEI");
OPT_TIMER_LINK_DEPOT = cgetCheckBoxValue("OPT_TIMER_LINK_DEPOT");
if (isNarrow) {
OPT_VILLAGE_LIST_BOX = cgetCheckBoxValue( "OPT_VILLAGE_LIST_BOX");
}
csaveData( "OPT_VILLAGE", OPT_VILLAGE );
csaveData( "OPT_BASELINK", OPT_BASELINK );
csaveData( "OPT_MAPLINK", OPT_MAPLINK );
csaveData( "OPT_XYLINK", OPT_XYLINK );
csaveData( "OPT_XYLINK_NK", OPT_XYLINK_NK );
csaveData( "OPT_LARGEICON", OPT_LARGEICON );
csaveData( "OPT_TTBL", OPT_TTBL );
csaveData( "OPT_MEMO", OPT_MEMO );
csaveData( "OPT_MEMO_FONT_SIZE", OPT_MEMO_FONT_SIZE );
csaveData( "OPT_MEMO_WIDTH", OPT_MEMO_WIDTH );
csaveData( "OPT_MEMO_HEIGHT", OPT_MEMO_HEIGHT );
csaveData( "OPT_MEMO_COUNT", OPT_MEMO_COUNT );
csaveData( "OPT_MAPLINK_FONT_SIZE", OPT_MAPLINK_FONT_SIZE );
csaveData( "OPT_DETAILS", OPT_DETAILS );
csaveData( "OPT_DETAILS_UP", OPT_DETAILS_UP );
// csaveData( "OPT_DECK", OPT_DECK );
csaveData( "OPT_DECK_SET", OPT_DECK_SET );
csaveData( "OPT_CTIME_B", OPT_CTIME_B );
csaveData( "OPT_CTIME_U", OPT_CTIME_U );
csaveData( "OPT_ALLY", OPT_ALLY );
csaveData( "OPT_ALLY_IS", OPT_ALLY_IS );
csaveData( "OPT_ALLY_XY", OPT_ALLY_XY );
csaveData( "OPT_ALLY_CSV", OPT_ALLY_CSV );
csaveData( "OPT_RES_T", OPT_RES_T );
csaveData( "OPT_RES_TIME", OPT_RES_TIME );
csaveData( "OPT_REMOVELIST", OPT_REMOVELIST );
csaveData( "OPT_MAPLIST", OPT_MAPLIST );
csaveData( "OPT_DISTANCE", OPT_TTDISTANCE );
csaveData( "OPT_DISTANCE_ITEMS", OPT_TTDISTANCE_ITEMS, true, true );
csaveData( "OPT_TTALLYPRSN", OPT_TTALLYPRSN );
csaveData( "OPT_USER_STAR", OPT_USER_STAR );
csaveData( "OPT_USER_LEVEL", OPT_USER_LEVEL );
// csaveData( "OPT_REPORT_NP", OPT_REPORT_NP );
csaveData( "OPT_MAPCENTER", OPT_MAPCENTER );
csaveData( "OPT_TBREST", OPT_TBREST );
csaveData( "OPT_DELMSG", OPT_DELMSG );
csaveData( "OPT_TSENDTIME", OPT_TSENDTIME );
csaveData( "OPT_SMALLBTN", OPT_SMALLBTN );
csaveData( "OPT_ATTACKMAP", OPT_ATTACKMAP );
csaveData( "OPT_CARD_CMB", OPT_CARD_CMB );
csaveData( "OPT_PIKA_YOROZU", OPT_PIKA_YOROZU );
csaveData( "OPT_PIKA_HPREST", OPT_PIKA_HPREST );
csaveData( "OPT_PIKA_MAPHELP", OPT_PIKA_MAPHELP );
csaveData( "OPT_PIKA_TRDHELP", OPT_PIKA_TRDHELP );
csaveData( "OPT_PIKA_BLINKBLD", OPT_PIKA_BLINKBLD );
csaveData( "OPT_SUZAN_SEISAN", OPT_SUZAN_SEISAN );
csaveData( "OPT_CASTLE_AID", OPT_CASTLE_AID );
csaveData( "OPT_NEXT_MEISEI", OPT_NEXT_MEISEI );
csaveData( "OPT_TIMER_LINK_DEPOT", OPT_TIMER_LINK_DEPOT );
if (isNarrow) {
csaveData( "OPT_VILLAGE_LIST_BOX", OPT_VILLAGE_LIST_BOX );
}
alert("設定を保存しました");
deleteOptionsHtml();
}
function getMyInfo()
{
if( (location.pathname == "/user/index.php" || location.pathname == "/user/" ) && !URL_PARAM.user_id ) {
var uid=0, aid=0;
var uidtd = $x("//table[@class=\"commonTables\"]//tr[2]//td[3]");
if( uidtd ) {
uid = uidtd.innerHTML.match(/\/bbs\/personal_topic_view\.php\?user_id\=(\d+)/);
}
var aidtd = $x("//table[@class=\"commonTables\"]//tr[3]//td[4]");
if( aidtd ) {
aid = d.body.innerHTML.match(/\/alliance\/info\.php\?id\=(\d+)/);
}
if( uid && aid ) {
csaveData( "user_id", uid[1], true );
csaveData( "ally_id", aid[1], true );
}
}
USER_ID = cloadData( "user_id", "", true );
ALLY_ID = cloadData( "ally_id", "", true );
}
function resetMapLink() {
if( !confirm("登録済みリンクを全て削除します。\nよろしいですか?") ) return;
var maplinks = cloadData( "links", 0, true );
for(i=0 ; i<maplinks ; i++) {
cdelData( "link" + i, true );
}
cdelData( "links", true);
resetMapLinks();
}
function resetUserXY() {
if( !confirm("同盟員一覧の座標情報を全て削除します。\nよろしいですか?") ) return;
cresetUserXY();
}
function resetUserStar() {
if( !confirm("君主の★情報と自領地のLevel情報を全て削除します。\nよろしいですか?") ) return;
cresetUserStar();
cdelData("MyLevelList",true);
}
function openOptions() {
deleteOptionsHtml();
addOptionsHtml();
}
function deleteOptionsHtml() {
var elem = $("beyond_OptionsWindow");
if (!elem ) return;
$("beyond_floatpanel").removeChild(elem);
}
function addOptionsHtml() {
var oc = d.createElement("div");
oc.id = "beyond_OptionsWindow";
oc.style.position = "absolute";
oc.style.backgroundColor = "lightblue";
oc.style.border = "outset 2px lightblue";
oc.style.fontSize = "12px";
oc.style.padding = "15px";
oc.style.zIndex = 1000;
var x = cloadData("config_window_x", 20);
var y = cloadData("config_window_y", 20);
if(x < 0) x = 0;
if(y < 0) y = 0;
oc.style.left = x + "px";
oc.style.top = y + "px";
$e(oc, "mousedown", function(event){
if( event.target != $("beyond_OptionsWindow")) {return false;}
g_MD="beyond_OptionsWindow";
g_MX=event.pageX-parseInt(this.style.left,10);
g_MY=event.pageY-parseInt(this.style.top,10);
event.preventDefault();});
$e(d, "mousemove", function(event){
if(g_MD != "beyond_OptionsWindow") return true;
var oc = $("beyond_OptionsWindow");
if( !oc ) return true;
var x = event.pageX - g_MX;
var y = event.pageY - g_MY;
oc.style.left = x + "px";
oc.style.top = y + "px";
csaveData("config_window_x", x);
csaveData("config_window_y", y);
});
$e(d, "mouseup", function(event){g_MD="";});
var tx = d.createElement("div");
var ah = d.createElement("a");
ah.href = "http://www1.ocn.ne.jp/~hatt/3gkb/";
tx.title = ah.href;
ah.target = "_blank";
ah.appendChild(d.createTextNode(VERSION_NAME));
tx.appendChild(ah);
tx.style.padding = "4px";
tx.style.fontSize = "10px";
tx.style.color = "steelblue";
oc.appendChild(tx);
$("beyond_floatpanel").appendChild(oc);
var tbl = d.createElement("table");
tbl.style.border ="0px";
var tr = d.createElement("tr");
var td1 = d.createElement("td");
td1.style.padding = "15px";
td1.style.verticalAlign = "top";
var td2 = d.createElement("td");
td2.style.padding = "15px";
td2.style.verticalAlign = "top";
var td3 = d.createElement("td");
td3.style.padding = "15px";
td3.style.verticalAlign = "top";
var td4 = d.createElement("td");
td4.style.padding = "15px";
td4.style.verticalAlign = "top";
tr.appendChild(td1);
tr.appendChild(td2);
tr.appendChild(td3);
tr.appendChild(td4);
tbl.appendChild(tr);
oc.appendChild(tbl);
//設定項目
ccreateCheckBox(td1, "OPT_VILLAGE", OPT_VILLAGE, "建築表示機能","村の表示で資源不足で建築不可能な場合、LV表示を黄色にします",0);
ccreateCheckBox(td1, "OPT_BASELINK", OPT_BASELINK, "拠点リンク機能","城や村のリンクにマップ・内政などのリンクを追加します",0);
ccreateCheckBox(td1, "OPT_MAPLINK", OPT_MAPLINK, "領地リンク機能","領地や敵地・NPC砦等へのリンク",0);
ccreateTextBox(td1, "OPT_MAPLINK_FONT_SIZE", OPT_MAPLINK_FONT_SIZE, "フォントサイズ","領地リンクのフォントサイズを指定します。デフォルト=10", 5, 20);
ccreateCheckBox(td1, "OPT_LARGEICON", OPT_LARGEICON, "大きめアイコン","拠点リンク・領地リンクなどのアイコンを14x14サイズにします(アイコン提供:ゆう@てらおとめん様)",0);
ccreateCheckBox(td1, "OPT_XYLINK", OPT_XYLINK, "座標リンク機能","掲示板などの(xx,yy)にリンク機能を追加します",0);
ccreateCheckBox(td1, "OPT_XYLINK_NK", OPT_XYLINK_NK, "両端のカッコ無視","xx,yyだけでもリンクします。1,000などの数字もリンクになってしまいます",20);
ccreateCheckBox(td1, "OPT_TTBL", OPT_TTBL, "兵力整形機能","掲示板に貼り付けた兵力一覧を整形します",0);
ccreateCheckBox(td1, "OPT_MEMO", OPT_MEMO, "メモ機能","メモ機能",0);
ccreateTextBox(td1, "OPT_MEMO_FONT_SIZE", OPT_MEMO_FONT_SIZE, "フォントサイズ","メモのフォントサイズを指定します。デフォルト=10",5,20);
ccreateTextBox(td1, "OPT_MEMO_WIDTH", OPT_MEMO_WIDTH, "メモ幅","メモの幅を指定します。デフォルト=20",5,20);
ccreateTextBox(td1, "OPT_MEMO_HEIGHT", OPT_MEMO_HEIGHT, "メモ高","メモの高さを指定します。デフォルト=5",5,20);
ccreateTextBox(td1, "OPT_MEMO_COUNT", OPT_MEMO_COUNT, "メモ数(1~5)","メモ欄の数を指定します。デフォルト=1",5,20);
ccreateCheckBox(td1, "OPT_DETAILS", OPT_DETAILS, "ログ合計表示機能","同盟ログの兵力+援軍の合計を表示します",0);
ccreateCheckBox(td1, "OPT_DETAILS_UP", OPT_DETAILS_UP, "合計を上に出す","合計表示を、下じゃなくて上に出します",20);
// ccreateCheckBox(td1, "OPT_DECK", OPT_DECK, "デッキ画面改善","デッキ画面の改善を行います",0);
ccreateCheckBox(td1, "OPT_DECK_SET", OPT_DECK_SET, "デッキセット先自動選択","初期表示のセット先拠点を現在選択中の拠点にします",0);
ccreateCheckBox(td2, "OPT_CTIME_B", OPT_CTIME_B, "完了時刻の表示(建物)","建築作成時に完了予定日時を表示します。",0);
ccreateCheckBox(td2, "OPT_CTIME_U", OPT_CTIME_U, "完了時刻の表示(ユニット)","ユニット作成時に完了予定日時を表示します。",0);
ccreateCheckBox(td2, "OPT_ALLY", OPT_ALLY, "同盟表示改善","同盟員一覧の表示改善",0);
ccreateCheckBox(td2, "OPT_ALLY_IS", OPT_ALLY_IS, "同盟表示のソート","同盟員一覧の並べ替えを追加します",20);
ccreateCheckBox(td2, "OPT_ALLY_XY", OPT_ALLY_XY, "同盟員座標表示","同盟員一覧に本居城の座標を追加します",20);
ccreateCheckBox(td2, "OPT_ALLY_CSV", OPT_ALLY_CSV, "同盟員情報CSV","同盟員一覧の詳細をCSV表示します。",20);
ccreateCheckBox(td2, "OPT_RES_T", OPT_RES_T, "資源生産合計表示","資源生産量の合計を表示します",0);
ccreateCheckBox(td2, "OPT_RES_TIME", OPT_RES_TIME, "資源時間の表示","資源の残り時間を表示します",0);
ccreateCheckBox(td2, "OPT_REMOVELIST", OPT_REMOVELIST, "破棄中の領地表示","破棄中の領地一覧を表示し、マップにマークを付けます",0);
ccreateCheckBox(td2, "OPT_MAPLIST", OPT_MAPLIST, "マップの地形一覧","マップ上の拠点・領地リストを表示します",0);
ccreateCheckBox(td2, "OPT_DISTANCE", OPT_TTDISTANCE, "移動時間表示","全ての[兵を送る]リンクのToolTipsを移動時間の目安表示に変更します",0);
createDistanceBox(td2, OPT_TTDISTANCE_ITEMS, 5);
ccreateCheckBox(td2, "OPT_TTALLYPRSN", OPT_TTALLYPRSN, "同盟/君主表示","全ての[拠点/領地]リンクのToolTipsを同盟/君主表示に変更します",0);
ccreateCheckBox(td3, "OPT_USER_STAR", OPT_USER_STAR, "君主★情報表示","プロフィール画面に領地の★表示を追加します",0);
ccreateCheckBox(td3, "OPT_USER_LEVEL", OPT_USER_LEVEL, "領地レベル表示","プロフィール画面に領地のレベル表示を追加します",0);
// ccreateCheckBox(td3, "OPT_REPORT_NP", OPT_REPORT_NP, "同盟ログ前後表示","同盟ログの詳細に、[前のログ]・[次のログ]を追加します(限定的)",0);
ccreateCheckBox(td2, "OPT_MAPCENTER", OPT_MAPCENTER, "マップ中央表示","マップ中央に目印を表示し、中央座標を表示します",0);
ccreateCheckBox(td3, "OPT_TBREST", OPT_TBREST, "討伐ゲージ回復時間予測機能","武将の討伐ゲージが300 or 500になる時間を表示します",0);
ccreateCheckBox(td3, "OPT_DELMSG", OPT_DELMSG, "書簡/報告書削除機能","書簡や報告書の内容ページに、削除ボタンを付けます",0);
ccreateCheckBox(td3, "OPT_TSENDTIME", OPT_TSENDTIME, "出発時刻計算","出兵画面で、到着希望時間から出発時刻を計算します",0);
ccreateCheckBox(td3, "OPT_SMALLBTN", OPT_SMALLBTN, "小さいボタン","右上の4つのボタンを小さくします。状況も1行にします。",0);
ccreateCheckBox(td3, "OPT_ATTACKMAP", OPT_ATTACKMAP, "出兵表示機能","マップ上に、現在出兵中の目印を付けます",0);
ccreateCheckBox(td3, "OPT_CARD_CMB", OPT_CARD_CMB, "同一カード合成ボタン","カード合成後に、同一カードで合成を続けるボタンを追加します",0);
td3.appendChild(d.createElement("br"));
var fs = d.createElement("fieldset");
var lg = d.createElement("legend");
lg.appendChild(d.createTextNode(" プレゼンツ by ピカチュウ ") );
fs.appendChild(lg);
td3.appendChild(fs);
ccreateCheckBox(fs, "OPT_PIKA_YOROZU", OPT_PIKA_YOROZU, "ヨロズダス引き忘れ防止機能","ヨロズダスがリセットされたら通知してくれます",0);
ccreateCheckBox(fs, "OPT_PIKA_HPREST", OPT_PIKA_HPREST, "武将の回復時間予測機能","武将のHPが100になる時間を表示します",0);
ccreateCheckBox(fs, "OPT_PIKA_MAPHELP", OPT_PIKA_MAPHELP, "マップ画面検索改善","X座標のところに999,999等を入れてもジャンプしてくれます",0);
ccreateCheckBox(fs, "OPT_PIKA_TRDHELP", OPT_PIKA_TRDHELP, "トレード画面入力改善","4桁数字を入力するとカードNoとして検索します",0);
ccreateCheckBox(fs, "OPT_PIKA_BLINKBLD", OPT_PIKA_BLINKBLD, "都市画面改善","建設中を点滅させます",0);
td3.appendChild(d.createElement("br"));
var fs = d.createElement("fieldset");
var lg = d.createElement("legend");
lg.appendChild(d.createTextNode(" プレゼンツ by su-zan ") );
fs.appendChild(lg);
td3.appendChild(fs);
ccreateCheckBox(fs, "OPT_SUZAN_SEISAN", OPT_SUZAN_SEISAN, "拠点生産量表示","拠点の生産量を表示します",0);
var fs = d.createElement("fieldset");
var lg = d.createElement("legend");
lg.appendChild(d.createTextNode(" プレゼンツ by ろむ ") );
fs.appendChild(lg);
td4.appendChild(fs);
ccreateCheckBox(fs, "OPT_CASTLE_AID", OPT_CASTLE_AID, "拠点援軍ボタン機能","城や村のリンクの横に援軍ボタンを表示します",0);
ccreateCheckBox(fs, "OPT_NEXT_MEISEI", OPT_NEXT_MEISEI, "名声獲得タイマー機能","次の名声値獲得までの時間を表示します",0);
ccreateCheckBox(fs, "OPT_TIMER_LINK_DEPOT", OPT_TIMER_LINK_DEPOT, "ブラ三タイマー格納機能","浮浪プログラマさん作成のブラウザ三国志タイマーをサイドボックスに格納します",0);
if (isNarrow) {
ccreateCheckBox(fs, "OPT_VILLAGE_LIST_BOX", OPT_VILLAGE_LIST_BOX, "都市リスト表示機能","都市のタブ以外でも都市のリストを表示できるようにします",0);
}
ccreateButton(oc, "保存", "設定内容を保存します", function() {saveOptions();});
ccreateButton(oc, "閉じる", "設定内容を保存せず閉じます", function() {deleteOptionsHtml();});
ccreateButton(oc, "領地リンクのクリア", "領地・君主リンクの内容を初期化します", function() {resetMapLink();});
ccreateButton(oc, "同盟員座標のクリア", "同盟員座標を全て初期化します", function() {resetUserXY();});
ccreateButton(oc, "★/Level情報のクリア", "君主の★情報と自領地のLevel情報を全て初期化します", function() {resetUserStar();});
ccreateButton(oc, "領地リンクの直接編集", "領地リンクをテキストで自由に変更できます", function(event) {mapLinkList(event);});
}
function createDistanceBox(container, items, num)
{
var sels = ["その他", "無し", "剣兵(6)",
"槍兵(7)", "弓兵(5)", "騎兵(12)", "斥候(9)", "衝車(3)",
"矛槍兵(10)", "弩兵(8)", "近衛騎兵(15)", "斥候騎兵(20)", "投石機(6)"];
for(var i=0 ; i<num ; i++ ) {
var src = "";
if( sels.indexOf(items[i]) != -1 ) src = items[i];
var cb = ccreateComboBox(container, "OPT_DISTANCE_CB" + i , sels, src, "表示" + (i+1), (i+1) + "行目の表示", 20 );
var tb = d.createElement("input");
tb.type = "text";
tb.id = "OPT_DISTANCE_TX" + i;
tb.title = "例) 「超早い馬(50)」など、半角カッコの中に速度を入れて下さい";
if( src == "" ) {
tb.value = items[i];
}else{
tb.disabled ="disabled";
}
tb.size = 12;
cb.parentNode.appendChild(d.createTextNode(" "));
cb.parentNode.appendChild(tb);
(function(no) {
$e(cb, "change", function() {
var cb = $("OPT_DISTANCE_CB" + no);
var tb = $("OPT_DISTANCE_TX" + no);
if( !cb || !tb ) return;
if( cb.value == sels[0] ) {
tb.disabled ="";
}else{
tb.disabled ="disabled";
}
});
})(i);
}
}
function getDistanceBox(num)
{
var ret = new Array();
for(var i=0 ; i<num ; i++ ) {
var cb = $("OPT_DISTANCE_CB" + i);
var tb = $("OPT_DISTANCE_TX" + i);
if( !cb || !tb ) return null;
if( cb.value == "その他" ) {
ret.push( tb.value );
}else if( cb.value == "無し" ) {
ret.push("");
}else {
ret.push( cb.value );
}
}
return ret;
}
//////////////////////
//建築表示処理
//////////////////////
function disp_village() {
if( location.pathname != "/village.php" ) {
return ;
}
//costs
var cost_wood = [
[10,35,40,15],
[25, 88, 100, 38],
[58, 202, 230, 86],
[173, 604, 690, 259],
[431, 1510, 1725, 647],
[1466, 2847, 3019, 1294],
[2493, 4839, 5132, 2200],
[3490, 6775, 7186, 3080],
[4537, 8807, 9341, 4003],
[5898, 11450, 12144, 5204],
[8119, 14434, 15787, 6766],
[11366, 20207, 22101, 9472],
[17050, 30311, 33152, 14208],
[25575, 45467, 49729, 21312],
[38362, 68199, 74593, 31698]
];
var cost_stone= [
[40, 10, 35, 15],
[100, 25, 88, 38],
[230, 58, 202, 86],
[690, 173, 604, 259],
[1725, 431, 1510, 647],
[3019, 1466, 2847, 1294],
[5132, 2493, 4839, 2200],
[7186, 3490, 6775, 3080],
[9341, 4537, 8807, 4003],
[12144, 5898, 11450, 5204],
[15787, 8119, 14434, 6766],
[22101, 11366, 20207, 9472],
[33152, 17050, 30311, 14208],
[49729, 25575, 45467, 21312],
[74593, 38362, 68199, 31968]
];
var cost_iron=[
[35, 40, 10, 15],
[88, 100, 25, 38],
[202, 230, 58, 86],
[604, 690, 173, 259],
[1510, 1725, 431, 647],
[2847, 3019, 1466, 1294],
[4839, 5132, 2493, 2200],
[6775, 7186, 3490, 3080],
[8807, 9341, 4537, 4003],
[11450, 12144, 5898, 5204],
[14434, 15787, 8119, 6766],
[20207, 22101, 11366, 9472],
[30311, 33152, 17050, 14208],
[45467, 49729, 25575, 21312],
[68199, 74593, 38362, 31968]
];
var cost_rice=[
[35, 35, 30, 0],
[88, 88, 75, 0],
[202, 202, 173, 0],
[604, 604, 518, 0],
[1510, 1510, 1294, 0],
[3019, 3019, 2588, 0],
[5132, 5132, 4399, 0],
[7186, 7186, 6159, 0],
[9341, 9341, 8007, 0],
[12144, 12144, 10409, 0],
[15787, 15787, 13532, 0],
[22101, 22101, 18944, 0],
[33152, 33152, 28416, 0],
[49729, 49729, 42625, 0],
[74593, 74593, 63937, 0]
];
var cost_souko=[
[83, 141, 83, 63],
[167, 281, 167, 126],
[300, 506, 300, 226],
[479, 810, 479, 362],
[671, 1134, 671, 507],
[1044, 1253, 1044, 835],
[1462, 1754, 1462, 1169],
[1973, 2368, 1973, 1578],
[2664, 3196, 2664, 2131],
[3596, 4315, 3596, 2877],
[4854, 5825, 4854, 3883],
[6311, 7573, 6311, 5048],
[8204, 9845, 8204, 6563],
[10255, 12306, 10255, 8204],
[12819, 15382, 12819, 10255],
[15382, 18459, 15382, 12306],
[18459, 22151, 18459, 14767],
[21228, 21228, 25473, 16982],
[24412, 29294, 24412, 19529],
[28074, 33688, 28074, 22459]
];
var cost_syukusya=[
[35, 20, 35, 80],
[53, 30, 53, 120],
[89, 51, 89, 204],
[147, 84, 147, 337],
[228, 130, 228, 522],
[336, 192, 336, 767],
[476, 272, 476, 1089],
[653, 373, 653, 1492],
[868, 496, 868, 1984],
[1129, 645, 1129, 2580],
[2032, 1161, 2032, 4644],
[3658, 2090, 3658, 4644],
[6951, 3971, 6950, 15882],
[13205, 7544, 13205, 30177],
[25090, 14334, 25090, 57336]
];
var cost_kojo=[
[780, 1560, 1560, 3900],
[1248, 2496, 2496, 6240],
[1997, 3994, 3994, 9984],
[4193, 6290, 6290, 11182],
[5871, 8806, 8806, 15655],
[10958, 13698, 13698, 16437],
[15342, 19177, 19177, 23013],
[19944, 24930, 24930, 29916],
[25928, 32410, 32410, 38891],
[33706, 42132, 42132, 50559]
];
var cost_suisya=[
[2940, 980, 980, 4900],
[4704, 1568, 1568, 7840],
[7526, 2509, 2509, 12544],
[10537, 5268, 5268, 14049],
[14751, 7376, 7376, 19668],
[20652, 13768, 13768, 20652],
[28913, 19275, 19275, 28913],
[37587, 25058, 25058, 37587],
[48863, 32576, 32576, 48863],
[63523, 42348, 42348, 63523]
];
var cost_ichiba=[
[100, 100, 50, 50],
[334, 334, 191, 191],
[1035, 1035, 592, 592],
[2795, 2795, 1600, 1600],
[6328, 6328, 4218, 4218],
[13288, 13288, 8859, 8859],
[25248, 25248, 16832, 16832],
[42921, 42921, 28614, 28614],
[64381, 64381, 42921, 42921],
[90134, 90134, 60089, 60089]
];
var cost_kenkyu=[
[275, 110, 110, 55],
[413, 165, 165, 83],
[619, 248, 248, 124],
[1486, 836, 836, 557],
[2228, 1253, 1253, 836],
[7521, 6267, 6267, 5015],
[13538, 11282, 11282, 9025],
[21436, 17862, 17862, 14290],
[44675, 37228, 37228, 29784],
[87725, 73104, 73104, 58483]
];
var cost_kunren=[
[1500, 1600, 2500, 3300],
[2100, 2240, 3500, 3300],
[2940, 3136, 4900, 6468],
[6629, 7326, 13955, 6978],
[13257, 14653, 27910, 13955],
[32097, 37679, 55821, 13955],
[64194, 75358, 111642, 27910],
[128388, 150716, 223283, 55821],
[256776, 301432, 446566, 111642],
[513551, 602865, 893133, 223283]
];
var cost_kajiba=[
[150, 200, 340, 170],
[400, 300, 680, 340],
[780, 585, 1326, 663],
[1482, 1112, 2519, 1260],
[2742, 2056, 4661, 2330],
[4935, 3701, 8390, 4195],
[8636, 6477, 14682, 7341],
[17640, 14112, 28223, 10584],
[31566, 25253, 50506, 18940],
[50506, 40404, 80809, 30303]
];
var cost_bougu=[
[150, 200, 340, 170],
[300, 400, 680, 340],
[585, 780, 1326, 663],
[1112, 1482, 2519, 1260],
[2056, 2742, 4661, 2330],
[3701, 4935, 8390, 4195],
[6477, 8636, 14682, 7341],
[14112, 17640, 28223, 10584],
[25253, 31566, 50506, 18940],
[40404, 50506, 80809, 30303]
];
var cost_heiki=[
[216, 216, 216, 72],
[432, 432, 432, 144],
[864, 864, 864, 288],
[1224, 1224, 1224, 648],
[1836, 1836, 1836, 972],
[2662, 2662, 2662, 1409],
[3860, 3860, 3860, 2044],
[7357, 7357, 7357, 2452],
[13242, 13242, 13242, 4414],
[23836, 23836, 23836, 7945],
[42905, 42905, 42905, 14302],
[77229, 77229, 77229, 25743],
[139013, 139013, 139013, 46338],
[278026, 278026, 278026, 92675],
[556051, 556051, 556051, 185350]
];
var cost_doujaku=[
[700, 3500, 2100, 700],
[1120, 5600, 3360, 1120],
[1792, 8960, 5376, 1792],
[3763, 10035, 7526, 3763],
[5263, 14049, 10537, 5268],
[9834, 14752, 14752, 9834],
[13768, 20652, 20652, 13768],
[17899, 26848, 26848, 17899],
[23268, 34902, 34902, 23268],
[30249, 45373, 45373, 30249]
];
var cost_renpei=[
[112, 107, 107, 122],
[224, 214, 214, 244],
[448, 428, 428, 488],
[759, 725, 725, 826],
[1214, 1160, 1160, 1322],
[2209, 2110, 2110, 2406],
[3331, 3182, 3182, 3627],
[4958, 4736, 4736, 5400],
[8091, 7729, 7729, 8813],
[11130, 10632, 10632, 12122]
];
var cost_heisya=[
[72, 360, 72, 216],
[144, 720, 144, 432],
[288, 1440, 288, 864],
[648, 1728, 648, 1296],
[972, 2592, 972, 1944],
[1409, 3758, 1409, 2819],
[2725, 4088, 2725, 4088],
[6744, 9810, 5518, 2453],
[12140, 17658, 9933, 4415],
[21852, 31784, 17879, 7946],
[39333, 57212, 32182, 14303],
[70800, 96545, 64364, 25745],
[127440, 173781, 115854, 46342],
[254879, 324392, 254879, 92683],
[509759, 648784, 509759, 185367]
];
var cost_yumi=[
[360, 72, 72, 216],
[720, 144, 144, 432],
[1440, 288, 288, 864],
[1728, 648, 648, 1296],
[2592, 972, 972, 1944],
[3758, 1409, 1409, 2819],
[5450, 2044, 2044, 4087],
[9810, 6131, 6131, 2453],
[17658, 12140, 9933, 4415],
[31784, 21852, 17879, 7946],
[57212, 39333, 32182, 14303],
[96545, 70800, 64364, 25745],
[173781, 127440, 115854, 46342],
[324392, 254879, 254879, 92683],
[648784, 509759, 509759, 185367]
];
var cost_uma=[
[72, 72, 360, 216],
[144, 144, 720, 432],
[288, 288, 1440, 864],
[648, 648, 1728, 1296],
[972, 972, 2592, 1944],
[1409, 1409, 3758, 2891],
[2044, 2044, 5450, 4087],
[5518, 6744, 9810, 2453],
[9933, 12140, 17658, 4415],
[17879, 21852, 31784, 7946],
[32182, 39333, 57212, 14303],
[64364, 70800, 96545, 25745],
[115854, 127440, 173781, 46342],
[254879, 254879, 324392, 92683],
[509759, 509759, 648784, 185367]
];
var cost_shiro=[
[0, 0, 0, 0],
[1404, 546, 390, 780],
[2570, 1000, 714, 1428],
[4161, 2081, 2081, 2081],
[7102, 3552, 3552, 3552],
[9056, 9056, 6037, 6037],
[14384, 14384, 9589, 9589],
[22773, 22773, 15183, 15183],
[33562, 33562, 22374, 22374],
[44402, 57559, 32890, 29602],
[65122, 84418, 48239, 43415],
[95317, 123558, 70605, 63544],
[113458, 154716, 154716, 92830],
[150418, 150418, 315878, 135375],
[219008, 219008, 492770, 164258],
[294820, 294820, 663345, 221115],
[488220, 488220, 827854, 318406],
[839130, 839130, 915414, 457707],
[1307581, 1307581, 1354280, 700491],
[1901938, 1901938, 1969864, 1018896]
];
var cost_toride=[
[104, 400, 136, 160],
[243, 936, 319, 374],
[438, 1685, 573, 673],
[1110, 2467, 1357, 1233],
[1887, 4194, 2307, 2097],
[3236, 7191, 3954, 3596],
[5177, 11505, 6327, 5753],
[10430, 18776, 13560, 9387],
[18839, 33912, 24492, 16956],
[33914, 61043, 44087, 30523],
[66939, 106495, 85196, 45640],
[119786, 190570, 152456, 81672],
[213820, 340166, 272133, 145786],
[423566, 505021, 456148, 244365],
[708513, 844765, 763014, 408756]
];
var cost_mura=[
[400, 136, 104, 160],
[936, 319, 243, 374],
[1685, 573, 438, 673],
[2467, 1357, 1110, 1233],
[4194, 2307, 1887, 2097],
[7191, 3954, 3236, 3596],
[11505, 6327, 5177, 5753],
[18776, 13560, 10430, 9387],
[33912, 24492, 18839, 16956],
[61043, 44087, 33914, 30523],
[106495, 85196, 66939, 45640],
[190570, 152456, 119786, 81672],
[340166, 272133, 213820, 145786],
[505021, 456148, 423566, 244365],
[844765, 763014, 708513, 408756]
];
var cost_mihari = [
[600,840,600,360],
[960,1344,960,576],
[1536,2150,1536,922],
[2458,3441,2458,1475],
[3932,5505,3932,2359],
[6291,8808,6291,3775],
[9437,13212,9437,5662],
[14156,19818,14156,8493],
[21233,29727,21233,12740],
[31850,44590,31850,19110],
[44590,62426,44590,26754],
[62426,87396,62426,37456],
[87397,122355,87397,52438],
[122355,171297,122355,73413],
[159062,222686,159062,95437],
[206780,289492,206780,124068],
[,,,],
[349458,489242,349458,209675],
[419350,587090,419350,251610],
[503220,704508,503220,301932]
];
var cost_daisyukusya = [
[200,114,200,438],
[320,183,320,701],
[512,293,512,1121],
[768,439,768,1682],
[1152,658,1152,2523],
[1728,987,1728,3784],
[2419,1382,2419,5298],
[3387,1935,3387,7418],
[4741,2709,4741,10385],
[6637,3793,6637,14538],
[8628,4930,8628,18900],
[11217,6409,11217,24570],
[14582,8332,14582,31941],
[18956,11735,18956,40620],
[25817,16429,25817,49286],
[32271,22003,32271,60141],
[42172,29337,42172,69675],
[52715,38963,52715,84803],
[66009,49506,66009,93512],
[79211,62708,79211,108914]
];
var cost_enseikunren = [
[2884,4486,5977,2723],
[4614,7177,9484,4357],
[7382,11483,15174,6972],
[11811,18373,24279,11155],
[18898,29397,38846,17848],
[28347,44096,58269,26772],
[42521,66143,87404,40158],
[63781,99215,131105,60238],
[89294,138901,183548,84333],
[125011,194461,256967,118066],
[175015,272246,359754,165292],
[227520,353920,467680,214880],
[295776,460096,607984,279344],
[384509,598125,790379,363147],
[512678,692116,897187,461410],
[645974,830539,1045863,553692],
[,,,],
[,,,],
[,,,],
[,,,]
];
var cost_syuugyousyo = [
[1600,1200,600,600],
[2240,1680,840,840],
[3136,2352,1176,1176],
[4390,3293,1646,1646],
[6146,4610,2305,2305],
[8605,6454,3227,3227],
[11186,8390,4195,4195],
[14542,10907,5453,5453],
[18905,14179,7089,7089],
[24577,18433,9216,9216],
[31950,23963,11981,11981],
[38340,28755,14378,14378],
[46008,34506,17253,17253],
[55210,41407,20704,20704],
[66252,49689,24844,24844],
[72877,54658,27329,27329],
[80164,60123,30062,30062],
[88181,66136,33068,33068],
[96999,72749,36375,36375],
[106699,80024,40012,40012]
];
var costs = [];
costs["伐採所"] = cost_wood;
costs["石切り場"] = cost_stone;
costs["製鉄所"] = cost_iron;
costs["畑"] = cost_rice;
costs["倉庫"] = cost_souko;
costs["宿舎"] = cost_syukusya;
costs["工場"] = cost_kojo;
costs["水車"] = cost_suisya;
costs["市場"] = cost_ichiba;
costs["研究所"] = cost_kenkyu;
costs["訓練所"] = cost_kunren;
costs["鍛冶場"] = cost_kajiba;
costs["防具工場"] = cost_bougu;
costs["兵器工房"] = cost_heiki;
costs["銅雀台"] = cost_doujaku;
costs["練兵所"] = cost_renpei;
costs["兵舎"] = cost_heisya;
costs["弓兵舎"] = cost_yumi;
costs["厩舎"] = cost_uma;
costs["城"] = cost_shiro;
costs["砦"] = cost_toride;
costs["村"] = cost_mura;
costs["見張り台"] = cost_mihari;
costs["大宿舎"] = cost_daisyukusya;
costs["遠征訓練所"] = cost_enseikunren;
costs["修行所"] = cost_syuugyousyo;
var img_lv = new Array();
img_lv[0] = 'data:image/gif;base64,'+
'R0lGODlhFwAWAMQAAKiTADs9BK+dAN7aALGjAMO2QernwPT038CzLOvmANfQgfn577OjDeLbnsjE'+
'AOXkrrCtALurPsS7FvDtztXOau/qANXRAMf/If/6CLy4ACAgIL+sAGFyB7WdAP///////yH5BAEA'+
'AB8ALAAAAAAXABYAAAW24PdxZGmepShyWOu+sMutcV3PXKXvSTL8v8Rux9FwLMikxSGhGAwUhxJZ'+
'5GSu2Azk4el6FJBspropmwmIxUFS6DLMZTJ8Q5gcBPiGpzCXwxFfAhsCCh4IfUZzG20NAI4GBwSI'+
'HIoMXRQRXAWScH5whV0LBYKTHaanHQARChQMAKinVbCnjo6zpkUjt7uxGhorKBy3Jb4qH77IvrDJ'+
'xcbOIqgBAc/UxqfS1dkfptja1R3d3tXT2iEAOw==';
img_lv[1] = 'data:image/gif;base64,'+
'R0lGODlhFwAWAMQAAEBCAP//IbKcAP7+6mZ5AMjEAPnnRKiTANXRAO3YALy4AP/6CP/zgb+sAO/q'+
'ACAgIP/6Et7aAP7xV9C2AP///7WdANXRAPLVB6+sALqhAP/7JevmAK2YAP/mAd7aAP///yH5BAEA'+
'AB8ALAAAAAAXABYAAAWh4PcRZGmepSgSQeu+sEusS23fOD4TTu/7keDm5yM8CJakMlnwaCCFpdJI'+
'UFivCgxiQJFgsFdqY0xuCBKMrqBMFrPHgo763XC/OXIJh25n47t7b31lHAaAfEd0DRwSh4JHFZGS'+
'kRwTFxkck5JUmpMHnwKdFUYjoqabDw8rKASiJakqH6mzqZq0sLG5IpMAALq/sZK9wMQfkcPFwBXI'+
'ycC+xSEAOw==';
img_lv[2] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPz4Lr+vALKcAGZ5AP/5wP//Ie/qAKeSAP/zlenkAP////7xa7y4AP/n'+
'F//6CP7+6t7aACAgIL+sAPXTBf/zgf/8TdXRAP7zq7WdAKyaAP381v3rQ+XHAMjEAOvmAMKtAPrn'+
'Bf36VuzXAP/n5//8c/7yl////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAAAAAXABYAAAbDwNOJ'+
'QCwaj0WhkGBoOp9QJ2H5qFqvWOyUcOh6u5Fw+PPtEiSEi3p98ShKGIzFw1afCY28viFa+P0BGnsN'+
'dxOGhwMVDCMaDgscA4eGhZKGAxqYCRsgkZKUlRkaAhUQjBmVn5IaIQUFIwgIp55olRMaDAsQFXEY'+
'Gqi0lRoFubwmnYd3GcrLGhQdsNADy8rJ08qY0tbTZ0Pa3tZnEktIBN5FEuJK6Ovo1uzoSvHy0wAA'+
'8vf3y/X4/ErK+/36ZQAYsJ+9gEEAADs=';
img_lv[3] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPXZMcjEAKyaAP7+6mZ5AP//If32lu/qANfBAKeSALy4AP/5wP/8Tfnh'+
'BP/6CLWdACAgIN7aAL+sAP/5rP3rQ/TXHP/////8Yf381uzXANXRALGjAL2rAPflWuvmAPzpLunk'+
'AP7xa//WQvzkAv36Vv/0l//nF////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACgALAAAAAAXABYAAAbEQBSq'+
'QCwaj0WhsGBoOp9QZ2H5qFqvWOy0gOh6u5Jw+PPtFiKFjXq9EYQaJgpGwFafC4u8nlO6+P0gHHp5'+
'dxOGhxwmIhoDJxcVHIeGhZKGHBwJFRkUAwOVlJWdFH8MHZ9olRMcIA4dChp+DqcFlRwkFweuFRcE'+
'ppJ3EMHCEAx/FxmMwxDAyhAKAR4eFgoKzczNnZ3NwWdD29/CZxFLSAXbRRHjSuns6crt6Ury88MA'+
'APP4+ML2+f1Kwfz8+YMQUKC/ewKDAAA7';
img_lv[4] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAP/8TbWdALqhAKiTAP381mZ5AP//If32gurlAO/qAL+vAP/6CLy4AP/5'+
'wP///7+sAOHdANTBAP/7JSAgINXRAP74q7CtAP7xa/LVB7GjAP756sjEAP7xV6yaAOvmAMKtAP//'+
'/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACEALAAAAAAXABYAAAa/wFDI'+
'QCwaj0Wh0HBoOp9Qp2HJqFqvWOzUoOh6v4pI5ANWGCiGinq95nACEw5bfTY07vj7JVF4dC55d3UQ'+
'hIUQGgkbGH4ahoSDjhogDg4ejI4QkIYeGBsSBH4eHgKGmoSIDxsOD6yXhaaHCw4WGAgPFh0Lja9o'+
'Ar6/AqIeGX4EBMACdcjABAMZA8fIysu/xtHSFEPU279n2UNIBtRFFN9C5ejlyOnlSu7vwAAA7/T0'+
'v/L1+Uq++Pr6Av386ZvnLwgAOw==';
img_lv[5] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPXZMbWdAL+pAKeSAP/5wGZ5AP//If/zgb+vAPz3AP/6CP///+/qAPfl'+
'WrKcAP/5rL+sAN7aACAgIPXTBdXRALy4AKyaAP/7OP/8YdXRAP381v/6EMjEAP/sLOvmANK/APnn'+
'RP7xa/vuWcKtAP/mAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACYALAAAAAAXABYAAAbGQJPJ'+
'QCwaj0Wh0HBoOp9Qp2G5qFqvWOzU0Oh6u5Kw+PNtGCaGinpd6Sg4HExG0WFXzgaLfm/RMP4MEBoX'+
'fBZ4EYiJDx4MJRePFwKJiIeTEQ8iDB4IEAgkD5aVkxcQDAUjpRAXoWiWERcJHgSzf6uToomkGyAE'+
'IYG2iXgCw8QCBYCmAw/FAsLMAgQBDg4Us8vFzs+QF9fMZ0PP4d4TE0tIBuFF5Eom5O7kzO/r7PRC'+
'xQAA9frsxPj7/yaG+QO4T8BAgvvyAQwCADs=';
img_lv[6] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPzlQsjEAKypAP7+6mZ5AP//If/6CP/9iNfTAKeSANfBALy4AP/5rP7x'+
'a/nhBLWdAL+sAP///yAgIP/5wN7aAO/qAOXHANK/APflWv/zgbKcANXRAP381r+vAPTXHPz3AP37'+
'luvmAP/mA66eAP/n572fAP/WQv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACgALAAAAAAXABYAAAa/QBSq'+
'QCwaj0WhsGBoOp9QZ2F5qFqvWOy0YOl6vZWw6OstTAqctDotACESgrXaXGDY7wyShxAa4PF0EYKD'+
'ESQhBAskioSCgYwbIxIaDg0aCxuMjoSGEhIUHRINJJlnjIWeDwoenaOEmoMkBAQYCgESIa2DdBC8'+
'vRC2nZ4eJL4Qu8UQChcZGR8KChvFx8jPz9HIZkPI29ITE0tIBdtF3koo3ujexenl5u5CvgAA7/Tm'+
'vfL1+Si8+Pr1EP381ZunLwgAOw==';
img_lv[7] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPvkLb2rALGjAP/+wGZ5AP//Ie/qAP/8daiTANC2AP///7y4AP7xV/LV'+
'B+HdAP/5rP/6CL+sACAgINXRAP756vz3ALWdAK+sAP/6Ev3xlvrtRcjEAPrpbOvmAL2fAKyaAP/s'+
'LP/mAf/dvda4AMKtAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACYALAAAAAAXABYAAAbAQJOp'+
'QCwaj0WhsGBoOp9QZ2EZqVqvWOy0cOh6D4+HxxP2fLuFSYHCbnMsCA4nk+G02+kCY8/HQBYEC4IQ'+
'GHx7eRKJigN/DSIhCw0DiomIlBKMCyAgEBUlk5SWlAMhGwkikSAXl6KjAwMaCwqgoWqXiiACgKq3'+
'rZQgAQsdILcSeRfIycgJCg4CCcrJx9HJCdbUyGlD2NzSExNLSAXYRd9KJt/p39Hq5ufvQsoAAPD1'+
'58nz9vomyPn79hf8/bNHb18QADs=';
img_lv[8] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPXZMbWdANbSAKiTAP381mZ5AP32lv//IeznAL+vAPv4bf/////+wN7a'+
'AP/6CLy4APflWtXRAL+sACAgIPnhBP/5rP3xgv/8Ta+dAP7+6u/qAPTXHLGjAP/7OsjEAL2fAOvm'+
'AP/uV//dvcGuAP/n5//mAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAAAAAXABYAAAbNwNPJ'+
'QCwaj0Wh0IBoOp9Qp2H5qFqvWOzUsOl6u46wOPTdGCgGiXot+XgOlgNm8GFLzgaIft+5MBYRDQwa'+
'CR17EHgTiosZDAwJJg0FIhmLiomWExkLjgwWJBmVlpiWGQkaGo4WCh2ZpIodChoNChUFDBeii6+a'+
'FX8EBJwHupdoAsfIGYINggUJGcjHeNHIBAERERwKBNQC090CwOLgZ0Pg58hnFEtIBuREFOtK8fTx'+
'1PXxSvr70QAA+wABIvMXsKCSYwQNGhSQUKHBfwqDAAA7';
img_lv[9] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPXZRbWdANXRAKiTAP7+6mZ5AP//If/5rNC2AL2oAP/6CP3xgv381vTX'+
'HLy4AN7aAL+sAO/qAP///yAgINXRAK+sAPvuWezXALGjAP/8Tf3xlsjEAOvmAKyaAP/n597aAMGu'+
'ANa4AP/8Yf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACQALAAAAAAXABYAAAbAQBLJ'+
'QCwaj0Wh0HBoOp9Qp2G5qFqvWOzUIOl6u5CwuPOVGCiGinpd4YA0CMQIxGFXzoaHfm8ZNBoIBRMI'+
'Fnt6eBGJihkIDR4eGBMTGYqJiJURGRMNIY+blJWXlYybgRMMoIqiiwoXCBuCA6mWaJiJjx4Opx62'+
'eAK/wL8eCgUFCRnBv77JvwQJAQ4EzALL0wTX09QUQ9nd2ttDSAbTRRTgQubp5snq5krv8MEAAPD1'+
'9cDz9vpKv/n7+wL8/dtH718QADs=';
img_lv[10] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAP/7OsjEALCtAP7+6mZ5AO3YAP37lv//If/6CKiTAP77a7WdAN7aAP/5'+
'wPLVB/flWr+sAO/qALGjANXRAP/6EiAgIP////z2rsKtANXRAP/8Tf/zgby4AL+vAP381vnnROvm'+
'AK+dAP/mAfvjGd7aAPXZRdC2AP7xV//n572fANfBAP/7Jf///wAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC0ALAAAAAAXABYAAAbhwFar'+
'QCwaj0WhsIBoOp9QZ2GZqFqvWOy0IOlKGuCQOAQuh7wFS0HDFpRYFUG7tMFgAnJ2utDpDCgEFygD'+
'fQMHF4gXC4QdexEREwYcghOQBgQfKyOIGY+OjxObKJUTDh8iqJMjnmqPkKKVBoIiESIoFwasBa6h'+
'lBGbHArCGB+VEZ+1IL4eiCAPhyPGewzUtrOot4gEJCLUDNPUCicPHgrhDxAm5d7fauzC5t7w8d5p'+
'Q+z4+fUWFktIBfqK8FPSgp9BfvgODiTIUAg7AAAaSiToDeLEiy2oWcQ4kcFGjhMjYgwCADs=';
img_lv[11] = 'data:image/gif;base64,'+
'R0lGODlhFwAWAMQAAEBCAP/7JdXRALKcAP7+6mZ5AP//IdC2AKiTAO/qAP7xV7y4APLVB7qhAP/z'+
'gf/6CCAgIPnnRL+sAP///97aANXRAO3YAK+sAP/6ErWdAMjEAOvmAK2YAP/mAd7aAP///yH5BAEA'+
'AB8ALAAAAAAXABYAAAW54PcVZGmepSgWRuu+sFusT23fOD4XSd9TwI0vAaQIewVIQcAUaDwBjKb5'+
'jE6ZycJie6kQJooL1wsWb7OS9MDiAA/UbHdagp4POnI1XvFO19McexxzgWCDfkpzEoUKh4uCc3+L'+
'EYaElI2RiYQKlYCcmIgFGaMZHAcMDRykpqiqo1mkowizA7GzCLWvECOxvb6kSbsjKKK+JRDCIsjL'+
'yL3MyCrR0rEAANLX16TV2Nwqo9vd3Rng4d3W4SEAOw==';
img_lv[12] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPz4Lr+vAK+sAP/5wGZ5AP//Ie/qAP/zgenkAKeSAP///7WdAP/nF/7z'+
'q97aAP7xV7y4AP7+6vLVB9XRAP/6CCAgIL+sAP7xa7KcAP3rQ//zldXRAPrnBf381sjEAOvmAOXH'+
'AN7aAPnnRL2fAP/n5//8TdC2AKyaAO3YAP/mAf/8c//7Jf7yl//6EsKtAP///wAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADAALAAAAAAXABYAAAbfQBis'+
'QCwaj0WhsGBoOp9QZ2FZqVqvWOy0cOgeHmCQGAQug7wFS4HC/ohYrk87sXI4THJ2uhCJDDgSCxAD'+
'fhALh4cBhBF7FxcZKQiCGY8IGCkoDQsajheNjhkqk6AopRseL52fFygdgiiODCgCCBKYqmqdra+O'+
'rQQEKQoKuAW6I7woGAsSCHYOxAzRKIYQKLIEy84tGdx70bInEwLWKBMhwujcGd7fpSjq6t/yaUPy'+
'9vffaRZLSAX4RRb2KQlIMKC9ggGVKFwoDwCAhRAhfnMYsaKSaBQtWmSQUaPFhxqDAAA7';
img_lv[13] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPzpLsjEAK+sAP7+6mZ5AO3YAP7xa///If/6CKeSAP/5rN7aALWdAP/6'+
'EvflWr+sANXRAP/5wO/qACAgILGjAP32lv////LVB/3rQ/XZMdXRANC2AP381r2rALy4AP/zgfTX'+
'HP7xV//8TenkAOvmAP/7Jf/mAdfBAP/WQqyaAP/8Yb2fAP/0l97aAP/nF////wAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADAALAAAAAAXABYAAAblQBis'+
'QCwaj0WhsIBoOp9QZ2GZqFqvWOy0MOlOGOCSuAQul7wFSmHDFrhMDkGbNGotVnJ2uvD5DCIEFyID'+
'fiIXh4cBhB97EBAVBiCCFY8tBwYqLxcZlBCNjhUnk6AVKBkdCyoqjp+PoiKdqguIEh6sao6ugqsV'+
'ASceCgaHJ7cFuSoZuxCiFsDJBLaeag3UKoYiKtQSiBcdBtQNe+AqHBge2Q0KGg8PIQoK4OLjquAN'+
'qvT1aUP1/P3xFBSWICngrwhAJTAAKgTIb+FBhBCF1AMAIKJFhOAoXtwIg5pGjhcbfAR5sSLHIAA7';
img_lv[14] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPnnRL+vALCtAP381mZ5AP//Ie/qAP7xa9C2AKiTAP74q7WdAN7aAP/7'+
'JfLVB////7y4ANXRAP/6CCAgIL+sAOrlAP/zgf7xV7GjAP/5wNXRAP7+6v/6EsjEAKyaAOvmAL2f'+
'AN7aAP/8Tf/mAf/n58KtAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAAAAAXABYAAAbZwNOp'+
'QCwaj0WhsGBoOp9QZ2E5qVqvWOy0cOgeGmCQ1xv2FigFidojcnQ86rVn5ICrz4VIZLDhQDADensW'+
'BH+BengVFRkWF38ZiowcCI+KFYmRJJUZJhoaH5WKmIuaGB8VHwgcCQp/H6eXaJYZpacWEBwaELt/'+
'orKKHwF/ChUCGgsIjgsYAr4FDNAfGK7Rrw/DCtB40AwKCQ8C2dwKAuDiDNvjCufq7GdD3PHy82cU'+
'S0jP9EQU9kr8//zkAeSnpKDBeAAAGFy4kFtChhCVQHsYMSIDihUjKqwYBAA7';
img_lv[15] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPXZMb+vAK+sAP/5wGZ5AP//If7xa+vmANC2AKeSAP/6Ev///7WdAPfl'+
'Wv/5rL2fAP/6CPLVB7y4AP/7JSAgIL+sAN7aAO3YAP381tXRANXRAPnnRLKcAPfyAP/zgcjEAP7x'+
'V//sLP7+6v/mAayaAP/8Yd7aAP/7OPz3AMKtAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACsALAAAAAAXABYAAAbowNWq'+
'QCwaj0WhsGBoOp9QZ2EZqVqvWOy0gOgiLmDvF0z2FiqFjRp0oixA69RigTKl4JtzYTIZaEYMIQN9'+
'GgyGDA8agxN6FhYdGB+BHY8iDCQlmSUNjo2OHSSTjwcMIh8PHyqUFp4WJaEhJa4PDAQhtA+yrGiO'+
'rrCyJQIiCsSGuq0lHIHADxkJCsq5nWgN1SUhy9UEh7UCHd961Q0lCRICmw0KAQ4OEsTfHeHimvDf'+
'xAod4g1nQ/r+/+LOVFiCpADAIhUGKknIMKG/hgmVSJyoDwCAiRgxirOYsaOSahw9emwQUqTHiyKD'+
'AAA7';
img_lv[16] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPzlQsjEAKypAP7+6mZ5AP//IdfBAP/zgf/6CKeSAP/5rLWdAO/qAP/m'+
'A7+sAN7aAP////LVB/flWrKcACAgINXRAP/5wNC2AOXHALy4AP37lr+vANXRAPTXHP7xa/381uvm'+
'APz3AP/7Ja6eAP7xV72fAP/mAf/n5//9jN7aAP/WQv/6Eu3YAP///wAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC4ALAAAAAAXABYAAAblQJer'+
'QCwaj0WhsGBoOp9QZ2GZqFqvWOy00Og2IOCQ9xseFyoFi1qgGrEEaotAlFLB4+eCRkPqECIlA3sk'+
'HAQbgnt7eQ8PFC0IgBSMJBsEBySYjA+LkyeRjQ4RCB8LCAeSm2iaJJ4lJA+UEREXIBELr6kFq62v'+
'JLMnChyyuJywAYC9BAQYCscbxGgM0iQlyNLHsrMcJNJ50gwKGBIcCtIKGRMTHgoKFO7e3+zt7hTy'+
'7d8MZ0P4/P3fZxWWICngr0iFgEoOKjzIb+FBJRAj4gMAIKJFi98oXtyoRJpGjhwZfATJsSLIIAA7';
img_lv[17] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPvkLb2rAK+sAP/+wP//IWZ5ANC2AP/zge/qAKiTALy4AP////7xV/LV'+
'B97aALWdAP/7JdXRAP7+6v/5rP/6CCAgIL+sAPrpbO3YAP/6ErGjAPrtRdXRAMjEAOvmAKyaAN7a'+
'AMKtAP3xlv/8df/mAb2fAP/sLNa4AP/dvf/n5/z3AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACwALAAAAAAXABYAAAbeQBbL'+
'QCwaj0Wh0FBoOp9Qp2FZqVqvWOzUkOgmHuCPOPwJew0Wg2TtCUU0HolnRfJ4NPC1BG1YLAYdEwwN'+
'A38UDAQMihSFC3wXFxsZCIMbkYcNJSeVkI+QGyWcG4cgIBQTIpYXnpGhDZYbJxwKriCQq2m3oJyR'+
'GxsjDB2quAa3IByDtpAgAojKnWkQ0iANydIQIAEMGCDXEHzXCgcOAgrh4+Xe4OEK5t7t7tdoQ971'+
'9vIWFktIBvdF+UpY5BuYrx5BgAETCvEGAIDChwGvNYRIkYW0iRUhQsCYEaLDikEAADs=';
img_lv[18] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPnnRMjEAK+sAP381mZ5AOznAP32lv//If/6CKiTAPTXHLWdAN7aAPv4'+
'bf/////+wL+sAO/qAPLVByAgILGjANXRAP/zgf/5rPXZMfflWv7+6tC2AL+vALy4ANXRAP/mAevm'+
'AP/7Ov/7Jf7xV//8Tf/6Er2fAP/n58GuAK+dAP/dvd7aAP///wAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC0ALAAAAAAXABYAAAbowFar'+
'QCwaj0WhsIBoOp9QZ2GZqFqvWOy0IOlKGuCQOAQuN8YFSsHCFrBGJkFbdMAcSiy5JV3weAYfGw8k'+
'A38XDw4kEA8bBoV8EREVBockFZIPDwYgEASWkZCRFSCDlxUOmQ8YKSqREaGSpJ+TG4KqHZevaq6j'+
'pREdGxAdIAQPF7mwKgG+EYgKCqgHrboFDNYqJIMq24sQiwQGFdZ81gwKHBMdCtYKGRoaC+rl5OXP'+
'6/X29+MUQ+X+/wDT8BuCpFpAIhQGCknIMOG/hgmVSJzoDwCAiRgxlrOYsaMSaxw9emQQUqTHiyKD'+
'AAA7';
img_lv[19] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPnnRLqhAK+sAP381v//IWZ5AOvmAP/zgdXRAKiTAPTXHP///7WdAP/6'+
'CO3YAP/5rPfyAN7aALy4AP/6EtXRAL+sACAgIP/8Tf7+6rGjANC2APLVB8jEAP7xV//7Jf3xlqya'+
'AMGuAP/n597aAPXZRf/8Yda4AP/mAb2fAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACoALAAAAAAXABYAAAbeQJXK'+
'QCwaj0Wh0FBoOp9Qp2HpqFqvWOzUcOgeJGDvF0z2Gi6GirpD+lA6axIGAjGR4JWzYTIZJDIMHgN9'+
'CQQEEIAQgxN6FhYaDwiBGo8QBCEhDwwMlBaNjhook48MBCKYpZ2fj6IelBoQpYgMCKpojqyjGiIe'+
'ECCACbYGDcQhAYEhxZgLtMnEesQNIR7I0SECGRkbGtHQxAobHAIK0eAlC+TdaNENCu7s7e/sZ0Pw'+
'9vdnF0tIw/ZFF/qUABwIEB5BgEoSKmQHAIDChw+jNYRIUQmxiRUrNsCYsaLDjEEAADs=';
img_lv[20] = 'data:image/gif;base64,'+
'R0lGODlhFwAWANUAAEBCAPXZRcjEAKypAP381mZ5AOXHAP37lv//If/6CKShAP/nF/77a////97a'+
'ALWdAP/5wNXRAPXTBfz2ru/qACAgIP/zgb+sAPz4LrGjAP7+6vflWt7aALy4AL2rAP/8Tf/mAevm'+
'AMGuANfBAP3rQ6yaAOnkAKeSAOzXAP/n5/vuWc/LAP7yl//8c/v2C72fAP/WQv/7OsaqAP///wAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADMALAAAAAAXABYAAAb0wNms'+
'QCwaj0WhsIBoOp9QZ2GZqFqvWOy0QOlSHGBwaBwWjwuVQmQtMLUmk49gJeB84DHBGl3odDIqDYKC'+
'GAMDB4MNDAMdfBcXGRYMKCULDSQlKBoEIyCCIheOjxklpSwEIiUQBKUlFg0goWmPFw8lHhYaKCco'+
'DSolFyWBKLIFtBkgEBC7J54WrROsxaMMDRoWcBMeggESiLHFD7YQ1tkswoMaCxkZD3ziJRIGJ/T0'+
'7BIbAR4n4u5p/aX6CWxVQiCaIQITKuyHpsISJAUWFqngUAnFixQTYqSopKNHgQAAeBw5sl9IkiiV'+
'iDuZMuUDli1TimwZBAA7';
Pika_prepareForDisplayBuildStatus();//Lv0表示
var xybld_a = new Array();
var allbld = $a("//li/span[@class=\"buildStatus\" and contains(text(),\"建設\")]/a");
for(var idx=0 ; idx<allbld.length ; idx++) {
var tmp = allbld[idx].href.match(/x=([\-0-9]+).*y=([\-0-9]+)/);
if( tmp != null ) {
xybld_a.push(tmp);
}
}
allbld = $a("//li[contains(text(), \"削除中\")]/span[@class=\"buildStatus\"]/a");
var xybld_d = new Array();
for(var idx=0 ; idx<allbld.length ; idx++) {
var tmp = allbld[idx].href.match(/x=([\-0-9]+).*y=([\-0-9]+)/);
if( tmp != null ) {
xybld_d.push(tmp);
}
}
var allarea = $a("//area");
for(var idx=0 ; idx < allarea.length ; idx++) {
var title = allarea[idx].getAttribute("title").match(/^(.*) LV\.([0-9]+)$/);
if( !title ) {
title = [allarea[idx].getAttribute("title"), allarea[idx].getAttribute("title"), 0];
}
if( costs[title[1]] ) {
if(costs[title[1]][title[2]]) {
var xy = allarea[idx].getAttribute("href").match(/^.*(?:\?|&)x=([\-0-9]+)&y=([\-0-9]+)+(?:&[^=]+=[^&]+)*$/);
var level = parseInt(title[2],10);
var blding = 0;
var dlting = 0;
for ( var xxx=0 ; xxx < xybld_a.length ; xxx++){
if( xy[1] == xybld_a[xxx][1] && xy[2] == xybld_a[xxx][2] ) {
level ++ ;
blding += 2;
}
}
for ( var xxx=0 ; xxx < xybld_d.length ; xxx++){
if( xy[1] == xybld_d[xxx][1] && xy[2] == xybld_d[xxx][2] ) {
dlting ++;
}
}
try {
if( costs[title[1]].length <= level || // maxinum level reached
RES_NOW.wood < costs[title[1]][level][0] ||
RES_NOW.stone< costs[title[1]][level][1] ||
RES_NOW.iron < costs[title[1]][level][2] ||
RES_NOW.rice < costs[title[1]][level][3] ) {
//lvを黄色に
var thisimg = getLevelImageHTML(xy[1], xy[2], "mapicon");
if( thisimg ) {
thisimg.src = img_lv[parseInt(title[2],10)];
}
}
}catch(e) {
GM_log("catched");
}
if( (blding || dlting) && !OPT_PIKA_BLINKBLD ) {
//建築中
var thisimg = getLevelImageHTML(xy[1], xy[2], "mapicon");
if( thisimg ) {
thisimg.style.outlineColor = (blding) ? "red" : "blue";
thisimg.style.outlineStyle = "dotted";
thisimg.style.outlineWidth = "2px";
}
}
}
}
}
if( OPT_PIKA_BLINKBLD) Pika_displayBuildStatus();
function getLevelImageHTML(x, y, cls) {
var xdom = "";
var no = (101 + parseInt(x,10) * 7 + parseInt(y,10)).toString().substr(-2);
xdom = "//img[@class=\"" + cls + no + "\"]";
// var maps = document.getElementById("maps");
return $x(xdom, $("maps") );
}
}
//////////////////////
//メモ処理
//////////////////////
function disp_memo()
{
var icon_memo = 'data:image/gif;base64,'+
'R0lGODlhEQAPAKIAAP///+np6dXV1VpaWlhYWEVFRURERDMzMyH5BAQUAP8ALAAAAAARAA8AAAM7'+
'eLrcXGTIOYo7RITNAyEWMwRAaQIj0YynOaAr2aKwKLfvEM+0bvO53Sz4G9YWEMrEcCziLknlwHCp'+
'NhIAOw==';
var cnt = parseInt(OPT_MEMO_COUNT, 10);
if( isNaN(""+cnt) || cnt < 1 ) cnt = 1;
if( cnt > 5 ) cnt = 5;
for(var i=0 ; i<cnt ; i++){
createMemoTab(i);
}
function createMemoTab(no)
{
if( !no ) no = "";
var title = "メモ";
if( no ) title += (no +1 );
var elms = ccreateSideBox("beyond_sidebox_memo" + no, icon_memo, title);
var ta = d.createElement("textarea");
ta.id = "beyond_memobox" + no;
ta.rows = OPT_MEMO_HEIGHT;
ta.cols = OPT_MEMO_WIDTH;
if (isNarrow) {
ta.rows = OPT_MEMO_HEIGHT - 1;
ta.cols = OPT_MEMO_WIDTH - 4;
}
ta.style.fontSize= OPT_MEMO_FONT_SIZE + "px";
ta.value= cloadData( "memo" + no, "", true );
elms.sideBoxInner.appendChild(ta);
var sv = d.createElement("a");
sv.href = "javascript:void(0);";
sv.innerHTML = "保存";
$e(sv, "click", function() {
var memoBox = $("beyond_memobox" + no);
if( memoBox ) {
csaveData( "memo" + no, memoBox.value, true );
alert("保存しました");
}
});
var dv = d.createElement("div");
dv.appendChild(sv);
elms.sideBoxInner.appendChild(dv);
}
}
//////////////////////
//拠点リンク機能
//////////////////////
function disp_baseLink()
{
var elm = $x('id("lodgment")/div[@class="floatInner"] | //div[@class="sideBoxInner basename"]');
if( !elm ) return;
var bases = $a("//li/child::*", elm);
for( var idx=0 ; idx < bases.length ; idx++) {
addBaseLink(bases[idx]);
}
function addBaseLink(elem) {
var thistitle = elem.title;
if( !thistitle ) return;
var xy = thistitle.match(/^.*\(([\-0-9]+)\,([\-0-9]+)+\)$/);
if( !xy ) return;
var a_m, a_v, a_n;
var a_m_img = d.createElement("img");
a_m_img.style.paddingLeft = "3px";
a_m_img.src = img_map;
var a_v_img = d.createElement("img");
a_v_img.style.paddingLeft = "3px";
a_v_img.src = img_mura;
var a_n_img = d.createElement("img");
a_n_img.style.paddingLeft = "3px";
a_n_img.src = img_naisei;
a_m = d.createElement("a");
a_m.href = caddSessionId("/map.php?x=" + xy[1] + "&y=" + xy[2]);
a_m.title = "マップ(" + xy[1] + "," + xy[2] + ")" ;
a_m.appendChild(a_m_img);
a_v = d.createElement("a");
a_v.title = "表示";
a_v.appendChild(a_v_img);
a_n = d.createElement("a");
a_n.title = "内政";
a_n.appendChild(a_n_img);
if( elem.href ) {
var id = elem.href.match(/^.*\?village_id=([0-9]+).*$/);
if( id ) {
a_v.href = caddSessionId("/village_change.php?village_id=" + id[1] + "&from=menu&page=/village.php#ptop");
a_n.href = caddSessionId("/village_change.php?village_id=" + id[1] + "&from=menu&page=/card/domestic_setting.php#ptop");
}
} else {
a_v.href = caddSessionId("/village.php#ptop");
a_n.href = caddSessionId("/card/domestic_setting.php#ptop");
}
var spn = d.createElement("span");
spn.appendChild(a_v);
spn.appendChild(a_m);
spn.appendChild(a_n);
elem.parentNode.insertBefore(spn, elem.nextSibling);
}
}
//////////////////////
//領地リンク機能
//////////////////////
function disp_mapLink()
{
//暫定的にsplit("\n")で3なら領地リンク、4なら君主リンクに
if( location.pathname == "/land.php" ) {
var div = $("tMenu");
if( div ) {
var lnk = d.createElement("a");
lnk.href = "javascript:void(0);";
lnk.innerHTML = "領地リンクの追加";
div.appendChild(lnk);
$e(lnk, "click", function() {saveMapLink();});
}
}else if( location.pathname == "/user/index.php" || location.pathname == "/user/" ) {
var table = $x("//table[@class=\"commonTables\"]");
if( table ) {
var lnk = d.createElement("a");
lnk.href = "javascript:void(0);";
lnk.innerHTML = "君主リンクの追加";
$e(lnk, "click", function() {saveMapLink();});
table.parentNode.insertBefore(lnk, table.nextSibling);
}
}
var icon_map = 'data:image/gif;base64,'+
'R0lGODlhEQAPALMAANO3SayTQ3drPFxQsFNTUUA3uTMzMxoamBgYnxsNxg0G8ggC9AAA/wAAAAAA'+
'AAAAACH5BAQUAP8ALAAAAAARAA8AAARL0MhJq50InVsT+wknIctnIhZZmmZYIWy8CAFATLGpADwQ'+
'TCuGYljo9W4Gz2dnNP4MMNOgaQRKqT3BJJFACLC9C1bLqfWeIpqATIkAADs=';
var elms = ccreateSideBox("beyond_sidebox_xylink", icon_map, "領地/君主リンク");
elms.sideBoxInner.id = "beyond_sidebox_xylink_inner";
resetMapLinks();
}
function saveMapLink( )
{
if( location.pathname == "/land.php" ) {
var allDivs, thisDiv;
var v_name = "";
var basename = $x("//span[@class=\"basename\"]");
var xy = location.search.match(/^\?x=([\-0-9]+)\&y=([\-0-9]+)+$/);
if( basename ) {
v_name = basename.innerHTML;
if( v_name =="空き地" ) {
v_name += xy[1] + "," + xy[2];
}
}
v_name = prompt("名前を入力してください", v_name);
if( !v_name ) return;
var maplinks = cloadData( "links", 0, true );
var value = v_name + "\n" + xy[1] + "\n" + xy[2];
csaveData( "link" + maplinks , value, true );
maplinks++;
csaveData( "links" , maplinks, true );
resetMapLinks();
}else if( location.pathname == "/user/index.php" || location.pathname == "/user/" ) {
var user_id = URL_PARAM.user_id;
var tmp = d.body.innerHTML.match(/<td>君主<\/td>[^<]*?<td>(.+)<\/td>/);
if( !tmp ) return;
var user_name = tmp[1];
var comment = "";
disp_name = prompt("名前を入力してください", user_name);
if( !disp_name ) return;
comment = prompt("コメントを入力してください", comment);
var maplinks = cloadData( "links", 0, true );
var value = user_id + "\n" + user_name + "\n" + disp_name + "\n" + comment;
csaveData( "link" + maplinks , value, true );
maplinks++;
csaveData( "links" , maplinks, true );
resetMapLinks();
}
}
function configMapLinkClose()
{
var elem = $("beyond_mapLinkWindow");
if( !elem ) return;
$("beyond_floatpanel").removeChild(elem);
}
function configMapLink(n, evt)
{
var tmp = cloadData( "link" + n , "", true );
if( !tmp ) return ;
configMapLinkClose();
data = tmp.split("\n");
var lw = d.createElement("div");
lw.id = "beyond_mapLinkWindow";
lw.style.position = "absolute";
if( data.length == 3 ) {
lw.style.backgroundColor = "thistle";
lw.style.border = "outset 2px thistle";
}else if( data.length == 4 ) {
lw.style.backgroundColor = "lightgreen";
lw.style.border = "outset 2px lightgreen";
}
lw.style.fontSize = "10px";
lw.style.padding = "10px";
lw.style.zIndex = 1000;
lw.style.left = evt.pageX - 176 + "px";
lw.style.top = evt.pageY - 111 + "px";
if( data.length == 3 ) {
ccreateTextBox(lw, "LINK_TITLE", data[0], "名称","名称",20, 0);
ccreateTextBox(lw, "LINK_X", data[1], "X座標","X座標",10, 0);
ccreateTextBox(lw, "LINK_Y", data[2], "Y座標","Y座標",10, 0);
}else if( data.length == 4 ) {
var dv = d.createElement("div");
dv.innerHTML = "id=" + data[0] + "  " + data[1] + "<br>";
lw.appendChild(dv);
ccreateTextBox(lw, "LINK_TITLE", data[2], "表示名","表示名",20, 0);
ccreateTextBox(lw, "LINK_COMMENT", data[3], "コメント","コメント",20, 0);
}
//設定ボタン
ccreateButton(lw, "保存", "内容を保存します", function() {
var v = "";
if( data.length == 3 ) {
v = cgetTextBoxValue("LINK_TITLE") + "\n"
+ cgetTextBoxValue("LINK_X") + "\n"
+ cgetTextBoxValue("LINK_Y");
}else if( data.length == 4 ) {
v = data[0] + "\n" + data[1] + "\n"
+ cgetTextBoxValue("LINK_TITLE") + "\n"
+ cgetTextBoxValue("LINK_COMMENT");
}
csaveData( "link" + n , v, true );
configMapLinkClose();
resetMapLinks();
});
//削除
ccreateButton(lw, "削除", "削除", function() {
if(!confirm("削除してよろしいですか?") ) return false;
var maplinks = cloadData( "links", 0, true );
for(var i = n+1 ; i < maplinks ; i++) {
var tmp = cloadData( "link" + i, "", true );
csaveData( "link" + (i-1), tmp, true );
}
csaveData( 'links' , maplinks-1, true );
configMapLinkClose();
resetMapLinks();
});
//上に移動
if( n != 0 ) {
ccreateButton(lw, "▲", "上に移動", function() {
var tmp = cloadData( "link" + (n-1), "", true );
csaveData( "link" + (n-1), cloadData( "link" + n, "", true ), true );
csaveData( "link" + n, tmp, true );
configMapLinkClose();
resetMapLinks();
});
}
//下に移動
var maplinks = cloadData( "links", 0, true );
if( n + 1 < maplinks ) {
ccreateButton(lw, "▼", "下に移動", function() {
var tmp = cloadData( "link" + (n+1), "", true );
csaveData( "link" + (n+1), cloadData( "link" + n, "", true ), true );
csaveData( "link" + n, tmp, true );
configMapLinkClose();
resetMapLinks();
});
}
//閉じる
ccreateButton(lw, "閉じる", "閉じる", function() {configMapLinkClose();});
$("beyond_floatpanel").appendChild(lw);
}
function resetMapLinks()
{
var ul = $("beyond_sidebox_xylink_ul");
if( ul ) {
ul.parentNode.removeChild(ul);
}
ul = d.createElement("ul");
ul.id = "beyond_sidebox_xylink_ul";
var maplinks = cloadData( "links", 0, true );
for(var i=0 ; i<maplinks ; i++) {
var tmp = cloadData( "link" + i , "", true );
if( tmp != "" ) {
var li = d.createElement("li");
var data = tmp.split("\n");
if( data.length == 3 ) {
//領地リンク
var link1 = d.createElement("a");
link1.href = caddSessionId("/land.php?x=" + data[1] + "&y=" + data[2] + "#ptop");
link1.title = "表示(" + data[1] + "," + data[2] + ")";
link1.innerHTML = data[0];
link1.style.fontSize = OPT_MAPLINK_FONT_SIZE + "px";
var link2 = d.createElement("a");
link2.href = caddSessionId("/map.php?x=" + data[1] + "&y=" + data[2] + "#ptop");
link2.title="マップ(" + data[1] + "," + data[2] + ")";
var a_m_img = d.createElement("img");
a_m_img.src = img_map;
link2.appendChild(a_m_img);
var m = "";
var dist = cgetDistanceFromBase(data[1], data[2]);
if( dist != -1 ) {
m =" 距離[" + dist.toFixed(2) + "]";
}
var link3 = d.createElement("a");
link3.href = caddSessionId("/facility/castle_send_troop.php?x=" + data[1] + "&y=" + data[2] + "#ptop");
link3.title = "兵を送る(" + data[1] + "," + data[2] + ")" + m;
var a_s_img = d.createElement("img");
a_s_img.src = img_ken;
link3.appendChild(a_s_img);
var link4 = d.createElement("a");
link4.href="javascript:void(0)";
link4.title="設定";
var a_d_img = d.createElement("img");
a_d_img.src = img_hanma;
link4.appendChild(a_d_img);
(function(n){
$e(link4, "click", function(event){configMapLink(n,event);});
})(i);
li.appendChild(link1);
li.appendChild(link2);
li.appendChild(link3);
li.appendChild(link4);
ul.appendChild(li);
}else if( data.length == 4 ) {
//君主リンク
var img = d.createElement("img");
img.src = img_user;
li.appendChild(img);
var link1 = d.createElement("a");
link1.href = caddSessionId("/user/index.php?user_id=" + data[0] + "#ptop");
link1.title = data[3];
link1.innerHTML = data[2];
link1.style.fontSize = OPT_MAPLINK_FONT_SIZE + "px";
var link2 = d.createElement("a");
link2.href=caddSessionId("/message/new.php?user_id=" + data[0] + "#ptop");
link2.title="[" + data[1] + "]宛に書簡を送る";
var a_m_img = d.createElement("img");
a_m_img.src = img_mail;
link2.appendChild(a_m_img);
var link3 = d.createElement("a");
link3.href="javascript:void(0)";
link3.title="設定";
var a_d_img = d.createElement("img");
a_d_img.src = img_hanma;
link3.appendChild(a_d_img);
(function(n){
$e(link3, "click", function(event){configMapLink(n,event);});
})(i);
li.appendChild(link1);
li.appendChild(link2);
li.appendChild(link3);
ul.appendChild(li);
}
}
}
$("beyond_sidebox_xylink_inner").appendChild(ul);
}
//////////////////////
//領地リンクの読み込み・保存機能
//////////////////////
function mapLinkList(evt)
{
if( $("beyond_SaveMapLinkWindow") ) return;
var mc = d.createElement("div");
mc.id = "beyond_SaveMapLinkWindow";
mc.style.position = "absolute";
mc.style.backgroundColor = "blueviolet";
mc.style.border = "outset 2px blueviolet";
mc.style.fontSize = "12px";
mc.style.padding = "15px";
mc.style.zIndex = 1000+1;
mc.style.left = evt.pageX - 250 + "px";
mc.style.top = evt.pageY - 220 + "px";
var ta = d.createElement("textarea");
ta.id = "beyond_SaveMapLinkWindow_text";
ta.rows = 10;
ta.cols = 40;
var txt = "";
var maplinks = cloadData( "links", 0, true );
for(var i=0 ; i<maplinks ; i++) {
var tmp = cloadData( "link" + i , "", true );
if( tmp ) {
txt += tmp.replace(/\n/g, "\t" ) + "\n";
}
}
ta.value = txt;
mc.appendChild(ta);
$e(ta, "keydown", function(event) {
//TAB入力
var kC = event.keyCode ? event.keyCode : event.charCode ? event.charCode : event.which;
if (kC == 9 && !event.shiftKey && !event.ctrlKey && !event.altKey)
{
var oS = this.scrollTop;
var sS = this.selectionStart;
var sE = this.selectionEnd;
this.value = this.value.substring(0, sS) + "\t" + this.value.substr(sE);
this.setSelectionRange(sS + 1, sS + 1);
this.focus();
this.scrollTop = oS;
if (event.preventDefault)
{
event.preventDefault();
}
return false;
}
return true;
} );
var sv = d.createElement("a");
sv.href = "javascript:void(0);";
sv.innerHTML = "保存";
$e(sv, "click", function() {
if( confirm("上書き保存します。よろしいですか?") == false) return;
var ta = $("beyond_SaveMapLinkWindow_text");
if( ta ) {
var lines = ta.value.split("\n");
var saveLines = new Array();
for( var i=0 ; i<lines.length ; i++) {
if( lines[i] == "" ) continue;
var dat = lines[i].split("\t");
if( dat.length != 3 && dat.length != 4 ) {
alert("解析エラーです。処理を中断します。\n( " + lines[i] + " )" );
return;
}
//チェック
if( dat.length == 3 ) {
if( !dat[1].match(/[\-0-9]+/g) || !dat[2].match(/[\-0-9]+/g) ) {
alert("解析エラーです。処理を中断します。\n( " + lines[i] + " )" );
return;
}
}else if ( dat.length == 4 ) {
if( dat[3] == "" && dat[1].match(/[\-0-9]+/g) && dat[2].match(/[\-0-9]+/g) ) {
dat.pop();
}else if( !dat[0].match(/[\-0-9]+/g) ) {
alert("解析エラーです。処理を中断します。\n( " + lines[i] + " )" );
return;
}
}else{
alert("解析エラーです。処理を中断します。\n( " + lines[i] + " )" );
return;
}
var linedata = "";
for( var j=0 ; j<dat.length ; j++ ){
dat[j] = dat[j].replace(/(^\s+)|(\s+$)/g, "");
if( linedata != "" ) {
linedata += "\n";
}
linedata += dat[j];
}
saveLines.push(linedata);
}
//削除
var maplinks = cloadData( "links", 0, true );
for(i=0 ; i<maplinks ; i++) {
cdelData( "link" + i, true );
}
//追加
for(var i=0 ; i<saveLines.length ; i++ ) {
csaveData( "link" + i , saveLines[i], true );
}
csaveData( "links" , saveLines.length, true );
alert("上書き保存しました");
resetMapLinks();
}
});
var cl = d.createElement("a");
cl.href = "javascript:void(0);";
cl.innerHTML = "閉じる";
$e(cl, "click", function() {
var mc = $("beyond_SaveMapLinkWindow");
if( mc ) {
mc.parentNode.removeChild(mc);
}
});
var dv = d.createElement("div");
dv.appendChild(sv);
dv.appendChild(d.createTextNode(" ") );
dv.appendChild(cl);
mc.appendChild(dv);
$("beyond_floatpanel").appendChild(mc);
}
//////////////////////
//座標リンク処理
//////////////////////
function disp_XYLink()
{
var flg_profile_xy = false;
var flg_include_a = false;
//1行コメント
var comment = $a("//*[@id=\"commentList\"]//tr/td[2]");
for(var i=0 ; i< comment.length ; i++) {
setXYLink( comment[i] );
}
//各エレメント
var targetPath = new Array();
if( location.pathname == "/alliance/chat_view.php" ) {
targetPath.push( "//div[@class=\"hitokotoList\"]/p[2]" );
}
if( location.pathname == "/alliance/info.php" ) {
targetPath.push( "//tr[th[contains(text(),\"コメント\")]]/td" );
}
if( location.pathname == "/message/detail.php" ) {
targetPath.push( "//tr[th[contains(text(),\"件名\")]]/td" );
targetPath.push( "//tr[th[contains(text(),\"本文\")]]/td" );
}
if( location.pathname == "/bbs/res_view.php" ||
location.pathname == "/bbs/personal_res_view.php" ) {
targetPath.push( "//th[@class=\"mainTtl\"]/div[@class=\"threadTtl\"]" );
targetPath.push( "//td[@class=\"contents\"]" );
targetPath.push( "//table[@class=\"commonTables\"]//tr[2]/td[1]" );
}
if( location.pathname == "/user/index.php" || location.pathname == "/user/" ) {
if( URL_PARAM.user_id && USER_ID != URL_PARAM.user_id ) {
targetPath.push( "//table[@class=\"commonTables\"]//tr[position()>12]/td[2]" );
flg_profile_xy = true;
}
}
for(var i=0 ; i< targetPath.length ; i++) {
var elms = $a(targetPath[i]);
for(var j=0 ; j<elms.length ; j++) {
setXYLink(elms[j]);
}
}
function setXYLink(elm) {
var tmpHTML = elm.innerHTML;
var reg = /[\(|(|【]([\-0-90-9]+)( *[,&、・,] *)([\-0-90-9]+)[\)|)|】]/g;
if(OPT_XYLINK_NK || flg_profile_xy ) {
reg = /([\-0-90-9]+)( *[\,&、・,] *)([\-0-90-9]+)/g;
}
var elm_child_a = null;
if( flg_include_a ) {
elm_child_a = $x("descendant::a", elm);
}
tmpHTML = tmpHTML.replace(reg, XYLinkReg );
elm.innerHTML = tmpHTML;
function XYLinkReg() {
var img_send = IMG_DIR + "report/icon_go.gif";
var img_mp = IMG_DIR + "report/icon_scout.gif";
var m = "";
var dist = cgetDistanceFromBase(arguments[2], arguments[4]);
if( dist != -1 ) {
m = " 距離[" + dist.toFixed(2) + "]";
}
var x = toHankaku(arguments[1]);
var y = toHankaku(arguments[3]);
var disp = x + arguments[2] + y;
if( !OPT_XYLINK_NK && !flg_profile_xy) disp = "(" + disp + ")";
var txt = '<a href="'+caddSessionId('/land.php?x=' + x + '&y=' + y + '#ptop')+'" title="表示" style="display:inline;">' + disp + '</a>';
txt += '<a href="'+caddSessionId('/map.php?x=' + x + '&y=' + y + '#ptop')+'" title="マップ' + x + ',' + y + '" style="display:inline;"><img src="' + img_mp + '" style="width:14px; height:14px; vertical-align:middle;"></a>';
txt += '<a href="'+caddSessionId('/facility/castle_send_troop.php?x=' + x + '&y=' + y + '#ptop')+'" title="兵を送る' + x + ',' + y + m + '" style="display:inline;"><img src="' + img_send + '" style="width:14px; height:14px; vertical-align:middle;"></a>';
//Aの入れ子は連結し直してみる
if( elm_child_a ) {
txt = '</a>' + txt + '<a href="' + elm_child_a.href + '">';
// GM_log(txt);
}
return txt;
function toHankaku(str) {
return str.replace(/[0-9]/g, function(str){return String.fromCharCode(str.charCodeAt(0)-65248);});
}
}
}
}
//////////////////////
//兵力整形
//////////////////////
function disp_TTable()
{
if( location.pathname == "/message/inbox.php" ||
location.pathname == "/message/outbox.php" ||
location.pathname == "/message/new.php" ||
location.pathname == "/bbs/topic_view.php" ||
location.pathname == "/facility/unit_status.php" ||
location.pathname == "/facility/castle_send_troop.php") {
return ;
}
//■仮対処
var ta = $a("//textarea");
for(var i=0 ; i<ta.length ; i++) {
if( ta[i].innerHTML != "" ) return;
}
var targetPath = [
"//div[@id='commentList']",
// "//td[@class='contents']",
"//table[@class='commonTables']",
"//p[@class='hitokoto']",
// "//span[@class='xy']"
];
for(var i=0 ; i<targetPath.length ; i++) {
var elms = $a(targetPath[i]);
for(var j=0 ; j<elms.length ; j++) {
setTTable(elms[j]);
}
}
function setTTable(elm) {
var tmpHTML = elm.innerHTML;
// tmpHTML = tmpHTML.replace(/[\n\r]/g,"");
var reg = /剣兵\s+槍兵\s+弓兵\s+騎兵\s+矛槍兵\s+弩兵\s+近衛騎兵\s+斥候\s+斥候騎兵\s+衝車\s+投石機\s+武将.*(\n兵士\s+|\n)(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+).*(\n死傷\s+|\n)(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)/g;
tmpHTML = tmpHTML.replace(reg,
function() {
var txt = "<table class='tables'><tr><th class='solClass'> </th>" +
"<th class='solClass'>剣兵</th><th class='solClass'>槍兵</th><th class='solClass'>弓兵</th><th class='solClass'>騎兵</th>" +
"<th class='solClass'>矛槍兵</th><th class='solClass'>弩兵</th><th class='solClass'>近衛騎兵</th><th class='solClass'>斥候</th>" +
"<th class='solClass'>斥候騎兵</th><th class='solClass'>衝車</th><th class='solClass'>投石機</th><th class='solClass'>武将</th>" +
"</tr><tr><th class='solClass'>兵士</th>";
for(var i = 2 ; i<= 13 ; i++) {
txt += "<td>" + arguments[i] + "</td>";
}
txt += "</tr><tr><th class='solClass'>死傷</th>";
for(var i = 15 ; i<= 26 ; i++) {
txt += "<td>" + arguments[i] + "</td>";
}
txt += "</tr></table>";
return txt;
} );
reg = /剣兵\s+槍兵\s+弓兵\s+騎兵\s+矛槍兵\s+弩兵\s+近衛騎兵\s+斥候\s+斥候騎兵\s+衝車\s+投石機\s+武将.*(\n兵士\s+|\n)(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)/g;
tmpHTML = tmpHTML.replace(reg ,
function() {
var txt = "<table class='tables'><tr><th class='solClass'> </th>" +
"<th class='solClass'>剣兵</th><th class='solClass'>槍兵</th><th class='solClass'>弓兵</th><th class='solClass'>騎兵</th>" +
"<th class='solClass'>矛槍兵</th><th class='solClass'>弩兵</th><th class='solClass'>近衛騎兵</th><th class='solClass'>斥候</th>" +
"<th class='solClass'>斥候騎兵</th><th class='solClass'>衝車</th><th class='solClass'>投石機</th><th class='solClass'>武将</th>" +
"</tr><tr><th class='solClass'>兵士</th>";
for(var i = 2 ; i<= 13 ; i++) {
txt += "<td>" + arguments[i] + "</td>";
}
txt += "</tr></table>";
return txt;
} );
elm.innerHTML = tmpHTML;
}
}
//////////////////////
//兵力合計
//////////////////////
function disp_Details()
{
if( location.pathname != "/alliance/detail.php" &&
location.pathname != "/report/detail.php") return ;
var troops = [[0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0]] ;
var tbls = $a("//table[@class=\"tables\"][@summary=\"防御者\"]");
if(tbls.length <2 ) return;
for(var i=0 ; i<tbls.length ; i++) {
var trs = $a("descendant::tr", tbls[i]);
if( trs.length >=4 ) {
for(var j=0; j < 2 ; j++) {
var tds = $a("descendant::td", trs[j+2]);
if(tds.length != 12) continue;
for(var k=0 ; k<tds.length ; k++) {
troops[j][k] += parseInt(tds[k].innerHTML,10);
}
}
}
}
var tbl = d.createElement("table");
tbl.className = "tables";
var tr = d.createElement("tr");
var th = d.createElement("th");
th.className = "attacker";
th.appendChild(d.createTextNode("防御合計"));
tr.appendChild(th);
th = d.createElement("th");
th.className = "attackerBase";
th.setAttribute("colspan","12");
tr.appendChild(th);
tbl.appendChild(tr);
var tr = d.createElement("tr");
var thtxt = ["剣兵","槍兵","弓兵","騎兵","矛槍兵","弩兵","近衛騎兵","斥候","斥候騎兵","衝車","投石機","武将" ];
var th = d.createElement("th");
th.className = "blank";
tr.appendChild(th);
for(var i=0; i<12 ; i++){
th = d.createElement("th");
th.className = "solClass";
th.appendChild(d.createTextNode(thtxt[i]));
tr.appendChild(th);
}
tbl.appendChild(tr);
var hd =["兵士","死傷"];
for(var i=0 ; i<2 ; i++) {
var tr = d.createElement("tr");
var th = d.createElement("th");
th.className = "blank";
th.appendChild(d.createTextNode(hd[i]));
tr.appendChild(th);
for(var j=0; j<12 ; j++){
var td = d.createElement("td");
td.appendChild(d.createTextNode(troops[i][j]));
tr.appendChild(td);
}
tbl.appendChild(tr);
}
if( OPT_DETAILS_UP == 0 ) {
tbls[tbls.length-1].parentNode.insertBefore(tbl, tbls[tbls.length-1].nextSibling);
} else {
tbls[0].parentNode.insertBefore(tbl, tbls[0]);
}
}
//////////////////////
//デッキ
//////////////////////
function disp_Deck()
{
if( location.pathname != "/card/deck.php" ) return ;
if( OPT_DECK_SET ) dispDeckSet();
function dispDeckSet() {
var nam = cgetCurrentBaseName();
var sels = $a("//select",d);
for(var i=0 ; i<sels.length ; i++) {
if( !sels[i].id.match(/selected_village_/) ) continue;
var opts = $a("descendant::option",sels[i]);
for(var j=0 ; j<opts.length ; j++) {
if(opts[j].innerHTML == nam ) {
opts[j].selected = true;
}
}
}
}
}
//////////////////////
//完了時刻の表示(建物)
//////////////////////
function disp_CompleteTimeBuild()
{
var lastTime = cgetNow();
var villageId = cgetCurrentVillageId();
if( location.pathname == "/village.php" ) {
//最終建築時間の保存
var spans = $a('id("actionLog")//li//span[@class="buildStatus" and (contains(text(),"建設中") or contains(text(),"建設準備中"))]/../span[@class="buildClock"]');
if (!spans || spans.length == 0) {
cdelData("lastBuildTime"+villageId,true);
return;
}
var saveDate = new Date(caddDate(lastTime, spans[spans.length - 1].innerHTML.replace(/^[\s| ]*|[\s| ]*$/,"")).replace(/-/g,"/"));
saveDate.setMinutes(saveDate.getMinutes() + 1);
csaveData( "lastBuildTime"+villageId, saveDate.toString(), true);
return;
}
var reg = /\/facility\/facility.php|\/facility\/select_facility.php|\/facility\/castle.php/;
if(!location.pathname.match(reg) || d.referrer.match(reg)) {
return;
}
var spans = new Array();
var tds = $a('id("gray02Wrapper")//th[contains(text(),"所要時間")]//..//td[@class="contents"]');
for(var i=0 ; i<tds.length ; i++){
var td = tds[i];
var th = $x('.//th[contains(text(),"建設に必要な食糧消費量") or contains(text(),"建設に必要な資材")]', td.parentNode.parentNode);
if (th) {
var span = d.createElement("span");
td.appendChild(span);
spans.push(span);
}
}
if (!spans.length) return;
lastTime = new Date(cloadData( "lastBuildTime"+villageId, lastTime.toString(), true));
timerfunc();
function timerfunc() {
var now = cgetNow();
if (lastTime < now) {
lastTime = now;
}
for(var i = 0 ; i<spans.length ; i++){
var span = spans[i];
var ctime = caddDate(lastTime, span.parentNode.firstChild.nodeValue);
if( ctime ) {
span.innerHTML = " (" + ctime + "完了)";
}
}
setTimeout(timerfunc,1000);
}
}
//////////////////////
//完了時刻の表示(ユニット)
//////////////////////
function disp_CompleteTimeUnit()
{
if( location.pathname == "/facility/facility.php" ) {
//ユニット作成の最終時刻の保存
var lastTd = $x('id("gray02Wrapper")/table[@class="commonTables"][2]//tr[last()]/td');
if( !lastTd ) {
cdelData("lastUnitTime",true);
return;
}
csaveData( "lastUnitTime", new Date(lastTd.innerHTML.replace(/^[\s|\n|\r|\t]*|[\s|\n|\r|\t]*$/,"").replace(/-/g,"/")).toString(), true);
return;
}
if( location.pathname != "/facility/unit_confirm.php" ) {
return;
}
var td = $x('//table[@class="commonTables" and @summary="object"]//th[contains(text(),"作成するまでに必要な時間")]/../td');
if (!td) return;
var span = d.createElement("span");
td.appendChild(span);
var lastTime = new Date(cloadData( "lastUnitTime", null, true ));
timerfunc();
function timerfunc() {
var now = cgetNow();
if (lastTime < now) {
lastTime = now;
}
var ctime = caddDate(lastTime, span.parentNode.firstChild.nodeValue);
if( ctime ) {
span.innerHTML = " (" + ctime + "完了)";
}
setTimeout( timerfunc, 1000);
}
}
//////////////////////
//同盟表示の改善
//////////////////////
function disp_AllianceInfo()
{
if( OPT_ALLY_XY ) allianceXY();
if( OPT_ALLY_IS ) allianceSort();
if( OPT_ALLY_CSV ) 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 == "beyond_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 allianceXY()
{
//座標の収集
if( location.pathname =="/user/" || location.pathname == "/user/index.php" ) {
if( USER_ID || URLPARAM.user_id ) {
var uid, aid;
if( URL_PARAM.user_id ) uid = URL_PARAM.user_id;
else uid = USER_ID;
var allytd = $x("//table[@class=\"commonTables\"]//tr[3]//td[4]");
if( !allytd ) return;
var aids = allytd.innerHTML.match(/\/alliance\/info\.php\?id\=(\d+)/);
if( !aids ) return;
aid = aids[1];
var table = $x("//table[@class=\"commonTables\"]");
if( table ) {
var xy = getXYfromUserHTML(table.innerHTML);
if( xy ) {
csetUserXY(aid, uid, xy.x, xy.y);
}
}
}
}
//表示
if( location.pathname == "/alliance/info.php" ) {
if( ALLY_ID || URL_PARAM.id ) {
var aid;
if( URL_PARAM.id ) aid = URL_PARAM.id;
else aid = ALLY_ID;
var head1 = $x("//table[@summary=\"ランキング\"]//tr[1]//th[@class=\"ttl\"]");
if( head1 ) {
head1.setAttribute("colspan", parseInt(head1.getAttribute("colspan"),10) + 1 + "");
}
var head2 = $x("//table[@summary=\"ランキング\"]//tr[2]");
if( head2 ) {
var th = d.createElement("th");
th.className = "all";
th.style.width = "110px";
th.id = "beyond_ally_xy";
th.innerHTML = "座標";
var lnk = d.createElement("a");
lnk.href = "javascript:void(0)";
lnk.innerHTML ="(GET)";
lnk.style.fontSize = "9px";
var running = false;
$e(lnk, "click", function() {
if( running ) return ;
if( confirm("同盟員の情報を一気に取得するためサーバに負荷をかけます。\n何度も実行するとDOS攻撃と同じなので、実行には注意して下さい") == false ) return;
running = true;
// cdeleteUserXY(aid);
var trs = $a("//table[@summary=\"ランキング\"]//tr[position()>2]");
var now_num = 0;
var all_num = trs.length;
window.setTimeout(timerFunc, 0);
function timerFunc()
{
var idtd = $x("descendant::td[2]",trs[now_num]);
if( !idtd ) {
alert("ページフォーマットが変わったみたい");
return ;
}
var ids = idtd.innerHTML.match(/\/user\/\?user_id\=(\d+)/);
if( !ids ) {
alert("ページフォーマットが変わったみたい");
return ;
}
var tmp = $("beyond_xylink_" + ids[1] );
if( tmp.innerHTML != " " ) {
now_num ++;
if( now_num < all_num ) {
window.setTimeout(timerFunc, 0);
}else{
running = false;
alert("全ての座標を取得しました");
}
return ;
}
cajaxRequest("/user/?user_id=" + ids[1], "GET", "", function(req) {
var xytd = $("beyond_xylink_" + ids[1] );
if(xytd) {
var xy = getXYfromUserHTML(req.responseText);
if( xy ) {
csetUserXY(aid, ids[1], xy.x, xy.y);
xytd.innerHTML = cgetXYHtml(xy.x, xy.y );
}
}
now_num ++;
if( now_num < all_num ) {
window.setTimeout(timerFunc, 0);
}else{
running = false;
alert("全ての座標を取得しました");
}
});
}
});
th.appendChild(lnk);
head2.appendChild(th);
}
var trs = $a("//table[@summary=\"ランキング\"]//tr[position()>2]");
var xylists = cloadData( "allyXYList" + aid, "[]", true, true );
//ハッシュに書き換え
var xylist = new Array();
for(var i=0 ; i<xylists.length ; i++) {
xylist["id" + xylists[i].id ] = {"x":xylists[i].x, "y":xylists[i].y};
if( xylist["id" + xylists[i].id].x == null ) xylist["id" + xylists[i].id].x = 0;
if( xylist["id" + xylists[i].id].y == null ) xylist["id" + xylists[i].id].y = 0;
}
for(var i=0; i<trs.length ; i++) {
var idtd = $x("descendant::td[2]",trs[i]);
if( !idtd ) continue;
var ids = idtd.innerHTML.match(/\/user\/\?user_id\=(\d+)/);
if( !ids ) continue;
var td = d.createElement("td");
td.id = "beyond_xylink_" + ids[1];
if( xylist["id" + ids[1] ] ) {
td.innerHTML = cgetXYHtml(xylist["id" + ids[1] ].x, xylist["id" + ids[1] ].y);
}else{
td.innerHTML =" ";
}
trs[i].appendChild(td);
var yaku = $x("descendant::td[7]",trs[i]);
if( yaku.innerHTML.match(/盟主補佐/) ) {
//盟主補佐がぎりぎり2行になるので後ろの空白カット
yaku.innerHTML = yaku.innerHTML.replace(/[  \t\r\n]+$/g, "");
}
}
}
}
}
function getXYfromUserHTML(html)
{
var xy = html.match(/<\/a>\(本拠地\)<\/td>[^<]*<td[^>]*>([\-0-9]+),([\-0-9]+)<\/td>/);
if( xy ) {
return {"x":parseInt(xy[1],10),"y":parseInt(xy[2],10)};
}
return null;
}
function getDatafromUserHTML(html)
{
var ret = [];
var tmp = html.match(/<td[^>]*>ランク<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) return null;
ret["all_rank"] = parseInt(tmp[1] ,10);
tmp = html.match(/<td[^>]*>総合<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) return null;
ret["all_point"] = parseInt(tmp[1] ,10);
tmp = html.match(/<td[^>]*>総人口<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) return null;
ret["jinko"] = parseInt(tmp[1] ,10);
tmp = html.match(/<td[^>]*>攻撃<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) return null;
ret["attack"] = parseInt(tmp[1] ,10);
tmp = html.match(/<td[^>]*>防御<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) return null;
ret["defence"] = parseInt(tmp[1] ,10);
tmp = html.match(/<td[^>]*>撃破スコア<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) return null;
ret["attack_score"] = parseInt(tmp[1] ,10);
tmp = html.match(/<td[^>]*>防衛スコア<\/td>[^<]*<td[^>]*>([0-9]+)<\/td>/);
if( !tmp ) return null;
ret["defence_score"] = parseInt(tmp[1] ,10);
tmp = html.match(/<\/a>\(本拠地\)<\/td>[^<]*<td[^>]*>([\-0-9]+),([\-0-9]+)<\/td>/);
if ( !tmp ) return null;
ret["x"] = parseInt(tmp[1],10);
ret["y"] = parseInt(tmp[2],10);
return ret;
}
function getXYListfromUserHTML(html)
{
var ret = new Array();
var tmp = html.match(/<td[^>]*>君主<\/td>[^<]*<td[^>]*>([^<\s]+)/);
if( !tmp ) return null;
var user_name = tmp[1];
tmp = html.match(/<td[^>]*>同盟<\/td>[^<]*<td[^>]*><a href="[^"]*">([^<]+)<\/a><\/td>/);
if( !tmp ) return;
var ally_name = tmp[1];
var pos;
//var reg = /<a href=\"(?:\.\.\/land\.php|\.\.\/village_change\.php).*\">([\s\S]+?)<\/a>[\s\S]+?<td>([\-0-9]+),([\-0-9]+)<\/td>[\s\S]+?<td>([0-9]+|\&nbsp\;)<\/td>/;
var reg = /<a href="\.\.\/(?:land|village_change)\.php[^"]*">\s*([^<\s]+)\s*<\/a>[^<]*<\/td>[^<]*<td[^>]*>([\-0-9]+),([\-0-9]+)<\/td>[^<]*<td[^>]*>([0-9]+|&nbsp;)<\/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] == "&nbsp;" ) 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;
/*
if( URL_PARAM.id ) {
if( ALLY_ID != URL_PARAM.id ) {
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 lnk = d.createElement("a");
lnk.href = "javascript:void(0)";
lnk.innerHTML ="同盟員詳細情報csv";
tbl.parentNode.insertBefore(lnk, tbl.nextSibling);
$e(lnk, "click", function() {
if( $("beyond_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 = $("beyond_csvWindow_message");
if( !elm_msg ) return;
var elm_csv = $("beyond_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( !$("beyond_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 = $("beyond_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("取得に失敗しました" );
}
}, function(req){
alert("サーバからエラーが返りましたよ" );
});
}
});
var lnk2 = d.createElement("a");
lnk2.href = "javascript:void(0)";
lnk2.innerHTML ="同盟員全領地座標csv";
tbl.parentNode.insertBefore(lnk2, lnk.nextSibling);
tbl.parentNode.insertBefore(d.createTextNode("  "), lnk2);
$e(lnk2, "click", function() {
if( $("beyond_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 = $("beyond_csvWindow_message");
if( !elm_msg ) return;
var elm_csv = $("beyond_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( !$("beyond_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 = $("beyond_csvWindow");
if( cc ) cc.parentNode.removeChild(cc);
cc = d.createElement("div");
cc.id = "beyond_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 = "beyond_csvWindow_message";
cc.appendChild(dv);
var tx = d.createElement("textarea");
tx.id = "beyond_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 = $("beyond_csvWindow");
if( cc ) cc.parentNode.removeChild(cc);
});
$("beyond_floatpanel").appendChild(cc);
}
}
}
//////////////////////
//資源の合計
//////////////////////
function disp_ResourcesTotal()
{
var white_all = RES_GROW_W.wood + RES_GROW_W.stone + RES_GROW_W.iron + RES_GROW_W.rice;
var blue_all = RES_GROW_B.wood + RES_GROW_B.stone + RES_GROW_B.iron + RES_GROW_B.rice;
var all_all = RES_GROW.wood + RES_GROW.stone + RES_GROW.iron + RES_GROW.rice;
var box = $x('id("sidebar")//span[@class="increase" or @class="resource"]/../.. | id("status_left")//p[@class="status_bottom"]');
if( !box ) return;
var txt = d.createTextNode("合計 " + white_all);
var sp = d.createElement("span");
sp.className = "increase";
sp.appendChild(d.createTextNode(" +" + blue_all) );
var item = txt;
var addSpDoc = box;
if (!isNarrow) {
item = d.createElement("li");
item.appendChild(txt);
item.title = "総合計 " + all_all;
addSpDoc = item;
}
box.appendChild(item);
addSpDoc.appendChild(sp);
}
//////////////////////
//建設/破棄一覧
//////////////////////
function disp_RemoveList()
{
var img_x = 'data:image/gif;base64,'+
'R0lGODlhPAA8AIAAAP/MM////yH5BAUUAAEALAAAAAA8ADwAAAJ4jI+py+0Po5y02ouz3rz7D4bi'+
'SJbmiabqyrbuC8fyTNf2jef6zvf+DQgGJwCV8PgQro7IRXPJLCqerGjCCmMaotIsVzv7KmtiHNd8'+
'tpVp4nEsDX6lt+7W/EBNfRl1PZY/ZPTXEOjXR1iIcuiQ+OP4CBkpOUlZWVMAADs=';
var img_m = 'data:image/gif;base64,'+
'R0lGODlhPAA8AIAAAP/MM////yH5BAUUAAEALAAAAAA8ADwAAAKpjI+py+0Po5y02ouz3rz7D4bi'+
'SJbmiabqyrbuC8fyTNf2jef6zvc5AAwKacJiMTZcJFnLRvP0dAZT0wOQcQ1UTVkrAPs1dElbcVjR'+
'LYuuxmGbfV7D31q6+jM2582JvSdvhBZXRxYHR4gAOIh3luWIqFj4lWYYNnbHKJhoWckVqdToB/Kp'+
'yQd1uVjHmSrnmNq24saqOlsSpVd7+nbbspvrAxwsPExcbBxQAAA7';
var img_t = 'data:image/gif;base64,'+
'R0lGODlhPAA8AIAAAP/MM////yH5BAUUAAEALAAAAAA8ADwAAAKnjI+py+0Po5y02ouz3rz7D4bi'+
'SJbmiabqyrbuC8fyTNf2jef6zvc5AAwKacJiMTZcJFnLAxDRPA2fTkAiSgpWoVaFVto1JI1ccDhA'+
'FR+rZ1Hamka3y9m3XBu/5j9x8j265/HW5EfnFhYIkcgxaOTYNydI9UjJVrL39bDYkfn3yBUJ0kh5'+
'tikJh6qEaHraRYrKyof32qmCpRZbR0tU6eP7CxwsPEz8UAAAOw==';
var img_lup = 'data:image/gif;base64,'+
'R0lGODlhPAA8AIAAAP/MM////yH5BAUUAAEALAAAAAA8ADwAAAKfjI+py+0Po5y02ouz3rz7D4bi'+
'SJbmiabqyrbuC8fyTNf2jef6zvc9APgBg7rhMGc03o7AwJH2bDqlsef0YH1Rr1iiaqsAJ8SfbNi7'+
'MJfRafaZRK7EOVtw867kiups/DTq5mFlF+SHFyjoRXiVpDcCOFYo2YW4ZqAkyaRYuZZZ+Of3l5IH'+
'QYpiyoA6qnbJ+pUEO7cS6+pje4ubq7vLi1AAADs=';
if( location.pathname == "/land.php" && URL_PARAM.x && URL_PARAM.y ) {
var rmtime = d.body.innerHTML.match(/(現在領地を破棄中です|現在村を建設中です|現在砦を建設中です).*\n(\d+-\d+-\d+ \d+:\d+:\d+)/ );
if( rmtime ) {
if( rmtime[1] == "現在領地を破棄中です" ) {
addList(rmtime[2], 0, URL_PARAM.x, URL_PARAM.y );
}else if( rmtime[1] == "現在村を建設中です" ) {
addList(rmtime[2], 3, URL_PARAM.x, URL_PARAM.y );
}else if( rmtime[1] == "現在砦を建設中です" ) {
addList(rmtime[2], 4, URL_PARAM.x, URL_PARAM.y );
}
}else{
rmtime = d.body.innerHTML.match(/現在領地をレベルアップ中です.*\n(\d+-\d+-\d+ \d+:\d+:\d+)に完了します。/ );
if( rmtime ) {
addList(rmtime[1], 5, URL_PARAM.x, URL_PARAM.y );
}else {
delList(0, URL_PARAM.x, URL_PARAM.y);
}
}
}
if( location.pathname == "/facility/castle.php" ) {
var xy = cgetCurrentBaseXY();
var rmtime = d.body.innerHTML.match(/(村を削除中です。|砦を削除中です。)[^\d]*(\d+-\d+-\d+ \d+:\d+:\d+)に完了します。/);
if( rmtime ) {
if( rmtime[1] == "村を削除中です。" ) {
addList(rmtime[2], 1, xy.x, xy.y );
}else if( rmtime[1] == "砦を削除中です。" ) {
addList(rmtime[2], 2, xy.x, xy.y );
}
}else{
delList(1,xy.x, xy.y);
}
}
if( location.pathname == "/map.php" ) {
//地図に表示
var type = 1;
if( $x("//div[@id=\"change-map-scale\"]/ul/li[@class=\"sort15 now\"]") ) type=2;
else if( $x("//div[@id=\"change-map-scale\"]/ul/li[@class=\"sort20 now\"]") ) type=3;
var lists = cloadData("RemoveList", "[]", true, true);
lists = checkList(lists); //時間を過ぎたものを削除
if( lists.length ) {
var cx = parseInt(URL_PARAM.x,10);
var cy = parseInt(URL_PARAM.y,10);
if( cx > MAP_X_MAX ) cx = MAP_X_MAX;
if( cx < MAP_X_MIN ) cx = MAP_X_MIN;
if( cy > MAP_Y_MAX ) cy = MAP_Y_MAX;
if( cy < MAP_Y_MIN ) cy = MAP_Y_MIN;
var map = $x("//div[@id=\"mapsAll\"]");
for(var i=0 ; i<lists.length ; i++) {
var no = cgetMapNofromXY(lists[i].x, lists[i].y, cx, cy, type );
if( !no ) continue;
var img_src;
if( lists[i].kind == 3) img_src = img_m;
else if(lists[i].kind == 4 ) img_src = img_t;
else if(lists[i].kind == 5 ) img_src = img_lup;
else img_src = img_x;
var img = document.createElement("img");
img.className = "mapAll" + no;
img.src = img_src;
map.appendChild(img);
}
}
}
//パネルに表示
var icon_rl = 'data:image/gif;base64,'+
'R0lGODlhEQAPALMAAAD/ANO3SQbOKKyTQxqvSjKgYAivNwCZAHdrPBVwFVNTUS1NLTMzMwAAAAAA'+
'AAAAACH5BAQUAP8ALAAAAAARAA8AAARKkMlJq50npzuXAKDALYsBnoBhHWgrVmyLIkOgSIl8Bnww'+
'TDpCr3djfHbD4Y9hOhWSQ8kC9YTyEFKBwICw9i5WLKfWW3IYNISYEgEAOw==';
var elms = ccreateSideBox("beyond_sidebox_removelist", icon_rl, "建設/破棄リスト");
var lists = cloadData("RemoveList", "[]", true, true);
lists = checkList(lists); //時間を過ぎたものを削除
if( lists.length == 0 ) return;
var ul = d.createElement("ul");
for(var i=0 ; i<lists.length ; i++) {
var li = d.createElement("li");
//アイコン
var title = "";
switch(lists[i].kind){
case 0: title = "領地破棄"; break;
case 1: title = "村破棄"; break;
case 2: title = "砦破棄"; break;
case 3: title = "村作成"; break;
case 4: title = "砦作成"; break;
case 5: title = "レベルアップ"; break;
}
var icon = "";
if( lists[i].kind == 1 || lists[i].kind == 3 ) { //村破棄or村作成
icon = IMG_DIR + "panel/village_b_l.png";
}else if( lists[i].kind == 2 || lists[i].kind == 4 ) { //砦破棄or砦作成
icon = IMG_DIR + "panel/fort_b_l.png";
}else{
icon = IMG_DIR + "panel/territory_b_s.png";
}
var addHtml = '<img src="' + icon + '" style="width:20px; height:20px;" title="' + title + '">';
var sizestyle = "";
if( lists[i].kind == 0 || lists[i].kind == 1 || lists[i].kind == 2 ) { //領地破棄or村破棄or砦破棄
addHtml += '<img src ="' + img_x + '" style="position:relative; left:-20px; width:20px; height:20px;" title="' + title + '">';
sizestyle = ' style="position:relative; left:-20px;"';
}
if( lists[i].kind == 5 ) { //領地LvUp
addHtml += '<img src ="' + img_lup + '" style="position:relative; left:-20px; width:20px; height:20px;" title="' + title + '">';
sizestyle = ' style="position:relative; left:-20px;"';
}
addHtml += '<a href="'+caddSessionId('/land.php?x=' + lists[i].x + '&y=' + lists[i].y +'#ptop')+'" title="表示"'+ sizestyle + '>' + lists[i].time.substr(-8) + '</a>';
addHtml += '<a href="'+caddSessionId('/map.php?x=' + lists[i].x + '&y=' + lists[i].y +'#ptop')+'" title="マップ(' + lists[i].x + ',' + lists[i].y + ')"' + sizestyle + '>';
addHtml += '<img src="' + img_map + '" style="padding-left:2px;"></a>';
li.innerHTML = addHtml;
ul.appendChild(li);
}
elms.sideBoxInner.appendChild(ul);
function addList(tim, kind, x, y) //kind=0:領地破棄 1:村破棄 2:砦破棄 3:村作成 4:砦作成 5:領地LvUp
{
var lists = cloadData("RemoveList", "[]", true, true);
for(var i=0 ; i<lists.length ; i++) {
if(lists[i].x == x && lists[i].y == y ) {
return;
}
}
lists.push({"x":x, "y":y, "time":tim, "kind":kind } );
lists.sort( function(a,b){
if(a.time > b.time) return 1;
if(a.time < b.time) return -1;
return 0;});
csaveData( "RemoveList", lists, true, true );
}
function delList(kind, x, y) //kind=0:land 1:castle
{
var lists = cloadData("RemoveList", "[]", true, true);
for(var i=0 ; i<lists.length ; i++) {
if(lists[i].x == x && lists[i].y == y ) {
if( ( ( lists[i].kind == 1 || lists[i].kind == 2 ) && kind == 1 ) ||
( ( lists[i].kind == 0 || lists[i].kind == 3 || lists[i].kind == 4 || lists[i].kind == 5 ) && kind == 0 ) ) {
lists.splice(i,1);
csaveData( "RemoveList", lists, true, true );
break;
}
}
}
}
function checkList(lists)
{
var dt = new Date();
var ntime = dt.getFullYear() + "-" +
(dt.getMonth()+101).toString().substr(-2) + "-" +
(dt.getDate()+100).toString().substr(-2) + " " +
(dt.getHours()+100).toString().substr(-2) + ":" +
(dt.getMinutes()+100).toString().substr(-2) + ":" +
(dt.getSeconds()+100).toString().substr(-2);
var str1 = "";
var str2 = "";
var str3 = "";
var str4 = "";
for(var i=0 ; i<lists.length ; i++) {
if( lists[i].time < ntime ) {
if ( lists[i].kind == 1 || lists[i].kind == 2 ) {
str2 += "(" + lists[i].x + "," + lists[i].y + ")\n";
}else if ( lists[i].kind == 3 || lists[i].kind == 4 ) {
str3 += "(" + lists[i].x + "," + lists[i].y + ")\n";
}else if ( lists[i].kind == 5 ) {
//LevelUp完了
str4 += "(" + lists[i].x + "," + lists[i].y + ")\n";
csetMyLevel(lists[i].x, lists[i].y, -1);
}else {
str1 += "(" + lists[i].x + "," + lists[i].y + ")\n";
}
lists.splice(i,1);
i--;
}
}
if( str1 || str2 || str3 || str4 ) {
var msg = "";
if( str1) msg += "以下の領地が破棄されました\n" + str1;
if( str2) msg += "以下の拠点が破棄されました\n" + str2;
if( str3) msg += "以下の拠点が作成されました\n" + str3;
if( str4) msg += "以下の拠点がレベルアップしました\n" + str4;
csaveData( "RemoveList", lists, true, true );
alert(msg);
}
return lists;
}
}
//////////////////////
//資源の残り時間
//////////////////////
function disp_ResourcesTime()
{
var flag_cost = false;
if( location.pathname == "/facility/facility.php" ||
location.pathname == "/facility/select_facility.php" ||
location.pathname == "/facility/castle.php" ||
location.pathname == "/facility/unit_confirm.php") {
flag_cost = true;
}
var names = ["wood", "stone", "iron", "rice"];
var resources = {
wood : {
base : null,
timer : null
},
stone : {
base : null,
timer : null
},
iron : {
base : null,
timer : null
},
rice : {
base : null,
timer : null
},
fame : {
base : null,
timer : null
}
};
//status_leftとstatus_rightの幅を変更
var stat_left = $("status_left");
var stat_right = $("status_right");
if( stat_left && stat_right ) {
stat_left.style.width = "725px"; //670 + 55
stat_right.style.width = "200px"; //255 - 55
}
for(var i = 0; i < names.length;i++) {
var name = names[i];
var base = $(name);
var dv = d.createElement("div");
dv.id = "beyond_restime_" + name;
dv.style.top = (base.offsetTop + 12) + "px";
dv.style.left = base.offsetLeft + "px";
dv.style.position = "absolute";
base.parentNode.appendChild( dv );
resources[name].base = base;
resources[name].timer = dv;
}
//名声
var villageCount = 0;
for (var key in VILLAGES_INFO) {
villageCount++;
}
var bldtbl = [17, 35, 54, 80, 112, 150, 195, 248, 310, 999];
var addTop = 12;
if (OPT_NEXT_MEISEI) {
addTop = -12;
}
for( var i=0 ; i< bldtbl.length ; i++ ){
if( RES_MAX.fame < bldtbl[i] ) {
var base = $x('id("status_left")/img[@title="名声"]');
if( base ) {
var dv = d.createElement("div");
dv.id = "beyond_restime_meisei";
dv.style.top = (base.offsetTop + addTop) + "px";
dv.style.left = (base.offsetLeft + 10) + "px";
dv.style.position = "absolute";
dv.style.color="lightgreen";
if( bldtbl[i] != 999 ) {
dv.innerHTML = "次拠点:" + bldtbl[i];
}
if( villageCount < i + 1 ) {
dv.innerHTML += "(+" + (i + 1 - villageCount ) + ")";
}
base.parentNode.appendChild( dv );
resources.fame.base = base;
resources.fame.timer = dv;
}
break;
}
}
if( flag_cost ) {
var facilityResources = new Array();
var tds = $a('//td[@class="cost"]');
for(var i=0 ; i<tds.length ; i++) {
var td = tds[i];
var spn = $a('./span[@class="normal" or @class="max90"]', td);
if( spn.length != 4 ) continue;
var addObj = new Object();
for(var j=0 ; j < names.length ; j++ ) {
var name = names[j];
var base = spn[j];
var dv = d.createElement("div");
dv.id = "beyond_restime_" + i + "_" + name;
var elem_xy = cgetElementXY(base);
dv.style.top = (elem_xy.y + 9) + "px";
dv.style.left = (elem_xy.x - 18 )+ "px";
dv.style.fontSize = "9px";
dv.style.position = "absolute";
td.appendChild( dv );
addObj[name] = {base : base , timer : dv};
}
facilityResources.push(addObj);
}
}
function ResourcesTimer()
{
cupdateCurrentResources();
//各資源
for(var i=0 ; i<names.length ; i++) {
var name = names[i];
var base = resources[name].base;
var dv = resources[name].timer;
if( dv && base ){
var tim;
if( RES_GROW[ name ] == 0 ) {
tim = "XX:XX:XX";
}else if( RES_GROW[ name ] > 0 ){
tim = getTime(RES_MAX[ name ] - RES_NOW[ name ], RES_GROW[ name ]);
}else{
tim = "-" + getTime(RES_NOW[ name ], 0 - RES_GROW[ name ]);
}
if( tim == "00:00:00" || tim.substr(0,1) == "-" ) dv.style.color="red";
else if( parseInt(tim.substr(0,2), 10) < 1 ) dv.style.color="orange";
else dv.style.color="lightgreen";
dv.innerHTML = "(" + tim + ")";
dv.style.top = (base.offsetTop + 12) + "px";
dv.style.left = base.offsetLeft + "px";
}
}
//名声
var base = resources.fame.base;
var dv = resources.fame.timer;
if( base && dv) {
dv.style.top = (base.offsetTop + addTop) + "px";
dv.style.left = (base.offsetLeft + 10) + "px";
}
if( flag_cost ) {
for(var i=0 ; i < facilityResources.length ; i++) {
var facilityObj = facilityResources[i];
for(var j=0 ; j<names.length ; j++ ) {
var name = names[j];
var base = facilityObj[name].base;
var dv = facilityObj[name].timer;
var needed = parseInt(base.innerHTML,10);
if( needed > RES_MAX[ name ] ) {
dv.style.color="red";
dv.innerHTML = "倉庫不足";
}else if( needed > RES_NOW[ name ] ) {
var tim = getTime(needed - RES_NOW[ name ], RES_GROW[ name ]);
dv.style.color="orange";
dv.innerHTML = "(" + tim + ")";
}else{
dv.style.color="lightgreen";
dv.innerHTML = "残" + (RES_NOW[ name ] - needed);
}
var elem_xy = cgetElementXY(base);
dv.style.top = (elem_xy.y + 9) + "px";
dv.style.left = (elem_xy.x - 18 )+ "px";
}
}
}
window.setTimeout( ResourcesTimer, 1000);
}
ResourcesTimer();
function getTime(res, grow )
{
var tmp = res * 3600 / grow;
var h = Math.floor(tmp / 3600);
var m = Math.floor((tmp - h*3600 ) / 60 );
var s = Math.floor(tmp - h*3600 - m*60 );
var tim = h + ":" +
(m+100).toString().substr(-2) + ":" +
(s+100).toString().substr(-2);
return tim;
}
}
//////////////////////
//地形一覧
//////////////////////
function disp_MapList()
{
if( location.pathname != "/map.php" ) return;
var map_type = 1;
if( $x("//div[@id=\"change-map-scale\"]/ul/li[@class=\"sort15 now\"]") ) map_type=2;
else if( $x("//div[@id=\"change-map-scale\"]/ul/li[@class=\"sort20 now\"]") ) map_type=3;
var base = $("mapbox");
var div =d.createElement("div");
div.id = "beyond_maplist";
div.align = "center";
div.appendChild(d.createElement("br"));
var tmp_t = d.createElement("table");
var tmp_r = d.createElement("tr");
var tmp_d1 = d.createElement("td");
ccreateCheckBox(tmp_d1, "beyond_maplist_kyoten", "1", "拠点","拠点を含めます",0);
var tmp_d2 = d.createElement("td");
ccreateCheckBox(tmp_d2, "beyond_maplist_ryouchi", "1", "領地","領地を含めます",0);
var tmp_d3 = d.createElement("td");
ccreateCheckBox(tmp_d3, "beyond_maplist_akichi", "1", "空き地","空き地を含めます",0);
var tmp_d4 = d.createElement("td");
var a = d.createElement("a");
a.href = "javascript:void(0)";
a.style.color = "black";
a.appendChild(d.createTextNode("<地形一覧表示>"));
tmp_d4.appendChild(a);
tmp_r.appendChild(tmp_d1);
tmp_r.appendChild(tmp_d2);
tmp_r.appendChild(tmp_d3);
tmp_r.appendChild(tmp_d4);
tmp_t.appendChild(tmp_r);
div.appendChild(tmp_t);
base.appendChild(div);
var sheet = d.styleSheets[d.styleSheets.length-1];
sheet.insertRule("table#beyond_maplist_table {border:2px solid black; border-collapse:collapse;}", sheet.cssRules.length);
sheet.insertRule("table#beyond_maplist_table th {background:lightgray; padding: 5px; text-align:center; border:1px solid black;}", sheet.cssRules.length);
sheet.insertRule("table#beyond_maplist_table td {padding: 2px; border:1px solid black;}", sheet.cssRules.length);
$e(a, "click", function() {
var flag_akichi = cgetCheckBoxValue("beyond_maplist_akichi");
var flag_ryouchi = cgetCheckBoxValue("beyond_maplist_ryouchi");
var flag_kyoten = cgetCheckBoxValue("beyond_maplist_kyoten");
var area = $a("//map[@id=\"mapOverlayMap\"]//area");
var lists = new Array();
for(var i=0; i<area.length ; i++) {
var dat = area[i].getAttribute("onmouseover");
dat = dat.replace(/^.*rewrite/, "getTRData");
dat = dat.replace(/\); .*$/, ");");
var trdata;
eval("trdata = " + dat);
if( trdata ) {
lists.push(trdata);
}
}
lists.sort( function(a,b){
if(a.ally == "" && b.ally != "") return 1;
else if(a.ally != "" && b.ally == "") return -1;
if(a.ally > b.ally) return 1;
else if(a.ally < b.ally) return -1;
else{
if( a.user_name > b.user_name) return 1;
else if(a.user_name < b.user_name) return -1;
else{
if( a.kyoten_kind > b.kyoten_kind ) return -1;
else if( a.kyoten_kind < b.kyoten_kind ) return 1;
else {
if( parseInt(a.jinko,10) > parseInt(b.jinko,10) ) return -1;
else if( parseInt(a.jinko,10) < parseInt(b.jinko,10) ) return 1;
else {
if( parseFloat(a.kyori) > parseFloat(b.kyori) ) return 1;
else if( parseFloat(a.kyori) < parseFloat(b.kyori) ) return -1;
else {
if( a.name > b.name ) return 1;
else if( a.name < b.name ) return -1;
else return 0;
}
}
}
}
}
return 0;
});
var tbl = initTable();
for(var i=0 ; i<lists.length ; i++) {
var tr = d.createElement("tr");
var td;
td = d.createElement("td");
td.innerHTML = lists[i].ally;
tr.appendChild(td);
td = d.createElement("td");
td.innerHTML = lists[i].user_name;
tr.appendChild(td);
td = d.createElement("td");
if( lists[i].kyoten_img ) td.innerHTML = "<img src=\"" + lists[i].kyoten_img + "\" style=\"width:30px; height:30px;\" />";
tr.appendChild(td);
td = d.createElement("td");
td.style.display = "none";
td.innerHTML = lists[i].kyoten_kind;
tr.appendChild(td);
td = d.createElement("td");
td.innerHTML = lists[i].jinko;
tr.appendChild(td);
td = d.createElement("td");
td.innerHTML = lists[i].name;
tr.appendChild(td);
td = d.createElement("td");
var xy = lists[i].xy.match(/\(([\-0-9]+),([\-0-9]+)\)/);
if( xy ) td.innerHTML = cgetXYHtml(xy[1], xy[2]);
else td.innerHTML = lists[i].xy;
tr.appendChild(td);
td = d.createElement("td");
td.innerHTML = lists[i].kyori;
tr.appendChild(td);
td = d.createElement("td");
if( lists[i].npc ) td.style.color = "red";
td.innerHTML = lists[i].star;
tr.appendChild(td);
tbl.appendChild(tr);
}
if( OPT_TTDISTANCE) disp_ToolTipsDistance();//試し
function getTRData(name, user_name, jinko, xy, ally, star, kyori, wood, stone, iron, rice, npc)
{
if( !flag_akichi && ally == "" ) return null;
if( jinko == "-") jinko = "";
var kyoten_img = "";
var kyoten_kind = 0;
if( jinko || npc) {
var tmp = xy.match(/\(([\-0-9]+),([\-0-9]+)\)/);
if( tmp ) {
var cx = parseInt(URL_PARAM.x,10);
var cy = parseInt(URL_PARAM.y,10);
if( cx > MAP_X_MAX ) cx = MAP_X_MAX;
if( cx < MAP_X_MIN ) cx = MAP_X_MIN;
if( cy > MAP_Y_MAX ) cy = MAP_Y_MAX;
if( cy < MAP_Y_MIN ) cy = MAP_Y_MIN;
var no = cgetMapNofromXY(parseInt(tmp[1], 10), parseInt(tmp[2], 10), cx, cy, map_type);
if( no ) {
var img = $x("//div[@id=\"mapsAll\"]//img[@class=\"mapAll" + no + "\"]");
if( img ) {
kyoten_img = img.getAttribute("src");
if( npc ) kyoten_kind = 4;
else if( kyoten_img.match(/village/) ) kyoten_kind = 1;
else if( kyoten_img.match(/fort/) ) kyoten_kind = 2;
else if( kyoten_img.match(/capital/) ) kyoten_kind = 3;
}
}
}
}
if( !flag_ryouchi && ally != "" && kyoten_kind == 0 ) return null;
if( !flag_kyoten && ally != "" && kyoten_kind != 0 ) return null;
return {"kyoten_kind":kyoten_kind, "kyoten_img":kyoten_img,
"jinko":jinko , "ally":ally, "user_name":user_name,
"name":name, "xy":xy, "kyori":kyori, "star":star, "npc":npc};
}
var sort_kind, sort_order;
function row_sort(col, kind, order) {
var tbl = $("beyond_maplist_table");
var trs = $a("descendant::tr[position()>1]",tbl);
sort_kind = kind;
sort_order = order;
var strs = new Array();
if( kind == "xy" ) {
//座標は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]);
if(td.style.color=="red") {
strs.push({"node":trs[i], "value":"★★★★★★★★★★" + td.innerHTML});//NPC砦だけ特別に
}else{
strs.push({"node":trs[i], "value":td.innerHTML});
}
}
}
strs.sort( function(a,b) {
var ret = 0;
if( sort_kind == "num" ){
if( a.value == "" && b.value == "" ) return 0;
else if( a.value == "" ) return 1;
else if( b.value == "" ) return -1;
else ret = parseInt(a.value, 10) - parseInt(b.value, 10);
}else if( sort_kind == "kyo" ){
if( parseInt(a.value, 10) == 0 && parseInt(b.value, 10) == 0) return 0;
else if( parseInt(a.value, 10) == 0 ) return 1;
else if( parseInt(b.value, 10) == 0 ) return -1;
else ret = parseInt(a.value, 10) - parseInt(b.value, 10);
}else if( sort_kind == "float" ){
ret = parseFloat(a.value, 10) - parseFloat(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 == "" ) {
return 1;
}else if( b.value == "" ) {
return -1;
}else if( a.value > b.value ) {
ret = 1;
}else {
ret = -1;
}
}
if( sort_order == "dsc") {
ret = 0 - ret;
}
return ret;
});
tbl = initTable();
for(var i=0 ; i<trs.length ; i++) {
tbl.appendChild(strs[i].node);
}
}
function appendSortButton(col, sortcol, kind )
{
var tbl = $("beyond_maplist_table");
var th = $x("descendant::tr[1]//th[" + col + "]", tbl);
if( !th ) return;
th.appendChild(d.createElement("br"));
var a = d.createElement("a");
a.href = "javascript:void(0);";
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);
(function(n, k){
$e(a, "click", function(){row_sort(n, k, "asc"); } );
})(sortcol, kind);
th.appendChild(d.createTextNode(" "));
a = d.createElement("a");
a.href = "javascript:void(0)";
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(n, k){
$e(a, "click", function(){row_sort(n, k, "dsc"); } );
})(sortcol, kind);
}
function initTable()
{
var dv = $("beyond_maplist");
var tbl = $("beyond_maplist_table");
if( tbl ) {
tbl.parentNode.removeChild(tbl);
}else{
var a = d.createElement("a");
a.href = "#ptop";
a.style.color="black";
a.appendChild(d.createTextNode("▲トップに戻る"));
a.id = "beyond_maplist_table_gotop";
dv.appendChild(a);
}
tbl = d.createElement("table");
tbl.id = "beyond_maplist_table";
tbl.innerHTML = "<tr>" +
"<th>同盟</th><th>君主</th><th>拠点</th><th style=\"display:none;\">拠点Kind</th>" +
"<th>人口</th><th>領地名</th><th>座標</th><th>距離</th><th>戦力</th>" +
"</tr>";
dv.insertBefore(tbl, $("beyond_maplist_table_gotop"));
appendSortButton(1, 1, "str" );
appendSortButton(2, 2, "str" );
appendSortButton(3, 4, "kyo" );
appendSortButton(5, 5, "num" );
appendSortButton(7, 7, "xy" );
appendSortButton(8, 8, "float" );
appendSortButton(9, 9, "str" );
return tbl;
}
});
}
//////////////////////
//距離/時間表示(ToolTips)
//////////////////////
function disp_ToolTipsDistance()
{
if( location.pathname == "/village.php" ) {
saveTrainingLevel();
}
var links = $a('//a[contains(@href,"castle_send_troop.php") and not(contains(@href,"TB_inline"))]');
if (!links.length) {
return;
}
var TL = 0;
var ETL = 0;
var vid = cgetCurrentVillageId();
var lists = cloadData("TrainingLevels", "[]", true, true);
for (var i = 0;i < lists.length;i++) {
if (lists[i].id == vid) {
TL = parseInt(lists[i].level,10);
ETL = parseInt(lists[i].elevel,10);
break;
}
}
if (isNaN(""+TL)) {
TL = 0;
}
if (isNaN(""+ETL)) {
ETL = 0;
}
var reg = /x=(-?\d+)&y=(-?\d+)/;
for(var i=0 ; i<links.length ; i++) {
if(!reg.test(links[i].href)) continue;
links[i].alt = "";
links[i].title = "";
$e(links[i], "mouseover", function (event) {
var xy = this.href.match(reg);
var distance = cgetDistanceFromBase(xy[1], xy[2] );
showToolTips(event, distance, TL, ETL);
});
$e(links[i], "mouseout", function () { hideToolTips(); } );
}
function showToolTips( evt, distance, trainingLevel , eTrainingLevel)
{
hideToolTips();
var sp = 0.05 * trainingLevel + 1+ (eTrainingLevel*0.001*distance);
var tw = d.createElement("div");
tw.id = "beyond_ToolTipsWindow";
tw.style.position = "absolute";
tw.style.backgroundColor = "lightyellow";
tw.style.border = "outset 2px lightyellow";
tw.style.fontSize = "10px";
tw.style.padding = "10px";
tw.style.zIndex = 1000;
var xxx = evt.pageX + 5;
if( xxx > 700 ) xxx -=175;
tw.style.left = xxx + "px";
tw.style.top = (evt.pageY +5) + "px";
var dv = d.createElement("div");
dv.innerHTML = "時間の目安  遠征訓練所Lv."+eTrainingLevel+" (+"+(eTrainingLevel*0.1*distance).toFixed(3)+"%)<br>距離 [" + distance.toFixed(2) + "] 訓練所Lv." + trainingLevel + " (+" + (TL*5) + "%)" ;
tw.appendChild(dv);
var tbl = d.createElement("table");
tbl.style.border = "2px solid black";
tbl.style.borderCollapse = "collapse";
tbl.style.width = "100%";
var now = cgetNow();
for(var i=0 ; i<OPT_TTDISTANCE_ITEMS.length ; i++){
var tmp = OPT_TTDISTANCE_ITEMS[i].match(/.*\((-?[0-9]+([\.]{1}[0-9]+)?)\)/);
if( !tmp ) continue;
var speed = parseFloat(tmp[1]);
if( speed < 0 ) continue;
var tr = d.createElement("tr");
var td = d.createElement("td");
td.style.border = "1px solid black";
td.style.textAlign = "left";
td.appendChild(d.createTextNode( OPT_TTDISTANCE_ITEMS[i] ));
tr.appendChild(td);
var timeText = getTime(speed * sp, distance);
td = d.createElement("td");
td.style.border = "1px solid black";
td.style.textAlign = "right";
td.appendChild(d.createTextNode(timeText));
tr.appendChild(td);
var dayText = caddDate(now, timeText);
dayText = dayText.substring(5, dayText.length - 3).replace("-", "/");
td = d.createElement("td");
td.style.border = "1px solid black";
td.style.textAlign = "right";
td.appendChild(d.createTextNode(dayText));
tr.appendChild(td);
tbl.appendChild(tr);
}
tw.appendChild(tbl);
$("beyond_floatpanel").appendChild(tw);
function getTime(speed, dist)
{
var tmp = dist * 3600 / speed;
var h = Math.floor(tmp / 3600);
var m = Math.floor((tmp - h*3600 ) / 60 );
var s = Math.floor(tmp - h*3600 - m*60 );
var tim = h + ":" +
(m+100).toString().substr(-2) + ":" +
(s+100).toString().substr(-2);
return tim;
}
}
function hideToolTips()
{
var tw = $("beyond_ToolTipsWindow");
if( tw ){
tw.parentNode.removeChild(tw);
}
}
function saveTrainingLevel()
{
var vil_id = cgetCurrentVillageId();
if( !vil_id ) return;
var basename = cgetCurrentBaseName();
if( !basename ) return;
var level = 0;
var elevel = 0;
var map = $a('//area[contains(@alt, "訓練所")]');;
if(0 < map.length) {
for (var i = 0;i < map.length;i++) {
var lv = map[i].alt.match(/((?:遠征)?訓練所) LV.([0-9]+)/);
if(lv[1] == "訓練所") {
level = parseInt(lv[2],10);
}
else if (lv[1] == "遠征訓練所") {
elevel = parseInt(lv[2],10);
}
}
}
var lists = cloadData("TrainingLevels", "[]", true, true);
var newLists = new Array();
var isNewItem = true;
for (var i = 0;i < lists.length;i++) {
if (chasVillageId(lists[i].id)) {
var data = lists[i];
if (data.id == vil_id) {
data.basename = basename;
data.level = level;
data.elevel = elevel;
isNewItem = false;
}
newLists.push({id:data.id,basename:data.basename,level:data.level,elevel:data.elevel});
}
if (newLists.length == 10) {
break;
}
}
if (isNewItem) {
newLists.push({id:vil_id,basename:basename,level:level,elevel:elevel});
}
csaveData( "TrainingLevels", newLists, true, true );
}
}
//////////////////////
//同盟/君主表示(ToolTips)
//////////////////////
function disp_ToolTipsAllyPerson()
{
var links = $a('//a[(contains(@href,"village_change.php") or contains(@href,"land.php")) and not(contains(@href,"TB_inline") or contains(@href,"from"))]');
if (links.length == 0) return;
var selfVillages =cgetVillageIds();
for(var i=0 ; i<links.length ; i++) {
if(links[i].href.match(/village_change\.php/)) {
var tmp = links[i].href.match(/village_id=([0-9]+)/);
if( tmp && selfVillages[tmp[1]]) {
continue;
}
}
links[i].alt = "";
links[i].title = "";
$e(links[i], "mouseover", function(event){ showToolTips(event, this.href); } );
$e(links[i], "mouseout", function(){ hideToolTips(); } );
}
function showToolTips( evt, url )
{
hideToolTips();
var tw = d.createElement("div");
tw.id = "beyond_ToolTipsWindow";
tw.style.position = "absolute";
tw.style.backgroundColor = "lightyellow";
tw.style.border = "outset 2px lightyellow";
tw.style.fontSize = "10px";
tw.style.padding = "10px";
tw.style.zIndex = 1000;
var xxx = evt.pageX + 5;
if( xxx > 700 ) xxx -=50;
tw.style.left = xxx + "px";
tw.style.top = (evt.pageY +5) + "px";
var dv = d.createElement("div");
dv.id = "beyond_ToolTipsWindow_base";
dv.appendChild(d.createTextNode("領地 : ..."));
tw.appendChild( dv );
dv = d.createElement("div");
dv.id = "beyond_ToolTipsWindow_ally";
dv.appendChild(d.createTextNode("同盟 : ..."));
tw.appendChild( dv );
dv = d.createElement("div");
dv.id = "beyond_ToolTipsWindow_user";
dv.appendChild(d.createTextNode("君主 : ..."));
tw.appendChild( dv );
$("beyond_floatpanel").appendChild(tw);
cajaxRequest(url, "GET", "", function(req){
var tw = $("beyond_ToolTipsWindow");
if( !tw ) return ;
var dom = d.createElement("html");
dom.innerHTML = req.responseText;
if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) {
$("beyond_tmp").appendChild(dom);
}
var dt = getDatafromLandElm(dom);
if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) {
$("beyond_tmp").removeChild(dom);
}
if( !dt ) return ;
if( $("beyond_ToolTipsWindow_base") ) {
$("beyond_ToolTipsWindow_base").innerHTML = "領地 : " + dt.base + "(" + dt.x + "," + dt.y + ")";
$("beyond_ToolTipsWindow_ally").innerHTML = "同盟 : " + dt.ally;
$("beyond_ToolTipsWindow_user").innerHTML = "君主 : " + dt.user;
}
}, function(req){
// alert("サーバからエラーが返りましたよ" );
});
}
function hideToolTips()
{
var tw = $("beyond_ToolTipsWindow");
if( tw ){
tw.parentNode.removeChild(tw);
}
}
function getDatafromLandElm(dom)
{
var ret = new Array();
var nam = $x('.//span[@class="basename"]', dom);
if( !nam ) return null;
ret["base"] = nam.innerHTML;
var xy = $x('.//span[@class="xy"]', dom);
if( !xy ) return null;
xy = xy.innerHTML.match(/([\-0-9]+),([\-0-9]+)/);
if( !xy ) return null;
ret["x"] = parseInt(xy[1], 10);
ret["y"] = parseInt(xy[2], 10);
var a = $a('.//div[@class="status"]//a', dom);
if( a.length < 2 ) {
ret["user"] = "";
ret["ally"] = "";
}else{
ret["user"] = a[0].innerHTML;
ret["ally"] = a[1].innerHTML;
}
return ret;
}
}
//////////////////////
//プロフィール画面星表示
//////////////////////
function disp_UserStar()
{
if( location.pathname == "/user/" || location.pathname == "/user/index.php" ) {
showProfile();
}
function showProfile()
{
//君主名取得
var uname_td = $x("//table[@class=\"commonTables\"]//tr[2]/td[2]");
if( !uname_td ) return;
var uname = uname_td.textContent;
var uid = USER_ID;
if( URL_PARAM.user_id ) uid = URL_PARAM.user_id;
//table★欄追加
cappendColumnForProfile("★", "beyond_star" );
//内容初期設定
lists = cloadData( "UserStarList" + uid, "[]", true, true );
for( var i=0 ; i<lists.length ; i++){
var td = $("beyond_star_" + lists[i].x + "_" + lists[i].y);
if( td && td.innerHTML == "" ) {
if( lists[i].npc ) {
td.innerHTML = "★" + lists[i].star;
td.style.color = "red";
}else{
td.innerHTML = "★" + lists[i].star + " (" + lists[i].wood + "," + lists[i].stone + "," + lists[i].iron + "," + lists[i].rice + ")";
}
td.style.opacity = lists[i].star * 0.05 + 0.5;
}
}
//タイトルにGETを追加
var th = $("beyond_star_title");
if( th ) {
var lnk = d.createElement("a");
lnk.href = "javascript:void(0)";
lnk.innerHTML ="(GET)";
lnk.style.fontSize = "9px";
var running = false;
$e(lnk, "click", function() {
if( running ) return ;
if( confirm("☆情報を一気に取得するためサーバに負荷をかけます。\n何度も実行するとDOS攻撃と同じなので、実行には注意して下さい") == false ) return;
running = true;
window.setTimeout(timerFunc, 0);
function timerFunc()
{
var tds = $a("//td[contains(@id, \"beyond_star_\")]");
var targettd = "";
var targetid = "";
for( var i=0 ; i< tds.length ; i++) {
if( tds[i].innerHTML == "" ) {
targettd = tds[i];
targetid = tds[i].id;
break;
}
}
if( !targetid ) {
alert("全ての☆情報を取得しました");
running = false;
return;
}
var xy = targetid.match(/beyond_star_([\-0-9]+)_([\-0-9]+)/);
if( !xy ) {
GM_log("err");;
return ;
}
cajaxRequest("/map.php?x=" + xy[1] + "&y=" + xy[2], "GET", "", function(req) {
var dom = d.createElement("html");
dom.innerHTML = req.responseText;
if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) {
$("beyond_tmp").appendChild(dom);
}
var area = $a("//map[@id=\"mapOverlayMap\"]//area", dom);
for(var i=0 ; i<area.length ; i++){
var dat = area[i].getAttribute("onmouseover");
dat = dat.replace(/^.*rewrite/, "setStar");
dat = dat.replace(/\); .*$/, ");");
//evalの中ではGM_set/getValueが出来ないので、変数を一旦外に出す形に
eval("dat = " + dat);
if( !dat ) continue;
var td = $("beyond_star_" + dat.x + "_" + dat.y);
if( !td ) { GM_log("td null err?:" + dat.x + "," + dat.y); return;};
if( td.innerHTML) continue;
csetUserStar( uid, dat.x, dat.y, dat.star.length, dat.wood, dat.stone, dat.iron, dat.rice, dat.npc );
if( dat.npc ) {
td.innerHTML = "★" + dat.star.length;
td.style.color = "red";
}else{
td.innerHTML = "★" + dat.star.length + " (" + dat.wood + "," + dat.stone + "," + dat.iron + "," + dat.rice + ")";
}
td.style.opacity = dat.star.length * 0.05 + 0.5;
}
if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) {
$("beyond_tmp").removeChild(dom);
}
window.setTimeout(timerFunc, 0);
});
}
});
th.appendChild(lnk);
}
function setStar(name, user_name, jinko, xy, ally, star, kyori, wood, stone, iron, rice, npc)
{
if( uname == user_name) {
var tmp = xy.match(/\(([\-0-9]+),([\-0-9]+)\)/);
if( tmp ) {
var x = tmp[1];
var y = tmp[2];
return {"user_name":user_name, "x":x, "y":y, "star":star, "wood":wood, "stone":stone, "iron":iron, "rice":rice, "npc":npc};
}
}
return null;
}
}
}
//////////////////////
//プロフィール画面Level表示
//////////////////////
function disp_UserLevel()
{
if( location.pathname == "/user/" || location.pathname == "/user/index.php" ) {
if( !URL_PARAM.user_id || USER_ID == URL_PARAM.user_id ) {
showProfile();
}
}
if( location.pathname == "/land.php" || location.pathname == "/village.php" ) {
//保存
var spnxy = $x("//span[@class=\"xy\"]");
if( !spnxy ){
return;
}
var xy = spnxy.innerHTML.match(/\(([\-0-9]+),([\-0-9]+)\)/);
if( !xy ) {
return;
}
var tmp = spnxy.innerHTML.match(/レベル(\d+)/);
if( tmp ) {
// GM_log("add:" + xy[1] + "," + xy[2]);
csetMyLevel(xy[1], xy[2], tmp[1] );
}else {
// GM_log("del:" + xy[1] + "," + xy[2]);
cdelMyLevel(xy[1], xy[2]);
}
}
function showProfile()
{
//tableLevel欄追加
cappendColumnForProfile("Level", "beyond_level" );
//内容初期設定
lists = cloadData( "MyLevelList", "[]", true, true );
for( var i=0 ; i<lists.length ; i++){
var td = $("beyond_level_" + lists[i].x + "_" + lists[i].y);
if( td ) {
td.innerHTML = lists[i].level;
}
}
updateLevelUp();
updateLevelUpLink();
//タイトルにGETを追加
var th = $("beyond_level_title");
if( th ) {
var lnk = d.createElement("a");
lnk.href = "javascript:void(0)";
lnk.innerHTML ="(GET)";
lnk.style.fontSize = "9px";
var running = false;
$e(lnk, "click", function() {
if( running ) return ;
if( confirm("Level情報を一気に取得するためサーバに負荷をかけます。\n何度も実行するとDOS攻撃と同じなので、実行には注意して下さい") == false ) return;
running = true;
window.setTimeout(timerFunc, 0);
function timerFunc()
{
var tds = $a("//td[contains(@id, \"beyond_level_\")]");
var targettd = "";
var targetid = "";
for( var i=0 ; i< tds.length ; i++) {
if( tds[i].innerHTML == "" ) {
targettd = tds[i];
targetid = tds[i].id;
break;
}
}
if( !targetid ) {
updateLevelUp();
updateLevelUpLink();
running = false;
alert("全てのレベル情報を取得しました");
return;
}
var xy = targetid.match(/beyond_level_([\-0-9]+)_([\-0-9]+)/);
if( !xy ) {
GM_log("err");;
return ;
}
cajaxRequest("/land.php?x=" + xy[1] + "&y=" + xy[2], "GET", "", function(req) {
var dom = d.createElement("html");
dom.innerHTML = req.responseText;
if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) {
$("beyond_tmp").appendChild(dom);
}
var spnxy = $x("//span[@class=\"xy\"]", dom);
if( !spnxy ){
GM_log("span class=xy err");
return;
}
var xy = spnxy.innerHTML.match(/\(([\-0-9]+),([\-0-9]+)\)/);
if( !xy ) {
GM_log("xy match err");
return;
}
var level = 0;
var tmp = spnxy.innerHTML.match(/レベル(\d+)/);
if( tmp ) {
level = tmp[1];
}
var td = $("beyond_level_" + xy[1] + "_" + xy[2]);
if( !td ) { GM_log("td null err?:" + xy[1] + "," + xy[2]); return;};
if( !td.innerHTML ) {
csetMyLevel(xy[1], xy[2], level);
td.innerHTML = level;
}
if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) {
$("beyond_tmp").removeChild(dom);
}
window.setTimeout(timerFunc, 0);
});
}
});
th.appendChild(lnk);
}
function updateLevelUp()
{
//建設/破棄リストから
var lists = cloadData("RemoveList", "[]", true, true);
for(var i=0 ; i<lists.length ; i++) {
if( lists[i].kind != 5 ) continue;
var td = $("beyond_level_" + lists[i].x + "_" + lists[i].y);
if( !td ) continue;
// GM_log("td:" + td.innerHTML);
var level = parseInt(td.innerHTML,10);
if( isNaN( ""+level ) ) continue;
td.innerHTML = level + " (+)";
}
}
function updateLevelUpLink()
{
var img_lvup = 'data:image/gif;base64,'+
'R0lGODlhFQAVAJEAAIaT6////////wAAACH5BAUUAAIALAAAAAAVABUAAAJDlICpi3YM14u0WhVY'+
'Rjn4zWlJx4HgiJrooqohm67A+c727GLpp8MhXZORRD4b8NYzQj4k5pDF2/CQl6pVclU4sgBDAQA7';
var tds = $a("//td[contains(@id, \"beyond_level_\")]");
for( var i=0 ; i<tds.length ; i++){
if( "" + parseInt(tds[i].innerHTML,10) == tds[i].innerHTML ) {
var lv = parseInt(tds[i].innerHTML,10);
if( lv < 1 || lv > 4 ) continue;
var mtbl = [2, 2, 2, 4];
var meisei = mtbl[lv - 1];
if( RES_NOW.fame >= meisei ) {
var xy = tds[i].id.match(/beyond_level_([\-0-9]+)_([\-0-9]+)/);
if( xy ) {
var lnk = '<a href="'+caddSessionId('/territory_proc.php?x=' + xy[1] + '&y=' + xy[2] + '&mode=lvup')+'" title="レベルアップ" onclick="';
lnk += "return confirm('名声" + meisei + "を消費し、領地をレベルアップしますか?');";
lnk += '"><img src="' + img_lvup + '" style="width:14px; height:14px; vertical-align:middle;"></a>';
tds[i].innerHTML += lnk;
}
}
}
}
}
}
}
//////////////////////
//同盟ログ前後リンク追加
//////////////////////
/***
function disp_ReportNextPrior()
{
if( location.pathname == "/alliance/alliance_log.php" ) {
var elms = $a("//table[@class=\"commonTables\"]//tr/td[2]/a");
var lists = new Array();
for( var i=0; i<elms.length ; i++) {
var ids = elms[i].href.match(/id=(\d+)/);
if( ids ) {
lists.push(ids[1]);
}
}
csaveData("AllyReports", lists, true, true);
}
if( location.pathname == "/alliance/detail.php" ) {
var lists = cloadData("AllyReports", "[]", true, true);
var pos =lists.indexOf( URL_PARAM.id );
if( pos != -1 ) {
var tbl = d.createElement("table");
tbl.width = "100%";
var tmpHTML = "<tr>";
if( pos < lists.length -1 ) {
var params = "id=" + lists[pos + 1] +
"&m=" + ( (URL_PARAM.m) ? URL_PARAM.m : "" ) +
"&p=" + ( (URL_PARAM.p) ? URL_PARAM.p : "" );
tmpHTML += "<td align=\"left\"><a href=\"/alliance/detail.php?" + params + "\">前の報告書へ</a></td>"
}
if( pos > 0 ) {
var params = "id=" + lists[pos - 1] +
"&m=" + ( (URL_PARAM.m) ? URL_PARAM.m : "" ) +
"&p=" + ( (URL_PARAM.p) ? URL_PARAM.p : "" );
tmpHTML += "<td align=\"right\"><a href=\"/alliance/detail.php?" + params + "\">次の報告書へ</a></td>"
}
tmpHTML += "</tr>";
tbl.innerHTML = tmpHTML;
var ct = d.createElement("center");
ct.appendChild(tbl);
var inspos = $x("//table[@summary=\"件名\"]");
if( inspos ) {
inspos.parentNode.insertBefore(ct, inspos);
}
}
}
}
***/
//////////////////////
//マップ中央表示
//////////////////////
function disp_MapCenter()
{
if( location.pathname != "/map.php" ) return;
var cx = parseInt(URL_PARAM.x, 10);
var cy = parseInt(URL_PARAM.y, 10);
if( isNaN(""+cx) ) cx = 0;
if( isNaN(""+cy) ) cy = 0;
if( cx > MAP_X_MAX ) cx = MAP_X_MAX;
if( cx < MAP_X_MIN ) cx = MAP_X_MIN;
if( cy > MAP_Y_MAX ) cy = MAP_Y_MAX;
if( cy < MAP_Y_MIN ) cy = MAP_Y_MIN;
var area_center = $x("//map[@id=\"mapOverlayMap\"]//area[@href=\"land.php?x=" + cx + "&y=" + cy + "\"]");
if( !area_center ) return;
var dat = area_center.getAttribute("onmouseover");
dat = dat.replace(/^.*overOperation/, "setCenter");
dat = dat.replace(/\); .*$/, ");");
eval(dat);
var dv = d.createElement("div");
dv.style.fontSize= "10px";
dv.appendChild(d.createTextNode("中央:( " + cx + " , " + cy + " )"));
$("mapXY").appendChild(dv);
function setCenter(act, x, y )
{
var rollover = $("rollover");
var icon_c = 'data:image/png;base64,'+
'iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz'+
'AAAK8AAACvABQqw0mAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwMy8yNi8wOQlCSeUAAAAldEVYdFNv'+
'ZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDSHdqzPAAAEd0lEQVR4nO3by2+UVRjH'+
'8U9LC0UUoqIBRAxCQUWRS0mUiBfEe70tdKMb48aYmPCfuDMmxoVrF97AiAFUEF1wURCNEUQTNQXR'+
'KEpVGMq4eN6XmXlnOk7bGcCX95eckPcy532+55znck5KV7lcdiGp+1wbcLZVAOddBXDeVQDnXQVw'+
'3lUA510FcN5VAOddBXDeVQDnXQVw3lUA510FcN51wQH31FwdeL5T35mOZbgiaXAUR7Afv3fkq/0v'+
'1d3qafBaO7UEazEfM9CLruRZGSUcx0/YhL0dtqdjwEsxiEWYVHW/hGMC+lJMxmVJW4Jv8A72dciu'+
'tgOvxANYqBb0NA7iQ7GEYTluxzWJHd24Lvntt3gXe9psX9uAB/AQrlUbCEcE6CbsFuCptooBWIl7'+
'0S8GqQeLk+tDAnxnm+ycMPBqAXq1im/CKRzABnwh/LWRTguYXbgp6WuRyowvxAv4ARvxyQTtHRdw'+
'D9bgfsxWCzqCz/G6CEStqiz8dh+uwhMiqk9K+p+H5/CwWC07RDwYl/GtajLuFFF3jlrQVF1JuxJ/'+
'4o8x2jM9+W3aT7bvuXhWxIktwiVOjuUDrQBPxjoBOytjyHF8JWZ6rliGK5L2Jt5Q67fN1I178FjV'+
'vbJYzodxAy5O7s/B08n7W0Q8aAm8GfBFSYd3qBQLqf4RQegtDImltw73Jc+2Cb9sFVby7kcYFtG7'+
'D+8JoBExqI+KINcnBn4Wnkrs3Ib38Xezj3TV/FFLVFq9wj/XYmbm/WHhoyloVlNFwBqXf1WpV0xG'+
'I+NT8GWYlnn2ixigTSi1UmlNxTO4Re3SHRYzukFj0FRNR3cMKhl90IbwsgAfFDOegs/EkyLwvSZW'+
'W42ym4eluLXquiyW5nq8ojns2daQsGm9mIzq1LdapLk6ZYFL6v2uW+OIfL6oS+NdX8P4kV3S+/Gp'+
'GKG0sxV4Ucz0RufPLM8WhcqAel/eLgqeOmWBT+JV/Cii7uXJ/WkiWg/gM7zt3AatR0QtngX9FZul'+
'QauBGqWlkghOW0WaWaOSlqbhNgG+R+TaIbGk7hbRPU1Lu0XUHItmiiCUTUun1aelah1VSUt/NftA'+
'o7SU1RQx23epVEGphsXSmS3Kv+pn4yk8Htda4ZE++1lMzGaNCo8GaakV4FRTBPRa9RVXqlNiE79d'+
'7JKONeuwgWZggXCf5aN8g6jTPxCl5YlRe5vgiccJlSW2Riz3OZl3usWMHjZ2WMlvhsTslQVw+i+V'+
'k5HtYnDHrPHslkpiGW0V/vygqKPT9LBKVEEH/ff2MFWXyJuDYkvYm3mebg93jMPeGk10P/xx0lYJ'+
'Y+cL43txvdjbjnYAQAxQ9gAgVRnfiUE7bw4AUu1M2oDKEU+3AFicXB8Sm4OvBcxisQNboP446IBw'+
'n11tsu+M2n2mtStpN4vNer8KeL84Akr3yJdkvj8iQP9Xh3ip9ibtRpFT54kipk+cVqY6gd/wvYi4'+
'X3bInjPq9Ln0/qT1CfhZImcT0fiIOEAY7rAdZ9RV/CePnKsAzrsK4LzrggP+F1IbDJgkELkdAAAA'+
'AElFTkSuQmCC';
var img = d.createElement("img");
img.src = icon_c;
img.style.zIndex = 200;
img.style.position = "absolute";
img.style.left = x;
img.style.top = y;
if( $x("//div[@id=\"change-map-scale\"]/ul/li[@class=\"sort15 now\"]") ) {
img.style.width = "44px";
img.style.height = "44px";
} else if( $x("//div[@id=\"change-map-scale\"]/ul/li[@class=\"sort20 now\"]") ) {
img.style.width = "33px";
img.style.height = "33px";
} else {
img.style.width = "60px";
img.style.height = "60px";
img.style.zIndex = 121;
}
rollover.parentNode.insertBefore(img, rollover.nextSibling);
}
}
//////////////////////
//討伐ゲージ回復時間表示
//////////////////////
function disp_ToubatsuRestTime()
{
if(location.pathname != "/card/deck.php") return ;
ToubatsuRecoveryEstimates();
function ToubatsuRecoveryEstimates()
{
var now = cgetNow();
//デッキ
var decks = $a("//div[@id=\"cardListDeck\"]//div[@class=\"control\"]");
for( var i=0; i<decks.length ; i++ ){
var stat = $x("descendant::dl/dd[3]", decks[i]);
if( !stat ) continue;
if( stat.textContent == "内政セット済" ) continue;
var tb = $x("descendant::dl/dd[1]/div[1]", decks[i]);
if( !tb ) continue;
tb = 500 - parseInt( tb.textContent, 10 );
if( tb != 0 ) {
var timeText = getTime( tb );
var dayText = caddDate(now, timeText);
var txt = "500まで" + timeText + "後 (" + dayText + "完了)";
$x("descendant::dl/dt[1]", decks[i]).title = txt;
$x("descendant::dl/dd[1]", decks[i]).title = txt;
}
}
//ファイル(カード表示)
var files = $a("//div[@id=\"cardFileList\"]//div[@class=\"control\"]");
for( var i=0; i<files.length ; i++ ){
var tb = $x("descendant::dl/dd[1]/div[1]", files[i]);
if( !tb ) continue;
tb = 300 - parseInt( tb.textContent, 10 );
if( tb != 0 ) {
var timeText = getTime( tb );
var dayText = caddDate(now, timeText);
var txt = "300まで" + timeText + "後 (" + dayText + "完了)";
$x("descendant::dl/dt[1]", files[i]).title = txt;
$x("descendant::dl/dd[1]", files[i]).title = txt;
}
}
//ファイル(x枚表示)
var files = $a("//table[@class=\"statusParameter1\"]//tr[7]");
for( var i=0; i<files.length ; i++ ){
var tb = $x("descendant::td[1]", files[i]);
if( !tb ) continue;
tb = 300 - parseInt( tb.textContent, 10 );
if( tb != 0 ) {
var timeText = getTime( tb );
var dayText = caddDate(now, timeText);
var txt = "300まで" + timeText + "後 (" + dayText + "完了)";
$x("descendant::th[1]", files[i]).title = txt;
$x("descendant::td[1]", files[i]).title = txt;
}
}
window.setTimeout(function() { ToubatsuRecoveryEstimates(); }, 60*1000);
}
function getTime(toubatsu)
{
var tmp = toubatsu * 216;
var h = Math.floor(tmp / 3600);
var m = Math.floor((tmp - h*3600 ) / 60 );
var s = Math.floor(tmp - h*3600 - m*60 );
var tim = h + ":" +
(m+100).toString().substr(-2) + ":" +
(s+100).toString().substr(-2);
return tim;
}
}
//////////////////////
//書簡/報告書削除機能
//////////////////////
function disp_DeleteMessages()
{
if( location.pathname == "/message/detail.php" ) {
//書簡削除ボタン
addDeleteMessageButton();
}
if( location.pathname == "/report/detail.php" ) {
//報告書削除ボタン
addDeleteReportButton();
}
function addDeleteMessageButton()
{
var frm = d.createElement("form");
frm.method = "post";
frm.action = "/message/delete.php";
var m = d.createElement("input");
m.type = "hidden";
m.name = "mode";
m.value = URL_PARAM.m;
var p = d.createElement("input");
p.type = "hidden";
p.name = "p";
p.value = URL_PARAM.p;
var c = d.createElement("input");
c.type = "hidden";
c.name = "chk[]";
c.value = URL_PARAM.id;
var btn = d.createElement("input");
btn.type = "submit";
btn.value = "削除";
btn.setAttribute("onClick", "return window.confirm('この書簡を削除します。よろしいですか?');" );
frm.appendChild(m);
frm.appendChild(p);
frm.appendChild(c);
frm.appendChild(btn);
var li = d.createElement("li");
li.className = "last";
li.appendChild(frm);
var menu = $x("//ul[@id=\"statMenu\"]");
menu.appendChild(li);
}
function addDeleteReportButton()
{
var frm = d.createElement("form");
frm.method = "post";
frm.action = "/report/list.php";
var m = d.createElement("input");
m.type = "hidden";
m.name = "m";
m.value = URL_PARAM.m;
var p = d.createElement("input");
p.type = "hidden";
p.name = "p";
p.value = URL_PARAM.p;
var u = d.createElement("input");
u.type = "hidden";
u.name = "u";
u.value = URL_PARAM.u;
var c = d.createElement("input");
c.type = "hidden";
c.name = "chk[]";
c.value = URL_PARAM.id;
var btn = d.createElement("input");
btn.type = "submit";
btn.name = "remove_checked";
btn.value = "削除";
btn.setAttribute("onClick", "return window.confirm('この報告書を削除します。よろしいですか?');" );
frm.appendChild(m);
frm.appendChild(p);
frm.appendChild(c);
frm.appendChild(u);
frm.appendChild(btn);
// GM_log("a");
var h2 = $x("//h2");
h2.parentNode.insertBefore(frm, h2.nextSibling);
}
}
//////////////////////
//出発時刻計算
//////////////////////
function disp_TSendTime()
{
if( location.pathname != "/facility/castle_send_troop.php" ) return;
var td = $x('//table[@class="fighting_about"]//tr[1]/td[1]');
if( !td ) return ;
var tim = td.textContent.match(/到着まで[:|:][\s| ]*(\d+):(\d+):(\d+)[\s| ]*到達時間/);
if( !tim ) return;
var area_up_timer = $("area_up_timer0");
if( !area_up_timer ) return;
var day = area_up_timer.textContent.match(/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
if( !day ) return;
//ベース作成
var div = d.createElement("div");
div.style.margin = "5px";
div.appendChild(d.createTextNode("到着時刻:"));
createText(div, "beyond_send_y", day[1]);
div.appendChild(d.createTextNode("-"));
createText(div, "beyond_send_m", day[2]);
div.appendChild(d.createTextNode("-"));
createText(div, "beyond_send_d", day[3]);
div.appendChild(d.createTextNode(" "));
createText(div, "beyond_send_h", "");
div.appendChild(d.createTextNode(":"));
createText(div, "beyond_send_mi", "");
div.appendChild(d.createTextNode(":"));
createText(div, "beyond_send_s", "");
div.appendChild(d.createTextNode(" "));
var btn = d.createElement("input");
btn.type = "button";
btn.id = "beyond_send_button";
btn.value = "出発時刻計算";
div.appendChild(btn);
div.appendChild(d.createElement("br"));
div.appendChild(d.createTextNode("出発時刻:"));
var spn = d.createElement("span");
spn.id = "beyond_send_time";
div.appendChild(spn);
td.appendChild(div);
$e(btn, "click", function() {
if( $("beyond_send_y").value == "" ) $("beyond_send_y").value = "0";
if( $("beyond_send_m").value == "" ) $("beyond_send_m").value = "0";
if( $("beyond_send_d").value == "" ) $("beyond_send_d").value = "0";
if( $("beyond_send_h").value == "" ) $("beyond_send_h").value = "0";
if( $("beyond_send_mi").value == "" ) $("beyond_send_mi").value = "0";
if( $("beyond_send_s").value == "" ) $("beyond_send_s").value = "0";
var y = $("beyond_send_y").value;
var m = $("beyond_send_m").value;
var d = $("beyond_send_d").value;
var h = $("beyond_send_h").value;
var mi =$("beyond_send_mi").value;
var s = $("beyond_send_s").value;
// if( !y || !m || !d || !h || !mi || !s ) {
// alert("全て入力して下さい");
// return;
// }
y = parseInt(y, 10);
m = parseInt(m, 10);
d = parseInt(d, 10);
h = parseInt(h, 10);
mi =parseInt(mi, 10);
s = parseInt(s, 10);
if( isNaN(""+y) || isNaN(""+m) || isNaN(""+d) || isNaN(""+h) || isNaN(""+mi) || isNaN(""+s) ) {
alert("数字で入力して下さい");
return;
}
var dt = new Date(y, m - 1, d, h - parseInt(tim[1],10) , mi - parseInt(tim[2],10), s - parseInt(tim[3],10) );
$("beyond_send_time").innerHTML =
dt.getFullYear() + "-" + (dt.getMonth()+1) + "-" + dt.getDate() + " " +
(dt.getHours()+100).toString().substr(-2) + ":" +
(dt.getMinutes()+100).toString().substr(-2) + ":" +
(dt.getSeconds()+100).toString().substr(-2);
} );
function createText(container, id, def)
{
var tb = d.createElement("input");
tb.type = "text";
tb.value = def;
tb.id = id;
tb.size = 3;
container.appendChild(tb);
}
}
//////////////////////
//小さいボタン
//////////////////////
function disp_SmallButton()
{
var btnConfs = {
btn_buycp : {
width : 26,
start : -8
},
btn_special : {
width : 26,
start : -29
},
btn_getbusho : {
width : 20,
start : -2
},
btn_yorodudas : {
width : 25,
start : -2
},
btn_bushoduel : {
width : 27,
start : -1
},
btn_cpdeposit : {
width : 20,
start : -20
},
btn_invitefriend : {
width : 27,
start : -9
}
};
if (isNarrow) {
btnConfs.btn_buycp.start = -6;
btnConfs.btn_special.start = -26;
}
var btnImages = $a('(id("sidebar")/ul/li | id("btn_area_box"))//img');
for (var i =0; i < btnImages.length;i++) {
var btnImage = btnImages[i];
for (var key in btnConfs) {
if (btnImage.src.indexOf(key) < 0) {
continue;
}
var btnConf = btnConfs[key];
var btn = btnImage.parentNode;
var btnHeight = 22;
if (isNarrow) btnHeight = 25;
btnImage.style.display = "none";
btn.style.width = btnConf.width+"px";
btn.style.height = btnHeight+"px";
btn.style.marginLeft = "2px";
btn.style.marginBottom = "2px";
btn.style.background = 'url("'+btnImage.src+'") no-repeat '+btnConf.start+'px 0px';
btn.style.display = "block";
var floatNode = btn;
if (!isNarrow) floatNode = btn.parentNode;
floatNode.style.cssFloat = "left";
if (i == 0) {
btn.style.marginLeft = "0px";
}
}
}
if (!isNarrow) cgetElementSibling(floatNode.parentNode,0).style.clear = "both";
//状況の縮小
var tr = $x('//table[@class="situationTable"]//tr[1]');
var tds = $a('//table[@class="situationTable"]//tr[2]//img[not(contains(@src,"sit_blank"))]/ancestor::td');
if( tr && tds ) {
for( var i=0; i< tds.length ; i++) {
tr.appendChild(tds[i]);
}
cgetElementSibling(tr,0).style.display = "none";
var imgs = $a(".//img", tr);
for( var i=0; i< imgs.length ; i++) {
imgs[i].style.width = "20px";
imgs[i].style.height = "20px";
if( !imgs[i].src.match(/(_no\.gif)$/) ) {
Pika_elementQueue.push(imgs[i]);
}
}
}
//拠点・生産・簡易出兵先の伸縮
var targetNames = ["base","production","easydeploy"];
var targets = {
base : {
img : '(id("lodgment") | id("sidebar"))//img[contains(@src,"icon_base")]',
inner : 'ancestor::div[contains(@class,"Head")]/following-sibling::div[contains(@class,"Inner")]'
},
production : {
img : 'id("sidebar")//img[contains(@src,"icon_production")]',
inner : 'ancestor::div[contains(@class,"Head")]/following-sibling::div[contains(@class,"Inner")]'
},
easydeploy : {
img : '(//div[@class="footer_box"] | id("sidebar"))//img[contains(@src,"icon_easydeploy")]',
inner : 'ancestor::div[contains(@class,"Head")]/following-sibling::div[contains(@class,"Inner")] | id("map_bookmark")'
}
};
for(var i = 0;i < targetNames.length;i++) {
if (isNarrow && targetNames[i] == 'base' && location.pathname.search(/^\/(village|map|land)\.php/) < 0) {
continue;
}
var target = targets[targetNames[i]];
var base_img = $x(target.img);
if( !base_img ) continue;
var base_inner = $x(target.inner, base_img);
if( !base_inner ) continue;
var oc = cloadData( "sidebox_oc" + i , "", true);
if( oc ) {
base_inner.style.display = "none";
base_img.style.opacity = 0.3;
}
(function(inner, no) {
$e(base_img, "click", function(e) {
var ocs = "";
if( inner.style.display == "none" ){
inner.style.display = "";
this.style.opacity = 1;
}else{
inner.style.display = "none";
this.style.opacity = 0.3;
ocs = "1";
}
csaveData( "sidebox_oc" + no , ocs, true);
});
})(base_inner, i);
}
}
//////////////////////
//出兵マップ表示
//////////////////////
function disp_AttackMap()
{
var img_atk = 'data:image/gif;base64,'+
'R0lGODlhPAA8AIAAAP/M/////yH5BAUUAAEALAAAAAA8ADwAAAJ7jI+py+0Po5y02ouz3rz7D4bi'+
'SJbmiabqyrbuC8fyTNf2jef6zvc8AATsgsEckYg7Fm9KoPE4XCakMCeDqmpCoSxt0yBsWQNj6bgb'+
'dmJl6jUN+RSe3+V59ayMYZdwevjQd/c3ZbfiRlaYlXiYcsglFugjOUlZaXmJWVEAADs=';
var img_mov = 'data:image/gif;base64,'+
'R0lGODlhPAA8AIAAADP//////yH5BAUUAAEALAAAAAA8ADwAAAJ7jI+py+0Po5y02ouz3rz7D4bi'+
'SJbmiabqyrbuC8fyTNf2jef6zvc8AATsgsEckYg7Fm9KoPE4XCakMCeDqmpCoSxt0yBsWQNj6bgb'+
'dmJl6jUN+RSe3+V59ayMYZdwevjQd/c3ZbfiRlaYlXiYcsglFugjOUlZaXmJWVEAADs=';
if( location.pathname == "/facility/unit_status.php" ) {
var tds = $a("//table[@summary=\"出撃中の兵士\" or @summary=\"移動中の兵士\"]/tbody/tr[position()>1]/td[1]");
for(var i=0; i<tds.length ; i+=3) {
//0:場所 1:時間 2:兵種
// GM_log(tds[i+0].textContent);
var xy = tds[i+0].innerHTML.match(/[\(|(](-?\d+),(-?\d+)[)|\)]$/);
if( !xy ) continue;
var tim = tds[i+1].innerHTML.match(/(\d+\-\d+\-\d+ \d+:\d+:\d+)/);
if( !tim ) continue;
var kind = 0;
if( tds[i].parentNode.parentNode.parentNode.getAttribute("summary") == "移動中の兵士" )
kind = 1;
addList(tim[1], parseInt(xy[1],10), parseInt(xy[2],10), kind );
var a = $x("descendant::div/a[contains(text(), \"キャンセルする\")]", tds[i+1]);
if( a ) {
(function(tim, x, y) {
$e(a, "click", function(){
var lists = cloadData("AttackList", "[]", true, true);
for(var i=0 ; i<lists.length ; i++) {
if( lists[i].x == x && lists[i].y == y && lists[i].time == tim ) {
lists.splice(i,1);
csaveData( "AttackList", lists, true, true );
// GM_log("deleted");
break;
}
}
} );
})(tim[1], parseInt(xy[1],10), parseInt(xy[2],10));
}
}
return;
}
var lists = cloadData("AttackList", "[]", true, true);
lists = checkList(lists); //時間を過ぎたものを削除
if( location.pathname == "/map.php" ) {
//地図に表示
var type = 1;
if( $x("//div[@id=\"change-map-scale\"]/ul/li[@class=\"sort15 now\"]") ) type=2;
else if( $x("//div[@id=\"change-map-scale\"]/ul/li[@class=\"sort20 now\"]") ) type=3;
if( lists.length ) {
var cx = parseInt(URL_PARAM.x,10);
var cy = parseInt(URL_PARAM.y,10);
if( cx > MAP_X_MAX ) cx = MAP_X_MAX;
if( cx < MAP_X_MIN ) cx = MAP_X_MIN;
if( cy > MAP_Y_MAX ) cy = MAP_Y_MAX;
if( cy < MAP_Y_MIN ) cy = MAP_Y_MIN;
var map = $x("//div[@id=\"mapsAll\"]");
for(var i=0 ; i<lists.length ; i++) {
var no = cgetMapNofromXY(lists[i].x, lists[i].y, cx, cy, type );
if( !no ) continue;
var img = document.createElement("img");
img.className = "mapAll" + no;
if( lists[i].kind == 1 ) {
img.src = img_mov;
}else{
img.src = img_atk;
}
img.title = lists[i].time;
// img.style.zIndex = 1000;
map.appendChild(img);
var area = $x("//map[@id=\"mapOverlayMap\"]/area[contains(@href, \"?x=" + lists[i].x + "&y=" + lists[i].y + "\")]");
if( area ){
area.title += " 到着予定:" + lists[i].time;
area.alt += " 到着予定:" + lists[i].time;
}
}
}
}
function addList(tim, x, y, kind)
{
var lists = cloadData("AttackList", "[]", true, true);
var i;
for(i=0 ; i<lists.length ; i++) {
if(lists[i].x == x && lists[i].y == y ) {
if( lists[i].time < tim ) {
lists[i].time = tim;
lists[i].kind = kind;
break;
}else{
return;
}
}
}
if( i == lists.length ) {
lists.push({"x":x, "y":y, "time":tim, "kind":kind } );
}
csaveData( "AttackList", lists, true, true );
}
function checkList(lists)
{
var dt = new Date();
var ntime = dt.getFullYear() + "-" +
(dt.getMonth()+101).toString().substr(-2) + "-" +
(dt.getDate()+100).toString().substr(-2) + " " +
(dt.getHours()+100).toString().substr(-2) + ":" +
(dt.getMinutes()+100).toString().substr(-2) + ":" +
(dt.getSeconds()+100).toString().substr(-2);
var deleted = false;
for(var i=0 ; i<lists.length ; i++) {
if( lists[i].time < ntime ) {
lists.splice(i,1);
i--;
deleted = true;
}
}
if( deleted ) {
if( lists.length ) {
csaveData( "AttackList", lists, true, true );
} else {
cdelData("AttackList", true );
}
}
return lists;
}
}
//////////////////////
//同一カード合成ボタン
//////////////////////
function disp_CardCombine()
{
if( location.pathname != "/union/result_lv.php" &&
location.pathname != "/union/result_learn.php" &&
location.pathname != "/union/result_remove.php") {
return;
}
var ins = $a("//div[@class=\"back\"]")[1];
var skill2 = $x("//div[@class=\"skill2\"]");
var skill3 = $x("//div[@class=\"skill3\"]");
var div1 = d.createElement("div");
div1.className = "cardColmn";
div1.align = "center";
var div2 = d.createElement("div");
div2.className = "control";
div1.appendChild(div2);
var a = d.createElement("a");
a.href = caddSessionId("lvup.php?cid=" + URL_PARAM.cid);
a.title = "スキルLvを上げる";
a.className = "skillLvUp";
a.appendChild(d.createTextNode("スキルLvを上げる"));
div2.appendChild(a);
if( !skill3 ) {
a = d.createElement("a");
a.href = caddSessionId("learn.php?cid=" + URL_PARAM.cid);
a.title = "新しいスキルを習得する";
a.className = "skillLearn";
a.appendChild(d.createTextNode("新しいスキルを習得する"));
div2.appendChild(a);
}
if( skill2 ) {
a = d.createElement("a");
a.href = caddSessionId("remove.php?cid=" + URL_PARAM.cid);
a.title = "スキルを削除する";
a.className = "skillDelete";
a.appendChild(d.createTextNode("スキルを削除する"));
div2.appendChild(a);
}
ins.parentNode.insertBefore(div1, ins.nextSibling);
}
//////////////////////
//ヨロズダス表示
//////////////////////
function disp_PikaYorozu()
{
if( location.pathname == "/busyodas/b3kuji.php" ) {
Pika_updateYorozudasState();
}
if( location.pathname == "/busyodas/b3kuji_result.php") {
Pika_updateYorozudasState2();
}
Pika_displayYorozudasState();
}
//////////////////////
//HP回復時間表示
//////////////////////
function disp_PikaHPRestTime()
{
if(location.pathname != "/card/deck.php") return ;
Pika_displayRecoveryEstimates();
}
//////////////////////
//拠点生産量表示
//////////////////////
function disp_SuzanSeisan()
{
var icon = IMG_DIR + "common/sidebar/icon_production.gif";
var elms = ccreateSideBox("beyond_sidebox_suzanseisan", icon, "拠点生産");
if(location.pathname == "/village.php") {
Suzan_Seisan(elms.sideBoxInner);
}
}
/////////////////////////////////////////////////////////////////////////////
//common functions
/////////////////////////////////////////////////////////////////////////////
function cgetCurrentBaseName()
{
var xy = cgetCurrentBaseXY();
return VILLAGES_INFO[(xy.x+"_"+xy.y).replace(/-/g,"m")].basename;
}
function cgetCurrentBaseXY()
{
var nowLoc = $x('id("gnavi")//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 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 cupdateCurrentResources()
{
var nowNodes = PRE_LOAD_NODES['nowResources'];
RES_NOW["wood"] = parseInt( nowNodes["wood"].innerHTML, 10 );
RES_NOW["stone"] = parseInt( nowNodes["stone"].innerHTML, 10 );
RES_NOW["iron"] = parseInt( nowNodes["iron"].innerHTML, 10 );
RES_NOW["rice"] = parseInt( nowNodes["rice"].innerHTML, 10 );
}
function cgetNow()
{
var stimeText = PRE_LOAD_NODES['serverTime'].innerHTML;
var now = new Date();
var nowTimeAry = stimeText.replace(/^\s*|\s*$/,'').split(":");
now.setHours(parseInt(nowTimeAry[0],10),parseInt(nowTimeAry[1],10),parseInt(nowTimeAry[2],10));
return now;
}
function caddDate(baseDate, timetxt)
{
var tim = timetxt.match(/^(\d+):(\d+):(\d+)/);
if( !tim ) return "";
var dt = new Date(baseDate.getFullYear(),
baseDate.getMonth(),
baseDate.getDate(),
baseDate.getHours() + parseInt(tim[1],10),
baseDate.getMinutes() + parseInt(tim[2],10),
baseDate.getSeconds() + parseInt(tim[3],10) );
return dt.getFullYear() + "-" + (dt.getMonth()+1) + "-" + dt.getDate() + " " +
(dt.getHours()+100).toString().substr(-2) + ":" +
(dt.getMinutes()+100).toString().substr(-2) + ":" +
(dt.getSeconds()+100).toString().substr(-2);
}
//状態保存用のクッキー
function csetCookie(key, data)
{
sday = new Date();
sday.setTime(sday.getTime() + (120 * 1000 * 60 * 60 * 24));
d.cookie = key + "=" + escape(data) + ";expires=" + sday.toGMTString() + "; path=/";
}
function cgetCookie(key)
{
var data = "";
var start = d.cookie.indexOf(key + "=");
if (start != -1){
var end = d.cookie.indexOf(";", start);
data = unescape(d.cookie.substring(start + key.length + 1, end));
}
return data;
}
function cdelCookie(key)
{
d.cookie = key + "=;expires=Thu,01-Jan-70 00:00:01 GMT; path=/";
}
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 cdeleteUserXY(aid)
{
var allylists = cloadData( "allyXYAllyList", "[]", true, true );
var idx = allylists.indexOf(aid);
if( idx != -1 ) {
allylists.splice(idx,1);
csaveData( "allyXYAllyList", allylists, true, true );
}
cdelData( "allyXYList" + aid, true );
}
function cresetUserXY()
{
var allylists = cloadData( "allyXYAllyList", "[]", true, true );
for(var i=0 ; i<allylists.length ; i++) {
cdelData( "allyXYList" + allylists[i], true );
}
cdelData( "allyXYAllyList", true );
}
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 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 str2csvstr(str) {
var csvstr;
csvstr = str.replace(/^[\s ]+|[\s ]+$/g, "");
csvstr = csvstr.replace(/\"/g, "\"\"");
if (csvstr.indexOf(",") != -1) {
csvstr = "\"" + csvstr + "\"";
}
return csvstr;
}
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 cgetMapNofromXY(x, y, base_x, base_y, type)
{
if( isNaN(""+base_x) ) base_x = 0;
if( isNaN(""+base_y) ) base_y = 0;
//map.php専用のXY座標→mapAll999
var sc = 11;
var hosei = 0;
if( type == 2 ) {
sc = 15;
} else if( type == 3 ) {
sc = 20;
hosei = 1;
}
var hw = Math.floor( (sc - 1) / 2 );
var no = "";
if( x >= base_x - hw && x <= base_x - hw + sc - 1 &&
y >= base_y - hw - hosei && y <= base_y - hw + sc - 1 - hosei ) {
no = (x - base_x + hw) * sc + (base_y + hw - y ) + 1;
if( no < 10 ) no = "0" + no;
else no = "" + no;
}
return no;
}
function ccreateCheckBox(container, id, def, text, title, left )
{
left += 2;
var dv = d.createElement("div");
dv.style.padding = "2px";
dv.style.paddingLeft= left + "px";
dv.title = title;
var cb = d.createElement("input");
cb.type = "checkbox";
cb.id = id;
cb.value = 1;
if( def ) cb.checked = true;
var lb = d.createElement("label");
lb.htmlFor = id;
var tx = d.createTextNode(text);
lb.appendChild( tx );
dv.appendChild(cb);
dv.appendChild(lb);
container.appendChild(dv);
return cb;
}
function ccreateTextBox(container, id, def, text, title, size, left )
{
left += 2;
var dv = d.createElement("div");
dv.style.padding = "2px";
dv.style.paddingLeft= left + "px";
dv.title = title;
var tb = d.createElement("input");
tb.type = "text";
tb.id = id;
tb.value = def;
tb.size = size;
var tx = d.createTextNode(text);
tx.title = title;
dv.appendChild(tx);
dv.appendChild(tb);
container.appendChild(dv);
return tb;
}
function ccreateComboBox(container, id, sels, def, text, title, left )
{
left += 2;
var dv = d.createElement("div");
dv.style.padding = "2px";
dv.style.paddingLeft= left + "px";
dv.title = title;
var sel = d.createElement("select");
sel.id = id;
for(var i=0; i<sels.length; i++){
var opt = d.createElement("option");
opt.value = sels[i];
opt.appendChild(d.createTextNode(sels[i]));
sel.appendChild(opt);
}
if( def ) sel.value = def;
var tx = d.createTextNode(text);
tx.title = title;
dv.appendChild(tx);
dv.appendChild(sel);
container.appendChild(dv);
return sel;
}
function ccreateButton(container, text, title, func)
{
var btn = d.createElement("input");
btn.style.padding = "1px";
btn.type = "button";
btn.value = text;
btn.title = title;
container.appendChild(d.createTextNode(" "));
container.appendChild(btn);
container.appendChild(d.createTextNode(" "));
$e(btn, "click", func);
return btn;
}
function cgetCheckBoxValue(id)
{
var c = $(id);
if( !c ) return 0;
if( !c.checked ) return 0;
return 1;
}
function cgetTextBoxValue(id)
{
var c = $(id);
if( !c ) return "";
return c.value;
}
function ccreateSideBox(id, img, title)
{
var icon_box = 'data:image/gif;base64,'+
'R0lGODlhCwALAJEAAP///zMzM////wAAACH5BAUUAAIALAAAAAALAAsAAAIVjI8Gy6z5AoAyplkh'+
'xteiTW1NQyUFADs=';
var conf = cloadData( id + "conf" , '{"float":false, "open":true, "x":"", "y":"", "pos":99 }', true, true );
var elm_box = d.createElement("div");
elm_box.id = id;
elm_box.className = "sideBox";
var elm_boxHead = d.createElement("div");
elm_boxHead.className = "sideBoxHead";
elm_box.appendChild(elm_boxHead);
if (isNarrow) {
elm_box.style.cssFloat = "left";
elm_box.style.marginLeft = "10px";
}
var elm_h3 = d.createElement("h3");
var elm_strong = d.createElement("strong");
var elm_img = d.createElement("img");
elm_img.src = img;
elm_strong.appendChild(elm_img);
elm_strong.appendChild(d.createTextNode(title));
var elm_span=d.createElement("span");
elm_span.className = "beyond_panel_ctlbox";
var elm_img_up = d.createElement("img");
elm_img_up.src= IMG_DIR + "trade/icon_up.gif";
elm_img_up.title = "パネルを上に";
elm_img_up.id = id + "up";
var elm_img_down = d.createElement("img");
elm_img_down.src= IMG_DIR + "trade/icon_down.gif";
elm_img_down.title = "パネルを下に";
elm_img_down.id = id + "down";
var elm_img_box = d.createElement("img");
elm_img_box.src= icon_box;
elm_img_box.title = "フローティング/ドッキングの切り替え";
elm_span.appendChild(elm_img_up);
elm_span.appendChild(elm_img_box);
elm_span.appendChild(elm_img_down);
elm_strong.appendChild(elm_span);
elm_h3.appendChild(elm_strong);
elm_boxHead.appendChild(elm_h3);
var elm_boxInner = d.createElement("div");
elm_boxInner.className = "sideBoxInner";
if( !conf.open ) {
elm_boxInner.style.display = "none";
elm_img.style.opacity = 0.3;
}
elm_box.appendChild(elm_boxInner);
$e(elm_img, "click", function(){
var sidebox = $(id);
var op = false;
if( !sidebox ) return;
var inner = $x('.//div[contains(@class,"sideBoxInner")]', sidebox);
if( !inner ) return;
if( inner.style.display == "none" ){
inner.style.display = "";
this.style.opacity = 1;
op = true;
}else{
inner.style.display = "none";
this.style.opacity = 0.3;
}
var conf = cloadData( id + "conf" , '{"float":false, "open":true, "x":"", "y":"", "pos":99 }', true, true );
conf.open = op;
csaveData( id + "conf", conf, true, true );
} );
$e(elm_img_up, "click", function(){
var sidebox = $(id);
if( sidebox.parentNode.id != "beyond_fixpanel" ) return;
var target = sidebox.previousSibling;
if( !target ) return;
sidebox.parentNode.removeChild(sidebox);
target.parentNode.insertBefore(sidebox, target);
crenumberSideBox();
});
$e(elm_img_down, "click", function(){
var sidebox = $(id);
if( sidebox.parentNode.id != "beyond_fixpanel" ) return;
var target = sidebox.nextSibling;
if( !target ) return;
sidebox.parentNode.removeChild(sidebox);
target.parentNode.insertBefore(sidebox, target.nextSibling);
crenumberSideBox();
});
$e(elm_img_box, "click", function(){
var sidebox = $(id);
if( !sidebox ) return;
var conf = cloadData( id + "conf" , '{"float":false, "open":true, "x":"", "y":"", "pos":99 }', true, true );
if( sidebox.parentNode.id == "beyond_fixpanel" ) {
if( isNaN(""+conf.x) || conf.x == "" || isNaN(""+conf.y) || conf.y == "" ) {
var xy = cgetElementXY(sidebox);
conf.x = xy.x;
conf.y = xy.y;
}
var cx = d.body.clientWidth;
var cy = d.body.clientHeight;
var eW = elm_box.clientWidth;
var eH = elm_box.clientHeight;
elm_box.style.left = conf.x + "px";
elm_box.style.top = conf.y + "px";
if ((conf.x + eW) <= 0) {
elm_box.style.left = "0px";
}
else if (cx <= conf.x ) {
elm_box.style.left = (cx - eW) + "px";
}
if ((conf.y + eH) <= 0) {
elm_box.style.top = "0px";
}
else if (cy <= conf.y) {
elm_box.style.top = (cy - eH) + "px";
}
sidebox.parentNode.removeChild(sidebox);
$("beyond_floatpanel").appendChild(sidebox);
sidebox.style.position = "absolute";
sidebox.style.top = conf.y + "px";
sidebox.style.left = conf.x + "px";
sidebox.style.zIndex = 1000;
conf.float = true;
$(id + "up").style.display = "none";
$(id + "down").style.display = "none";
}else {
sidebox.parentNode.removeChild(sidebox);
$("beyond_fixpanel").appendChild(sidebox);
sidebox.style.position = "";
sidebox.style.top = "";
sidebox.style.left = "";
sidebox.style.backgroundColor = "";
sidebox.style.border = "";
sidebox.style.zIndex = "";
conf.float = false;
$(id + "up").style.display = "";
$(id + "down").style.display = "";
csortSideBox();
}
csaveData( id + "conf", conf, true, true );
} );
var movedNode = null;
var currentZIndex = 0;
$e(elm_boxHead, "mousedown", function(event){
movedNode = $(id);
if( movedNode.parentNode.id != "beyond_floatpanel" ) return true;
g_MD = id;
g_MX = event.pageX-parseInt(movedNode.style.left,10);
g_MY = event.pageY-parseInt(movedNode.style.top,10);
currentZIndex = document.defaultView.getComputedStyle(movedNode, '').zIndex;
movedNode.style.zIndex = 9999;
if (navigator.userAgent.toLowerCase().indexOf('chrome') == -1) {
event.preventDefault();
}
conf = cloadData( id + "conf" , '{"float":false, "open":true, "x":"", "y":"", "pos":99 }', true, true );
});
$e(d, "mousemove", function(event){
if(g_MD != id) return true;
if( movedNode.parentNode.id != "beyond_floatpanel" ) return true;
var x = event.pageX - g_MX;
var y = event.pageY - g_MY;
movedNode.style.left = x + "px";
movedNode.style.top = y + "px";
conf.x = x;
conf.y = y;
});
$e(d, "mouseup", function(event){
if(g_MD != id) return true;
g_MD = "";
movedNode.style.zIndex = currentZIndex;
movedNode = null;
csaveData( id + "conf", conf, true, true );
});
if( conf.float && !(isNaN(""+conf.x) || isNaN(""+conf.y))) {
elm_box.style.position = "absolute";
elm_box.style.zIndex = 1000;
elm_img_up.style.display = "none";
elm_img_down.style.display = "none";
$("beyond_floatpanel").appendChild(elm_box);
var cx = d.body.clientWidth;
var cy = d.body.clientHeight;
var eW = elm_box.clientWidth;
var eH = elm_box.clientHeight;
elm_box.style.left = conf.x + "px";
elm_box.style.top = conf.y + "px";
if ((conf.x + eW) <= 0) {
elm_box.style.left = "0px";
}
else if (cx <= conf.x ) {
elm_box.style.left = (cx - eW) + "px";
}
if ((conf.y + eH) <= 0) {
elm_box.style.top = "0px";
}
else if (cy <= conf.y) {
elm_box.style.top = (cy - eH) + "px";
}
} else {
$("beyond_fixpanel").appendChild(elm_box);
}
return {"sideBox":elm_box, "sideBoxHead":elm_boxHead, "sideBoxInner":elm_boxInner };
}
function csortSideBox()
{
var sideboxes = $a("//div[@id=\"beyond_fixpanel\"]/div[@class=\"sideBox\"]");
var srt = new Array();
for(var i=0 ; i<sideboxes.length ; i++) {
var pos = 0;
var conf = cloadData( sideboxes[i].id + "conf" , '{"float":false, "open":true, "x":"", "y":"", "pos":99 }', true, true );
pos = conf.pos;
srt.push({"node":sideboxes[i], "pos":pos});
}
srt.sort( function(a,b) {return a.pos - b.pos;});
for(var i=0 ; i<srt.length ; i++){
srt[i].node.parentNode.removeChild(srt[i].node);
}
var fixpanel = $("beyond_fixpanel");
for(var i=0 ; i<srt.length ; i++){
fixpanel.appendChild(srt[i].node);
}
}
function crenumberSideBox()
{
var sideboxes = $a("//div[@id=\"beyond_fixpanel\"]/div[@class=\"sideBox\"]");
for(var i=0 ; i<sideboxes.length ; i++) {
var conf = cloadData( sideboxes[i].id + "conf" , '{"float":false, "open":true, "x":"", "y":"", "pos":99 }', true, true );
conf.pos = i;
csaveData( sideboxes[i].id + "conf", conf, true, true );
}
}
function cappendColumnForProfile(title, id)
{
var tds = $a('//table[@class="commonTables"]//th[contains(text(),"座標")]/../preceding-sibling::tr/*[contains("tdTDthTH",name())][last()]');
for(var i=0 ; i<tds.length ; i++) {
tds[i].colSpan++;
}
var tr = $x('//table[@class="commonTables"]//th[contains(text(),"座標")]/..');
var th = d.createElement("th");
th.className = "ttl4";
th.id = id + "_title";
th.appendChild( d.createTextNode( title ) );
tr.appendChild( th );
var trs = $a('//table[@class="commonTables"]//th[contains(text(),"座標")]/../following-sibling::tr');
for(var i=0 ; i<trs.length ; i++) {
var xytd = trs[i].childNodes[3];
if( !xytd ) continue;
var xy = xytd.innerHTML.match(/([\-0-9]+),([\-0-9]+)/);
if( !xy ) continue;
var td = d.createElement("td");
td.id = id + "_" + xy[1] + "_" + xy[2];
trs[i].appendChild(td);
var pstd = trs[i].childNodes[5];
if( !pstd ) continue;
if( pstd.innerHTML != "&nbsp;" ) {
td.textContent = "-";
}
}
}
function csetUserStar(uid, x, y, star, wood, stone, iron, rice, npc)
{
var userlists = cloadData( "UserStarUserList", "[]", true, true );
if( userlists.indexOf(uid) == -1 ) {
userlists.push(uid);
csaveData( "UserStarUserList", userlists, true, true );
}
var lists = cloadData( "UserStarList" + uid, "[]", true, true );
for(var i=0 ; i<lists.length ; i++) {
if( lists[i].x == x && lists[i].y == y ) {
return;
}
}
lists.push({"star":star, "x":x, "y":y, "wood":wood, "stone":stone, "iron":iron, "rice":rice, "npc":npc });
csaveData( "UserStarList" + uid, lists, true, true );
}
function cresetUserStar()
{
var userlists = cloadData( "UserStarUserList", "[]", true, true );
for(var i=0 ; i<userlists.length ; i++) {
cdelData( "UserStarList" + userlists[i], true );
}
cdelData( "UserStarUserList", true );
}
function csetMyLevel(x, y, level)
{
var lists = cloadData( "MyLevelList", "[]", true, true );
var ins = true;
for(var i=0 ; i<lists.length ; i++) {
if( lists[i].x == x && lists[i].y == y ) {
if( level == -1 ) {
lists[i].level++;
}else{
lists[i].level = level;
}
ins = false;
break;
}
}
if( ins && level != -1) {
lists.push({"x":x, "y":y, "level":level});
}
csaveData( "MyLevelList", lists, true, true );
}
function cdelMyLevel(x, y)
{
var lists = cloadData( "MyLevelList", "[]", true, true );
for(var i=0 ; i<lists.length ; i++) {
if( lists[i].x == x && lists[i].y == y ) {
lists.splice(i,1);
csaveData( "MyLevelList", lists, true, true );
break;
}
}
}
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 cloadData(key, value, local, ev)
{
if( local ) key = location.hostname + key;
var ret = GM_getValue(key, value);
return ev ? eval('ret='+ret) : ret;
}
function cdelData(key, local )
{
if( local ) key = location.hostname + key;
GM_deleteValue( key );
}
//////////////////////////////////////////////////////////////////
//プレゼンツbyピカチュウ関数群
//http://shigematsu.org/
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//////////////////////////////////////////////////////////////////
function Pika_blinkElements()
{
// Drift-free blinking routine
var opacity = Math.round((new Date() % 1000) / 1000);
for (var i = 0; i < Pika_elementQueue.length; ++i) {
Pika_elementQueue[i].style.opacity = opacity;
}
window.setTimeout(function() { Pika_blinkElements(); }, 500);
}
function Pika_updateYorozudasState() {
var x = $a('//div[@class="sysMes"]/strong');
if( x.length < 3 ) return;
var nextUpdate = new Date(x[2].textContent.replace(/-/g, '/')).getTime();
var info = {
current: +x[0].textContent,
nextUpdate: nextUpdate,
confirm: nextUpdate - (24 * 60 * 60)
};
csaveData('yorozudas_state', info, true, true);
Pika_displayYorozudasState();
/* 設定メニューでON/OFFできるのでここでON/OFFは必要ないかな
var button = d.createElement('input');
with (button) {
id = 'beyond_yorozudas_notification';
type = 'checkbox';
checked = cloadData('yorozudas_notification', false, true);
addEventListener('click', function() {
var state = $('beyond_yorozudas_notification').checked;
csaveData('yorozudas_notification', state, true, true);
Pika_displayYorozudasState();
}, false);
}
var text = d.createTextNode(' ヨロズダスの状態を通知する');
var p = d.createElement('p');
var lb = d.createElement("label");
lb.htmlFor = button.id;
lb.appendChild(text);
with (p) {
style.backgroundColor = '#aaaaaa';
appendChild(button);
appendChild(lb);
}
d.getElementsByClassName('sysMes')[0].appendChild(p);
*/
}
function Pika_updateYorozudasState2() { //result用を追加
var x = $a('//div[@class="sysMes2"]/strong');
if( x.length < 3 ) return;
var nextUpdate = new Date(x[1].textContent.replace(/-/g, '/')).getTime();
var info = {
current: +x[0].textContent,
nextUpdate: nextUpdate,
confirm: nextUpdate - (24 * 60 * 60)
};
csaveData('yorozudas_state', info, true, true);
Pika_displayYorozudasState();
}
function Pika_displayYorozudasState() {
var xpath = '(id("sidebar")/ul/li | id("btn_area_box"))/a[contains(@href, "/busyodas/b3kuji.php")]/img';
if (OPT_SMALLBTN) {
xpath += '/..';
}
var img_yorozu = $x(xpath);
//設定メニューでON/OFFできるのでここでON/OFFは必要ないかな
// var enabled = cloadData('yorozudas_notification', false, true);
// if (enabled) {
var info = cloadData('yorozudas_state', '{}', true, true);
var now = new Date().getTime();
if (info.nextUpdate < now) {
Pika_elementQueue.push(img_yorozu);
} else {
if (info.current <= 0) {
img_yorozu.style.opacity = 0.5;
} else {
if (info.confirm > 0
&& info.confirm < now) {
if (confirm('ヨロズダスが引けますが、まだ引いていません。\n後でまた通知しますか?')) {
var delta = (info.nextUpdate - now) / 3600;
if (delta < 4) {
info.confirm += 1 * 60 * 60; // 1 hour later
} else if (delta < 8) {
info.confirm += 2 * 60 * 60; // 2 hours later
} else {
info.confirm += 4 * 60 * 60;
}
} else {
info.confirm = 0;
}
csaveData('yorozudas_state', info, true, true);
}
}
}
// } else {
// img_yorozu.style.opacity = 1;
// }
}
function Pika_displayRecoveryEstimates() {
var
candidates = $a('//*[@id="deck_file"]//*[div[@class="setPlace false"]]');
for (var i = 0; i < candidates.length; ++i) {
var level = + $x('*//*[starts-with(@class,"level_")]', candidates[i]).innerHTML;
// var level = + candidates[i].getElementsByClassName('level')
// [0].textContent;
var hp = + candidates[i].getElementsByClassName('status_hp')
[0].textContent.toString().split(/[\/]/)[0];
if (hp >= 100) continue;
// var hours = (level * (100 - hp)) / 60;
var hours = (level <= 5) ? Math.pow(2, level - 2) * (100 - hp) / 100 :
(level <= 10) ? 4 * (level - 3) * (100 - hp) / 100 :
(level + 20) * (100 - hp) / 100;
var msg = Pika_formatEstimate(hours, false) + 'にHP全回復';
candidates[i].getElementsByClassName('setPlace false')[0].innerHTML = msg;
}
candidates = $a('//*[@id="deck_file"]//*[div[@class="control"]/dl/dd[contains(text(),"治療中")]]');
for (var i = 0; i < candidates.length; ++i) {
var level = + $x('*//*[starts-with(@class,"level_")]', candidates[i]).innerHTML;
// var level = + candidates[i].getElementsByClassName('level')
// [0].textContent;
var hp = + candidates[i].getElementsByClassName('status_hp')
[0].textContent.toString().split(/[\/]/)[0];
if (hp >= 100) continue;
// var hours = (level * (100 - hp)) / 60;
var hours = (level <= 5) ? Math.pow(2, level - 2) * (100 - hp) / 100 :
(level <= 10) ? 4 * (level - 3) * (100 - hp) / 100 :
(level + 20) * (100 - hp) / 100;
var msg = Pika_formatEstimate(hours, false) + '<br>にHP全回復';
candidates[i].getElementsByTagName('dd')[2].innerHTML = msg;
candidates[i].getElementsByTagName('dd')[2].style.fontSize = "10px";
candidates[i].getElementsByTagName('dd')[2].style.margin = "0px";
}
window.setTimeout(function() { Pika_displayRecoveryEstimates(); }, 60*1000);
}
function Pika_formatEstimate(hours, displaySecs) {
var msg = '';
var now = new Date();
var xday = new Date(now.getTime() + hours * 60 * 60 * 1000);
var days = Math.floor(hours / 24);
var delta = Math.floor(
(
new Date(xday.getYear(), xday.getMonth(), xday.getDate()) -
new Date(now .getYear(), now .getMonth(), now .getDate())
)
/ (24 * 60 * 60 * 1000));
if (delta == 0) msg = '';
else if (delta == 1) msg = '明日';
else if (delta == 2) msg = '明後日';
else msg = delta + '日後';
msg += xday.getHours() + '時';
msg += xday.getMinutes() + '分 ';
if (days == 0) {
var seconds = Math.floor((hours * 3600) % 60);
var minutes = Math.floor((hours * 60) % 60);
hours = Math.floor(hours);
if (hours == 0) {
if (displaySecs) {
msg += '(' + minutes + '分' + seconds + '秒後) ';
}
else {
msg += '(' + minutes + '分後) ';
}
}
else {
msg += '(' + hours+ '時間' + minutes +'分後) ';
}
}
return msg;
}
function Pika_installMapXYHelper()
{
// http://javascript.g.hatena.ne.jp/emergent/20081122/1227329941
// https://developer.mozilla.org/ja/XPCNativeWrapper
// use event listener to set 'onlcick' functon
if( location.pathname != '/map.php' ) return;
var btn = $x('//div[@id="mapXY"]//input[@type="submit"]');
if( !btn ) return;
btn.addEventListener('click',
function() {
var xpath = '//div[@id="mapXY"]//input[@type="text"]';
var xy = $a(xpath);
var x = xy[0].value.toString();
if (x.match(/(-?\d+)[ .,&、](?:y=)?(-?\d+)/)) {
xy[0].value = RegExp.$1;
xy[1].value = RegExp.$2;
}
}, false);
}
function Pika_installTradeHelper() {
if( location.pathname != '/card/trade.php' ) return;
$('button')
.addEventListener('click',
function() {
var element = $x('//div[@class="formSearch"]/select');
var index = element.selectedIndex;
if (index == 0 || index == 3) {
if ($('k').value.toString().match(/[1-4]\d{3}/)) {
element.selectedIndex = 2;
}
}
}, false);
}
function Pika_prepareForDisplayBuildStatus()
{
var maps = $('maps');
var xpath = 'img[contains(@src, "/img_lv0.gif")]/@class';
var nodes = $a(xpath, maps);
for (var i = 0; i < nodes.length; ++i) {
var index = nodes[i].value.toString().substr(-2);
var xpath = 'img[@class="map' + index +'" and contains(@src, "/facility_10")]';
var isResourceProducingLot = $a(xpath, maps).length;
if (!isResourceProducingLot) {
$x('//img[@class="mapicon'+index+'"]').src =
'data:image/gif;base64,'+
'R0lGODlhFwAWAMQfADp1MxYsFzp7NEGdQTp7Nm2bac7dzebu5l6TWkWmRZ69nPL2'+
'8kWAQLXNszuNO7/UvzV7NWqVZU6PTNrm2Y20i0apRj+WP1LOc0y7TDmDOSAgID+G'+
'OShRLz9+N////////yH5BAEAAB8ALAAAAAAXABYAAAW74PdxZGmepShyV+u+sMut'+
'WG3fOD5zVe8niYFQmPD5OBqOZcm0OCQUg4HiaC6RnIx2m4E8PGCPAsLNYDfoNAGx'+
'OEgKYEYafZ5vCJODYN/wFOx1cwhiAhsCCh4IgEl2G3ANAJEGBwSLWWUMYBQRXwUE'+
'XARYHaOkh2ELBQKkpKKrowARChQMAK6jrbaRkba3GiO8wKwaviMoHLwlwyofw83D'+
'rs7Ky9MiqwEB1NnLpNfa3h+j3d/aHeLj2tjfIQA7';
}
}
}
function Pika_displayBuildStatus() {
var xpath = 'id("actionLog")//li/span[@class="buildStatus" and contains(.,"建設")]/a';
var nodes = $a(xpath);
var facilities = {};
for (var i = 0; i < nodes.length; ++i) {
nodes[i].href.match(/x=(\d+)&y=(\d+)/);
var x = parseInt(RegExp.$1,10);
var y = parseInt(RegExp.$2,10);
var index = (101 + x * 7 + y).toString().substr(-2);
facilities[index] = index;
}
for (var index in facilities) {
Pika_elementQueue.push(document.getElementsByClassName('map'+index)[0]);
Pika_elementQueue.push(document.getElementsByClassName('mapicon'+index)[0]);
}
var deleting = $x('//*[@id="actionLog"]/ul/li[contains(text(), "削除中")]/span[@class="buildStatus"]/a');
if (deleting && deleting.href.match(/x=(\d+)&y=(\d+)/)) {
var x = +RegExp.$1;
var y = +RegExp.$2;
var index = (101 + x * 7 + y).toString().substr(-2);
document.getElementsByClassName('map'+index)[0]
.style.opacity = 0.5;
document.getElementsByClassName('mapicon'+index)[0]
.style.opacity = 0.5;
}
}
//////////////////////////////////////////////////////////////////
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//プレゼンツbyピカチュウ関数群
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
//プレゼンツbysu-zan関数群
//http://shigematsu.org/
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//////////////////////////////////////////////////////////////////
function Suzan_Seisan(inner)
{
var yieldList = {
other : [0,6,14,25,50,80,117,162,214,272,335,404,476,550,626,702],
rice : [0,6,18,36,72,114,167,231,305,388,479,577,680,786,894,1003]
};
var yieldExtends = [
{
name : '水車',
facility : {
match : '畑',
data : [0,0.03,0.06,0.09,0.12,0.15,0.18,0.21,0.24,0.27,0.3]
},
resource : {
match : '穀物',
data : [0,40,60,80,110,140,180,220,270,350,450]
}
},
{
name : '工場',
facility : {
match : '伐採所石切り場製鉄所',
data : [0,0.03,0.05,0.08,0.1,0.13,0.15,0.18,0.2,0.23,0.25]
},
resource : {
match : '森林岩山鉄鉱山',
data : [0,55,65,75,95,115,145,185,235,300,380]
}
}
];
var seisan = { w:0, s:0, i:0, r:0 };
for (var i = 0; i < 2;i++) {
var yieldExtend = yieldExtends[i];
var yieldExtendArea = $x('//area[starts-with(@alt,"'+yieldExtend.name+'")]');
if (!yieldExtendArea) {
continue;
}
var yieldExtendAreaInfo = cgetFacilityInfoFromArea(yieldExtendArea);
var yieldExtendResource = yieldExtend.resource.data[yieldExtendAreaInfo.lv];
var yieldExtendFacility = yieldExtend.facility.data[yieldExtendAreaInfo.lv];
var squreaAreas = cgetSquareElementFromArea(yieldExtendArea);
for (var key in squreaAreas) {
if (!squreaAreas[key]) {
continue;
}
var squreaArea = squreaAreas[key];
var squreaAreaInfo = cgetFacilityInfoFromArea(squreaArea);
var dataKey = nameToDataKey(squreaAreaInfo.name);
if (0 <= yieldExtend.resource.match.indexOf(squreaAreaInfo.name)) {
seisan[dataKey] += yieldExtendResource;
}
else if (0 <= yieldExtend.facility.match.indexOf(squreaAreaInfo.name)) {
seisan[dataKey] += Math.ceil(yieldExtendFacility * yieldList[getYieldKeyFromDataKey(dataKey)][squreaAreaInfo.lv]);
}
}
}
var areas = $a('//area[contains(@alt,"畑") or contains(@alt,"穀") or contains(@alt,"伐") or contains(@alt,"森") or contains(@alt,"石") or contains(@alt,"岩") or contains(@alt,"製") or contains(@alt,"鉱")]');
for(var i=0; i<areas.length; i++){
var areaInfo = cgetFacilityInfoFromArea(areas[i]);
var dataKey = nameToDataKey(areaInfo.name);
switch(areaInfo.name){
case '森林':
case '岩山':
case '鉄鉱山':
case '穀物':
seisan[dataKey] += 10;
break;
case '伐採所':
case '石切り場':
case '製鉄所':
case '畑':
var yieldKey = getYieldKeyFromDataKey(dataKey);
seisan[dataKey] += yieldList[yieldKey][areaInfo.lv];
break;
}
}
var text = '<ul>';
text += '<li><img align="middle" alt="木" src="' + IMG_DIR + 'common/ico_wood2.gif"> 木 ' + seisan.w + '</li>';
text += '<li><img align="middle" alt="石" src="' + IMG_DIR + 'common/ico_stone2.gif"> 石 ' + seisan.s + '</li>';
text += '<li><img align="middle" alt="鉄" src="' + IMG_DIR + 'common/ico_iron2.gif"> 鉄 ' + seisan.i + '</li>';
text += '<li><img align="middle" alt="糧" src="' + IMG_DIR + 'common/ico_lice2.gif"> 糧 ' + seisan.r + '</li>';
text += '<li> 合計 ' + (seisan.w+seisan.s+seisan.i+seisan.r) +'</li></ul>';
inner.innerHTML = text;
function getYieldKeyFromDataKey(dataKey) {
var ret = 'other';
if (dataKey == 'r') {
ret = 'rice';
}
return ret;
}
function nameToDataKey(name) {
switch(name){
case '森林':
case '伐採所':
return "w";
case '岩山':
case '石切り場':
return "s";
case '鉄鉱山':
case '製鉄所':
return "i";
case '穀物':
case '畑':
return "r";
}
}
}
//////////////////////////////////////////////////////////////////
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//プレゼンツbysu-zan関数群
//////////////////////////////////////////////////////////////////
function disp_castleAidLink()
{
var bases = $a('(id("lodgment")/div[@class="floatInner"] | //div[@class="sideBoxInner basename"])//li/*[@title]');
if( !bases ) return;
for( var i=0 ; i < bases.length ; i++) {
var elem = bases[i];
var thistitle = elem.title;
if( !thistitle ) continue;
var xy = thistitle.match(/\((-?\d+),(-?\d+)\)$/);
if( !xy ) continue;
var a_k_img = d.createElement("img");
a_k_img.style.paddingLeft = "3px";
a_k_img.src = img_ken;
var a_k = d.createElement("a");
a_k.title = "援軍";
a_k.appendChild(a_k_img);
if( elem.href ) {
a_k.href = caddSessionId("/facility/castle_send_troop.php?x="+xy[1]+"&y="+xy[2]+"&radio_move_type=301");
a_k.style.visibility = 'visible';
} else {
a_k.style.visibility = 'hidden';
}
var spn = cgetElementSibling(elem,0);
if (!spn) {
spn = d.createElement("span");
elem.parentNode.appendChild(spn);
}
spn.appendChild(a_k);
}
}
function disp_nextFameTimer() {
var nextDate = new Date(cloadData("NextFameTime",null,true,true));
var preCheckTime = new Date(cloadData("NextFamePreCheckTime",null,true,true));
nextDate = loadNextDate();
var seps = $a('id("status_left")/span[@class="sep"]');
for (var i = 0; i < seps.length;i++) {
seps[i].innerHTML = seps[i].innerHTML.replace(/^([\s|\u3000]*)|([\s|\u3000]*)$/g,"");
}
var img = $x('id("status_left")/img[@title="名声"]');
var fameTimer = document.createElement('DIV');
fameTimer.setAttribute("id","Beyond_nextFameTimer");
fameTimer.appendChild(createTimerText(getTimeDiffNow(nextDate)));
fameTimer.style.color = 'lightgreen';
fameTimer.style.position = 'absolute';
fameTimer.style.top = (img.offsetTop + 12) + "px";
fameTimer.style.left = (img.offsetLeft + 10) + "px";
img.parentNode.appendChild(fameTimer);
var timerId = setInterval(function(){
fameTimer.style.top = (img.offsetTop + 12) + "px";
fameTimer.style.left = (img.offsetLeft + 10) + "px";
fameTimer.replaceChild(createTimerText(getTimeDiffNow(loadNextDate())), fameTimer.firstChild);
},1000);
function createTimerText(date) {
return document.createTextNode("("+date.toLocaleTimeString().replace(/^0?/,"")+")");
}
function getTimeDiffNow(date) {
var now = cgetNow();
var oldDate = now, newDate = date;
if (date.getTime() < now.getTime()) {
return new Date(1970,1,1,0,0,0);
}
return new Date(1970,1,1,0,0,0,newDate.getTime() - oldDate.getTime());
}
var nextFameDateCheckErrorCount = 0;
var nextFameRefreshCount = 0;
function loadNextDate() {
var nowDate = new Date();
var isNextFameDateOver = false;
if (nextDate.getTime() < nowDate.getTime()) {
isNextFameDateOver = true;
}
var isPreCheckDateOver = false;
if (preCheckTime.getTime() < (nowDate.getTime() - 1800000)) {
isPreCheckDateOver = true;
}
if (5 < nextFameDateCheckErrorCount) {
if (isNextFameDateOver) {
clearInterval(timerId);
}
return nextDate;
}
if ((isPreCheckDateOver || isNextFameDateOver) && nextFameRefreshCount === 0) {
nextFameTimeRefresher();
}
return nextDate;
function nextFameTimeRefresher() {
cajaxRequest("/facility/castle.php" , "GET", "", function(req) {
var dom = d.createElement("html");
dom.innerHTML = req.responseText;
var nextFameNode = $x('.//div[@id="gray02Wrapper"]/table[contains(concat(" ",normalize-space(@class)," ")," commonTables ") and @summary="object"]//td[contains(concat(" ",normalize-space(@class)," ")," center ") and not(@colspan)]/div[not(@class)]',dom);
if (!nextFameNode) {
nextFameDateCheckErrorCount++;
return;
}
var matches = null;
if (!(matches = nextFameNode.innerHTML.match(/\d+-\d+-\d+\s\d+:\d+/))) {
nextFameDateCheckErrorCount++;
return;
}
var tmpDate = new Date(matches[0].replace(/-/g,"/")+":00");
if (isPreCheckDateOver == false && nextDate.getTime() == tmpDate.getTime()) {
if (12 <= nextFameRefreshCount) {
clearInterval(timerId);
}
else {
nextFameRefreshCount++;
setTimeout(nextFameRefresher,5000);
}
return;
}
else if (!(nextDate.getTime() == tmpDate.getTime())) {
nextDate = tmpDate;
if (cloadData("NextFameTime",null,true,true)) {
var fameText = $x('id("status_left")//img[@title="名声"]').nextSibling;
matches = fameText.nodeValue.match(/(\d+)[^\d]*(\d+)/);
fameText.nodeValue = fameText.nodeValue.replace(/\d+[^\d]*\d+/,(parseInt(matches[1],10)+1) + " / " + (parseInt(matches[2],10)+1));
}
csaveData("NextFameTime",nextDate.toString(),true,true);
}
nextFameRefreshCount = 0;
preCheckTime = new Date();
csaveData("NextFamePreCheckTime",preCheckTime.toString(),true,true);
},
function() {
nextFameDateCheckErrorCount++;
});
}
}
}
function disp_timerLinkDepot() {
var timerIcon = 'data:image/gif;base64,'+
'R0lGODlhEAAQANUAACAcHfDx8enp6oCAg8jJyoSGiZCSlNDR0YuNkGlrbXh5e46Qkh8aG+Dg4Xx9'+
'gIiKjDMwMfj5+XBxc9jZ2ZiYmWFhY1hYWrO0tMXFxt/g4ENCRHV2efjq6Li5up6eoKKjpPf4+CUh'+
'InJXV1FOTyMfIU5MTTg0NUE+Pzs4OTMvMEpHSCgkJUhFRtHGxc7HyLe4ub/AwefX1tjT09bJyOHY'+
'2Kumpu7x8W5vcV5eYGdoaoeJjL+cm/rw7/bn5QAAAAAAACH5BAEAAD4ALAAAAAAQABAAAAawwMLg'+
'gVgsDEaD0oAYWgrEpmMwmBYRj0piINwYMAQXwaMY6AqSikIhuRwatFmgQVA4HDmcJEERBAI8HBEB'+
'ES83GxUWCRIEGIQcPSARDQcFCRYQGgV+DTAtMX8BAh8aEAAABQR+HiI7Nn8HHyGnDAoCAhcDNTKh'+
'AhSnAAwjEx0HAiChExMJDMArFBm3vbimwAAoHdECDQIHBCXWwBADBN4HBifh4SksKiYk6uoMzfH1'+
'8UEAOw==';
var sidboxId = 'beyond_sidebox_timerOpenLinkconf';
var timeId = null;
timeId = setInterval(function(){
var doc = $x('id("timerOpenLink")/..');
if (!doc) return;
clearInterval(timeId);
doc.style.display = 'none';
var img = $x('.//img',doc);
if (img) {
timerIcon = img.src;
}
var box = ccreateSideBox(sidboxId,timerIcon,"タイマーボタン");
var adoc = d.createElement("a");
adoc.href = "javascript:void(0);";
adoc.innerHTML = "タイマー表示";
adoc.addEventListener("click", function() {
var doc = $x('id("timerOpenLink")');
if (!doc) return;
var event = d.createEvent( "MouseEvents" );
event.initEvent( "click", false, true );
doc.dispatchEvent( event );
}, true);
box.sideBoxInner.appendChild(adoc);
var conf = cloadData( sidboxId + "conf" , '{"float":false, "open":true, "x":"", "y":"", "pos":99 }', true, true );
cinsertSideBox(conf.pos,box);
},100);
setTimeout(function(){clearInterval(timeId);},500);
}
function disp_villageListBox() {
if (0 <= location.pathname.search(/^\/(village|map|land)\.php/)) {
return;
}
var isOpen = cloadData('sidebox_oc0', false,true) ? false : true;
var sidBoxId = 'beyond_sidebox_villageListBox';
var conf = cloadData( sidBoxId+'conf' , "null", true, true );
if (!OPT_SMALLBTN) {
isOpen = (conf == null) ? true : conf.open;
}
if (conf != null && typeof conf == 'object') {
conf.open = isOpen;
csaveData(sidBoxId+'conf',conf,true,true);
}
var box = ccreateSideBox(sidBoxId,IMG_DIR+'common/sidebar/icon_base.gif',"拠点");
box.sideBoxInner.className += " basename";
var ul = d.createElement("ul");
box.sideBoxInner.appendChild(ul);
var boxImage = $x('.//img[contains(@src,"icon_base")]', box.sideBoxHead);
$e(boxImage,'click',function(){
var saveData = isOpen ? "1" : "";
isOpen = !isOpen;
csaveData('sidebox_oc0', saveData,true);
});
var cvid = cgetCurrentVillageId();
for (var key in VILLAGES_INFO) {
var village = VILLAGES_INFO[key];
var li = d.createElement("li");
li.style.paddingBottom = "0px";
ul.appendChild(li);
var item;
if (village.vid == cvid) {
li.className = "on";
item = d.createElement("span");
}
else {
item = d.createElement("a");
item.href = caddSessionId('/village_change.php?village_id='+village.vid+'&from=menu&page=' + encodeURIComponent(location.pathname + location.search));
}
li.appendChild(item);
item.title = village.basename + " ("+village.x+","+village.y+")";
item.appendChild(d.createTextNode(village.basename));
}
}
// 初期化拡張
function initVillages() {
if (0 <= location.pathname.search(/^\/(village|land)\.php/)) {
_villageInit();
return;
}
else if (location.pathname == "/user/" && $("statMenu")) {
_profileInit();
return;
}
VILLAGES_INFO = cloadData("villagesInfo","{}",true,true);
function _villageInit() {
var villages = $a('(id("lodgment")/div[@class="floatInner"] | //div[@class="sideBoxInner basename"])//li/*[@title]');
var compList = new Object();
var reg = new RegExp(/^([^ ]+) \((-?\d+),(-?\d+)\)$/);
var matches = null;
var noVids = new Array();
for (var i=0;i < villages.length;i++) {
var village = villages[i];
var addObj = new Object();
if ((matches = village.title.match(reg))) {
addObj.basename = matches[1];
addObj.x = parseInt(matches[2],10);
addObj.y = parseInt(matches[3],10);
}
if (typeof village.href == 'string' && (matches = village.href.match(/village_id=(\d+)/))) {
addObj.vid = parseInt(matches[1],10);
}
else {
var viDoc = $x('//input[@name="village_id"]');
if (viDoc) {
addObj.vid = parseInt(viDoc.value,10);
}
else {
noVids.push(addObj);
}
}
compList[(addObj.x+"_"+addObj.y).replace(/-/g,"m")] = addObj;
}
_compData(compList);
if (0 < noVids.length) {
cajaxRequest("/user/" , "GET", "", function(req) {
var dom = d.createElement("html");
dom.innerHTML = req.responseText;
for (var i = 0;i < noVids.length;i++) {
var td = $x('.//td[text()="'+noVids[i].x+","+noVids[i].y+'"]',dom);
var linkTd = cgetElementSibling(td,1);
var link = $x('.//a',linkTd);
if ((matches = link.href.match(/village_id=(\d+)/))) {
VILLAGES_INFO[(noVids[i].x+"_"+noVids[i].y).replace(/-/g,"m")].vid = parseInt(matches[1],10);
}
}
csaveData("villagesInfo",VILLAGES_INFO,true,true);
});
}
}
function _profileInit() {
var compList = new Object();
var matches = null;
var villageLinks = $a('//table[@class="commonTables"]//th[contains(text(),"座標")]/../following-sibling::tr[position() <= 10]/td[not(@*) and 1 <= normalize-space(text())]/..//a');
for (var i = 0;i < villageLinks.length;i++) {
var villageLink = villageLinks[i];
var addObj = new Object();
var loc = cgetElementSibling(villageLink.parentNode,0);
if ((matches = loc.innerHTML.match(/(-?\d+),(-?\d+)/))) {
addObj.x = parseInt(matches[1],10);
addObj.y = parseInt(matches[2],10);
}
if ((matches = villageLink.href.match(/village_id=(\d+)/))) {
addObj.vid = parseInt(matches[1],10);
}
addObj.basename = villageLink.innerHTML.replace(/^\s*|\s*$/g,"");
compList[(addObj.x+"_"+addObj.y).replace(/-/g,"m")] = addObj;
}
_compData(compList);
}
function _compData(compList) {
var nowVillageList = cloadData("villagesInfo","{}",true,true);
for (var key in compList) {
VILLAGES_INFO[key] = compList[key];
if (typeof nowVillageList[key] == 'object') {
VILLAGES_INFO[key] = nowVillageList[key];
if (typeof VILLAGES_INFO[key].vid != 'number' && typeof compList[key].vid == 'number') {
VILLAGES_INFO[key].vid = compList[key].vid;
}
VILLAGES_INFO[key].basename = compList[key].basename;
}
}
csaveData("villagesInfo",VILLAGES_INFO,true,true);
}
}
function initCastleSend() {
if( location.pathname != '/facility/castle_send_troop.php' || location.search.indexOf("radio_move_type") < 0) return;
var radioMoveType = location.search.match(/radio_move_type=(\d+)/)[1];
var ary = $a('//input[@name="radio_move_type"]');
var elem;
for (var i = 0; i < ary.length;i++) {
elem = ary[i];
if (elem.value == radioMoveType) {
elem.checked = "checked";
}
else {
elem.checked = "";
}
}
}
function initNarrow() {
if (0 <= location.pathname.search(/^\/(village|map|land)\.php/)) {
$x('id("lodgment")/div[@class="floatHead"]//a').href = 'javascript:void(0);';
}
GM_addStyle(".footer_box { height:auto !important;}");
}
function initPreLoadNode() {
PRE_LOAD_NODES['nowResources'] = {wood:$('wood'),stone:$('stone'),iron:$('iron'),rice:$('rice')};
PRE_LOAD_NODES['serverTime'] = $('server_time_disp');
}
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;
}
}
}
}
}
// common関数拡張
function cinsertSideBox(insPos,insNode) {
var sideboxes = $a(".//div[@id=\"beyond_fixpanel\"]/div[@class=\"sideBox\"]");
var srt = new Array();
var pos = 0;
var insNodeId = insNode.sideBox.id;
for(var i=0 ; i<sideboxes.length ; i++) {
var conf = cloadData( sideboxes[i].id + "conf" , '{"float":false, "open":true, "x":"", "y":"", "pos":99 }', true, true );
pos = conf.pos;
if (insPos <= conf.pos && insNodeId != sideboxes[i].id) {
pos++;
}
else if (insNodeId == sideboxes[i].id) {
pos = insPos;
}
srt.push({"node":sideboxes[i], "pos":pos});
}
srt.sort( function(a,b) {return a.pos - b.pos;});
for(var i=0 ; i<srt.length ; i++){
srt[i].node.parentNode.removeChild(srt[i].node);
}
var fixpanel = $("beyond_fixpanel");
for(var i=0 ; i<srt.length ; i++){
fixpanel.appendChild(srt[i].node);
}
}
function cgetCurrentVillageId() {
var xy = cgetCurrentBaseXY();
return VILLAGES_INFO[(xy.x+"_"+xy.y).replace(/-/g,"m")].vid;
}
function chasVillageId(vid) {
vid = parseInt(vid,10);
var vids = cgetVillageIds();
return vids[vid] ? true : false;
}
function cgetVillageIds() {
var ret = new Object();
for (var key in VILLAGES_INFO) {
if (isNaN(""+VILLAGES_INFO[key].vid)) {
continue;
}
ret[VILLAGES_INFO[key].vid] = VILLAGES_INFO[key].vid;
}
return ret;
}
// element , pre 1:next0,skipCount
function cgetElementSibling(element,direction,skipCount) {
var hasElementSibling = (typeof element.nextElementSibling == 'object' || typeof element.previousElementSibling == 'object') ? true : false;
if (!skipCount) skipCount = 1;
for (var i = 0;i < skipCount;) {
if (hasElementSibling) {
i++;
if (direction == 1) {
element = element.previousElementSibling;
}
else {
element = element.nextElementSibling;
}
}
else {
if (direction == 1) {
element = element.previousSibling;
}
else {
element = element.nextSibling;
}
if (element.nodeType == 1) {
i++;
}
}
if (element == null) {
break;
}
}
return element;
}
// areaから四方のareaを取得
function cgetSquareElementFromArea(area) {
var coords = area.getAttribute('coords');
var matches = null;
if (!coords || !(matches = coords.match(/^(\d+),(\d+)/))) return false;
var base = new Object();
base.x = parseInt(matches[1],10);
base.y = parseInt(matches[2],10);
var $x = function(xp,dc) { return d.evaluate(xp, dc||d, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; };
var add = new Object();
add.x = 50;
add.y = 25;
var isMap = false;
if (0 <= location.pathname.indexOf("map.php")) {
isMap = true;
var size = parseInt($x('id("change-map-scale")//li[contains(concat(" ",normalize-space(@class)," ")," now ")]').className.match(/sort(\d+) /)[1],10);
switch (size) {
case 20:
add.x = 16;
add.y = 8;
break;
case 15:
add.x = 22;
add.y = 11;
break;
default:
add.x = 30;
add.y = 15;
break;
}
base.y += add.y * 2;
}
var xpaths = {ne:calc(base,add,0),nw:calc(base,add,1),se:calc(base,add,2),sw:calc(base,add,3)};
var ret = new Object();
for (var key in xpaths) {
ret[key] = $x('//area[@coords="' + xpaths[key] + '"]');
}
return ret;
// direction ne:0 nw:1 se:2 sw:3
function calc(base,add,direction) {
var addX = (direction % 2) == 0 ? add.x : - add.x;
var addY = direction < 2 ? - add.y : add.y;
var retBaseX = base.x + addX;
var retBaseY = base.y + addY;
var top = [retBaseX, retBaseY - (add.y * 2)];
var left = [retBaseX - add.x, retBaseY - add.y];
var bottom = [retBaseX, retBaseY];
var right = [retBaseX + add.x, retBaseY - add.y];
var ret = isMap ? top.concat(left,bottom,right) : bottom.concat(left,top,right);
return ret.join(",");
}
}
// areaからx,y,name,lvを返す
function cgetFacilityInfoFromArea(area) {
var retObj = {name:"",lv:0,x:-1,y:-1};
var matches = null;
if (area.alt) {
if ((matches = area.alt.match(/^([^ ]+)[^\d]+(\d+)/))) {
retObj.name = matches[1];
retObj.lv = parseInt(matches[2],10);
}
else {
retObj.name = area.alt;
}
}
if (area.href && (matches = area.href.match(/(?:x=(\d+)&y=(\d+))/))) {
retObj.x = parseInt(matches[1],10);
retObj.y = parseInt(matches[2],10);
}
return retObj;
}
function caddSessionId(url) {
if (0 < SID.length && url.search(/(\?|&)SSID=[^&]+&?/i) < 0) {
var anchor = '';
var matches;
if ((matches = url.match(/#[^#]+$/))) {
url = url.substring(0,url.lastIndexOf('#'));
anchor = matches[0];
}
url += 0 <= url.indexOf('?') ? '&' : '?';
url += SID;
url += anchor;
}
return url;
}
// その他拡張
//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;
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment