Last active
August 6, 2018 13:54
-
-
Save hot-2130/e4d2da194ff9e7d00ff39e9db98fe421 to your computer and use it in GitHub Desktop.
ブラウザ三国志 都市画面に全兵補正値を表示(小数第1まで)
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_correct_param_view | |
| // @namespace bro3_correct_param_view | |
| // @description ブラウザ三国志 都市画面に全軍補正値を表示 byほっと | |
| // @include https://*.3gokushi.jp/village.php* | |
| // @include http://*.3gokushi.jp/village.php* | |
| // @version 1.2 | |
| // @require http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js | |
| // ==/UserScript== | |
| // version date author | |
| // 1.1 2018/08/05 作成開始 | |
| // 1.2 2018/08/06 小数第1まで表示 | |
| // to do | |
| // 都市画面に全軍(劫略令)の補正値を表示します | |
| // load jQuery | |
| jQuery.noConflict(); | |
| j$ = jQuery; | |
| //----------// | |
| // 変数定義 // | |
| //----------// | |
| // ソフトウェアバージョン | |
| var VERSION = "1.2"; | |
| 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 m_deckListAll = []; | |
| var m_village = ""; | |
| //----------------// | |
| // メインルーチン // | |
| //----------------// | |
| (function() { | |
| // 拠点名取得 | |
| m_village = j$("#basepoint span[class='basename']").eq(0).text(); | |
| var promise1 = Promise.resolve(); | |
| promise1 | |
| .then(cpv_deskload) // ファイル一覧読み込み | |
| .then(cpv_calc_param) // スキル計算 | |
| .catch(cpv_onRejectted); | |
| })(); | |
| function cpv_onRejectted(error) { | |
| console.log("error = " + error); | |
| } | |
| //-----------------------// | |
| // URL LOAD // | |
| //-----------------------// | |
| function cpv_deskload(){ | |
| return new Promise(function (resolve, reject) { | |
| m_deckListAll = []; | |
| var l_url=PROTOCOL + "//" + HOST + "/card/deck.php"; | |
| console.log(l_url); | |
| j$.ajax({ | |
| type: 'get', | |
| url: l_url, | |
| datatype: 'html', | |
| cache: false | |
| }).done(function(data){ | |
| // デッキにあるカード情報取得 | |
| j$(data).find("#cardListDeck div[class='cardColmn']").each(function(){ | |
| var l_deckList = new Object; | |
| var cdName = j$(this).find( ".cardWrapper span[class='name-for-sub']"); | |
| var setVillage = j$(this).find(".clearfix dl[class='set_status clearfix'] dd:eq(1)"); | |
| var setStatus = j$(this).find(".clearfix dl[class='set_status clearfix'] dd[class='btm_none']"); | |
| var cdGage = j$(this).find(".clearfix dl[class='set_status clearfix'] div[class='para clearfix'] span[class='gage']"); | |
| var cdHp = j$(this).find( ".cardWrapper div[class='status_hp'] span[class='value']").text().match(/\d+/g)[0]; | |
| var cdLevel = j$(this).find( ".cardWrapper div[class='level'] span").text().match(/\d+/g)[0]; | |
| var cdCost = parseFloat(j$(this).find( ".cardWrapper span[class='cost-for-sub']").text()); | |
| var cdSoltype = j$(this).find( ".cardWrapper span[class='soltype-for-sub'] img").eq(0).attr("title"); | |
| var cdSpeed = j$(this).find( ".cardWrapper ul[class='status'] li[class^='status_speed']").text().match(/\d+/g)[0]; | |
| var cdSkil = j$(this).find(".back_skill li[class!='subgeneral']"); | |
| var cdSkil1 = j$(this).find(".back_skill span[class^='skillName1']").eq(0).text(); | |
| var cdSkil1pa = j$(this).find(".back_skill span[class^='skillName1']").hasClass("skillName1 skill_name red"); | |
| var cdSkil1kai = !(j$(this).find(".back_skill div").hasClass("skill1 skill-kaifuku")); | |
| var cdSkil1id =""; | |
| if (j$.trim(cdSkil1).length > 0 ){ | |
| cdSkil1id = j$(this).find(".back_skill div[class^='skill1'] a[class='btn_detail_s']" ).attr("onclick").match(/[a-z]{2}\d{4}/g)[0]; | |
| } | |
| var cdSkil1txt=""; | |
| if (cdSkil1pa){ | |
| cdSkil1txt=j$(this).find(".back_skill div[class^='skill1']").eq(0).text(); | |
| } | |
| var cdSkil2 = j$(this).find(".back_skill span[class^='skillName2']").text(); | |
| var cdSkil2pa = j$(this).find(".back_skill span[class^='skillName2']").hasClass("skillName2 skill_name red"); | |
| var cdSkil2kai = !(j$(this).find(".back_skill div").hasClass("skill2 skill-kaifuku")); | |
| var cdSkil2id =""; | |
| if (j$.trim(cdSkil2).length > 0 ){ | |
| cdSkil2id = j$(this).find(".back_skill div[class^='skill2'] a[class='btn_detail_s']" ).attr("onclick").match(/[a-z]{2}\d{4}/g)[0]; | |
| } | |
| var cdSkil2txt=""; | |
| if (cdSkil2pa){ | |
| cdSkil2txt=j$(this).find(".back_skill div[class^='skill2']").text(); | |
| } | |
| var cdSkil3 = j$(this).find(".back_skill span[class^='skillName3']").text(); | |
| var cdSkil3pa = j$(this).find(".back_skill span[class^='skillName3']").hasClass("skillName3 skill_name red"); | |
| var cdSkil3kai = !(j$(this).find(".back_skill div").hasClass("skill3 skill-kaifuku")); | |
| var cdSkil3id =""; | |
| if (j$.trim(cdSkil3).length > 0 ){ | |
| cdSkil3id = j$(this).find(".back_skill div[class^='skill3'] a[class='btn_detail_s']" ).attr("onclick").match(/[a-z]{2}\d{4}/g)[0]; | |
| } | |
| var cdSkil3txt=""; | |
| if (cdSkil3pa){ | |
| cdSkil3txt=j$(this).find(".back_skill div[class^='skill3']").text(); | |
| } | |
| var cdSkil4 = ""; | |
| var cdSkil4kai = true; | |
| var cdSkil4id =""; | |
| var cdSkil4pa =false; | |
| if (cdSkil.length > 3){ | |
| cdSkil4 = j$(this).find(".back_skill span[class^='skillName4']").text(); | |
| cdSkil4pa = j$(this).find(".back_skill span[class^='skillName4']").hasClass("skillName4 skill_name red"); | |
| cdSkil4kai = !(j$(this).find(".back_skill div").hasClass('skill4 skill-kaifuku')); | |
| if (j$.trim(cdSkil4).length > 0 ){ | |
| cdSkil4id = j$(this).find(".back_skill div[class^='skill4'] a[class='btn_detail_s']" ).attr("onclick").match(/[a-z]{2}\d{4}/g)[0]; | |
| cdSkil4id = j$(this).find(".back_skill div[class^='skill4'] a[class='btn_detail_s']").attr("onclick").match(/[a-z]{2}\d{4}/g)[0]; | |
| } | |
| } | |
| var cdSkil4txt=""; | |
| if (cdSkil4pa){ | |
| cdSkil4txt=j$(this).find(".back_skill div[class^='skill4']").text(); | |
| } | |
| //副将スキルがある | |
| var fukCd = ""; | |
| var fukCdid=""; | |
| var fukKai = true; | |
| var fukId =""; | |
| var fukSkiltxt =""; | |
| if (j$(this).find(".back_skill li").hasClass("subgeneral")){ | |
| if (j$(this).find(".back_skill li[class='subgeneral'] span").hasClass("subgeneralSkillName4 skill_name_subgeneral red")==false){ | |
| fukCd = j$(this).find(".back_skill span[class^='subgeneralSkillName4']").text(); | |
| fukKai = !(j$(this).find(".back_skill div").hasClass('skill4 skill-kaifuku')); | |
| fukId = j$(this).find(".back_skill div[class^='skill4'] a[class='btn_detail_s']").attr("onclick").match(/[a-z]{2}\d{4}/g)[0]; | |
| fukCdid = j$(this).find(".back_skill div[class^='skill4'] a[class='btn_detail_s']").attr("onclick").match(/\d+/g)[1]; | |
| } else { | |
| fukSkiltxt=j$(this).find(".back_skill div[class^='skill4']").text(); | |
| } | |
| } | |
| var cid =""; | |
| if (j$.trim(cdSkil1).length > 0 ){ | |
| cid = j$(this).find(".back_skill div[class^='skill1'] a[class='btn_detail_s']" ).attr("onclick").match(/\d+/g)[1]; | |
| } | |
| l_deckList.name = j$.trim(cdName.text()); //カード名 | |
| l_deckList.cdid = cid; //カードID | |
| l_deckList.setvil = j$.trim(setVillage.text()); //拠点 | |
| l_deckList.setsta = j$.trim(setStatus.text()); //状態 | |
| l_deckList.gage = j$.trim(cdGage.text()); //討伐ゲージ | |
| l_deckList.hp = cdHp; //HP | |
| l_deckList.cost = cdCost; //コスト | |
| l_deckList.speed = cdSpeed; //スピード | |
| l_deckList.level = cdLevel; //カードレベル | |
| l_deckList.soltype = cdSoltype; //兵種 | |
| l_deckList.cdskil1 = j$.trim(cdSkil1); //スキル1 | |
| l_deckList.cdskil1kai = cdSkil1kai; //スキル1回復(回復中:false) | |
| l_deckList.cdskil1id = cdSkil1id; //スキル1ID | |
| l_deckList.cdskil1pa = cdSkil1pa; //スキル1パッシブ | |
| l_deckList.cdskil1txt = cdSkil1txt; //スキル1内容 | |
| l_deckList.cdskil2 = j$.trim(cdSkil2); //スキル2 | |
| l_deckList.cdskil2kai = cdSkil2kai; //スキル2回復(回復中:false) | |
| l_deckList.cdskil2id = cdSkil2id; //スキル2ID | |
| l_deckList.cdskil2pa = cdSkil2pa; //スキル2パッシブ | |
| l_deckList.cdskil2txt = cdSkil2txt; //スキル2内容 | |
| l_deckList.cdskil3 = j$.trim(cdSkil3); //スキル3 | |
| l_deckList.cdskil3kai = cdSkil3kai; //スキル3回復(回復中:false) | |
| l_deckList.cdskil3id = cdSkil3id; //スキル3ID | |
| l_deckList.cdskil3pa = cdSkil3pa; //スキル3パッシブ | |
| l_deckList.cdskil3txt = cdSkil3txt; //スキル3内容 | |
| if (cdSkil.length > 3){ //スキル4 | |
| l_deckList.cdskil4 = j$.trim(cdSkil4); | |
| } else { | |
| l_deckList.cdskil4 =""; | |
| } | |
| l_deckList.cdskil4kai = cdSkil4kai; //スキル4回復(回復中:false) | |
| l_deckList.cdskil4id = cdSkil4id; //スキル4ID | |
| l_deckList.cdskil4pa = cdSkil4pa; //スキル4パッシブ | |
| l_deckList.cdskil4txt = cdSkil4txt; //スキル4内容 | |
| l_deckList.fukcd = j$.trim(fukCd); //副将 | |
| l_deckList.fukcdid = fukCdid; //副将ID | |
| l_deckList.fukkai = fukKai; //副将スキル回復(回復中:false) | |
| l_deckList.fukskilid = fukId; //副将スキルID | |
| l_deckList.fukskiltxt = fukSkiltxt; //副将スキル内容 | |
| console.log(l_deckList); | |
| m_deckListAll.push(l_deckList); | |
| }); | |
| resolve(0); | |
| }); | |
| }); | |
| } | |
| //----------------// | |
| // スキル計算 // | |
| //----------------// | |
| function cpv_calc_param(){ | |
| return new Promise(function (resolve, reject) { | |
| var l_summary = new Array(); | |
| l_summary[0] = 0.0; // 攻撃 | |
| l_summary[1] = 0.0; // 防御 | |
| l_summary[2] = 0.0; // 速度 | |
| var l_summary2 = new Array(); | |
| l_summary2[0] = 0.0; // 攻撃 | |
| l_summary2[1] = 0.0; // 防御 | |
| l_summary2[2] = 0.0; // 速度 | |
| if (m_deckListAll.length != 0) { | |
| for(var d= 0; d < m_deckListAll.length; d++){ | |
| if (m_village==m_deckListAll[d].setvil){ | |
| var l_skilnamearry = []; | |
| var l_skilarry = []; | |
| if (m_deckListAll[d].cdskil1txt!=""){l_skilnamearry.push(m_deckListAll[d].cdskil1);l_skilarry.push(m_deckListAll[d].cdskil1txt);} //スキル1内容 | |
| if (m_deckListAll[d].cdskil2txt!=""){l_skilnamearry.push(m_deckListAll[d].cdskil2);l_skilarry.push(m_deckListAll[d].cdskil2txt);} //スキル2内容 | |
| if (m_deckListAll[d].cdskil3txt!=""){l_skilnamearry.push(m_deckListAll[d].cdskil3);l_skilarry.push(m_deckListAll[d].cdskil3txt);} //スキル3内容 | |
| if (m_deckListAll[d].cdskil4txt!=""){l_skilnamearry.push(m_deckListAll[d].cdskil4);l_skilarry.push(m_deckListAll[d].cdskil4txt);} //スキル4内容 | |
| if (m_deckListAll[d].fukskiltxt!=""){l_skilnamearry.push(m_deckListAll[d].fukcd);l_skilarry.push(m_deckListAll[d].fukskiltxt);} //副将スキル内容 | |
| // デッキにセットされている全兵スキルチェック | |
| for (var i = 0; i < l_skilarry.length; i++) { | |
| var l_skill_text = l_skilarry[i]; | |
| // パッシブ計算 | |
| if (l_skill_text.indexOf("自動で発動") > 0) { | |
| // 効果計算 | |
| var l_effects = cpv_calc_skilltext_correct_effect(l_skill_text); | |
| for (var j = 0; j < 3; j++) { | |
| l_summary[j] += l_effects[j]; | |
| } | |
| } | |
| } | |
| //劫略令 | |
| for (var i = 0; i < l_skilnamearry.length; i++) { | |
| var l_skill_name = l_skilnamearry[i]; | |
| var l_skill_text = l_skilarry[i]; | |
| if (l_skill_name.indexOf("劫略令") > 0) { | |
| // 効果計算 | |
| var l_effects2 = cpv_calc_skilltext_correct_effect_desk(l_skill_text); | |
| for (var j = 0; j < 3; j++) { | |
| l_summary2[j] += l_effects2[j]; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| // 画面に反映 | |
| for (var k = 0; k < 3; k++) { | |
| if (l_summary[k]!=0){ | |
| l_summary[k] = parseFloat(l_summary[k]).toFixed(1); | |
| } | |
| if (l_summary2[k]!=0){ | |
| l_summary2[k] = parseFloat(l_summary2[k]).toFixed(1); | |
| } | |
| } | |
| var l_txt1 = "全兵:攻撃" + l_summary[0] + "%, 速度" + l_summary[2] + "%, 防御" + l_summary[1] + "%"; | |
| var l_txt2 = "劫略令:攻撃" + l_summary2[0] + "%, 速度" + l_summary2[1] + "%, 資源" + l_summary2[2] + "%"; | |
| var l_num = j$("#basepoint div[class=base-skill]").eq(0).children("span").length; | |
| // 設定リンクの作成 | |
| j$("#basepoint div[class=base-skill]").eq(0).children("span").eq(l_num-1).after( | |
| "<div><span>" + l_txt1 + "<br>" + l_txt2 + "</span></div>" | |
| ); | |
| resolve(0); | |
| }); | |
| } | |
| // スキル文から効果を計算 | |
| function cpv_calc_skilltext_correct_effect(i_skill_text) { | |
| var l_effects = new Array(); | |
| l_effects[0] = 0.0; // 攻撃 | |
| l_effects[1] = 0.0; // 防御 | |
| l_effects[2] = 0.0; // 速度 | |
| // 全兵スキル以外は無視 | |
| var match = i_skill_text.match(/セットした拠点[から出兵する|の]*全[ての]*(兵士)/); | |
| if (match == null) { | |
| return l_effects; | |
| } | |
| // 効果判定(攻) | |
| match = i_skill_text.match(/攻撃力[がを]*([0-9.]*)%/); | |
| if (match != null) { | |
| l_effects[0] += parseFloat(match[1]); | |
| } | |
| // 効果判定(防) | |
| match = i_skill_text.match(/防御[力全てが]*([0-9.]*)%/); | |
| if (match != null) { | |
| l_effects[1] += parseFloat(match[1]); | |
| } | |
| // 効果判定(移) | |
| match = i_skill_text.match(/移[動]*速[度が]*([0-9.]*)%/); | |
| if (match != null) { | |
| l_effects[2] += parseFloat(match[1]); | |
| } | |
| return l_effects; | |
| } | |
| // スキル文から効果を計算 | |
| function cpv_calc_skilltext_correct_effect_desk(i_skill_text) { | |
| var l_effects = new Array(); | |
| l_effects[0] = 0.0; // 攻撃 | |
| l_effects[1] = 0.0; // 速度 | |
| l_effects[2] = 0.0; // 資源 | |
| var match=[]; | |
| // 効果判定(攻) | |
| match = i_skill_text.match(/攻撃力[がを]*([0-9.]*)%/); | |
| if (match != null) { | |
| l_effects[0] += parseFloat(match[1]); | |
| } | |
| // 効果判定(移) | |
| match = i_skill_text.match(/移[動]*速[度が]*([0-9.]*)%/); | |
| if (match != null) { | |
| l_effects[1] += parseFloat(match[1]); | |
| } | |
| // 効果判定(資源) | |
| match = i_skill_text.match(/持ち帰る資源*([0-9.]*)%/); | |
| if (match != null) { | |
| l_effects[2] += parseFloat(match[1]); | |
| } | |
| return l_effects; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment