// ==UserScript== // @name My Fancy New Userscript // @namespace http://use.i.E.your.homepage/ // @version 0.1 // @description enter something usef// ==UserScript== // @name megamiengage_Auto_Bilder // @namespace http://at-n2.net/ // @description メガミエンゲイジ自動建築 改造元 ブラウザMCあくしず自動建築 // @include http://*.megamiengage.com/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js // @version 1.0.0 2012/10/28 // ==/UserScript== // リンクタイプの設定(0=5zen式/1=kiri式) var LinkType = 0; // 色設定 var COLOR_FRAME = "#333333"; // 枠背景色 var COLOR_BASE = "#654634"; // 拠点リンク色 var COLOR_TITLE = "#FFCC00"; // 各BOXタイトル背景色 var COLOR_BACK = "#FFF2BB"; // 各BOX背景色 /*! * jQuery Cookie Plugin * https://github.com/carhartl/jquery-cookie * * Copyright 2011, Klaus Hartl * Dual licensed under the MIT or GPL Version 2 licenses. * http://www.opensource.org/licenses/mit-license.php * http://www.opensource.org/licenses/GPL-2.0 */ (function($) { $.cookie = function(key, value, options) { // key and at least value given, set cookie... if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) { options = $.extend({}, options); if (value === null || value === undefined) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } value = String(value); return (document.cookie = [ encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // key and possibly options given, get cookie... options = value || {}; var decode = options.raw ? function(s) { return s; } : decodeURIComponent; var pairs = document.cookie.split('; '); for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) { if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined } return null; }; })(jQuery); jQuery.noConflict(); j$ = jQuery; // 造兵用 var OPT_SOL_MAX = [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var OPT_SOL_ADD = [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var OPT_BLD_WOOD = 0; var OPT_BLD_STONE = 0; var OPT_BLD_IRON = 0; var OPT_BLD_RICE = 0; var OPT_BLD_SOL = 0; var sort_priority = []; var OPT_BKBG_CHK = 0; var make_no = []; // 兵種, No,研究済,作成可能兵数,現在の兵数,最大兵数,現兵数との差,x,y make_no["新兵"] = ["新兵" ,301, 0, 0, 0, 0, 0,0,0]; make_no["軽戦車"] = ["軽戦車" ,303, 0, 0, 1, 0, 0,0,0]; make_no["水雷艇"] = ["水雷艇" ,308, 0, 0, 2, 0, 0,0,0]; make_no["軽戦闘機"] = ["軽戦闘機" ,305, 0, 0, 3, 0, 0,0,0]; make_no["重戦車"] = ["重戦車" ,304, 0, 0, 4, 0, 0,0,0]; make_no["駆逐艦"] = ["駆逐艦" ,309, 0, 0, 5, 0, 0,0,0]; make_no["重戦闘機"] = ["重戦闘機",307, 0, 0, 6, 0, 0,0,0]; make_no["工作員"] = ["工作員" ,310, 0, 0, 7, 0, 0,0,0]; make_no["特殊部隊"] = ["特殊部隊",311, 0, 0, 8, 0, 0,0,0]; make_no["工兵"] = ["工兵" ,312, 0, 0, 9, 0, 0,0,0]; make_no["自走臼砲"] = ["自走臼砲" ,313, 0, 0, 10, 0, 0,0,0]; OPT_BK_LV = [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; OPT_BG_LV = [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; //巡回用 var tidMain2; var tidMain3; var nextURL; var nextNAME; //寄付用 var OPT_RISE_KIFU_MAX = 10000; //寄付を開始する食の量 var OPT_RISE_KIFU = 1000; //寄付をする食の量 // //貿易センター用 var OPT_RISE_MAX = 30000; //貿易センター変換開始する食の量 var OPT_TO_WOOD = 10000; //鉄に変換する食 var OPT_TO_STONE = 10000; //石油に変換する食 var OPT_TO_IRON = 10000; //アルミに変換する食 // @@ ADD 2011.09.28 @@ var LOAD_ROUND_TIME_10 = 10; var LOAD_ROUND_TIME_20 = 20; var LOAD_ROUND_TIME_30 = 30; var LOAD_ROUND_TIME_40 = 40; var LOAD_ROUND_TIME_50 = 50; var LOAD_ROUND_TIME_60 = 60; var LOAD_ROUND_TIME_70 = 70; var LOAD_ROUND_TIME_80 = 80; var LOAD_ROUND_TIME_90 = 90; var LOAD_ROUND_TIME_100 = 100; var LOAD_ROUND_TIME_110 = 110; var LOAD_ROUND_TIME_120 = 120; var LOAD_ROUND_TIME_130 = 130; var LOAD_ROUND_TIME_140 = 140; var LOAD_ROUND_TIME_150 = 150; var LOAD_ROUND_TIME_160 = 160; var LOAD_ROUND_TIME_170 = 170; var LOAD_ROUND_TIME_180 = 180; //グローバル変数 var MOUSE_DRAGGING = false; var MOUSE_OFFSET_X; var MOUSE_OFFSET_Y; var MOUSE_DRAGGING_WINDOW = 0; var ALERT_TIME; // @@ ADD 2011.05.14 @@ var OPT_MAX_WOOD = 0; // 鉄の最大保持量 var OPT_MAX_STONE = 0; // 石油の最大保持量 var OPT_MAX_IRON = 0; // アルミの最大保持量 var WOOD = 101; //鉄の内部コード var STONE = 102; //石油の内部コード var IRON = 103; //アルミの内部コード var RICE = 104; //食の内部コード //新規作成用 var OPT_KATEMURA = 0; //自動糧村化オプション var OPT_TORIDE = 0; //自動前線基地化オプション var OPT_SOUKO_MAX = 1; //備蓄基地の最大数 //内政用 by nottisan // 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 var OPT_DOME = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var OPT_BLD = "AC"; var OPT_SorH = "DD"; var OPT_MAX = 3; var OPT_MAXLV = 6; var OPT_ROUND_TIME1 = 60; // 巡回時間(sec) var OPT_ROUND_TIME2 = 10; // 巡回時間(sec) var Reload_Flg = 0; var OPT_BUILD_VID; //グローバル変数 var VERSION = "1.0.0β 2012/10/28"; // バージョン情報 //var INTERVAL = 1000; // 負荷対策 回線速度によっては正常動作しない時があります。その際は数値を増やしてください。1秒=1000 //var INTERVAL2 = 2000; // 負荷対策 回線速度によっては正常動作しない時があります。その際は数値を増やしてください。1秒=1000 var INTERVAL = 1000 + Math.floor( Math.random() * 5000 ); // 負荷対策 回線速度によっては正常動作しない時があります。その際は数値を増やしてください。1秒=1000 var INTERVAL2 = 2000 + Math.floor( Math.random() * 5000 ); // 負荷対策 回線速度によっては正常動作しない時があります。その際は数値を増やしてください。1秒=1000 var HOST = location.hostname; //アクセスURLホスト var PGNAME = "_Auto_Bilder_5zen_v1.21_20111019_Rev2"; //グリモン領域への保存時のPGの名前 var TIMEOUT_URL ="/false/login_sessionout.php"; //タイムアウト時のURLの一部 var g_MD=""; var SENDTFLG_TIMEOUT = 0; //タイムアウト画面 var SENDTFLG_LOGIN_MENU = 1; //ログイン画面 var SENDTFLG_LOGIN = 2; //ログイン中 var d = document; // 保存データデリミタ var DELIMIT1 = "#$%"; var DELIMIT2 = "&?@"; var DELIMIT3 = "{=]"; var DELIMIT4 = "|-/"; //保存データインデックス(拠点) var IDX_XY = 0; //座標 var IDX_BASE_NAME = 1; //拠点名 var IDX_URL = 2; //拠点URL var IDX_ACTIONS = 3; //実行中作業 var IDX_BASE_ID = 11; //拠点ID //保存データインデックス(実行中作業) var IDX2_STATUS = 0; //ステータス var IDX2_TIME = 1; //完了時刻 var IDX2_TYPE = 2; //種別 C:都市画面、D:内政スキル、Fxy:施設座標 var IDX2_ALERTED = 3; //通知済フラグ var IDX2_DELETE = 4; // 削除フラグ var IDX2_ROTATION = 5; // 巡回フラグ //作業種別 var TYPE_CONSTRUCTION = "C"; //建設 var TYPE_MARCH = "M"; //行軍 var TYPE_DOMESTIC = "D"; //内政 var TYPE_FACILITY = "F"; //施設 var TYPE_DELETE = "B"; //建設 var OPT_CHKBOX_AVC = 0; // 拠 鉄 石油 アルミ 食品加工工場 倉 雀 武 防 練 槍 弓 騎 宿 車 市 訓 水 工 研 大 遠 見 平 // 点 庫 器 具 兵 兵 兵 兵 舎 兵 場 練 車 場 究 宿 征 張 地 // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 var OPT_CHKBOX = [ 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 OPT_CHKBOXLV = [ 8,15,15,15,15,20,10,10,10,10,15,15,15,15,15,10,10,10,10,10,20,20,20, 0]; var OPT_MAX_LV = "2"; var OPT_FUC_NAME = ["拠点","風の魔法陣","火の魔法陣","水の魔法陣","土の魔法陣","マナ貯蔵庫", "カリスマター","武器工房","防具工房","ポーン工場","ルーク工場","ビショップ工場", "ナイト工場","時空兵舎","ゴーレム工場","マナ変換炉","時計塔","温室","水晶塔", "錬金工房","大時空兵舎","大時計塔","見張り台","平地"]; var OPT_FNID = new Array(); OPT_FNID["拠点"] = 0 ; OPT_FNID["風の魔法陣"] = 1 ; OPT_FNID["火の魔法陣"] = 2 ; OPT_FNID["水の魔法陣"] = 3 ; OPT_FNID["土の魔法陣"] = 4 ; OPT_FNID["マナ貯蔵庫"] = 5 ; OPT_FNID["カリスマター"] = 6 ; OPT_FNID["武器工房"] = 7 ; OPT_FNID["防具工房"] = 8 ; OPT_FNID["ポーン工場"] = 9 ; OPT_FNID["ルーク工場"] = 10 ; OPT_FNID["ビショップ工場"] = 11 ; OPT_FNID["ナイト工場"] = 12 ; OPT_FNID["時空兵舎"] = 13 ; OPT_FNID["ゴーレム工場"] = 14 ; OPT_FNID["マナ変換炉"] = 15 ; OPT_FNID["時計塔"] = 16 ; OPT_FNID["温室"] = 17 ; OPT_FNID["水晶塔"] = 18 ; OPT_FNID["錬金工房"] = 19 ; OPT_FNID["大時空兵舎"] = 20 ; OPT_FNID["大時計塔"] = 21 ; OPT_FNID["見張り台"] = 22 ; //OPT_FNID["修行所"] = 23 ; //貿易センター変換処理用 var OPT_ICHIBA = 0; var OPT_ICHIBA_PA = 0; var OPT_ICHIBA_PATS = ["平均的に変換","一括変換"]; //自動寄付用 var OPT_KIFU = 0; 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").css({ "text-align" : "center", "z-index" : "10" }).bind('click', function () { location.href = "http://" + HOST + "/card/trade.php?s=price&o=a&t=no&k=" + a + "&tl=0"; }) }) } */ })(); function log() { unsafeWindow.console.log.apply(unsafeWindow.console, Array.slice(arguments)) }; // =========================================================================================================== //URL読み込み function initUrlParams() { var matches = location.search.match(/(?:\?|&)?([^=]+)(?:=([^&]+))?/g); if (matches) { var param; var key; var data; for(var i = 0 ; i < matches.length ; i++) { param = matches[i].match(/(?:\?|&)?([^=]+)(?:=([^&]+))?/); key = param[1]; data = param[2]; URL_PARAM[key] = ''; if( param.length == 3 && typeof data == 'string') { URL_PARAM[key] = decodeURIComponent(data); // session id if (key.toLowerCase() == 'ssid') { SID = key + '=' +data; } } } } } //拠点作成開始 function settleVillages(z){ //新規拠点作成に必要な名声があれば拠点作成 if ( checkFame() ){ //予約データ取得 var lists = cloadData("ReserveList", "[]", true, true); if( lists.length == 0 || z >= lists.length) {return;} if( lists[z].status != 1 && lists[z].status != 0) {settleVillages(z+1);return;} var mURL = LANDLINK; mURL = mURL.replace(URL_SITE,HOST); mURL = mURL.replace(URL_X,lists[z].x); mURL = mURL.replace(URL_Y,lists[z].y); var tid=setTimeout(function(){ GM_xmlhttpRequest({ method:"GET", url:mURL, headers:{"Content-type":"text/html"}, overrideMimeType:'text/html; charset=utf-8', onload:function(x){ var htmldoc = document.createElement("html"); htmldoc.innerHTML = x.responseText; //拠点を作成できるかチェック var rmtime = htmldoc.innerHTML.match(/この領地を拠点にする/); if ( rmtime ) { //拠点を作成できる場合作成開始 var mURL = SETTLELINK; mURL = mURL.replace(URL_SITE,HOST); mURL = mURL.replace(URL_X,lists[z].x); mURL = mURL.replace(URL_Y,lists[z].y); mURL = mURL.replace(URL_fID,lists[z].kind); var tid=setTimeout(function(){ GM_xmlhttpRequest({ method:"GET", url:mURL, headers:{"Content-type":"text/html"}, overrideMimeType:'text/html; charset=utf-8', onload:function(x){ var htmldoc = document.createElement("html"); htmldoc.innerHTML = x.responseText; //拠点が作成開始できているか確認 if (!htmldoc.innerHTML.match(/名声が不足しています/)) { getAddingVillage(htmldoc); closeIniBilderBox() openIniBilderBox() } } }); }, INTERVAL); } else { failSettleVillage(z); settleVillages(z+1); } } }); }, INTERVAL); } //名声チェック function checkFame() { //現在の名声MAX取得 var fameMAX; 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+)/); fameMAX = parseInt(tmp[2],10); } //拠点作成に必要な名声 var bldtbl = [17, 35, 54, 80, 112, 150, 195, 248, 310, 999]; //現在の拠点の数 //var villages = loadVillages(HOST); var villageLength = document.evaluate('//div[@id="lodgment"]/div/ul/li/a', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); //拠点数-1になる //作成中の拠点の数 var lists = cloadData("ReserveList", "[]", true, true); var x = 0; for (var i=0 ; i= bldtbl[villageLength.snapshotLength + x]); } function failSettleVillage(z) { var lists = cloadData("ReserveList", "[]", true, true); if (lists[z].status == 1) { lists[z].status = 0;} csaveData( "ReserveList", lists, true, true ); } } // 拠点数の保存情報と現状を比較&修正 2012.04.09 function checkVillageLength() { //データ整理 var lists = cloadData("ReserveList", "[]", true, true); lists = checkList(lists); //時間の過ぎたものを削除 // for(var i=0 ; i 破棄完了 if( lists[i].status == 2 ) { lists[i].status = 3; flg = 1;} //作成 -> 作成完了 } } csaveData( "ReserveList", lists, true, true ); //拠点情報を取得&移動 if (flg == 1){ getUserProfJumpNewVillage(); } else { checkVillageLengthDiff(); } return lists; } function getUserProfJumpNewVillage(){ var tid=setTimeout(function(){ GM_xmlhttpRequest({ method:"GET", url:"http://" + HOST + "/user/", headers:{"Content-type":"text/html"}, overrideMimeType:'text/html; charset=utf-8', onload:function(x){ var htmldoc = document.createElement("html"); htmldoc.innerHTML = x.responseText; //拠点リストを更新 getUserProf(htmldoc); //本拠地に強制ジャンプ var villages = loadVillages(HOST+PGNAME); var tid=setTimeout(function(){ location.href = villages[0][IDX_URL];},INTERVAL); //新規拠点に移動 //jumpNewVillage(); } }); }, INTERVAL); //新規拠点画面へ移動 /* function jumpNewVillage(){ var villages = loadVillages(HOST+PGNAME); for (var j = villages.length-1; j >= 0; j--) { //新規と名のつく拠点へ移動 if(villages[j][IDX_BASE_NAME].match(/新規/)){ var tid=setTimeout(function(){ location.href = villages[j][IDX_URL];},INTERVAL); return; } } } */ } //拠点数が変わっていたら情報取得 @@1@@ function checkVillageLengthDiff() { var ifmixi = d.evaluate('//*[@id="supportNavi"]', d, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if ( ifmixi.snapshotLength ) { var villages = loadVillages(HOST+PGNAME); console.log(villages); var villageLength = document.evaluate('//div[@id="lodgment"]/div/ul/li',document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); //拠点数 console.log(villageLength); if (villages.length != villageLength.snapshotLength) { setTimeout(function(){ GM_xmlhttpRequest({ method:"GET", url:"http://" + HOST + "/user/", headers:{"Content-type":"text/html"}, overrideMimeType:'text/html; charset=utf-8', onload:function(x){ var htmldoc = document.createElement("html"); htmldoc.innerHTML = x.responseText; getUserProf(htmldoc); var tid=setTimeout(function(){location.reload();},INTERVAL); } }); }, INTERVAL); } } } } //Beyond系save, load関数 function csaveData(key, value, local, ev) { if( local ) key = location.hostname + key + PGNAME; 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 + PGNAME; var ret = GM_getValue(key, value); return ev ? eval('ret='+ret) : ret; } //-----------------------------------TonDen--------------------------------- //領地画面なら拠点建設データ取得 function getAddingVillage(htmldoc) { var xyElem = document.evaluate('//*[@id="inner_right"]/p[@class="inner_base_position"]', htmldoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var xy = xyElem.snapshotItem(0).innerHTML.match(/(-?\d+,-?\d+)/); var Temp = xy[0].split(","); var x = Temp[0]; var y = Temp[1]; var rmname = htmldoc.innerHTML.match(/(現在補給基地を建設中です|現在前線基地を建設中です)/ ); if( rmname ) { var rmtime = htmldoc.innerHTML.match(/(\d+-\d+-\d+ \d+:\d+:\d+)*に完了します。/ ); if( rmname[1] == "現在補給基地を建設中です" ) { addList(rmtime[1], 220, 2, x, y ); }else if( rmname[1] == "現在前線基地を建設中です" ) { addList(rmtime[1], 222, 2, x, y ); } } if(htmldoc == document.body) { // addLink(); addLink2(); } function addList(tim, kind, status, x, y) { var lists = cloadData("ReserveList", "[]", true, true); var flg = 0; for(var i=0 ; i b.time) return 1; if(a.time < b.time) return -1; return 0;}); csaveData( "ReserveList", lists, true, true ); } function addLink() { //id="tMenu"にLinkを挿入 var tMenu = document.evaluate('//*[@id="tMenu"]', htmldoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if (tMenu.snapshotLength == 0) return; //補給基地作成予約 var villageLink = document.createElement("a"); villageLink.id = "village"; villageLink.href = "javascript:void(0);"; villageLink.innerHTML = "補給基地建設予約"; villageLink.addEventListener("click", function() {addReserveVillages(220)}, true); tMenu.snapshotItem(0).appendChild(villageLink); //前線基地作成予約 var fortLink = document.createElement("a"); fortLink.id = "fort"; fortLink.href = "javascript:void(0);"; fortLink.innerHTML = "前線基地建設予約"; fortLink.addEventListener("click", function() {addReserveVillages(222)}, true); tMenu.snapshotItem(0).appendChild(fortLink); } function addLink2() { //id="tMenu"にLinkを挿入 var tMenu = document.evaluate('//div[@class="status"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if (tMenu.snapshotLength == 0) { var tMenu = document.evaluate('//div[@id="basepoint"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if (tMenu.snapshotLength == 0) return; } var villageLink = document.createElement("span"); villageLink.style.color = "white"; villageLink.style.fontSize = "10px"; villageLink.style.textAlign = "center"; villageLink.innerHTML = "建設予約 "; tMenu.snapshotItem(0).appendChild(villageLink); //補給基地作成予約 var villageLink = document.createElement("a"); villageLink.id = "village"; villageLink.style.color = "white"; villageLink.style.fontSize = "10px"; villageLink.style.textAlign = "center"; villageLink.href = "javascript:void(0);"; villageLink.innerHTML = "補給基地"; villageLink.addEventListener("click", function() {addReserveVillages(220)}, true); tMenu.snapshotItem(0).appendChild(villageLink); var villageLink = document.createElement("span"); villageLink.style.color = "white"; villageLink.style.fontSize = "10px"; villageLink.style.textAlign = "center"; villageLink.innerHTML = " "; tMenu.snapshotItem(0).appendChild(villageLink); //前線基地作成予約 var fortLink = document.createElement("a"); fortLink.id = "fort"; fortLink.style.color = "white"; fortLink.style.fontSize = "10px"; fortLink.style.textAlign = "center"; fortLink.href = "javascript:void(0);"; fortLink.innerHTML = "前線基地"; fortLink.addEventListener("click", function() {addReserveVillages(222)}, true); tMenu.snapshotItem(0).appendChild(fortLink); } function addReserveVillages(kind) { url = location; var flgAdd = addList2(kind, 1, URL_PARAM.x, URL_PARAM.y); var msg = ""; if (flgAdd == 0){ msg += "(" + URL_PARAM.x + "," + URL_PARAM.y + ")への、"; if(kind == 220){msg += "補給基地建設予約"; }else if(kind == 222){msg += "前線基地建設予約"; } msg += "を受け付けました。" } else { msg += "(" + URL_PARAM.x + "," + URL_PARAM.y + ")には、すでに建設予約があります。"; } alert(msg); closeIniBilderBox() openIniBilderBox() } function addList2(kind, status, x, y) //kind=220:補給基地予約 222:前線基地予約 { var lists = cloadData("ReserveList", "[]", true, true); 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); for(var i=0 ; i b.time) return 1; if(a.time < b.time) return -1; return 0;}); csaveData( "ReserveList", lists, true, true ); return 0; } } //拠点画面で建設予約受付 function addLinkTondenVillage() { var xyElem = document.evaluate('//span[@class="xy"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var xy = xyElem.snapshotItem(0).innerHTML.match(/(-?\d+,-?\d+)/); var Temp = xy[0].split(","); var x = Temp[0]; var y = Temp[1]; addLink(); function addLink() { //id="tMenu"にLinkを挿入 var tMenu = document.evaluate('//div[@class="status village-bottom"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if (tMenu.snapshotLength == 0) return; var villageLink = document.createElement("span"); villageLink.innerHTML = " 建設予約 "; tMenu.snapshotItem(0).appendChild(villageLink); //補給基地作成予約 var villageLink = document.createElement("a"); villageLink.id = "village"; villageLink.href = "javascript:void(0);"; villageLink.innerHTML = "補給基地"; villageLink.addEventListener("click", function() {addReserveVillages(220)}, true); tMenu.snapshotItem(0).appendChild(villageLink); var villageLink = document.createElement("span"); villageLink.innerHTML = " "; tMenu.snapshotItem(0).appendChild(villageLink); //前線基地作成予約 var fortLink = document.createElement("a"); fortLink.id = "fort"; fortLink.href = "javascript:void(0);"; fortLink.innerHTML = "前線基地"; fortLink.addEventListener("click", function() {addReserveVillages(222)}, true); tMenu.snapshotItem(0).appendChild(fortLink); } function addReserveVillages(kind) { url = location; var flgAdd = addList2(kind, 1, x, y); var msg = ""; if (flgAdd == 0){ msg += "(" + x + "," + y + ")への、"; if(kind == 220){msg += "補給基地建設予約"; }else if(kind == 222){msg += "前線基地建設予約"; } msg += "を受け付けました。" } else { msg += "(" + x + "," + y + ")には、すでに建設予約があります。"; } alert(msg); closeIniBilderBox() openIniBilderBox() } function addList2(kind, status, x, y) //kind=220:補給基地予約 222:前線基地予約 { var lists = cloadData("ReserveList", "[]", true, true); 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); for(var i=0 ; i b.time) return 1; if(a.time < b.time) return -1; return 0;}); csaveData( "ReserveList", lists, true, true ); return 0; } } //拠点画面なら拠点削除データ取得 function getDeletingVillage(htmldoc) { var xy = getMyXY(); var Temp = xy.split(","); var x = Temp[0]; var y = Temp[1]; var rmtime = htmldoc.innerHTML.match(/(補給基地を削除中です。|前線基地を削除中です。)[^\d]*(\d+-\d+-\d+ \d+:\d+:\d+)に完了します。/); if( rmtime ) { if( rmtime[1] == "補給基地を削除中です。" ) { addList(rmtime[2], 220, 4, x, y ); }else if( rmtime[1] == "前線基地を削除中です。" ) { addList(rmtime[2], 222, 4, x, y ); } }else{ delList(1, x, y); } closeIniBilderBox() openIniBilderBox() function addList(tim, kind, status, x, y) { var lists = cloadData("ReserveList", "[]", true, true); var flg = 0; for(var i=0 ; i b.time) return 1; if(a.time < b.time) return -1; return 0;}); csaveData( "ReserveList", lists, true, true ); } function delList(kind, x, y) //kind=0:land 1:castle { var lists = cloadData("ReserveList", "[]", true, true); for(var i=0 ; i b[4]) return 1; if (a[4] < b[4]) return -1; return 0;}); if (x != -1) { // 武器強化処理 var c={}; c['x'] = parseInt(_x); c['y'] = parseInt(_y); c['unit_id'] = parseInt(Buki[0][3]); // console.log(HOST + " " + type + "強化 " + Buki[0]); j$.post("http://"+HOST+"/facility/facility.php?x=" + parseInt(_x) + "&y=" + parseInt(_y) + "#ptop",c,function(){}); // var tid=setTimeout(function(){location.reload(false);},0); } } make_loop(loop + 1); function checkBKLvup(hwood,hstone,hiron,hrice,hgo,hnlv,hslv) { // console.log("check Start"); var wood = parseInt( $("wood").innerHTML, 10 ); var stone = parseInt( $("stone").innerHTML, 10 ); var iron = parseInt( $("iron").innerHTML, 10 ); var rice = parseInt( $("rice").innerHTML, 10 ); // console.log(wood + " : " + stone + " : " + iron + " : " + rice); // var temp = (parseInt(hwood) + 99); if (parseInt(hnlv) >= parseInt(hslv)) { return false; } if ((parseInt(hwood) + OPT_BLD_WOOD ) > wood ) { return false; } if ((parseInt(hstone) + OPT_BLD_STONE) > stone) { return false; } if ((parseInt(hiron) + OPT_BLD_IRON ) > iron ) { return false; } if ((parseInt(hrice) + OPT_BLD_RICE ) > rice ) { return false; } if (hgo == false) { return false; } return true; } } }); },0); } } make_loop(0); } function setVillageFacility() { var cnt=0; var vID = ""; //座標を取得 var xyElem = document.evaluate('//*[@class="inner_right"]/p[@class="inner_base_position"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); vId = trim(xyElem.snapshotItem(0).innerHTML); //alert(vId); //建設情報を取得 var actionsElem = document.evaluate('//*[@class="action_que"]/ul/li', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < actionsElem.snapshotLength; i++) { var paItem = actionsElem.snapshotItem(i); //ステータス var buildStatusElem = document.evaluate('./span[@class="buildStatus"]/a', paItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); //alert(buildStatusElem); if (buildStatusElem.snapshotLength > 0) { //建物削除等に対応 2010.10.25 byおぜがづ for(var j=0; j= 1) return; //if(cnt >= 2) return; if(OPT_KATEMURA == 1) { var area_all = new Array(); area_all = get_area_all(); var hatake = 0; //土の魔法陣の総数 var souko = 0; //マナ貯蔵庫の総数 var suzume = 0; //カリスマターの総数 var heichi = 0; //平地の総数 var suzume_Flag = 0; var n = -1; for(var i=0;i < area_all.length;i++){ if(area_all[i].name == "平地"){heichi++;n=i;} else if(area_all[i].name.match(/土の魔法陣\s.*?(\d+)/)){hatake++;if(parseInt(RegExp.$1)>=5){suzume_Flag=1;}} else if(area_all[i].name.match(/マナ貯蔵庫/)){souko++;} else if(area_all[i].name.match(/カリスマター/)){suzume++;} } //alert("平地:" + heichi + "\n土の魔法陣" + hatake + "\nマナ貯蔵庫:" + souko + "\nカリスマター:" + suzume + "\n土の魔法陣が建てられる平地:" + (tmp - hatake)); if(heichi>0){ //平地が余っていたら var tmp = heichi; if(suzume != 1){ //雀がまだ建っていなければ tmp -= 1; //平地の数をマイナス1 } if(souko < OPT_SOUKO_MAX){ //備蓄基地がまだ最大数建っていなければ tmp -= (OPT_SOUKO_MAX - souko); //平地の数をマイナス] } if(tmp > 0){ //それでも平地が余っていれば if(Chek_Sigen(new lv_sort("土の魔法陣",0,"")) != 1){ //資源チェック createFacility(HATAKE, area_all); //食品加工工場を建てる Reload_Flg = 0; return; }; } else if(souko < OPT_SOUKO_MAX){ //備蓄基地が建てられる平地があれば if(Chek_Sigen(new lv_sort("マナ貯蔵庫",0,"")) != 1){ //資源チェック createFacility(SOUKO, area_all); //備蓄基地を建てる Reload_Flg = 0; return; } } else if(suzume != 1 && suzume_Flag == 1){ //雀がまだ建っていなければ if(Chek_Sigen(new lv_sort("カリスマター",0,"")) != 1){ //資源チェック createFacility(SUZUME, area_all); //雀を建てる Reload_Flg = 0; return; } } } // alert("平地:" + heichi + "\n食品加工工場:" + hatake + "\n備蓄基地:" + souko + "\n雀:" + suzume); // return; //建てられるスペースがなければ通常の処理を続ける } var area = new Array(); area = get_area(); area.sort(cmp_areas); area.sort(cmp_lv); Reload_Flg = 0; for(i=0;i= parseInt(OPT_CHKBOXLV[OPT_FNID[tmpName1]])){ continue; } //指定Lv以上ならメインに戻る //建築物名分回す OPT_FUC_NAME.push("別邸","本館","屋敷"); if(OPT_CHKBOX[0] == 1) { OPT_CHKBOX.push(1,1,1); OPT_CHKBOXLV.push(OPT_CHKBOXLV[0],OPT_CHKBOXLV[0],OPT_CHKBOXLV[0]); } else { OPT_CHKBOX.push(0,0,0); OPT_CHKBOXLV.push(0,0,0); } OPT_CHKBOX.push for(var ii=0;ii= parseInt(OPT_CHKBOXLV[ii])){ break; } //建築に必要な資源が有るかどうかチェック var ret = Chek_Sigen(area[i]); if(ret == 1){ //30分後にリロードするかどうか Reload_Flg = 1; break; } var Temp = area[i].xy.split(","); var c = {}; c['x']=parseInt(Temp[0]); c['y']=parseInt(Temp[1]); c['village_id']=getVillageID(vId); c['ssid']=j$.cookie('SSID'); j$.post("http://"+HOST+"/facility/build.php",c,function(){}); var tid=setTimeout(function(){location.reload(false);},INTERVAL); /* var mURL = LVUPLINK; mURL = mURL.replace(URL_SITE,HOST); mURL = mURL.replace(URL_X,Temp[0]); mURL = mURL.replace(URL_Y,Temp[1]); mURL = mURL.replace(URL_viID,getVillageID(vId)); mURL = mURL.replace(URL_viSSID,j$.cookie('SSID')); // 2012.04.24 ssid 追加 var tid=setTimeout(function(){location.href = mURL;},INTERVAL); */ GM_setValue(HOST+PGNAME+"OPT_BUILD_VID" , getVillageID(vId) ); var nowTime = new Date(); Reload_Flg = 0; return; } } } } if(Reload_Flg == 1){ //10分後にリロードし、再度建築できるかチェックする。 var tid=setTimeout(function(){location.reload();},60000); } } // @@@@ add 2011.09.06 兵舎(食品加工工場) 自動ビルド&スクラッチ function setVillageFacility2() { // console.log("===== Start setVillageFacility2 ================================================================================"); var cnt=0; var del=0; var delX = 0; var delY = 0; var vID = ""; //座標を取得 var xyElem = document.evaluate('//*[@id="basepoint"]/span[@class="xy"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); vId = trim(xyElem.snapshotItem(0).innerHTML); //alert(vId); //建設情報を取得 var actionsElem = document.evaluate('//*[@id="actionLog"]/ul/li', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < actionsElem.snapshotLength; i++) { var paItem = actionsElem.snapshotItem(i); //ステータス var buildStatusElem = document.evaluate('./span[@class="buildStatus"]/a', paItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); //alert(buildStatusElem); if (buildStatusElem.snapshotLength > 0) { //施設建設数 cnt++; // 削除数カウント if( buildStatusElem.snapshotItem(0).parentNode.parentNode.textContent.indexOf("削除") >= 0 ){ if(buildStatusElem.snapshotItem(0).href.match(/.*\/.*(\d+).*(\d+)/)){ delX = parseInt(RegExp.$1); delY = parseInt(RegExp.$2); } del++; } } } var results = document.evaluate('//area', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); var area = new Array(); for(var i=0,n=0; i= OPT_MAXLV)) { // 削除 var Temp = area[i].xy.split(","); // alert("特殊 削除 :" + TargetName + " Lv:" + area[i].lv + " (" + Temp[0] + "," + Temp[1] + ")"); DeleteFacility(Temp[0],Temp[1]); JSSleep(2); Reload_Flg = 0; return; } } } else { // 普通に削除処理を実行 for (i=0;i= 1) return; //if(cnt == 2) return; // 平地建設条件がある場合、対象施設数がOPT_MAX以上かチェックする var yct = 0; if( OPT_SorH == "DD" ){ for(i=0;i= OPT_MAX ){ if( OPT_SorH == "DD" ){ if(area[i].name != "兵舎"){ // 宿数がすでにOPT_MAX以上なら、平地は無視 continue; } } if( OPT_SorH == "HH" ){ if(area[i].name != "食品加工工場"){ // 食品加工工場数がすでにOPT_MAX以上なら、平地は無視 continue; } } } // if(parseInt(area[i].lv) >= OPT_MAXLV){break;} //指定Lv以上ならメインに戻る //建築物名分回す for(var ii=0;ii (OPT_MAXLV - 1)) { continue; } if( area[i].name != "平地"){ c['x']=parseInt(Temp[0]); c['y']=parseInt(Temp[1]); c['village_id']=getVillageID(vId); c['ssid']=j$.cookie('SSID'); j$.post("http://"+HOST+"/facility/build.php",c,function(){}); var tid=setTimeout(function(){location.reload(false);},INTERVAL); } else { if( OPT_SorH == "DD" ){ c['x']=parseInt(Temp[0]); c['y']=parseInt(Temp[1]); c['id']=242; c['village_id']=getVillageID(vId); c['ssid']=j$.cookie('SSID'); j$.post("http://"+HOST+"/facility/build.php",c,function(){}); var tid=setTimeout(function(){location.reload(false);},INTERVAL); } else { c['x']=parseInt(Temp[0]); c['y']=parseInt(Temp[1]); c['id']=215; c['village_id']=getVillageID(vId); c['ssid']=j$.cookie('SSID'); j$.post("http://"+HOST+"/facility/build.php",c,function(){}); var tid=setTimeout(function(){location.reload(false);},INTERVAL); } } GM_setValue(HOST+PGNAME+"OPT_BUILD_VID" , getVillageID(vId) ); Reload_Flg = 0; return; } } } if(Reload_Flg == 1){ //30分後にリロードし、再度建築できるかチェックする。 var tid=setTimeout(function(){location.reload();},1800000); } return; } ////////////////////////////////////////////////////////////////////////////////////////// //施設一覧取得 function get_area(){ var results = document.evaluate('//area', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); var area = new Array(); for(var i=0,n=0; i b.xy){return 1;} else {return -1;} } // 次拠点移動 function forwardNextVillage(){ // 巡回停止中ならスキップ 2012.01.24 if (GM_getValue(HOST+PGNAME+"AutoFlg", true) == false) { return; } var nowTime = new Date(); var nextTime = getNextTime(location.hostname, nowTime); var waitTime = nextTime - nowTime; // @@ add 2011.10.04 @@ clearInterval(tidMain2); if ( tidMain2 == undefined ) { if ((ShopFlg == true) && (ShopURL != "")) { tidMain2=setTimeout(function(){location.href = ShopURL;},10 * 1000); } } // 建築済みで次建築がセットされていない未巡回の拠点への移動(2拠点同時に完了した場合に使う処理) var villages = loadVillages(location.hostname + PGNAME); for (var i = 0; i < villages.length; i++) { var actions = sortAction(villages[i][IDX_ACTIONS]); var nowTime = new Date(); for (var j = 0; j < actions.length; j++) { var actionDiv = createActionDiv(actions[j], nowTime, villages[i][IDX_XY], location.hostname); if (!actionDiv) continue; var actionTime = new Date(actions[j][IDX2_TIME]); var moveFlg = 0; if ( actionTime < nowTime && actions[j][IDX2_ROTATION] == 0 && actions[j][IDX2_TYPE] == TYPE_CONSTRUCTION){ for (var x = j + 1; x < actions.length; x++){ actionTime = new Date(actions[x][IDX2_TIME]); if ( actionTime > nowTime && actions[x][IDX2_ROTATION] == 0 && actions[x][IDX2_TYPE] == TYPE_CONSTRUCTION){ moveFlg = 1; break; } } if ( !(x < actions.length) ) { actions[j][IDX2_ROTATION] = 1; } if (moveFlg == 0) { var data = new Array(); data[IDX_BASE_NAME] = villages[i][IDX_BASE_NAME]; data[IDX_XY] = villages[i][IDX_XY]; data[IDX_ACTIONS] = actions; if (location.pathname == "/village.php") { var vcURL = villages[i][IDX_URL]; if(vcURL!=undefined){ saveVillages(HOST+PGNAME, villages); tidMain2=setTimeout(function(){location.href = vcURL;},5 * 1000); // log("■ 建築終了 ■ " + generateDateString2(nowTime) + " : " + villages[i][IDX_XY] + " URL :" + vcURL); } } } } } } if ( tidMain2 == undefined ) { //一番早い作業完了時刻を取得 var startTime = new Date("2099/12/31 23:59:59"); var nextTime = startTime; var baseTime = new Date(); nextURL = ""; // 次回建設終了予定の検索 for (var i = 0; i < villages.length; i++) { var actions = villages[i][IDX_ACTIONS]; for (var j = 0; j < actions.length; j++) { var actionTime = new Date(actions[j][IDX2_TIME]); if (actionTime > baseTime && actionTime < nextTime && actions[j][IDX2_TYPE] == TYPE_CONSTRUCTION) { var type = actions[j][IDX2_TYPE].charAt(0); nextTime = actionTime; nextURL = villages[i][IDX_URL]; nextNAME = villages[i][IDX_BASE_NAME]; } } } var nTime = (nextTime - nowTime); var vcURL = nextVillageURL(getVillageID(vId)); if(vcURL!=undefined){ if (nextURL == "") { // 次回建築完了予定がない場合は通常巡回処理 tidMain2=setTimeout(function(){location.href = vcURL;},parseInt(OPT_ROUND_TIME1) * 1000); } else { if (parseInt(OPT_ROUND_TIME1) * 1000 > nTime) { // 巡回時間より前に建築が終わる拠点がある場合 // 2011.12.06 即時変更をやめて10秒後に修正 // tidMain2=setTimeout(function(){location.href = nextURL;},(nextTime - nowTime)); tidMain2=setTimeout(function(){location.href = nextURL;},10 * 1000); } else { // 通常巡回処理 tidMain2=setTimeout(function(){location.href = vcURL;},parseInt(OPT_ROUND_TIME1) * 1000); } } } } } //比較する関数 function cmp_time(a,b){ if(a.xy > b.xy){return 1;} else {return -1;} } // 次拠点URL取得 function nextVillageURL(vId2){ var villages = loadVillages(HOST+PGNAME); var nextIndex = 0; var chkNextVID = new Array(); for(var i=0; i 0) { if (villages[0][IDX_URL] == "") { firstboot = true; } } if(firstboot) { var tr = d.createElement("tr"); var td = d.createElement("td"); td.style.padding = "3px"; // td.style.border = "solid 2px black"; tr.style.fontFamily = "MS ゴシック"; tr.appendChild(td); tbl.appendChild(tr); var msg = d.createElement("span"); msg.style.fontSize = "15px"; msg.style.margin = "3px"; msg.style.color = "#FFFFFF"; msg.style.font = 'bold 120% "MS ゴシック"'; msg.innerHTML = "
" + "  インストールありがとうございます。
" + "  まずは、プロフィール画面を開いて
" + "  拠点情報を取得してください。
 "; td.appendChild(msg); } else { var landElems = document.evaluate( '//li[@class="on"]/span', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < villages.length; i++) { var vname = villages[i][IDX_BASE_NAME]; var fColor = "#71C4F9"; var tr = d.createElement("tr"); var td = d.createElement("td"); tr.style.fontFamily = "MS ゴシック"; td.style.padding = "2px"; td.style.border = "solid 1px black"; td.style.backgroundColor = "#E6CF88"; tr.appendChild(td); tbl.appendChild(tr); //各拠点の設定画面リンク var vname = villages[i][IDX_BASE_NAME]; vId2 = villages[i][IDX_XY]; var td00 = d.createElement("div"); td00.style.width = "110px"; var tdA = d.createElement("td"); tdA.style.padding = "3px"; ccreateCheckBox0(td00, "OPT_CHKBOX_AVC_"+i, loadAVCBox2(i), villages[i][IDX_BASE_NAME],"",0 ,villages); //拠点一覧項目 var opfacLink = document.createElement("text"); opfacLink.style.padding = "3px"; td00.appendChild(opfacLink); var villageText = villages[i][IDX_BASE_NAME]; if (villages[i][IDX_URL] != "") { villageText = "" + villageText + ""; } opfacLink.innerHTML = villageText; opfacLink.style.textDecoration = "none"; td.appendChild(td00); tr.appendChild(td); //実行中作業情報項目 var actionsTd = document.createElement("td"); actionsTd.style.backgroundColor = COLOR_BACK; actionsTd.style.border = "solid 1px black"; actionsTd.style.padding = "3px"; actionsTd.style.width = "300px"; tr.appendChild(actionsTd); var actions = sortAction(villages[i][IDX_ACTIONS]); var nowTime = new Date(); for (var j = 0; j < actions.length; j++) { var actionDiv = createActionDiv(actions[j], nowTime, villages[i][IDX_XY], location.hostname); if (!actionDiv) continue; // 完了済みフラグのチェック actionDiv = createActionDiv(actions[j], nowTime, villages[i][IDX_XY], location.hostname); actionsTd.appendChild(actionDiv); } //設定ボタン var settingTd = document.createElement("td"); settingTd.style.backgroundColor = "#E6CF88"; settingTd.style.border = "solid 1px black"; settingTd.style.padding = "3px"; settingTd.style.width = "20px"; tr.appendChild(settingTd); var btn = d.createElement("input"); btn.style.padding = "1px"; btn.type = "button"; btn.value = "設定"; btn.title = "設定画面を表示します"; settingTd.appendChild(d.createTextNode(" ")); settingTd.appendChild(btn); settingTd.appendChild(d.createTextNode(" ")); settingTd.setAttribute('vId', villages[i][IDX_XY]); settingTd.addEventListener("click", function() { var vId = this.getAttribute('vId'); openInifacBox(vId); }, true); } saveVillages(HOST+PGNAME, villages); } //拠点作成状況の表示 2012.04.09 var tbl2 = d.createElement("table"); tbl2.style.border ="0px"; var lists = cloadData("ReserveList", "[]", true, true); for(var i=0 ; i 10) { strSave += "10" + DELIMIT2; } else { strSave += cgetTextBoxValue(opt) + DELIMIT2; } } } for (i=0;i<14;i++){ var opt = $("OPT_BG_LV" + i); if (cgetTextBoxValue(opt) > 10) { strSave += "10" + DELIMIT2; } else { strSave += cgetTextBoxValue(opt) + DELIMIT2; } } strSave += cgetCheckBoxValue($("OPT_BKBG_CHK")) + DELIMIT2;; //自動武器・防具強化するかのフラグ GM_setValue(HOST+PGNAME+vId, strSave); } //拠点単位の設定の読み込み function Load_OPT(vId){ var src = GM_getValue(HOST+PGNAME+vId, ""); if (src == "") { OPT_MAX_LV = ""; for(i=0; i<=22;i++){ OPT_CHKBOX[i] = 0; } OPT_KATEMURA = 0; OPT_SOUKO_MAX = 0; OPT_KIFU = 0; OPT_RISE_KIFU_MAX = 0; OPT_RISE_KIFU = 0; for(i=1; i<=22; i++){ OPT_DOME[i] = 0; } for(i=0; i<=22; i++){ OPT_CHKBOXLV[i] = 0;} return; //貿易センター変換処理用 (本拠地情報にデータがある) var villages = loadVillages(HOST+PGNAME); var src2 = GM_getValue(HOST+PGNAME+villages[0][IDX_XY], ""); if (src2 == "") { OPT_ICHIBA = 0; // 貿易センター自動変換の利用有無 OPT_RISE_MAX = 0; // 食の自動変換開始量 OPT_TO_WOOD = 0; // 鉄に変換する食の量 OPT_TO_STONE = 0; // 石油    〃 OPT_TO_IRON = 0; // アルミ 〃 OPT_ICHIBA_PA = 0; // 変換パターン OPT_MAX_WOOD = 0; // 鉄の最大保持量(この量を超えたら変換しない) OPT_MAX_STONE = 0; // 石油 〃 OPT_MAX_IRON = 0; // アルミ 〃 } OPT_ICHIBA = parseInt(shiroTemp2[23]); // 貿易センター自動変換の利用有無 OPT_RISE_MAX = parseInt(shiroTemp2[24]); // 食の自動変換開始量 OPT_TO_WOOD = parseInt(shiroTemp2[25]); // 鉄に変換する食の量 OPT_TO_STONE = parseInt(shiroTemp2[26]); // 石油    〃 OPT_TO_IRON = parseInt(shiroTemp2[27]); // アルミ 〃 OPT_ICHIBA_PA = shiroTemp2[33]; // 変換パターン OPT_MAX_WOOD = parseInt(shiroTemp2[79]); // 鉄の最大保持量(この量を超えたら変換しない) OPT_MAX_STONE = parseInt(shiroTemp2[80]); // 石油 〃 OPT_MAX_IRON = parseInt(shiroTemp2[81]); // アルミ 〃 // ビルスク情報 OPT_BLD = 0; OPT_SorH = 0; OPT_MAX = 0; OPT_MAXLV = 0; OPT_MAX = 6; OPT_MAXLV = 6; // 兵作成情報 for (i=0;i<14;i++){ OPT_SOL_MAX[i] = 0; OPT_SOL_MAX[i] = 0; }; for (i=0;i<14;i++){ OPT_SOL_ADD[i] = 0; OPT_SOL_ADD[i] = 0; }; OPT_BLD_SOL = 0; OPT_BLD_WOOD = 0; OPT_BLD_STONE = 0; OPT_BLD_IRON = 0; OPT_BLD_RICE = 0; OPT_BLD_WOOD = 0; OPT_BLD_STONE = 0; OPT_BLD_IRON = 0; OPT_BLD_RICE = 0; for (i=0;i<14;i++){ OPT_BK_LV[i] = 0; OPT_BK_LV[i] = 0; }; for (i=0;i<14;i++){ OPT_BG_LV[i] = 0; OPT_BG_LV[i] = 0; }; OPT_BKBG_CHK = 0; return; } var Temp = src.split(DELIMIT1); OPT_MAX_LV = Temp[0]; var Temp2 = Temp[1].split(DELIMIT2); var i; for(i=0; i<=22;i++){ if(Temp2[i] == ""){return;} OPT_CHKBOX[i] = parseInt(Temp2[i]); } //糧村化 if(Temp2[28] == ""){return;} OPT_KATEMURA = parseInt(Temp2[28]); OPT_SOUKO_MAX = parseInt(Temp2[29]); //自動寄付 if(Temp2[30] == ""){return;} OPT_KIFU = parseInt(Temp2[30]); OPT_RISE_KIFU_MAX = parseInt(Temp2[31]); OPT_RISE_KIFU = parseInt(Temp2[32]); //自動内政 by nottisan ここから追加 // @@ 追加 @@ OPT_DOME[1] = parseInt(Temp2[34]); OPT_DOME[2] = parseInt(Temp2[35]); OPT_DOME[3] = parseInt(Temp2[36]); OPT_DOME[4] = parseInt(Temp2[37]); OPT_DOME[5] = parseInt(Temp2[38]); OPT_DOME[6] = parseInt(Temp2[39]); OPT_DOME[7] = parseInt(Temp2[40]); OPT_DOME[8] = parseInt(Temp2[41]); OPT_DOME[9] = parseInt(Temp2[42]); OPT_DOME[10] = parseInt(Temp2[43]); OPT_DOME[11] = parseInt(Temp2[44]); OPT_DOME[12] = parseInt(Temp2[45]); OPT_DOME[13] = parseInt(Temp2[46]); OPT_DOME[14] = parseInt(Temp2[47]); OPT_DOME[15] = parseInt(Temp2[48]); OPT_DOME[16] = parseInt(Temp2[49]); OPT_DOME[17] = parseInt(Temp2[50]); OPT_DOME[18] = parseInt(Temp2[51]); OPT_DOME[19] = parseInt(Temp2[52]); OPT_DOME[20] = parseInt(Temp2[53]); OPT_DOME[21] = parseInt(Temp2[54]); OPT_DOME[22] = parseInt(Temp2[55]); // @@ 2011.06.22 for (i=0; i <= 22; i++){ OPT_CHKBOXLV[i] = parseInt(Temp2[56+i]); } // 食変換部分 //貿易センター変換処理用 var villages = loadVillages(HOST+PGNAME); var src2 = GM_getValue(HOST+PGNAME+villages[0][IDX_XY], ""); if (src2 == "") return; var shiroTemp = src2.split(DELIMIT1); var shiroTemp2 = shiroTemp[1].split(DELIMIT2); OPT_ICHIBA = parseInt(shiroTemp2[23]); // 貿易センター自動変換の利用有無 OPT_RISE_MAX = parseInt(shiroTemp2[24]); // 食の自動変換開始量 OPT_TO_WOOD = parseInt(shiroTemp2[25]); // 鉄に変換する食の量 OPT_TO_STONE = parseInt(shiroTemp2[26]); // 石油    〃 OPT_TO_IRON = parseInt(shiroTemp2[27]); // アルミ 〃 OPT_ICHIBA_PA = shiroTemp2[33]; // 変換パターン OPT_MAX_WOOD = parseInt(shiroTemp2[79]); // 鉄の最大保持量(この量を超えたら変換しない) OPT_MAX_STONE = parseInt(shiroTemp2[80]); // 石油 〃 OPT_MAX_IRON = parseInt(shiroTemp2[81]); // アルミ 〃 /* OPT_ICHIBA = parseInt(Temp2[23]); // 貿易センター自動変換の利用有無 OPT_RISE_MAX = parseInt(Temp2[24]); // 食の自動変換開始量 OPT_TO_WOOD = parseInt(Temp2[25]); // 鉄に変換する食の量 OPT_TO_STONE = parseInt(Temp2[26]); // 石油    〃 OPT_TO_IRON = parseInt(Temp2[27]); // アルミ 〃 OPT_ICHIBA_PA = Temp2[33]; // 変換パターン OPT_MAX_WOOD = parseInt(Temp2[79]); // 鉄の最大保持量(この量を超えたら変換しない) OPT_MAX_STONE = parseInt(Temp2[80]); // 石油 〃 OPT_MAX_IRON = parseInt(Temp2[81]); // アルミ 〃 */ // @@@@ add 2011.09.06 OPT_BLD = Temp2[82]; OPT_SorH = Temp2[83]; OPT_MAX = Temp2[84]; OPT_MAXLV = Temp2[85]; if (OPT_MAX == undefined) { OPT_MAX = 6; } if (OPT_MAXLV == undefined || OPT_MAXLV > 15) { OPT_MAXLV = 6; } // 兵作成情報 for (i=0;i<14;i++){ OPT_SOL_MAX[i] = parseInt(Temp2[86 + i]); if (isNaN(OPT_SOL_MAX[i])) { OPT_SOL_MAX[i] = 0; }; } for (i=0;i<14;i++){ OPT_SOL_ADD[i] = parseInt(Temp2[100 + i]); if (isNaN(OPT_SOL_ADD[i])) { OPT_SOL_ADD[i] = 0; }; } OPT_BLD_SOL = parseInt(Temp2[114]); OPT_BLD_WOOD = parseInt(Temp2[115]); OPT_BLD_STONE = parseInt(Temp2[116]); OPT_BLD_IRON = parseInt(Temp2[117]); OPT_BLD_RICE = parseInt(Temp2[118]); if (isNaN(OPT_BLD_WOOD)) { OPT_BLD_WOOD = 0; }; if (isNaN(OPT_BLD_STONE)) { OPT_BLD_STONE = 0; }; if (isNaN(OPT_BLD_IRON)) { OPT_BLD_IRON = 0; }; if (isNaN(OPT_BLD_RICE)) { OPT_BLD_RICE = 0; }; for (i=0;i<14;i++){ OPT_BK_LV[i] = parseInt(Temp2[119 + i]); if (isNaN(OPT_BK_LV[i])) { OPT_BK_LV[i] = 0; }; } for (i=0;i<14;i++){ OPT_BG_LV[i] = parseInt(Temp2[133 + i]); if (isNaN(OPT_BG_LV[i])) { OPT_BG_LV[i] = 0; }; } OPT_BKBG_CHK = parseInt(Temp2[147]); // @@ ここまで @@ return; } //ユーザプロフィール画面の拠点情報を取得 function getUserProf(htmldoc) { var oldVillages = loadVillages(HOST+PGNAME); var newVillages = new Array(); //alert(oldVillages); var landElems = document.evaluate( '//*[@id="whiteWrapper"]//*[@class="uTblType02"]/table/tbody/tr', htmldoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var isLandList = false; //alert(landElems.snapshotLength); for (var i=0; i b[6]) return -1; return 0;}); for (var i=0;i<11;i++){ if (sort_priority[i][2] == 1 && sort_priority[i][6] != 0){ // 兵作成 if ((OPT_SOL_ADD[sort_priority[i][1] - 300] != 0) && (OPT_SOL_ADD[sort_priority[i][1] - 300] < sort_priority[i][3])){ var c={}; c['x']=parseInt(sort_priority[i][7]); c['y']=parseInt(sort_priority[i][8]); c['unit_id']=sort_priority[i][1]; c['count']=OPT_SOL_ADD[sort_priority[i][1] - 300]; console.log(c); j$.post("http://"+HOST+"/facility/facility.php?x=" + sort_priority[i][7] + "&y=" + sort_priority[i][8] + "#ptop",c,function(){}); var tid=setTimeout(function(){location.reload(false);},INTERVAL); break; } } } return; } var _x = -1; var _y = -1; var _lv = -1; var area = new Array(); area = get_area(); for (i=0;i 0) { // 兵士は作成中 } else { var makeElem = document.evaluate('//th[@class="mainTtl"]',htmldoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 1; i < makeElem.snapshotLength; i++ ){ // 兵作成可能 make_no[makeElem.snapshotItem(i).innerHTML][2] = 1; // 兵作成可能数 make_no[makeElem.snapshotItem(i).innerHTML][3] = parseInt(sumMaxSoldier(make_no[makeElem.snapshotItem(i).innerHTML][1])); // 現存合計兵数 make_no[makeElem.snapshotItem(i).innerHTML][5] = attackerData[make_no[makeElem.snapshotItem(i).innerHTML][4]]; // 残必要兵数 make_no[makeElem.snapshotItem(i).innerHTML][6] = OPT_SOL_MAX[make_no[makeElem.snapshotItem(i).innerHTML][1] - 300] - attackerData[make_no[makeElem.snapshotItem(i).innerHTML][4]]; if (make_no[makeElem.snapshotItem(i).innerHTML][6] < 0) { make_no[makeElem.snapshotItem(i).innerHTML][6] = 0; } // 座標 make_no[makeElem.snapshotItem(i).innerHTML][7] = _x; make_no[makeElem.snapshotItem(i).innerHTML][8] = _y; // console.log(makeElem.snapshotItem(i).innerHTML + " : " + (make_no[makeElem.snapshotItem(i).innerHTML][1] - 300)); }; } make_loop(loop + 1); } }); },1000); } } make_loop(0); } function sumMaxSoldier(type){ var SoldierCost = [ [ 1, 1, 1, 1], [ 11, 1, 11, 61], // 301 新兵 [ 1, 1, 1, 1], [ 88, 132, 1, 21], // 303 軽戦車 [ 264, 396, 1, 61], // 304 重戦車 [ 1, 128, 192, 41], // 305 軽戦闘機 [ 1, 1, 1, 1], [ 1, 384, 576, 121], // 307 重戦闘機 [ 144, 1, 96, 35], // 308 水雷艇 [ 432, 1, 288, 105], // 309 駆逐艦 [ 151, 151, 151, 1], // 310 工作員 [ 451, 451, 451, 31], // 311 特殊部隊 [ 501, 1, 501, 1], // 312 工兵 [ 1,1501,1501, 1] // 313 自走臼砲 ]; var tables = document.evaluate('//*[@class="status village-bottom"]',document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var Temp = tables.snapshotItem(0).innerHTML.substring(tables.snapshotItem(0).innerHTML.lastIndexOf(" ")+1); temp0 = Temp.split("/"); var now_Soldier = temp0[0]; var max_Soldier = temp0[1]; var make_max = temp0[1] - temp0[0]; // 最大作成可能兵数 type = type - 300; var wood = parseInt( $("wood").innerHTML, 10 ); var stone = parseInt( $("stone").innerHTML, 10 ); var iron = parseInt( $("iron").innerHTML, 10 ); var rice = parseInt( $("rice").innerHTML, 10 ); countWood = parseInt((wood - OPT_BLD_WOOD) / SoldierCost[type][0]); countStone = parseInt((stone - OPT_BLD_STONE) / SoldierCost[type][1]); countIron = parseInt((iron - OPT_BLD_IRON) / SoldierCost[type][2]); countRice = parseInt((rice - OPT_BLD_RICE) / SoldierCost[type][3]); var MaxSoldir = countWood; if (MaxSoldir > countStone) { MaxSoldir = countStone; } if (MaxSoldir > countIron) { MaxSoldir = countIron; } if (MaxSoldir > countRice) { MaxSoldir = countRice; } if (make_max < MaxSoldir) { MaxSoldir = make_max; } // 滞在可能上限を超えないこと return MaxSoldir; } // 資源オーバーフロー防止処理 function OverFlowPrevention() { var ichiba_x = -1; //貿易センターのX座標 var ichiba_y = -1; //貿易センターのY座標 var ichiba_lv = -1; //貿易センターのレベル var area = new Array(); area = get_area(); for(i=0;i OverFlowLimit) && (RES_NOW["stone"] > OverFlowLimit) && (RES_NOW["iron"] > OverFlowLimit) ) { var max_sigen = 0; if (RES_NOW["wood"] > max_sigen) { max_sigen = RES_NOW["wood"]; ChangeSigenNum = Math.floor(RES_NOW["wood"] * 0.01); } if (RES_NOW["stone"] > max_sigen) { max_sigen = RES_NOW["stone"]; ChangeSigenNum = Math.floor(RES_NOW["stone"] * 0.01); } if (RES_NOW["iron"] > max_sigen) { max_sigen = RES_NOW["iron"]; ChangeSigenNum = Math.floor(RES_NOW["iron"] * 0.01); } if(RES_NOW["wood"] == max_sigen) { changeResorceToResorce(WOOD, ChangeSigenNum, RICE, ichiba_x, ichiba_y); } else if(RES_NOW["stone"] == max_sigen) { changeResorceToResorce(STONE, ChangeSigenNum, RICE, ichiba_x, ichiba_y); } else if(RES_NOW["iron"] == max_sigen) { changeResorceToResorce(IRON, ChangeSigenNum, RICE, ichiba_x, ichiba_y); } } // 資源:鉄が限界を超えているか? if (RES_NOW["wood"] > OverFlowLimit) { // 一番少ない資源を探せ! var min_sigen = 9999999999; if (RES_NOW["stone"] < min_sigen) { min_sigen = RES_NOW["stone"]; } if (RES_NOW["iron"] < min_sigen) { min_sigen = RES_NOW["iron"]; } if(RES_NOW["stone"] == min_sigen) { changeResorceToResorce(WOOD, ChangeSigenNum, STONE, ichiba_x, ichiba_y); } else if(RES_NOW["iron"] == min_sigen) { changeResorceToResorce(WOOD, ChangeSigenNum, IRON, ichiba_x, ichiba_y); } } // 資源:石油が限界を超えているか? if (RES_NOW["stone"] > OverFlowLimit) { // 一番少ない資源を探せ! var min_sigen = 9999999999; if (RES_NOW["wood"] < min_sigen) { min_sigen = RES_NOW["wood"]; } if (RES_NOW["iron"] < min_sigen) { min_sigen = RES_NOW["iron"]; } if(RES_NOW["wood"] == min_sigen) { changeResorceToResorce(STONE, ChangeSigenNum, WOOD, ichiba_x, ichiba_y); } else if(RES_NOW["iron"] == min_sigen) { changeResorceToResorce(STONE, ChangeSigenNum, IRON, ichiba_x, ichiba_y); } } // 資源:アルミが限界を超えているか? if (RES_NOW["iron"] > OverFlowLimit) { // 一番少ない資源を探せ! var min_sigen = 9999999999; if (RES_NOW["wood"] < min_sigen) { min_sigen = RES_NOW["wood"]; } if (RES_NOW["stone"] < min_sigen) { min_sigen = RES_NOW["stone"]; } if(RES_NOW["wood"] == min_sigen) { changeResorceToResorce(IRON, ChangeSigenNum, WOOD, ichiba_x, ichiba_y); } else if(RES_NOW["stone"] == min_sigen) { changeResorceToResorce(IRON, ChangeSigenNum, STONE, ichiba_x, ichiba_y); } } // 資源:食が限界を超えているか? if (RES_NOW["rice"] > OverFlowLimit) { // 一番少ない資源を探せ! var min_sigen = 9999999999; if (RES_NOW["wood"] < min_sigen) { min_sigen = RES_NOW["wood"]; } if (RES_NOW["stone"] < min_sigen) { min_sigen = RES_NOW["stone"]; } if (RES_NOW["iron"] < min_sigen) { min_sigen = RES_NOW["iron"]; } if(RES_NOW["wood"] == min_sigen) { changeResorceToResorce(RICE, ChangeSigenNum, WOOD, ichiba_x, ichiba_y); } else if(RES_NOW["stone"] == min_sigen) { changeResorceToResorce(RICE, ChangeSigenNum, STONE, ichiba_x, ichiba_y); } else if(RES_NOW["iron"] == min_sigen) { changeResorceToResorce(RICE, ChangeSigenNum, IRON, ichiba_x, ichiba_y); } } } //貿易センター変換処理 function ichibaChange(vId) { if(OPT_ICHIBA != 1) { //alert("貿易センター自動変換未指定"); return; } var ichiba_x = -1; //貿易センターのX座標 var ichiba_y = -1; //貿易センターのY座標 var ichiba_lv = -1; //貿易センターのレベル var area = new Array(); area = get_area(); for(i=0;i= OPT_MAX_WOOD) { CHG_NOW["wood"] = 0; } if (RES_NOW["stone"] >= OPT_MAX_STONE){ CHG_NOW["stone"] = 0; } if (RES_NOW["iron"] >= OPT_MAX_IRON) { CHG_NOW["iron"] = 0; } // 全部上限を超えていて if ( ( CHG_NOW["wood"] + CHG_NOW["stone"] + CHG_NOW["iron"] ) == 0 ) { // 自動寄付も未設定の場合全部変換対象にする if ( OPT_KIFU == 0 ) { CHG_NOW["wood"] = 1; CHG_NOW["stone"] = 1; CHG_NOW["iron"] = 1; } } //食が指定量より多いかチェック if(RES_NOW["rice"] < OPT_RISE_MAX) { return; } if( OPT_RISE_MAX == 0) { return; } // 一番貿易センターレベルの高い拠点へジャンプ 2012.04.13 var shoplist = cloadData("ShopList","[]",true,true); if (shoplist.length == 0) { return; } shoplist.sort( function(a,b) { if (a[1] < b[1]) return 1; if (a[1] > b[1]) return -1; return 0;}); if (vId != shoplist[0].vId) { // 一番貿易センターのレベルの高い拠点へ移動 var villages = loadVillages(HOST+PGNAME); var nextIndex = -1; for(var i=0; i b[6]) return -1; return 0;}); var shopVid = ""; var shopLv = -1; var shopX = -1; var shopY = -1; for (var i=0 ; i 0) && (RES_NOW["wood"] < min_sigen && CHG_NOW["wood"] == 1)) { min_sigen = RES_NOW["wood"] }; if((OPT_TO_STONE > 0) && (RES_NOW["stone"] < min_sigen && CHG_NOW["stone"] == 1)) { min_sigen = RES_NOW["stone"]; } if((OPT_TO_IRON > 0) && (RES_NOW["iron"] < min_sigen && CHG_NOW["iron"] == 1)) { min_sigen = RES_NOW["iron"]; } //食から他の資源に返還開始 if((OPT_TO_WOOD > 0) && ( RES_NOW["wood"] == min_sigen )) { changeResorceToResorce(RICE, OPT_TO_WOOD, WOOD, ichiba_x, ichiba_y); // console.log(location.hostname + "【均等】食変換 to 鉄:" + OPT_TO_WOOD); } else if((OPT_TO_STONE > 0) && ( RES_NOW["stone"] == min_sigen )) { changeResorceToResorce(RICE, OPT_TO_STONE, STONE, ichiba_x, ichiba_y); // console.log(location.hostname + "【均等】食変換 to 石油:" + OPT_TO_STONE); } else if((OPT_TO_IRON > 0) && ( RES_NOW["iron"] == min_sigen )) { changeResorceToResorce(RICE, OPT_TO_IRON, IRON, ichiba_x, ichiba_y); // console.log(location.hostname + "【均等】食変換 to アルミ:" + OPT_TO_IRON); } // var tid=setTimeout(function(){location.reload(false);},INTERVAL); return; }else{ if(OPT_RISE_MAX < OPT_TO_WOOD+OPT_TO_STONE+OPT_TO_IRON){ // alert("変換する総合計より食の値を大きくしてください。"); }else{ /* changeResorceToResorce(RICE, OPT_TO_WOOD, WOOD, ichiba_x, ichiba_y); changeResorceToResorce(RICE, OPT_TO_STONE, STONE, ichiba_x, ichiba_y); changeResorceToResorce(RICE, OPT_TO_IRON, IRON, ichiba_x, ichiba_y); */ if(CHG_NOW["wood"] == 1) { changeResorceToResorce(RICE, OPT_TO_WOOD, WOOD, ichiba_x, ichiba_y); // console.log(location.hostname + "【一括】食変換 to 鉄:" + OPT_TO_WOOD); } if(CHG_NOW["stone"] == 1) { changeResorceToResorce(RICE, OPT_TO_STONE, STONE, ichiba_x, ichiba_y); // console.log(location.hostname + "【一括】食変換 to 石油:" + OPT_TO_STONE); } if(CHG_NOW["iron"] == 1) { changeResorceToResorce(RICE, OPT_TO_IRON, IRON, ichiba_x, ichiba_y); // console.log(location.hostname + "【一括】食変換 to アルミ:" + OPT_TO_IRON); } } // var tid=setTimeout(function(){location.reload(false);},INTERVAL); return; } function addShopList(vId,lv,x,y) { var flg = 0; var shoplist = cloadData("ShopList","[]",true,true); for (var i=0 ; i 1) GM_xmlhttpRequest({ method:"GET", url:"http://" + HOST + link, headers:{"Content-type":"text/html"}, overrideMimeType:'text/html; charset=utf-8', onload:function(x){} }); // console.log("http://" + HOST + link); return; } } // @@ ここまで @@ } } }); },INTERVAL); } /////////////////////////////////////////////// //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); }; } function ccreateCheckBox0(container, id, def, text, title, left, villages) { left += 2; var cb = d.createElement("input"); cb.type = "checkbox"; cb.style.verticalAlign = "middle"; cb.id = id; //cb.value = 1; //if( def ) cb.checked = true; cb.checked = def; cb.addEventListener("change", // @@@ function() { for (var i = 0; i < villages.length; i++) { GM_setValue(HOST+PGNAME+"OPT_CHKBOX_AVC_" + i, document.getElementById('OPT_CHKBOX_AVC_' + i).checked); } }, true); container.appendChild(cb); return cb; } // 2011.06.22 function ccreateCheckBoxKai2(container, id, def, text, title, left ) { left += 2; var dv = d.createElement("div"); dv.style.padding = "1px"; dv.style.paddingLeft= left + "px"; dv.title = title; var cb = d.createElement("input"); cb.type = "checkbox"; cb.style.verticalAlign = "middle"; cb.id = id + def; cb.value = 1; var def2 = id + "" + "[" + def + "]"; //console.log(def2 + " = " + eval(def2)); if( eval(def2) ) cb.checked = true; var lb = d.createElement("label"); lb.htmlFor = id; lb.style.verticalAlign = "middle"; var tx = d.createTextNode(text); tx.fontsize = "10px"; lb.appendChild( tx ); var tb = d.createElement("input"); tb.type = "text"; tb.id = id + "LV" + def; tb.value = eval(id + "LV" + "[" + def + "]"); tb.style.verticalAlign = "middle"; tb.style.textAlign = "right"; tb.style.paddingRight = "3px"; //console.log(id + "LV" + "[" + def + "] =" + eval(id + "LV" + "[" + def + "]")); tb.size = 4; dv.appendChild(cb); dv.appendChild(lb); dv.appendChild(tb); container.appendChild(dv); return cb; } function JSSleep(sec) { var start = new Date; while (1) { var cur = new Date; if (sec * 1000 <= cur.getTime() - start.getTime()) { break; } } } /////////////////////////////////////////////// // Time 部分の追加 /////////////////////////////////////////////// function sortAction(actions) { actions.sort(function(val1, val2) { var diff = (new Date(val1[IDX2_TIME])).getTime() - (new Date(val2[IDX2_TIME])).getTime(); return diff; }); return actions; } //拠点の作業中情報を取得 function getVillageActions() { var data = new Array(); //拠点名を取得 var baseNameElem = document.evaluate( '//*[@class="inner_right"]/p[@class="inner_base_name"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); data[IDX_BASE_NAME] = trim(baseNameElem.snapshotItem(0).innerHTML); //座標を取得 var xyElem = document.evaluate('//*[@class="inner_right"]/p[@class="inner_base_position"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); data[IDX_XY] = trim(xyElem.snapshotItem(0).innerHTML); //建設情報を取得 var actionsElem = document.evaluate('//*[@id="actionLog"]/div[@class="action_que"]/ul/li', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var actions1 = new Array(); for (var i = 0; i < actionsElem.snapshotLength; i++) { var paItem = actionsElem.snapshotItem(i); var newAction = new Array(); //ステータス var buildStatusElem = document.evaluate('./span[@class="buildStatus"]/a', paItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var buildStatus; if (buildStatusElem.snapshotLength > 0) { //施設建設 var buildstr = trim(document.evaluate('./span[@class="buildStatus"]', paItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0).innerHTML).substr(0,2); if (buildstr == "建設") { newAction[IDX2_DELETE] = false; buildStatus = "建設:" + trim(buildStatusElem.snapshotItem(0).innerHTML); } else { newAction[IDX2_DELETE] = true; buildStatus = "削除:" + trim(buildStatusElem.snapshotItem(0).innerHTML); } } else { /* buildStatusElem = document.evaluate('./span[@class="buildStatus"]', paItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if (buildStatusElem.snapshotItem(0).innerHTML.match(/強化/)) { continue; } var tempStr1 = buildStatusElem.snapshotItem(0).innerHTML.split("を"); buildStatus = "技術研究所:" + tempStr1[0]; newAction[IDX2_DELETE] = false; */ continue; } newAction[IDX2_ROTATION] = 0; newAction[IDX2_TYPE] = TYPE_CONSTRUCTION; newAction[IDX2_STATUS] = buildStatus; //施設建設完了時刻 var buildClockElem = document.evaluate('./span[@class="buildClock"]', paItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var clock = buildClockElem.snapshotItem(0).innerHTML; newAction[IDX2_TIME] = generateDateString(computeTime(clock)); actions1.push(newAction); } //建設情報を永続保存 data[IDX_ACTIONS] = actions1; saveVillage(data, TYPE_CONSTRUCTION); //行軍情報を取得 var actionsElem = document.evaluate( '//*[@id="action"]/div[@class="floatInner"]/ul/li', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var actions2 = new Array(); for (var i = 0; i < actionsElem.snapshotLength; i++) { var paItem = actionsElem.snapshotItem(i); var newAction = new Array(); newAction[IDX2_TYPE] = TYPE_MARCH; newAction[IDX2_DELETE] = false; newAction[IDX2_ROTATION] = 0; //ステータス var statusElem = document.evaluate('./a', paItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var status = trim(statusElem.snapshotItem(0).innerHTML); newAction[IDX2_STATUS] = "行軍:" + status; //完了時刻 var buildClockElem = document.evaluate('./span', paItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var clock = buildClockElem.snapshotItem(0).innerHTML; newAction[IDX2_TIME] = generateDateString(computeTime(clock)); actions2.push(newAction); } //行軍情報を永続保存 data[IDX_ACTIONS] = actions2; saveVillage(data, TYPE_MARCH); if ( getStayMode() ) { closeIniBilderBox() openIniBilderBox() } } //拠点情報を保存 function saveVillage(newData, type) { var allData = loadVillages(location.hostname+PGNAME); //新旧データをマージ var exists = false; for (var i = 0; i < allData.length; i++) { var villageData = allData[i]; //作業リスト更新 if (villageData[IDX_XY] == newData[IDX_XY]) { exists = true; villageData[IDX_BASE_NAME] = newData[IDX_BASE_NAME]; var actions = villageData[IDX_ACTIONS]; for (var j = actions.length - 1; j >= 0; j--) { if (actions[j][IDX2_TYPE] != type) continue; var endTime = new Date(actions[j][IDX2_TIME]); var nowTime = new Date(); if (isNaN(endTime.valueOf()) || endTime > nowTime) actions.splice(j, 1); } villageData[IDX_ACTIONS] = actions.concat(newData[IDX_ACTIONS]); } allData[i] = villageData; } if (!exists) allData.push(newData); //Greasemonkey領域へ永続保存 saveVillages(HOST+PGNAME, allData); } //各作業行生成 function createActionDiv(action, nowTime, baseXy, host) { var type = action[IDX2_TYPE].charAt(0); // if (getDispMode(type) == DISP_MODE_NONE) { // return undefined; // } var actionDiv = document.createElement("div"); if ( action[IDX2_DELETE] == "true" ) { actionDiv.style.backgroundColor = "#BBDDDD"; } //作業完了背景色 var actionTime = new Date(action[IDX2_TIME]); if (actionTime < nowTime) { actionDiv.style.backgroundColor = COLOR_TITLE; } //作業完了時刻 var textSpan = document.createElement("span"); var text = ""; text += action[IDX2_TIME].replace(/^[0-9]{4}\//, ""); // if (getDispWaitTime()) { var finishTime = new Date(action[IDX2_TIME]); text += " (あと" + generateWaitTimeString(finishTime, nowTime) + ")"; // } text += " "; text += action[IDX2_STATUS]; textSpan.innerHTML = text; actionDiv.appendChild(textSpan); //作業完了行の個別削除リンク if (actionTime < nowTime) { var delLink = document.createElement("a"); delLink.title = "確認済にして削除します"; delLink.href = "javascript:void(0);"; delLink.style.color = "#E86D61"; delLink.innerHTML = "済"; var key = host + DELIMIT1 + baseXy + DELIMIT1 + action[IDX2_TIME]; delLink.addEventListener("click", (function(key_) { return function() { deleteAction(key_); } })(key), true); actionDiv.appendChild(delLink); } return actionDiv; } function confirmTimer() { //基準時刻より前の作業情報を削除 var hosts = getTargetHosts(); for (var ii = 0; ii < hosts.length; ii++) { var baseTime = new Date(); // var baseTime = new Date(document.getElementById("openTime").innerHTML); var villages = loadVillages(hosts[ii] + PGNAME); for (var i = 0; i < villages.length; i++) { var actions = villages[i][IDX_ACTIONS]; for (var j = actions.length - 1; j >=0 ; j--) { var actionTime = new Date(actions[j][IDX2_TIME]); if (actionTime <= baseTime) { actions.splice(j, 1); } } villages[i][IDX_ACTIONS] = actions; } //保存 saveVillages(hosts[ii] + PGNAME, villages); } //更新後内容で表示 /* if ( getStayMode() ) { closeIniBilderBox() openIniBilderBox() } */ closeIniBilderBox() openIniBilderBox() } //通知対象ホスト function getTargetHosts() { var hosts = new Array(); var dispOtherHosts = GM_getValue(location.hostname + "_disp_other_hosts", false); if (dispOtherHosts) { hosts = loadHosts(); } else { hosts[0] = location.hostname; } return hosts; } function deleteAction(key) { var hosts = getTargetHosts(); for (var ii = 0; ii < hosts.length; ii++) { var villages = loadVillages(hosts[ii] + PGNAME); var exists = false; villageLoop: for (var i = 0; i < villages.length; i++) { for (var j = 0; j < villages[i][IDX_ACTIONS].length; j++) { var action = villages[i][IDX_ACTIONS][j]; var curKey = hosts[ii] + DELIMIT1 + villages[i][IDX_XY] + DELIMIT1 + action[IDX2_TIME]; if (key == curKey) { exists = true; villages[i][IDX_ACTIONS].splice(j, 1); break villageLoop; } } } //見つかったら更新 if (exists) { saveVillages(hosts[ii] + PGNAME, villages); closeIniBilderBox(); openIniBilderBox(); return; } } } //施設内作業中取得 function getTrainingSoldier() { var data = getMyVillage(); data[IDX_ACTIONS] = new Array(); //施設名 var facilityName = ""; var h2Elem = document.evaluate('//*[@id="gray02Wrapper"]/h2', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if (h2Elem.getSnapshotLength != 0) { facilityName = trim(h2Elem.snapshotItem(0).innerHTML); } //作業種別 var actionType = TYPE_FACILITY + getParameter("x") + getParameter("y"); //作業中情報取得 var idx = 0; while (1) { var clockElem = document.getElementById("area_timer" + idx); if (clockElem == undefined) break; var mainTtls = document.evaluate('../../../tr/th[@class="mainTtl"]', clockElem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if (mainTtls.snapshotLength == 0) break; var clock = trim(clockElem.innerHTML); if (clock == "") break; var mainTtlElem = mainTtls.snapshotItem(idx); if (mainTtlElem == undefined) break; var status = trim(mainTtlElem.innerHTML); if (status == "") break; data[IDX_ACTIONS][idx] = new Array(); data[IDX_ACTIONS][idx][IDX2_STATUS] = facilityName + ":" + status; data[IDX_ACTIONS][idx][IDX2_TIME] = generateDateString(computeTime(clock)); data[IDX_ACTIONS][idx][IDX2_TYPE] = actionType; data[IDX_ACTIONS][idx][IDX2_DELETE] = false; data[IDX_ACTIONS][idx][IDX2_ROTATION] = 0; idx++; } saveVillage(data, actionType); if ( getStayMode() ) { closeIniBilderBox() openIniBilderBox() } } function getMyVillage() { var ret = new Array(); var xy=getMyXY(); if(! xy){ return ret; } var allData = loadVillages(location.hostname + PGNAME); for (var i = 0; i < allData.length; i++) { var villageData = allData[i]; if (villageData[IDX_XY] == "("+xy+")") { ret[IDX_XY] = villageData[IDX_XY]; ret[IDX_BASE_NAME] = villageData[IDX_BASE_NAME]; return ret; } } return ret; } function getMyXY() { var d = document; var $x = function(xp,dc) { return document.evaluate(xp, dc||d, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; }; var gnaviorgNav = d.getElementById("gnavi"); if(gnaviorgNav) { var nowLoc = $x('id("gnavi")//a[contains(@href,"map.php")]'); }else{ var nowLoc = $x('id("gNav")//a[contains(@href,"map.php")]');} if (!nowLoc) return null; var xy = nowLoc.href.match(/x=([\-0-9]+)&y=([\-0-9]+)/i); if( xy ) { return xy[1]+","+xy[2]; } } //内政スキル取得 function getDomesticSkill() { var data = getMyVillage(); console.log(data); data[IDX_ACTIONS] = new Array(); for (var i = 0; i < 3; i++) { var clockElem = document.getElementById("area_timer" + i); if (clockElem != undefined) { var clock = trim(clockElem.innerHTML); data[IDX_ACTIONS][i] = new Array(); var statusElem = document.evaluate('..', clockElem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0); var status = ""; if (statusElem.className == "status") status = "使用"; else if (statusElem.className == "recovery") status = "回復"; var nameLink = document.evaluate('../td/a', statusElem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); status = "内政:" + status + "(" + trim(nameLink.snapshotItem(0).innerHTML) + ")"; data[IDX_ACTIONS][i][IDX2_STATUS] = status; data[IDX_ACTIONS][i][IDX2_TIME] = generateDateString(computeTime(clock)); data[IDX_ACTIONS][i][IDX2_TYPE] = TYPE_DOMESTIC; data[IDX_ACTIONS][i][IDX2_DELETE] = false; data[IDX_ACTIONS][i][IDX2_ROTATION] = 0; } } saveVillage(data, TYPE_DOMESTIC); if ( getStayMode() ) { closeIniBilderBox() openIniBilderBox() } } //常駐モード取得 function getStayMode() { var result = GM_getValue(location.hostname + "_stay_mode" + PGNAME, true); return result; } //常駐モード変更 function changeStayMode(value) { GM_setValue(location.hostname + "_stay_mode" + PGNAME, value); } //巡回モード取得 function getReverseMode() { var result = GM_getValue(location.hostname + "_reverse_mode" + PGNAME, false); return result; } //巡回モード変更 function changeReverseMode(value) { GM_setValue(location.hostname + "_reverse_mode" + PGNAME, value); } //次回完了時刻取得 function getNextTime(hostname, baseTime) { //一番早い作業完了時刻を取得 var startTime = new Date("2099/12/31 23:59:59"); var nextTime = startTime; var villages = loadVillages(location.hostname + PGNAME); nextURL = ""; for (var i = 0; i < villages.length; i++) { var actions = villages[i][IDX_ACTIONS]; for (var j = 0; j < actions.length; j++) { var actionTime = new Date(actions[j][IDX2_TIME]); if (actionTime > baseTime && actionTime < nextTime) { var type = actions[j][IDX2_TYPE].charAt(0); nextTime = actionTime; nextURL = villages[i][IDX_URL]; nextNAME = villages[i][IDX_BASE_NAME]; } } } //作業中がなければ何もしない if (nextTime == startTime) nextTime = undefined; return nextTime; } function xpath(query,targetDoc) { return document.evaluate(query, targetDoc, null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); } ul // @match http://*/* // @copyright 2012+, You // ==/UserScript==