Last active
June 21, 2023 12:13
-
-
Save hot-2130/8d07bb2199574ad14546f5fa047e4c59 to your computer and use it in GitHub Desktop.
ブラウザ三国志 自動同盟加入・脱退承認、5禁解除、配下編入自動化ツール
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ==UserScript== | |
| // @name bro3_alliance_member_operation | |
| // @namespace bro3_alliance_member_operation | |
| // @description ブラウザ三国志 自動同盟加入・脱退承認、5禁解除、配下編入自動化ツール byほっと | |
| // @version 1.15 | |
| // @include https://*.3gokushi.jp/village.php* | |
| // @include http://*.3gokushi.jp/village.php* | |
| // @include https://*.3gokushi.jp/alliance/* | |
| // @include http://*.3gokushi.jp/alliance/* | |
| // @include https://*.3gokushi.jp/bbs/* | |
| // @include http://*.3gokushi.jp/bbs/* | |
| // @include https://*.3gokushi.jp/card/deck.php* | |
| // @include http://*.3gokushi.jp/card/deck.php* | |
| // @require http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js | |
| // @require http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js | |
| // @resource jqueryui_css http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css | |
| // ==/UserScript== | |
| // version date author | |
| // 1.1 2018/06/04 greasemonkey4用に再作成開始 | |
| // 1.6 2018/06/15 公開開始 | |
| // 1.9 2018/08/01 https対応 | |
| // 1.10 2018/08/05 プロトコル変更対応 | |
| // 1.11 2021/11/06 プロフィール変更に対応 | |
| // 1.12 2022/03/14 5禁対応 | |
| // 1.13 2022/03/14 配下編入処理プロフィール変更の対応 | |
| // 1.15 2023/06/21 プロフィールが取得できなくなっていたので修正 | |
| // to do | |
| // 同盟トップページのメニューに「加入脱退設定」が追加されます | |
| // 設定リストに存在する君主名、ユーザIDで処理を実施します | |
| // ======自動加入脱退の仕様====== | |
| // ①同盟管理ページに加入(脱退)申請が存在する yes→②へ no→処理終了 | |
| // ②盟主名が許可リストに存在する yes→③へ no→処理終了 | |
| // ③加入(脱退)許可処理を実施 (書簡の開封処理は行わない) | |
| // ======自動配下編入の仕様====== | |
| // ①1ページ目に表示される未開封書簡の件名に「【編入希望】」が含まれている書簡がある yes→②へ no→処理終了 | |
| // ②書簡の送信者が編入許可リストに存在する yes→③へ no→処理終了 | |
| // ③書簡の送信者が同盟員に存在する yes→書簡開封して処理終了 no→④へ | |
| // ④送信者の親同盟が同盟名と同じ yes→⑤へ no→書簡開封して処理終了 | |
| // ⑤編入希望が○ yes→編入許可処理を実施 no→書簡開封して処理終了 | |
| // load jQuery | |
| jQuery.noConflict(); | |
| j$ = jQuery; | |
| //----------// | |
| // 変数定義 // | |
| //----------// | |
| // ソフトウェアバージョン | |
| var VERSION = "1.15"; | |
| var SERVER_NAME = location.hostname.match(/^(.*)\.3gokushi/)[1]; | |
| // 特殊定数 | |
| var PROTOCOL = location.protocol; | |
| var HOST = location.hostname; // アクセスURLホスト | |
| var SERVICE = ''; // サービス判定が必要な場合に使用する予約定数 | |
| var SVNAME = HOST.substr(0,location.hostname.indexOf(".")) + SERVICE; | |
| var AMO_KEY = "AMO_" + HOST.substr(0,HOST.indexOf(".")); | |
| var AMO_JOINFLG = 'amo_joinflg'; | |
| var AMO_DROPFLG = 'amo_dropflg'; | |
| var AMO_5KINFLG = 'amo_5kinflg'; | |
| var AMO_PULLFLG = 'amo_pullflg'; | |
| var AMO_RELOADFLG = 'amo_reloadflg'; | |
| var AMO_TXTRELOAD = 'amo_txtreload'; | |
| var AMO_TXTAREA1 = 'amo_txtarea1'; | |
| var AMO_TXTAREA2 = 'amo_txtarea2'; | |
| var AMO_TXTAREA3 = 'amo_txtarea3'; | |
| var AMO_TXTAREA4 = 'amo_txtarea4'; | |
| var AMO_LOGCOUNT = 'amo_logcount'; | |
| var AMO_DEBUGFLG = 'amo_debugflg'; | |
| // 保存データデリミタ | |
| var AMO_DELIMIT = "#$%{=]"; | |
| var m_amo_options; | |
| var m_manager = ""; | |
| var m_id = ""; | |
| var m_alliance_name = ""; | |
| var m_alliance_id = ""; | |
| var m_join = new Array(); | |
| var m_join2 = new Array(); | |
| var m_drop = new Array(); | |
| var m_transfer = new Array(); | |
| //-----------------// | |
| // メインルーチン // | |
| //-----------------// | |
| (function() { | |
| // main処理 | |
| var promise = Promise.resolve(); | |
| promise | |
| .then(amo_getprofile) // プロフ読み取り | |
| .then(function(){ | |
| // 設定のロード | |
| amo_loadSettings(); | |
| // 同盟プロフ画面 | |
| if (location.pathname == "/alliance/info.php") { | |
| amo_setting(); | |
| } | |
| }) | |
| .then(amo_joindrop) // 加入脱退許可 | |
| .then(amo_5kinoff) // 5禁解除 | |
| .then(amo_transfer) // 編入申請許可 | |
| .then(amo_reload()) // リロード | |
| .catch(onRejectted); | |
| })(); | |
| function onRejectted(error) { | |
| console.log("error = " + error); | |
| } | |
| //----------------------------// | |
| // プロフ取得 // | |
| //----------------------------// | |
| function amo_getprofile(){ | |
| console.log('プロフィールを取得します'); | |
| return new Promise(function (resolve, reject) { | |
| var l_len=0; | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/user/', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('役職を取得しました'); | |
| l_len = j$(data).find("table[class='commonTables profileTable'] tbody").length; | |
| if (l_len > 0) { | |
| m_manager = j$(data).find("table[class='commonTables profileTable'] tbody tr:eq(5) td:eq(3)").text().replace(/\s| /g, ""); //役職 | |
| m_id = j$(data).find("table[class='commonTables profileTable'] tbody tr:eq(1) a:eq(0)").attr("href").match(/\?.*user_id=([0-9]+)/)[1]; //個人ID | |
| m_alliance_name = j$(data).find("table[class='commonTables profileTable'] tbody tr:eq(4) td:eq(3)").text().replace(/\s| /g, ""); //同盟名 | |
| m_alliance_id = j$(data).find("table[class='commonTables profileTable'] tbody tr:eq(4) td:eq(3) a:eq(0)").attr("href").match(/\?.*id=([0-9]+)/)[1]; //同盟ID | |
| resolve(0); | |
| } | |
| }); | |
| }); | |
| } | |
| //----------------------------// | |
| // 編入自動許可処 // | |
| //----------------------------// | |
| function amo_transfer(){ | |
| return new Promise(function (resolve, reject) { | |
| console.log('自動編入処理を行う'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){ | |
| amo_savelog("自動編入処理を開始します"); | |
| amo_savelog("役職:" + m_manager + " 自動編入実行フラグ:" + m_amo_options[AMO_PULLFLG]); | |
| } | |
| if (((m_manager == "盟主") || (m_manager == "盟主補佐")) | |
| && (m_amo_options[AMO_PULLFLG] == true)) { | |
| var promise4 = Promise.resolve(); | |
| promise4 | |
| .then(amo_transferlist) // 編入申請リスト作成 | |
| .then(amo_mailview) // 書簡表示を変更 | |
| .then(amo_allianceinfo) // 同盟員チェック | |
| .then(amo_listuserinfo()) // ユーザページから同盟取得 | |
| .then(amo_depuserallyinfo()) // ユーザの同盟情報取得 | |
| .then(amo_transferpost()) // 編入処理を行う | |
| .catch(onRejectted); | |
| resolve(0); | |
| } else { | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("編入許可処理は行いません");} | |
| resolve(0); | |
| } | |
| }); | |
| } | |
| //----------------------------// | |
| // 編入申請リスト作成 // | |
| //----------------------------// | |
| function amo_transferlist(){ | |
| return new Promise(function (resolve, reject) { | |
| console.log('編入申請リストを作成します'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("編入申請リストを作成します");} | |
| var l_permitlist = m_amo_options[AMO_TXTAREA4].split(','); | |
| if (l_permitlist.length < 1){ | |
| resolve(0); | |
| return; | |
| } | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/message/inbox.php?d=0&o=1&a=0&u=new', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('編入申請リストを取得しました'); | |
| j$(data).find("table[class='commonTables'] tbody tr").each(function(){ | |
| if (j$(this).find("td").length>4){ | |
| // 件名に「【編入希望】」が存在する書簡が対象 | |
| if (j$(this).find("td:eq(1)").text().replace(/\s| /g, '').match(/^【編入希望】/)){ | |
| var l_name = j$(this).find("td:eq(2)").text().replace(/\s| /g, ""); | |
| var l_user_id = j$(this).find("td:eq(2) a:eq(0)").attr("href").match(/\?.*user_id=([0-9]+)/)[1]; | |
| var l_mailid = j$(this).find("td:eq(1) a:eq(0)").attr("href").match(/id=([0-9]+)/)[1]; | |
| // 編入許可リストに存在すれば編入申請リストに追加 | |
| var l_chkflag = false; | |
| Label1: | |
| for (var i=0; i<l_permitlist.length; i++){ | |
| if (l_permitlist[i] == l_name){ | |
| l_chkflag = true; // 君主名が一致 | |
| break Label1; | |
| } | |
| if (l_permitlist[i] == l_user_id){ | |
| l_chkflag=true; // 君主IDが一致 | |
| break Label1; | |
| } | |
| } | |
| if (l_chkflag){ | |
| m_transfer.push({ | |
| 'user_name': l_name, | |
| 'user_id': l_user_id, | |
| 'mail_id': l_mailid | |
| }); | |
| } | |
| } | |
| } | |
| }); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("編入申請リストを取得しました");} | |
| resolve(0); | |
| }).fail(function(jqXHR, textStatus, errorThrown) { | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("編入申請リストを取得できませんでした");} | |
| }); | |
| }); | |
| } | |
| //----------------------------// | |
| // 書簡の表示を戻す // | |
| //----------------------------// | |
| function amo_mailview(){ | |
| return new Promise(function (resolve, reject) { | |
| console.log('書簡の表示を変更します'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("書簡の表示を変更します");} | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/message/inbox.php?d=1&o=1&a=1&u=0', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('書簡の表示を変更しました'); | |
| }); | |
| resolve(0); | |
| }); | |
| } | |
| //---------------------------------// | |
| // 同盟員を取得し編入リストと比べる// | |
| //---------------------------------// | |
| function amo_allianceinfo(){ | |
| return new Promise(function (resolve, reject) { | |
| console.log('同盟員一覧を作成します'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("同盟員一覧を作成します");} | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/alliance/info.php?id=' + m_alliance_id, | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('同盟員一覧を取得しました'); | |
| j$(data).find("table[summary='ランキング'] tbody tr").each(function(){ | |
| if (j$(this).find("td:eq(0)").hasClass('rankNum')) { | |
| var l_name = j$(this).find("td:eq(1) a:eq(0)").text().replace(/\s| /g, ""); | |
| Label2: | |
| for (var i=0; i<m_transfer.length; i++){ | |
| if (m_transfer[i].user_name == l_name){ | |
| // 同盟員に編入申請者が存在する | |
| // 書簡を開封する | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/message/detail.php?id='+ m_transfer[i].mail_id +'&m=inbox&p=1', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log(l_name + ':同盟員に存在するので編入書簡を開封'); | |
| amo_savelog('編入希望者' + l_name + 'は同盟員に存在するので編入書簡を開封しました'); | |
| }); | |
| // リストから削除 | |
| m_transfer.splice(i, 1); | |
| break Label2; | |
| } | |
| } | |
| } | |
| }); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("同盟員一覧を取得しました");} | |
| resolve(0); | |
| }).fail(function(jqXHR, textStatus, errorThrown) { | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("同盟員一覧を取得できませんでした");} | |
| }); | |
| }); | |
| } | |
| //-----------------------------// | |
| // 編入リストのユーザ情報取得 // | |
| //-----------------------------// | |
| function amo_listuserinfo(){ | |
| return function() { | |
| return new Promise(function (resolve, reject) { | |
| console.log('編入リストのユーザ情報取得します'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("編入リストのユーザ情報取得します");} | |
| var l_wait = false; | |
| var l_count = 0; | |
| var l_max = m_transfer.length; | |
| var l_user_id = ""; | |
| if (l_max < 1){ | |
| resolve(0); | |
| return; | |
| } | |
| var l_timer4 = setInterval(function(){ | |
| if (l_wait){ | |
| return; | |
| } | |
| l_wait = true; | |
| l_user_id = m_transfer[l_count].user_id; | |
| // 繰り返し処理 | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + "/user/?user_id=" + l_user_id, | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('編入リストのユーザ情報取得'); | |
| var l_len = j$(data).find("table[class='commonTables profileTable'] tbody").length; | |
| var l_alliance_id = ""; | |
| var l_alliance_name = ""; | |
| if (l_len > 0) { | |
| l_alliance_id = j$(data).find("table[class='commonTables profileTable'] tbody tr:eq(4) td:eq(3) a:eq(0)").attr("href").match(/\?.*id=([0-9]+)/)[1]; | |
| l_alliance_name = j$(data).find("table[class='commonTables profileTable'] tbody tr:eq(4) td:eq(3) a:eq(0)").text().replace(/\s| /g, ""); | |
| } | |
| m_transfer[l_count].alliance_id = l_alliance_id; | |
| m_transfer[l_count].alliance_name = l_alliance_name; | |
| if (m_amo_options[AMO_DEBUGFLG]==true){ | |
| amo_savelog('編入希望者' + m_transfer[l_count].user_name + 'は同盟:' + l_alliance_name + '(id:' + l_alliance_id +')に所属しています'); | |
| } | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer4); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| }); | |
| }, 200); | |
| }); | |
| }; | |
| } | |
| //-----------------------------------// | |
| // 編入リストのユーザの同盟情報取得 // | |
| //-----------------------------------// | |
| function amo_depuserallyinfo(){ | |
| return function() { | |
| return new Promise(function (resolve, reject) { | |
| console.log('編入リストのユーザの同盟情報取得します'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("編入リストのユーザの同盟情報取得します");} | |
| var l_wait = false; | |
| var l_count = 0; | |
| var l_max = m_transfer.length; | |
| if (l_max < 1){ | |
| resolve(0); | |
| return; | |
| } | |
| var l_timer5 = setInterval(function(){ | |
| if (l_wait){ | |
| return; | |
| } | |
| l_wait = true; | |
| if (m_transfer[l_count].alliance_id != ""){ | |
| var l_alliance_id = m_transfer[l_count].alliance_id; | |
| // 繰り返し処理 | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + "/alliance/info.php?id=" + l_alliance_id, | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('編入リストのユーザの同盟情報取得'); | |
| var l_len = j$(data).find("table[class='commonTables'] tbody").length; | |
| var l_alliance_psid = ""; | |
| var l_alliance_psname = ""; | |
| var l_transfer_status = ""; | |
| if (l_len > 0) { | |
| l_alliance_psid = j$(data).find("table[class='commonTables'] tbody tr:eq(5) td:eq(1) a:eq(0)").attr("href").match(/\?.*id=([0-9]+)/)[1]; | |
| l_alliance_psname = j$(data).find("table[class='commonTables'] tbody tr:eq(5) td:eq(1) a:eq(0)").text().replace(/\s| /g, ""); | |
| } | |
| j$(data).find("table[summary='ランキング'] tbody tr").each(function(){ | |
| if (j$(this).find("td:eq(0)").hasClass('rankNum')) { | |
| var l_name = j$(this).find("td:eq(1) a:eq(0)").text().replace(/\s| /g, ""); | |
| if (l_name == m_transfer[l_count].user_name){ | |
| // 編入状態の取得 | |
| l_transfer_status = j$(this).find("td:eq(5) a:eq(0)").text().replace(/\s| /g, ""); | |
| } | |
| } | |
| }); | |
| m_transfer[l_count].alliance_psid = l_alliance_psid; | |
| m_transfer[l_count].alliance_psname = l_alliance_psname; | |
| m_transfer[l_count].transfer_status = l_transfer_status; | |
| if (m_amo_options[AMO_DEBUGFLG]==true){ | |
| amo_savelog('編入希望者' + m_transfer[l_count].user_name + 'の親同盟:' + l_alliance_psname + '(id:' + l_alliance_psid +')です'); | |
| amo_savelog('編入希望者' + m_transfer[l_count].user_name + 'の編入状態は' + l_transfer_status + 'です'); | |
| } | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer5); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| }); | |
| } else { | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer5); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| } | |
| }, 200); | |
| }); | |
| }; | |
| } | |
| //----------------------// | |
| // 編入処理 // | |
| //----------------------// | |
| function amo_transferpost(){ | |
| return function() { | |
| return new Promise(function (resolve, reject) { | |
| console.log('編入処理を行います'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("編入処理を行います");} | |
| var l_wait = false; | |
| var l_count = 0; | |
| var l_max = m_transfer.length; | |
| var l_mailchk = false; | |
| if (l_max < 1){ | |
| resolve(0); | |
| return; | |
| } | |
| var l_timer6 = setInterval(function(){ | |
| if (l_wait){ | |
| return; | |
| } | |
| l_wait = true; | |
| if (m_transfer[l_count].alliance_id != ""){ | |
| l_mailchk = false; | |
| if (m_transfer[l_count].alliance_psid != m_alliance_id){ | |
| // 親同盟が異なる | |
| console.log('親同盟が異なります'); | |
| amo_savelog('編入希望者[' + m_transfer[l_count].user_name + ']の親同盟が異なります'); | |
| l_mailchk = true; | |
| } else if (m_transfer[l_count].transfer_status != '○'){ | |
| console.log('編入希望状態が"○"ではありません'); | |
| amo_savelog('編入希望者[' + m_transfer[l_count].user_name + ']の編入希望状態が"○"ではありません'); | |
| l_mailchk = true; | |
| } | |
| if (l_mailchk){ | |
| // 書簡を開封する | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/message/detail.php?id='+ m_transfer[i].mail_id +'&m=inbox&p=1', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log(m_transfer[l_count].user_name + ':編入書簡を開封する'); | |
| amo_savelog('編入希望者[' + m_transfer[l_count].user_name + ']の編入書簡を開封しました'); | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer6); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| }); | |
| } else { | |
| // 同盟情報取得 | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/alliance/level.php', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('編入処理'); | |
| // 現在の同盟人数 | |
| var l_alliance_member = parseInt(j$(data).find("table[class='commonTables'] tbody tr:eq(0) td:eq(1)").text().replace(/\s| /g, '')); | |
| // 最大同盟人数 | |
| var l_alliance_max = parseInt(j$(data).find("table[class='commonTables'] tbody tr:eq(1) td:eq(1)").text().replace(/\s| /g, '')); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){ | |
| amo_savelog('現在の同盟員の人数[' + l_alliance_member + '] 最大同盟人数[' + l_alliance_max + ']'); | |
| } | |
| if ((!l_alliance_member) || (!l_alliance_max) || (!m_alliance_id)){ | |
| //falseか0かundefinedかnull | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer6); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| } else if (l_alliance_member >= l_alliance_max) { | |
| // 現在のメンバーで同盟員がいっぱい | |
| console.log('同盟の人数に空きがありません'); | |
| amo_savelog('現在、同盟の人数に空きがないので編入許可ができません'); | |
| clearInterval(l_timer6); | |
| resolve(0); | |
| } else { | |
| // 編入処理 | |
| var l_ssid = amo_getSessionId(); | |
| var params = new Object; | |
| params['id'] = m_alliance_id; | |
| params['mode'] = 'transfer'; | |
| params['ssid'] = l_ssid; | |
| params['member'] = l_alliance_member; | |
| params['member_max'] = l_alliance_max; | |
| params['offer_num'] = 0; | |
| params['target_user'] = m_transfer[l_count].user_id; | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + "/alliance/info.php", | |
| type: 'post', | |
| datatype: 'html', | |
| cache: false, | |
| data: params | |
| }).done(function(data) { | |
| console.log('編入処理メッセージを送信'); | |
| amo_savelog('君主[' + m_transfer[l_count].user_name + ']の編入を許可をしました'); | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer6); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| }); | |
| } | |
| }); | |
| } | |
| } else { | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer6); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| } | |
| }, 500); | |
| }); | |
| }; | |
| } | |
| //----------------------------// | |
| // 5禁解除処理 // | |
| //----------------------------// | |
| function amo_5kinoff(){ | |
| return new Promise(function (resolve, reject) { | |
| console.log('5禁解除処理を実行します'); | |
| var l_wait = false; | |
| var l_count = 1; | |
| var l_max = 1; | |
| var l_chkflag = false; | |
| var l_chkflag2 = false; | |
| if (m_amo_options[AMO_DEBUGFLG]==true){ | |
| amo_savelog("5禁解除処理を開始します"); | |
| amo_savelog("役職:" + m_manager + " 5禁解除実行フラグ:" + m_amo_options[AMO_5KINFLG]); | |
| } | |
| if (((m_manager != "盟主") && (m_manager != "盟主補佐") && (m_manager != "大督") && (m_manager != "軍師") && (m_manager != "外交官")) | |
| || (m_amo_options[AMO_5KINFLG] == false)) { | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("5禁解除処理ができません");} | |
| resolve(0); | |
| return; | |
| } | |
| var l_permitlist = m_amo_options[AMO_TXTAREA3].split(','); | |
| if (l_permitlist.length < 1){ | |
| resolve(0); | |
| return; | |
| } | |
| var l_timer3 = setInterval(function(){ | |
| if (l_wait){ | |
| return; | |
| } | |
| l_wait = true; | |
| // 送信パラメータ | |
| var params={}; | |
| params = {'p': l_count}; | |
| // 繰り返し処理 | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/alliance/manage_dep.php', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false, | |
| data: params | |
| }).done(function(data) { | |
| //ページ数 | |
| if (j$(data).find("ul[class='pager']").length > 0) { | |
| var l_pages = j$(data).find("ul[class='pager'] li"); | |
| for (var i = 0; i < l_pages.length; i++) { | |
| var l_page = parseInt(j$(l_pages[i]).text()); | |
| if ((!isNaN(l_page)) && (l_max < l_page)) { | |
| l_max = l_page; | |
| } | |
| } | |
| } | |
| l_chkflag2 = false; | |
| // 送信パラメータ | |
| var post_params = new Object; | |
| j$(data).find("table[class='tables'] tr[class='center']").each(function(){ | |
| var l_name = j$(this).find("td:eq(2)").text().replace(/\s| /g, ""); | |
| var l_id = j$(this).find("td:eq(2) a:eq(0)").attr("href").match(/\?.*user_id=([0-9]+)/)[1]; | |
| var l_alliance_id = j$(this).find("td:eq(0) a:eq(0)").attr("href").match(/\?.*id=([0-9]+)/)[1]; | |
| var l_attack = j$(this).find("td:eq(3) div:eq(0)").hasClass("status_ok"); | |
| var l_weapon = j$(this).find("td:eq(4) div:eq(0)").hasClass("status_ok"); | |
| var l_reinforcement = j$(this).find("td:eq(5) div:eq(0)").hasClass("status_ok"); | |
| var l_receive_transfer = j$(this).find("td:eq(6) div:eq(0)").hasClass("status_ok"); | |
| var l_friendly_army = j$(this).find("td:eq(7) div:eq(0)").hasClass("status_ok"); | |
| l_chkflag = false; | |
| Label0: | |
| for (var i=0; i<l_permitlist.length;i++ ){ | |
| if (l_permitlist[i] == l_name){ | |
| l_chkflag=true; // 君主名が一致 | |
| break Label0; | |
| } | |
| if (l_permitlist[i] == l_id){ | |
| l_chkflag=true; // 君主IDが一致 | |
| break Label0; | |
| } | |
| } | |
| if (l_chkflag){ | |
| post_params["permit_attack[" + l_alliance_id + "]"] = 1; | |
| post_params["permit_weapon[" + l_alliance_id + "]"] = 1; | |
| post_params["permit_reinforcement[" + l_alliance_id + "]"] = 1; | |
| post_params["permit_receive_transfer[" + l_alliance_id + "]"] = 1; | |
| post_params["permit_friendly_army[" + l_alliance_id + "]"] = 1; | |
| if (!(l_attack) || !(l_weapon) || !(l_reinforcement) || !(l_receive_transfer)){ | |
| amo_savelog("君主:" + l_permitlist[i] + "(" + l_count +"ページ目)の5禁解除の準備をします"); | |
| l_chkflag2 = true; | |
| } | |
| } else { | |
| // 許可不許可維持 | |
| if (l_attack){ | |
| post_params["permit_attack[" + l_alliance_id + "]"] = 1; | |
| } else { | |
| post_params["permit_attack[" + l_alliance_id + "]"] = 0; | |
| } | |
| if (l_weapon){ | |
| post_params["permit_weapon[" + l_alliance_id + "]"] = 1; | |
| } else { | |
| post_params["permit_weapon[" + l_alliance_id + "]"] = 0; | |
| } | |
| if (l_reinforcement){ | |
| post_params["permit_reinforcement[" + l_alliance_id + "]"] = 1; | |
| } else { | |
| post_params["permit_reinforcement[" + l_alliance_id + "]"] = 0; | |
| } | |
| if (l_receive_transfer){ | |
| post_params["permit_receive_transfer[" + l_alliance_id + "]"] = 1; | |
| } else { | |
| post_params["permit_receive_transfer[" + l_alliance_id + "]"] = 0; | |
| } | |
| if (l_friendly_army){ | |
| post_params["permit_friendly_army[" + l_alliance_id + "]"] = 1; | |
| } else { | |
| post_params["permit_friendly_army[" + l_alliance_id + "]"] = 0; | |
| } | |
| } | |
| }); | |
| if (l_chkflag2){ | |
| var l_ssid = amo_getSessionId(); | |
| post_params['ssid'] = l_ssid; | |
| post_params['p'] = l_count; | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + "/alliance/manage_dep.php", | |
| type: 'post', | |
| datatype: 'html', | |
| cache: false, | |
| data: post_params | |
| }).done(function(data) { | |
| console.log('5禁解除メッセージ送信'); | |
| amo_savelog('5禁解除を行いました'); | |
| }); | |
| } | |
| l_count++; | |
| if (l_count > l_max){ | |
| clearInterval(l_timer3); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| }); | |
| }, 200); | |
| }); | |
| } | |
| //----------------------------// | |
| // 加入脱退処理 // | |
| //----------------------------// | |
| function amo_joindrop(){ | |
| return new Promise(function (resolve, reject) { | |
| console.log('加入処理を行う'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){ | |
| amo_savelog("加入脱退処理を開始します 役職:" + m_manager); | |
| amo_savelog("加入処理実行フラグ:" + m_amo_options[AMO_JOINFLG]); | |
| amo_savelog("脱退処理実行フラグ:" + m_amo_options[AMO_DROPFLG]); | |
| } | |
| if (((m_manager == "盟主") || (m_manager == "盟主補佐")) | |
| && ((m_amo_options[AMO_JOINFLG] == true) || (m_amo_options[AMO_DROPFLG] == true))) { | |
| // 申請page取得 | |
| var promise2 = Promise.resolve(); | |
| promise2 | |
| .then(amo_joindroplist) // 加入脱退リスト作成 | |
| .then(amo_join) // 加入処理 | |
| .then(amo_droppost) // 脱退処理 | |
| .catch(onRejectted); | |
| resolve(0); | |
| } else { | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入脱退処理は行いません");} | |
| resolve(0); | |
| } | |
| }); | |
| } | |
| //----------------------------// | |
| // 加入脱退リスト作成 // | |
| //----------------------------// | |
| function amo_joindroplist(){ | |
| return new Promise(function (resolve, reject) { | |
| console.log('加入脱退リストを作成します'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入脱退希望者リストを作成します");} | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/alliance/manage.php', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('加入脱退リストを取得しました'); | |
| var l_mode = ""; | |
| var l_len = 0; | |
| var l_name = ""; | |
| var l_id = ""; | |
| var l_url = ""; | |
| j$(data).find("table[class='commonTables'] tbody").each(function(){ | |
| l_mode = ""; | |
| var l_lines = j$(this).find("tr:eq(0) th:eq(0)").text().replace(/\s| /g, ""); | |
| if (l_lines == "加入申請"){ | |
| l_mode = "join"; | |
| } else if (l_lines == "脱退申請") { | |
| l_mode = "drop"; | |
| } else { | |
| return true; // continue | |
| } | |
| if (l_mode != ""){ | |
| l_len = j$(this).find("tr").length; | |
| for (var i=1; i<l_len; i++){ | |
| l_name = j$(this).find("tr").eq(i).find("td:eq(0)").text().replace(/\s| /g, ""); | |
| l_id = j$(this).find("tr").eq(i).find("form input[type='hidden']").attr("value"); | |
| l_url = j$(this).find("tr").eq(i).find("td:eq(0) a:eq(0)").attr("href"); | |
| if (l_mode == "join"){ | |
| m_join.push({ | |
| 'alliance_name': l_name, | |
| 'alliance_action_id': l_id, | |
| 'alliance_url': l_url | |
| }); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入希望同盟:" + l_name);} | |
| } else if (l_mode == "drop"){ | |
| var l_user_id = l_url.match(/\?.*user_id=([0-9]+)/)[1]; | |
| m_drop.push({ | |
| 'user_name': l_name, | |
| 'user_id': l_user_id, | |
| 'alliance_action_id': l_id | |
| }); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("脱退希望者:" + l_name);} | |
| } | |
| } | |
| } | |
| }); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入脱退希望者リストを取得しました");} | |
| resolve(0); | |
| }).fail(function(jqXHR, textStatus, errorThrown) { | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入脱退希望者リストを取得できませんでした");} | |
| }); | |
| }); | |
| } | |
| //--------------------// | |
| // 加入処理 // | |
| //--------------------// | |
| function amo_join(){ | |
| console.log('加入処理を行います'); | |
| return new Promise(function (resolve, reject) { | |
| if (m_amo_options[AMO_DEBUGFLG]==true){ | |
| amo_savelog("加入処理を開始します"); | |
| amo_savelog("加入処理実行フラグ:" + m_amo_options[AMO_JOINFLG]); | |
| } | |
| if (((m_manager == "盟主") || (m_manager == "盟主補佐")) | |
| && (m_amo_options[AMO_JOINFLG] == true)) { | |
| // 加入処理 | |
| var promise3 = Promise.resolve(); | |
| promise3 | |
| .then(amo_joinuser()) // 加入リストの同盟の盟主名を取得 | |
| .then(amo_joinpost()) // 加入処理 | |
| .catch(onRejectted); | |
| resolve(0); | |
| } else { | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入処理は行いません");} | |
| resolve(0); | |
| } | |
| }); | |
| } | |
| //---------------------------------// | |
| // 加入リストの同盟の盟主名を取得 // | |
| //---------------------------------// | |
| function amo_joinuser(){ | |
| return function() { | |
| return new Promise(function (resolve, reject) { | |
| console.log('加入リストの同盟の盟主名を取得します'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入希望同盟の盟主名を取得します");} | |
| var l_wait = false; | |
| var l_count = 0; | |
| var l_max = m_join.length; | |
| var l_url = ""; | |
| var l_alliance_name = ""; | |
| var l_alliance_action_id = ""; | |
| var l_alliance_url = ""; | |
| if (l_max < 1){ | |
| resolve(0); | |
| return; | |
| } | |
| var l_timer1 = setInterval(function(){ | |
| if (l_wait){ | |
| return; | |
| } | |
| l_wait = true; | |
| l_alliance_name = m_join[l_count].alliance_name; | |
| l_alliance_action_id = m_join[l_count].alliance_action_id; | |
| l_alliance_url = m_join[l_count].alliance_url; | |
| l_url = PROTOCOL + '//' + location.hostname + "/alliance/" + l_alliance_url; | |
| // 繰り返し処理 | |
| j$.ajax({ | |
| url: l_url, | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('同盟ページを取得'); | |
| var l_len = 0; | |
| var l_name = ""; | |
| var l_id = ""; | |
| var l_manager = ""; | |
| j$(data).find("table[summary='ランキング'] tbody").each(function(){ | |
| l_len = j$(this).find("tr").length; | |
| for (var i=2; i<l_len; i++){ | |
| l_manager = j$(this).find("tr").eq(i).find("td:eq(5)").text().replace(/\s| /g, ""); | |
| if (l_manager=='盟主'){ | |
| l_name = j$(this).find("tr").eq(i).find("td:eq(1) a:eq(0)").text().replace(/\s| /g, ""); | |
| l_id = j$(this).find("tr").eq(i).find("td:eq(1) a:eq(0)").attr("href").match(/\?.*user_id=([0-9]+)/)[1]; | |
| m_join2.push({ | |
| 'user_name': l_name, | |
| 'user_id': l_id, | |
| 'alliance_name': l_alliance_name, | |
| 'alliance_action_id': l_alliance_action_id, | |
| }); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入希望同盟の盟主名:" + l_name + '(id:' + l_id + ')');} | |
| return false; | |
| } | |
| } | |
| }); | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer1); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| }); | |
| }, 200); | |
| }); | |
| }; | |
| } | |
| //--------------------------------// | |
| // 脱退許可のメッセージを送信 // | |
| //--------------------------------// | |
| function amo_droppost(){ | |
| return new Promise(function (resolve, reject) { | |
| console.log('脱退メッセージを送る'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("脱退処理をします");} | |
| var l_wait = false; | |
| var l_count = 0; | |
| var l_max = 0; | |
| var l_chkflag=false; | |
| l_max = m_drop.length; | |
| var l_arry = m_drop; | |
| var l_permitlist = m_amo_options[AMO_TXTAREA2].split(','); | |
| if ((l_max < 1) || (l_permitlist.length < 1)){ | |
| resolve(0); | |
| return; | |
| } | |
| var l_timer2 = setInterval(function(){ | |
| if (l_wait){ | |
| return; | |
| } | |
| l_wait = true; | |
| l_chkflag=false; | |
| // 許可リストに存在するかチェック | |
| for (var i=0; i<l_permitlist.length;i++ ){ | |
| if (l_permitlist[i]==l_arry[l_count].user_name){ | |
| l_chkflag=true; // 君主名が一致 | |
| break; | |
| } | |
| if (l_permitlist[i]==l_arry[l_count].user_id){ | |
| l_chkflag=true; // 君主IDが一致 | |
| break; | |
| } | |
| } | |
| if (l_chkflag){ | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog(l_arry[l_count].user_name + "は脱退許可リストに存在します");} | |
| // 送信データの作成 | |
| var params = new Object; | |
| params['alliance_action_id'] = l_arry[l_count].alliance_action_id; | |
| params['secession_accept'] = "許可"; | |
| // 繰り返し処理 | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + "/alliance/manage.php", | |
| type: 'post', | |
| datatype: 'html', | |
| cache: false, | |
| data: params | |
| }).done(function(data) { | |
| console.log('脱退メッセージ送信'); | |
| amo_savelog('君主[' + l_arry[l_count].user_name + ']の脱退を許可をしました'); | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer2); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| }); | |
| } else{ | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer2); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| } | |
| }, 200); | |
| }); | |
| } | |
| //-----------------------------// | |
| // 加入許可のメッセージを送信 // | |
| //-----------------------------// | |
| function amo_joinpost(){ | |
| return function() { | |
| return new Promise(function (resolve, reject) { | |
| console.log('加入メッセージを送る'); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog("加入処理をします");} | |
| var l_wait = false; | |
| var l_count = 0; | |
| var l_max = 0; | |
| var l_chkflag=false; | |
| l_max = m_join2.length; | |
| var l_arry = m_join2; | |
| var l_permitlist = m_amo_options[AMO_TXTAREA1].split(','); | |
| if ((l_max < 1) || (l_permitlist.length < 1)){ | |
| resolve(0); | |
| return; | |
| } | |
| // 同盟情報取得 | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + '/alliance/level.php', | |
| type: 'get', | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data) { | |
| console.log('同盟レベルページ取得'); | |
| // 現在の同盟人数 | |
| var l_alliance_member = parseInt(j$(data).find("table[class='commonTables'] tbody tr:eq(0) td:eq(1)").text().replace(/\s| /g, '')); | |
| // 最大同盟人数 | |
| var l_alliance_max = parseInt(j$(data).find("table[class='commonTables'] tbody tr:eq(1) td:eq(1)").text().replace(/\s| /g, '')); | |
| if (m_amo_options[AMO_DEBUGFLG]==true){ | |
| amo_savelog('現在の同盟員の人数[' + l_alliance_member + '] 最大同盟人数[' + l_alliance_max + ']'); | |
| } | |
| if ((!l_alliance_member) || (!l_alliance_max) || (!m_alliance_id)){ | |
| //falseか0かundefinedかnull | |
| } else if (l_alliance_member >= l_alliance_max) { | |
| // 現在のメンバーで同盟員がいっぱい | |
| console.log('同盟の人数に空きがありません'); | |
| amo_savelog('現在、同盟の人数に空きがないので加入許可ができません'); | |
| resolve(0); | |
| } else { | |
| // 加入処理 | |
| var l_timer2 = setInterval(function(){ | |
| if (l_wait){ | |
| return; | |
| } | |
| l_wait = true; | |
| l_chkflag=false; | |
| // 許可リストに存在するかチェック | |
| for (var i=0; i<l_permitlist.length;i++ ){ | |
| if (l_permitlist[i]==l_arry[l_count].user_name){ | |
| l_chkflag=true; // 君主名が一致 | |
| break; | |
| } | |
| if (l_permitlist[i]==l_arry[l_count].user_id){ | |
| l_chkflag=true; // 君主IDが一致 | |
| break; | |
| } | |
| } | |
| if (l_chkflag){ | |
| if (m_amo_options[AMO_DEBUGFLG]==true){amo_savelog(l_arry[l_count].user_name + "は加入許可リストに存在します");} | |
| if ((l_alliance_member + l_count + 1) > l_alliance_max) { | |
| // 現在のメンバーで同盟員がいっぱい | |
| console.log('同盟の人数に空きがありません'); | |
| amo_savelog('現在、同盟の人数に空きがないので加入許可ができません'); | |
| clearInterval(l_timer2); | |
| resolve(0); | |
| } else { | |
| // 送信データの作成 | |
| var params = new Object; | |
| params['alliance_action_id'] = l_arry[l_count].alliance_action_id; | |
| params['apply_accept'] = "許可"; | |
| // 繰り返し処理 | |
| j$.ajax({ | |
| url: PROTOCOL + '//' + location.hostname + "/alliance/manage.php", | |
| type: 'post', | |
| datatype: 'html', | |
| cache: false, | |
| data: params | |
| }).done(function(data) { | |
| console.log('加入メッセージ送信'); | |
| amo_savelog('君主[' + l_arry[l_count].user_name + ']の加入を許可をしました'); | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer2); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| }); | |
| } | |
| } else { | |
| l_count++; | |
| if ((l_count+1) > l_max){ | |
| clearInterval(l_timer2); | |
| resolve(0); | |
| } else { | |
| l_wait = false; | |
| } | |
| } | |
| }, 200); | |
| } | |
| }, 200); | |
| }); | |
| } | |
| } | |
| //----------------------------// | |
| // リロード // | |
| //----------------------------// | |
| function amo_reload(){ | |
| return function() { | |
| return new Promise(function(resolve, reject) { | |
| console.log('リロードを行います'); | |
| if (m_amo_options[AMO_RELOADFLG]){ | |
| var min = 5; | |
| if ((!isNaN(m_amo_options[AMO_TXTRELOAD])) && (1 <= m_amo_options[AMO_TXTRELOAD])) { | |
| min = m_amo_options[AMO_TXTRELOAD]; | |
| } | |
| var timer = setInterval( | |
| function () { | |
| location.reload(); | |
| clearInterval(timer); | |
| resolve(0); | |
| }, min*60*1000 | |
| ); | |
| } else { | |
| resolve(0); | |
| } | |
| }); | |
| } | |
| } | |
| //----------------------------// | |
| //ログ保存 // | |
| //----------------------------// | |
| function amo_savelog(l_logtxt){ | |
| var dt = new Date(); | |
| var l_strDate = amo_LocalString(dt); | |
| var l_log=new Array(); | |
| var l_chklog=amo_getValue(AMO_KEY + m_id + '_amo_log', ""); | |
| var lognum=50; | |
| if (l_chklog!=""){ | |
| l_log = amo_getValue(AMO_KEY + m_id + '_amo_log', []).split(AMO_DELIMIT); | |
| var l_loglen=l_log.length; | |
| if(!isNaN(AMO_LOGCOUNT)){ | |
| lognum=AMO_LOGCOUNT; | |
| } | |
| if (l_loglen > lognum){ | |
| //多いログを消す | |
| l_log.splice(lognum, l_loglen-lognum); | |
| //ログ末尾削除 | |
| l_log.pop(); | |
| } | |
| } | |
| //最初に挿入 | |
| l_log.unshift(l_strDate +" "+ l_logtxt); | |
| var l_save = l_log.join(AMO_DELIMIT); | |
| amo_setValue(AMO_KEY + m_id + '_amo_log', l_save); //ログ保存 | |
| } | |
| function amo_LocalString(date){ | |
| return [ | |
| date.getFullYear(), | |
| date.getMonth() + 1, | |
| date.getDate() | |
| ].join( '/' ) + ' ' + date.toLocaleTimeString(); | |
| } | |
| //-----------------------// | |
| // 設定画面の描画 // | |
| //-----------------------// | |
| function amo_setting(){ | |
| //css定義を追加 | |
| amo_addCss(); | |
| var l_num = j$("ul[id=statMenu]").eq(0).children("li[class='last']").length; | |
| // 設定リンクの作成 | |
| j$("ul[id=statMenu]").eq(0).children("li[class='last']").eq(l_num-1).after( | |
| "<li class='last'><a href='#' id='amo_setting' class='darkgreen'>加入脱退設定</a></li>" | |
| ).attr('class', ''); | |
| amo_drawSetWindow(); | |
| j$("#amo_setting").on("click", function(){ | |
| amo_loadSettings(); | |
| // 保存されているoption設定を設定画面に反映 | |
| for (var key in m_amo_options) { | |
| if (j$("#" + key).length > 0) { | |
| // チェックボックスの場合、チェックのオンオフを再現 | |
| if (j$("#" + key).attr('type') == 'checkbox') { | |
| j$("#" + key).prop('checked', m_amo_options[key]); | |
| } else if (j$("#" + key).attr('type') == 'text') { | |
| j$("#" + key).val(m_amo_options[key]); | |
| } else if (j$("#" + key).is('select')) { | |
| j$("#" + key + ' option').filter(function(index){return j$(this).val() == m_amo_options[key];}).prop('selected', true); | |
| } else if (j$("#" + key).is('textarea')) { | |
| j$("#" + key).val(m_amo_options[key]); | |
| } | |
| } | |
| } | |
| //ログを反映 | |
| var l_log=new Array(); | |
| var l_chklog = amo_getValue(AMO_KEY + m_id + '_amo_log', ""); | |
| if (l_chklog!=""){ | |
| l_log = amo_getValue(AMO_KEY + m_id + '_amo_log', []).split(AMO_DELIMIT); | |
| var l_loglen=l_log.length; | |
| var l_txtlog=""; | |
| for (var i=l_loglen; i--;){ | |
| l_txtlog = l_txtlog + l_log[i] + "\n"; | |
| } | |
| j$("#amo_logarea").val(l_txtlog); | |
| } | |
| j$("#amo_setting_view").css({'display':'block'}); | |
| }); | |
| } | |
| //-----------------------// | |
| // 設定の読み込み // | |
| //-----------------------// | |
| function amo_loadSettings() { | |
| // 保存データの取得 | |
| var obj = amo_getValue(AMO_KEY + m_id + '_amo_options', null); | |
| var options; | |
| if (obj == null) { | |
| options = amo_getDefaultOptions(); | |
| } else { | |
| options = JSON.parse(obj); | |
| } | |
| // 保存データにデフォルト設定の情報がない場合、デフォルト設定を追加 | |
| var defaults = amo_getDefaultOptions(); | |
| for (var key in defaults) { | |
| if (typeof options[key] == "undefined") { | |
| options[key] = defaults[key]; | |
| } | |
| } | |
| m_amo_options = options; | |
| } | |
| //-----------------------// | |
| // 重複メンバー削除 // | |
| //-----------------------// | |
| function amo_uniquemember(str_members) { | |
| var l_storage = {}; | |
| var l_newmembers = ""; | |
| var i, value, l_separator; | |
| var l_array = str_members.split(/(\r\n|\n|,)/); | |
| var array_len = l_array.length; | |
| for (i = 0; i < array_len; i += 2) { | |
| value = l_array[i]; | |
| l_separator = l_array[i + 1]; | |
| if (!(value in l_storage)) { | |
| l_storage[value] = true; | |
| l_newmembers += value + ((typeof l_separator === "undefined") ? "" : l_separator); | |
| } | |
| } | |
| return l_newmembers; | |
| } | |
| //---------------------------// | |
| // 設定を保存する // | |
| //---------------------------// | |
| function amo_savesettings() { | |
| var options = amo_getDefaultOptions(); | |
| var obj = new Object; | |
| var l_items = j$("#amo_setting_view input"); | |
| for (var i = 0; i < l_items.length; i++) { | |
| if (l_items.eq(i).attr('type') == 'checkbox') { | |
| obj[l_items.eq(i).attr('id')] = l_items.eq(i).prop('checked'); | |
| } else if (l_items.eq(i).attr('type') == 'text') { | |
| if (!isNaN(l_items.eq(i).val())) { | |
| var num = parseInt(l_items.eq(i).val().replace(/,/g, '')); | |
| if (!isNaN(num)) { | |
| obj[l_items.eq(i).attr('id')] = num; | |
| } else { | |
| obj[l_items.eq(i).attr('id')] = options[l_items.eq(i).attr('id')]; | |
| } | |
| } else { | |
| obj[l_items.eq(i).attr('id')] = l_items.eq(i).val().trim(); | |
| } | |
| } | |
| } | |
| var l_items2 = j$("#amo_setting_view textarea"); | |
| for (var j = 0; j < l_items2.length; j++) { | |
| if (l_items2.eq(j).hasClass('amo_txtset')) { | |
| var l_textarea = l_items2.eq(j).val(); | |
| var l_reptext = l_textarea.replace(/\r?\n/g, ','); // 改行をカンマに変換して保存 | |
| var l_arry = l_reptext.split(','); // テキストエリアの内容をカンマ区切りで配列aにする | |
| var l_arry2 = j$.grep(l_arry, function(e){return e !== "";}); // 配列から空白削除 | |
| l_textarea = l_arry2.join(','); // カンマで配列結合 | |
| obj[l_items2.eq(j).attr('id')] = l_textarea; | |
| } | |
| } | |
| //設定を保存 | |
| amo_setValue(AMO_KEY + m_id + '_amo_options', JSON.stringify(obj)); | |
| } | |
| //-------------------// | |
| // デフォルト設定値 // | |
| //-------------------// | |
| function amo_getDefaultOptions(){ | |
| var settings = new Object; | |
| settings[AMO_JOINFLG] = false; // 加入フラグ | |
| settings[AMO_DROPFLG] = false; // 脱退フラグ | |
| settings[AMO_5KINFLG] = false; // 5禁解除フラグ | |
| settings[AMO_PULLFLG] = false; // 編入フラグ | |
| settings[AMO_RELOADFLG] = true; // リロードフラグ | |
| settings[AMO_TXTRELOAD] = 5; // リロード時間 | |
| settings[AMO_TXTAREA1] = ''; // 加入リスト | |
| settings[AMO_TXTAREA2] = ''; // 脱退リスト | |
| settings[AMO_TXTAREA3] = ''; // 5禁解除リスト | |
| settings[AMO_TXTAREA4] = ''; // 編入リスト | |
| //ログ | |
| settings[AMO_LOGCOUNT] = false; // ログ詳細 | |
| settings[AMO_LOGCOUNT] = 50; // ログ件数 | |
| return settings; | |
| } | |
| //---------------------// | |
| // 設定画面作成 // | |
| //---------------------// | |
| function amo_drawSetWindow() { | |
| //表示コンテナ作成 | |
| var l_html = "<div id='amo_setting_view' class='amo_winset' style='display: none;width: 650px;'>\ | |
| <span style='color: #000000;font-size: 15px; margin: 10px; font-weight: bold;'>自動加入脱退設定画面</span>\ | |
| <span style='color: #0000ff;font-size: 12px; margin: 10px;'> ver." + VERSION +"</span>\ | |
| </div>"; | |
| var amo_facContainer = j$(l_html); | |
| j$("#statMenu").eq(0).append(amo_facContainer); | |
| amo_facContainer.draggable(); | |
| var amo_table = j$("<div id='amo_tabs'>\ | |
| <ul>\ | |
| <li><a href='#amo_maintab'>設定</a></li>\ | |
| <li><a href='#amo_logtab'>ログ</a></li>\ | |
| </ul>\ | |
| <div id='amo_maintab'></div>\ | |
| <div id='amo_logtab'></div>\ | |
| </div>"); | |
| var amo_setbutton = j$("<div style='margin: 10px;'>\ | |
| <input type='button' class='amo_btn_def' id='amo_saveSetWindow' value='設定を保存' >\ | |
| <input type='button' class='amo_btn_def' id='amo_closeSetWindow' value='閉じる' >\ | |
| </div>"); | |
| amo_facContainer.append(amo_table); | |
| amo_facContainer.append(amo_setbutton); | |
| amo_mainset(); | |
| amo_logset(); | |
| j$("#amo_tabs li").css({'padding':'0px', 'min-width':'0px'}); | |
| j$("#amo_tabs li a").css({'background':'none'}); | |
| j$('#amo_tabs').tabs(); | |
| j$("#amo_tabs").css({'background':'white'}); | |
| // 保存ボタンのクリックイベント | |
| j$("#amo_saveSetWindow").on('click',function() { | |
| amo_savesettings(); | |
| alert("保存しました"); | |
| j$("#amo_setting_view").css('display', 'none'); | |
| }); | |
| // 閉じるボタンのクリックイベント | |
| j$("#amo_closeSetWindow").on('click',function() { | |
| j$("#amo_setting_view").css('display', 'none'); | |
| }); | |
| //同盟員リスト追加ボタン | |
| j$("[id^='amo_addlistbutton']").on('click',function() { | |
| var no = this.id.slice(-1); | |
| var tmp = ""; | |
| //var tmp2 = ""; | |
| j$("table[summary='ランキング'] tbody tr").each(function(index){ | |
| if ((j$("td", this).eq(1).find('a').length)>0){ | |
| tmp += j$("td", this).eq(1).find('a').eq(0).text().replace(/\s| /g, "") + ","; | |
| //tmp2 += j$("td", this).eq(1).find('a').eq(0).attr('href').match(/\?.*user_id=([0-9]+)/)[1] + ","; | |
| } | |
| }); | |
| var l_txt = j$("#amo_txtarea" + no).val(); | |
| l_txt += "\n" + tmp; | |
| j$("#amo_txtarea" + no).val(l_txt); | |
| }); | |
| // 重複削除 | |
| j$("[id^='amo_dellistbutton']").on('click',function() { | |
| var no = this.id.slice(-1); | |
| var l_txt = j$("#amo_txtarea" + no).val(); | |
| var l_newtxt=amo_uniquemember(l_txt); | |
| j$("#amo_txtarea" + no).val(l_newtxt); | |
| }); | |
| } | |
| //------------------------// | |
| // 設定画面の描画 // | |
| //------------------------// | |
| function amo_mainset(){ | |
| var table = j$("<table style='margin:2px;border-collapse: separate;'>"); | |
| j$("#amo_maintab").append(table); | |
| j$(table).append(j$("<tr><td id=amo_td1_11 class=amo_font_bold style='margin:2px;'></td></tr>\ | |
| <tr><td id=amo_td1_21></td></tr>\ | |
| <tr><td id=amo_td1_31></td></tr>\ | |
| <tr><td id=amo_td1_41 class=amo_font_bold style='padding-top:15px;'></td></tr>\ | |
| <tr><td id=amo_td1_51></td></tr>\ | |
| <tr><td id=amo_td1_61></td></tr>\ | |
| <tr><td id=amo_td1_71 class=amo_font_bold style='padding-top:15px;'></td></tr>\ | |
| <tr><td id=amo_td1_81></td></tr>\ | |
| <tr><td id=amo_td1_91></td></tr>\ | |
| <tr><td id=amo_td1_101 class=amo_font_bold style='padding-top:15px;'></td></tr>\ | |
| <tr><td id=amo_td1_111></td></tr>\ | |
| <tr><td id=amo_td1_121></td></tr>\ | |
| <tr><td id=amo_td1_131 class=amo_font_bold style='padding-top:15px;'></td></tr>\ | |
| <tr><td id=amo_td1_141 '></td></tr>\ | |
| ")); | |
| amo_createCheckBox("#amo_td1_11", "amo_joinflg","自動加入承認を行う ※盟主・盟主補佐のみ","amo_joinflg","1", m_amo_options[AMO_JOINFLG]); | |
| amo_createSpan("#amo_td1_21", "自動加入対象リスト(君主名かユーザIDをカンマまたは改行区切りで記入)"); | |
| amo_createButton("#amo_td1_21", "amo_addlistbutton1", "現在の同盟員追加", "amo_btn_def"); | |
| amo_createButton("#amo_td1_21", "amo_dellistbutton1", "重複削除", "amo_btn_def"); | |
| amo_createTextArea("#amo_td1_31", "amo_txtarea1",'600','120', false, m_amo_options[AMO_TXTAREA1], "amo_txtset"); | |
| amo_createCheckBox("#amo_td1_41", "amo_dropflg","自動脱退承認を行う ※盟主・盟主補佐のみ","amo_dropflg","1", m_amo_options[AMO_DROPFLG]); | |
| amo_createSpan("#amo_td1_51", "自動脱退対象リスト(君主名かユーザIDをカンマまたは改行区切りで記入)"); | |
| amo_createButton("#amo_td1_51", "amo_addlistbutton2", "現在の同盟員追加", "amo_btn_def"); | |
| amo_createButton("#amo_td1_51", "amo_dellistbutton2", "重複削除", "amo_btn_def"); | |
| amo_createTextArea("#amo_td1_61", "amo_txtarea2",'600','120', false, m_amo_options[AMO_TXTAREA2], "amo_txtset"); | |
| amo_createCheckBox("#amo_td1_71", "amo_5kinflg","自動5禁解除を行う ※盟主・盟主補佐・大督・軍師・外交官のみ","amo_5kinflg","1", m_amo_options[AMO_PULLFLG]); | |
| amo_createSpan("#amo_td1_81", "自動5禁解除対象リスト(君主名かユーザIDをカンマまたは改行区切りで記入)"); | |
| amo_createButton("#amo_td1_81", "amo_addlistbutton3", "現在の同盟員追加", "amo_btn_def"); | |
| amo_createButton("#amo_td1_81", "amo_dellistbutton3", "重複削除", "amo_btn_def"); | |
| amo_createTextArea("#amo_td1_91", "amo_txtarea3",'600','120', false, m_amo_options[AMO_TXTAREA3], "amo_txtset"); | |
| amo_createCheckBox("#amo_td1_101", "amo_pullflg","自動配下編入を行う ※盟主・盟主補佐のみ","amo_pullflg","1", m_amo_options[AMO_PULLFLG]); | |
| amo_createSpan("#amo_td1_111", "自動配下編入対象リスト(君主名かユーザIDをカンマまたは改行区切りで記入)"); | |
| amo_createButton("#amo_td1_111", "amo_addlistbutton4", "現在の同盟員追加", "amo_btn_def"); | |
| amo_createButton("#amo_td1_111", "amo_dellistbutton4", "重複削除", "amo_btn_def"); | |
| amo_createTextArea("#amo_td1_121", "amo_txtarea4",'600','120', false, m_amo_options[AMO_TXTAREA4], "amo_txtset"); | |
| amo_createCheckBox("#amo_td1_131", "amo_reloadflg","","amo_reloadflg","1", m_amo_options[AMO_RELOADFLG]); | |
| amo_createTextBox("#amo_td1_131", "amo_txtreload" , "", m_amo_options[AMO_TXTRELOAD],'2','20px',false); | |
| amo_createSpan("#amo_td1_131", "分おきにリロードを行う"); | |
| } | |
| function amo_logset(){ | |
| var table = j$("<table style='margin:2px;border-collapse: separate;'>"); | |
| j$("#amo_logtab").append(table); | |
| j$(table). | |
| append(j$("<tr><td colspan='2' id=amo_td2_11 style='margin:2px;' class=amo_font_bold></td></tr>\ | |
| <tr><td class=amo_ctd0></td><td id=amo_td2_21></td></tr>\ | |
| <tr><td class=amo_ctd0></td><td id=amo_td2_31></td></tr>\ | |
| ")); | |
| amo_createSpan("#amo_td2_11", "直近のログ(手動で行ったものは残りません)"); | |
| amo_createTextBox("#amo_td2_21", "amo_logcount" , " ログ件数:",m_amo_options[AMO_LOGCOUNT],'4','40px',false); | |
| amo_createCheckBox("#amo_td2_21", "amo_debugflg" , "詳細出力","amo_debugflg","1",m_amo_options[AMO_DEBUGFLG]); | |
| amo_createTextArea("#amo_td2_31", "amo_logarea",'600','600', false,"", "amo_txtnoset"); | |
| } | |
| //---------------// | |
| // css定義の追加 // | |
| //---------------// | |
| function amo_addCss() { | |
| var css =" \ | |
| div[id^='amo'] .ui-widget-header {background:#ffb83f;} \ | |
| div[id^='amo'] {text-align: left;} \ | |
| .amo_font_bold {font-size:12px; \ | |
| color:#000000; \ | |
| font-weight:bold;} \ | |
| .amo_btn_def {background-color: #F0F0F0; \ | |
| border-width: 1px; \ | |
| box-sizing: border-box; \ | |
| font-family: sans-serif; \ | |
| font-size: 10pt; \ | |
| overflow: hidden; \ | |
| padding: 1px 5px; \ | |
| text-align: center; \ | |
| zoom: 1;} \ | |
| div.amo_winset { \ | |
| -moz-border-radius:3px; \ | |
| border-radius: 3px; \ | |
| -webkit-border-radius: 3px; \ | |
| margin-bottom:6px; \ | |
| border: 2px solid #009; \ | |
| position: absolute; \ | |
| z-index:9999; \ | |
| background-color: white; \ | |
| }\ | |
| "; | |
| amo_addGlobalStyle(css); | |
| } | |
| function amo_createTextBox(i_container, i_id, i_text, i_value, i_len, i_size, i_input){ | |
| var l_lbl = j$("<label>").text(i_text); | |
| var l_txBox = j$("<input>",{ | |
| type: 'text', | |
| id: i_id, | |
| value: i_value, | |
| maxlength: i_len, | |
| width: i_size, | |
| readonly: i_input | |
| }); | |
| j$(i_container).append(l_lbl); | |
| j$(i_container).append(l_txBox); | |
| } | |
| function amo_createTextArea(i_container, i_id, i_width, i_height, i_input, i_value, i_class){ | |
| var l_txBox = j$("<textarea>",{ | |
| id: i_id, | |
| value: i_value, | |
| class: i_class, | |
| disabled: i_input, | |
| width: i_width, | |
| height: i_height | |
| }); | |
| j$(i_container).append(l_txBox); | |
| } | |
| function amo_createButton(i_container, i_id, i_text, i_class){ | |
| var l_btn = j$("<input>",{ | |
| type: 'button', | |
| id: i_id, | |
| class: i_class, | |
| value: i_text | |
| }); | |
| j$(i_container).append(l_btn); | |
| } | |
| function amo_createCheckBox(i_container, i_id, i_text, i_class, i_value, i_ckflag){ | |
| var l_lbl = j$("<label>").text(i_text); | |
| var l_ckBox = j$("<input>",{ | |
| type: 'checkbox', | |
| id: i_id, | |
| class: i_class, | |
| value: i_value, | |
| checked: i_ckflag | |
| }); | |
| j$(i_container).append(l_ckBox); | |
| j$(i_container).append(l_lbl); | |
| } | |
| function amo_createSpan(i_container, i_text){ | |
| var l_text = j$("<span>"); | |
| l_text.html(i_text); | |
| j$(i_container).append(l_text); | |
| } | |
| function amo_addGlobalStyle(css) { | |
| var head, style; | |
| head = document.getElementsByTagName('head')[0]; | |
| if (!head) { return; } | |
| style = document.createElement('style'); | |
| style.type = 'text/css'; | |
| style.innerHTML = css; | |
| head.appendChild(style); | |
| } | |
| function amo_setValue(name, value) { | |
| value = (typeof value)[0] + value; | |
| localStorage.setItem(name, value); | |
| } | |
| function amo_getValue(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; | |
| } | |
| } | |
| //------------------// | |
| // セッションID取得 // | |
| //------------------// | |
| function amo_getSessionId() { | |
| return amo_getCookie('SSID'); | |
| } | |
| function amo_getCookie(name) { | |
| var nameEQ = name + "="; | |
| var ca = document.cookie.split(';'); | |
| for(var i=0;i < ca.length;i++) { | |
| var c = ca[i]; | |
| while (c.charAt(0)==' ') c = c.substring(1,c.length); | |
| if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); | |
| } | |
| return null; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment