Skip to content

Instantly share code, notes, and snippets.

@puyo-sh
Last active February 12, 2017 19:39
Show Gist options
  • Save puyo-sh/a8fa27f146322d702435 to your computer and use it in GitHub Desktop.
Save puyo-sh/a8fa27f146322d702435 to your computer and use it in GitHub Desktop.
ブラウザ三国志 レイドツール
// ==UserScript==
// @name 3gokushi-RaidTool
// @namespace https://github.com/puyo-sh/bro3
// @description ブラウザ三国志 レイドツール
// @include http://*.3gokushi.jp/*
// @exclude http://info.3gokushi.jp/*
// @version 2.5
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
// @require http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.js
// ==/UserScript==
// ver 0.1 α版
// ver 1.0 とりあえず基本機能完了
// ver 1.1 デバック用に3桁にしてたのを元の4桁に戻す
// ひとコメ投稿に残時間と武将名追加
// ver 1.2 1行の中に複数の戦闘No.が合った場合のバグ修正
// ver 1.3 ひとコメ投稿時に同盟の内外判定(1ページ目のデータを取得してIdの存在可否で判定)
// ver 1.4 張角チェッカーの追加 W全の追加
// ver 1.41 バグ修正:討伐直接リンクと基本機能の座標リンクとの干渉調整
// ver 1.5 チェッカーを張角→董卓へ
// ver 1.6 投稿にて残時間を変換前に処理した場合の対応
// ver 1.7 発見状況チェッカーの追加(自動起動)
// memo:チェックの為のリクエストが増えるため、不要な場合は「DiscoveryChecker(playerName);」をコメントアウトする
// ver 1.8 コメントエリアを広げる 不要な場合は「commentAreaAdjust();」をコメントアウトする
// 不要な場合は「AllianceChecker();」をコメントアウトする
// ver 1.9a ひとコメ投稿機能の同盟内外判定を手動化(サーバーレスポンスの影響が高い為)
// 元の処理はコメントアウト:サーバーが軽くなれば元に戻す
// ver 2.0 ひとコメの新仕様におそらく対応
// コメントエリアを広げる機能を削除(公式が実装した為,ひとコメの新仕様によって動作がおかしくなっていた為)
// レイドリンク作成の調整
// ロマサガコラボレイドに合わせて調整
// ver 2.1 Firefoxではdocument.readyのタイミングでひとコメの処理が完了しないようなので
// setTimeoutで発動タイミングを調整
// var adjustRaidLink = 1000;
// ver 2.2 レイドリンク処理見直し
// ver 2.3 バグ修正(1コメに複数件の討伐Noがある場合の処理)
// ver 2.4 バレンタインレイドに合わせて調整
// ファイルデフォルトを小15→60に変更(変更したい場合はparam['show_deck_card_count']を変更する)
// ver 2.5a 戦記ウェディングにて仕様が変わったため、最低レベル調整
// 未調整機能は無効化
// ver 2.5 とりあえず全機能調整
j$ = jQuery.noConflict(true);
(function ($){
// レイドリンク生成タイミング調整
var adjustRaidLink = 2000; // 各々の環境に合わせて調整してください。回線が遅い場合は増やす。
// サーバー名の取得(localstorageのkeyに利用)
var serverName = location.hostname.split(".")[0];
// 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);
};
}
// ひとコメ投稿ボタン ---------------------------------------------------------------------------------
if(location.pathname == '/card/event_battle_attack.php' && $("#target_card").attr("value") != 0){
// 投稿ボタンの設置
$("#busho_desk_Box").css("position","relative");
$("#busho_desk_Box").append('<a id="one_post_duels" style="position:absolute;background-color:#000000;color:#00FF00;padding:3px;cursor:pointer">レイド情報投稿</a>');
// 投稿ボタンへEvent設定
$("#one_post_duels").off('click').on('click',function(){
// レイド武将の情報
var battle_type = $("#infoBox > div:first-child > p > span:first-child").text().replace(/ダメージ判定:/,"");
battle_type = battle_type.substr(0,1);
var battle_no = $("#infoBox > div > p > span").eq(3).text().replace(/戦闘No:/,"");
var battle_per = $("#busho_desk_Box .battle_Column_mid dd").eq(2).text();
var battle_time = $("#area_timer0").text();
if(battle_time.indexOf(":") === -1){
// 秒数で取得してしまった場合の対応
battle_time = second2Hms(battle_time);
}
battle_time = battle_time.substr(0,5);
var target_busho = $("#busho_desk_Box .busho_name").text();
target_busho = target_busho.replace(/\n/g,"");
target_busho = target_busho.replace(/\t/g,"");
// 同盟内のデータか
var d_battle_nos = [];
// サーバーからのレスポンスが悪すぎる為、手動判定に切り替え
if(window.confirm("同盟内の武将ですか?\n[OK] … はい\n[キャンセル] … いいえ")){
var comment_mess = "[D"+battle_type+"]"+battle_no+":"+battle_per + ":"+ battle_time + ":"+ target_busho;
postComment(comment_mess);
}else{
var comment_mess = "[W"+battle_type+"]"+battle_no+":"+battle_per + ":"+ battle_time + ":"+ target_busho;
postComment(comment_mess);
}
/*
$.ajax({
type: 'get',
url: '/card/event_battle_top.php?filter_damege=0&filter_level=-1&filter_hp=-1&scope=2',
dataType: 'html',
}).then(
function(data){
$(data).find(".npcBusho > dl:not(.bottom) dd:last-child").each(function(){
var battle_d_no = $(this).text();
d_battle_nos.push(battle_d_no);
});
if($.inArray(battle_no, d_battle_nos) != "-1"){
// 同盟内のデータ
var d_type = 'D';
}else{
// 同盟外のデータ
var d_type = 'W';
}
var comment_mess = "["+d_type+battle_type+"]"+battle_no+":"+battle_per + ":"+ battle_time + ":"+ target_busho;
postComment(comment_mess);
},function(data){
var comment_mess = "["+battle_type+"]"+battle_no+":"+battle_per + ":"+ battle_time + ":"+ target_busho;
postComment(comment_mess);
}
);
*/
function postComment(comment_mess){
// SSID
var ssid = getCookie("SSID");
var param = {};
param['ssid'] = ssid;
// 参加武将情報をセット
param['comment_str'] = comment_mess;
// 一言への投稿
$.ajax({
type: 'post',
url: '/alliance/chatif.php',
data: param,
}).then(
function(){
alert("投稿しました。");
},function(){
alert("投稿に失敗しました。");
}
);
}
// 秒数を時刻に変換
function second2Hms(t){
var hms = "";
var h = t / 3600 | 0;
var m = t % 3600 / 60 | 0;
var s = t % 60;
if(h != 0){
hms = h + ":" + padZero(m) + ":" + padZero(s);
}else if (m != 0){
hms = m + ":" + padZero(s);
}else{
hms = s;
}
return hms;
function padZero(v){
if(v < 10){
return "0" + v;
}else{
return v;
}
}
}
});
}
// 討伐戦用リンクショートカット生成 ---------------------------------------------------------------------------------
function makeRaidShortcut(param){
var tmpl_html = (function(){/*
<div id="raidShortcut">
<span>[<a href="/card/event_battle_top.php">レイドSC</a>]</span>
<a href="/card/event_battle_top.php?filter_damege=0&filter_level=-1&filter_hp=-1&scope=2">D全</a>
<a href="/card/event_battle_top.php?filter_damege=0&filter_level=-1&filter_hp=-1&scope=3">W全</a>
<a href="/card/event_battle_top.php?filter_damege=1&filter_level=-1&filter_hp=-1&scope=3">W攻</a>
<a href="/card/event_battle_top.php?filter_damege=2&filter_level=-1&filter_hp=-1&scope=3">W防</a>
<a href="/card/event_battle_top.php?filter_damege=3&filter_level=-1&filter_hp=-1&scope=3">W知</a>
<a href="/card/event_battle_top.php?filter_damege=4&filter_level=-1&filter_hp=-1&scope=3">W速</a>
</div>
<style>
<!--
#raidShortcut{
padding:3px;
font-size:11px;
top:0;
right:0;
z-index:999;
position:absolute;
background-color:#000000;
}
#raidShortcut a{
margin-right:8px;
color:#FFFFFF;
}
#raidShortcut a:last-child{
margin-right:0;
}
-->
</style>
*/}).toString().replace(/(\n)/g, '').split('*')[1];
var html = $.tmpl(tmpl_html,param) || '';
var $target = $("#whiteWrapper");
$target.css("position","relative");
$target.append(html);
}
// Run
if (location.pathname != '/item/' && location.pathname != '/item/index.php' && location.pathname != '/item/inbox.php') {
makeRaidShortcut();
}
// 討伐戦用リンク生成 -----------------------------------------------------------------------------------------------------------------
function makeRaidLink(){
var reg = /[0-9]{4,6}/g;
function setEvent($obj){
var text = $obj.html();
var entry_id = text.match(reg);
var attack_flag1 = $obj.is(":contains('攻')");
var attack_flag2 = $obj.is(":contains('防')");
var attack_flag3 = $obj.is(":contains('知')");
var attack_flag4 = $obj.is(":contains('速')");
var battle_type = '';
if(attack_flag1){
battle_type = '攻撃戦';
}else if(attack_flag2){
battle_type = '防御戦';
}else if(attack_flag3){
battle_type = '知力戦';
}else if(attack_flag4){
battle_type = '速度戦';
}
var new_html = text.replace(reg,"<a class=\"ptoubatsu\" style=\"display:inline;\" href=\"javascript:void(0)\" data-btype=\""+battle_type+"\" data-eid=\"$&\">$&</a>")
$obj.html(new_html);
$obj.off("click").on("click","a",function(){
var entry_id = $(this).attr("data-eid");
var battle_type = $(this).attr("data-btype");
if(battle_type != ''){
raidSortFunction(battle_type,entry_id);
}else{
location.href='/card/event_battle_attack.php?entry_id='+entry_id;
}
return false;
})
}
// ひとことコメント用
var commentHead = 0;
$("#commentList tr td:last-child").each(function(){
if(commentHead > 0){
setEvent($(this));
}
commentHead++;
});
if(location.pathname.indexOf('/chat/chat_view.php') != -1){
// ひとこと掲示板用
$(".bbs-hitokoto_content .hitokoto").each(function(){
setEvent($(this));
});
}
}
// Run
$(document).ready(function(){
setTimeout(function(){
makeRaidLink();
},adjustRaidLink);
});
// 武将ソートした上で討伐詳細へ -----------------------------------------------------------------------------------------------------------------
function raidSortFunction(battle_type,entry_id){
var sort_order = 3; // Lv基準をベース
switch(battle_type){
case '攻撃戦':
sort_order = 9;
break;
case '防御戦':
sort_order = 11; // 11:歩防 12:槍防 13:弓防 14:騎防
break;
case '知力戦':
sort_order = 10;
break;
case '速度戦':
sort_order = 15;
break;
default:
sort_order = 3;
break;
}
// SSID
var ssid = getCookie("SSID");
var param = {};
param['mode'] = "";
param['entry_id'] = entry_id;
param['target_card'] = 0;
param['deck_set_flg'] = "";
param['rem_attack_num'] = 3;
param['p'] = "";
param['ssid'] = ssid;
param['use_attack_up_flg'] = 0;
param['buy_attack_up_flg'] = 1;
param['use_gauge_up_flg'] = 0;
param['buy_gauge_up_flg'] = 1;
param['sort_order'] = [sort_order,0];
param['sort_order_type'] = [1,1];
param['show_deck_card_count'] = 104; // 小15:103 小60:104
param['btn_change_flg'] = 1;
param['l'] = 0;
// ソート処理
$.ajax({
type: 'post',
url: '/card/event_battle_attack.php',
data: param,
}).then(
function(){
location.href='/card/event_battle_attack.php?entry_id='+entry_id;
return false;
},
function(){
location.href='/card/event_battle_attack.php?entry_id='+entry_id;
return false;
}
);
}
//「詳細」ボタンを押した際にソートした状態で遷移するように
// 並べ替え命令を差し込む。
// Run
if(location.pathname == '/card/event_battle_top.php'){
$(".Battle_detail a").each(function(){
$(this).off("click").on("click",function(){
var battle_type = $(this).closest(".npcBusho").find("dd").eq(1).text();
var entry_id = $(this).closest(".npcBusho").find("dd").eq(2).text();
prependEvent($(this), raidSortFunction(battle_type,entry_id));
});
});
}
// 張角チェッカー -----------------------------------------------------------------------------------------------------------------
function ChokakuChecker(){
// チェッカーボタンの設置
var tmpl_html = (function(){/*
<a id="cChecker" style=""> 張姫 チェック<span>(スタート)</span> </a>
<div id="cCheckerResult"></div>
<style>
<!--
#cChecker{
position:absolute;
top:2em;
right:0;
background-color:#000000;
color:#FF0000;
cursor:pointer;
height:1.5em;
line-height:1.5em;
}
#cCheckerResult{
width:750px;
background-color:#FFFFFF;
position:absolute;
top:4em;
right:0;
}
-->
</style>
*/}).toString().replace(/(\n)/g, '').split('*')[1];
var param = {};
var html = $.tmpl(tmpl_html,param) || '';
var $target = $("#npcWrapper");
$target.css("position","relative");
$target.append(html);
// チェッカーボタンへイベント設定
$("#cChecker").off('click').on('click',function(){
$("#cChecker > span").html("(チェック開始)");
// 初期化
$("#cCheckerResult").html("");
var chokaku_nos = [];
var pageDatas = [];
var check_count = 0;
var pages = $(".pager .last").prev().find("a").attr("title") || 1;
var check_busho = '張姫';
for(var i=1;i<=pages;i++){
// チェック処理
var onePageData = getPageData(check_busho,i,chokaku_nos,pages);
pageDatas.push(onePageData);
}
$.when.apply($,pageDatas).then(
function(){
var num = chokaku_nos.length;
if(num > 0){
$("#cChecker > span").html(":"+num+"匹 イタス(`・ω・´)");
$("#cCheckerResult").html(chokaku_nos.join(" : "));
}else{
$("#cChecker > span").html(":イナイス(´・ω・`)");
}
}
);
function getPageData(check_busho,page,chokaku_nos,pages){
var d = new $.Deferred;
var page = page || 1;
$.ajax({
type: 'get',
url: '/card/event_battle_top.php?p='+page+'&scope=3',
dataType: 'html',
}).then(
function(data){
$(data).find(".npcBusho > dl:not(.bottom)").each(function(){
var battle_d_busho = $(this).find("dd").eq(0).text();
var battle_d_no = $(this).find("dd").eq(2).text();
if(battle_d_busho == check_busho){
chokaku_nos.push(battle_d_no);
}
});
check_count++;
$("#cChecker > span").html("(チェック中:"+check_count+"/"+pages+")");
d.resolve(data);
},function(data){
d.reject();
}
);
return d.promise();
}
});
}
if(location.pathname == '/card/event_battle_top.php' && location.search.indexOf("scope=3") > 0){
// Run
ChokakuChecker();
}
// 発見状況チェッカー -----------------------------------------------------------------------------------------------------------------
function DiscoveryChecker(playerName){
// 発見領域の設置
var tmpl_html = (function(){/*
<li>
<div id="discoveryBox" class="clerfix"></div>
<style>
<!--
#discoveryBox{
font-size:0.8em;
padding:5px;
top:0;left:0;
background-color:#000000;
border:1px solid #FFFFFF;
color:#FFFFFF;
}
-->
</style>
</li>
*/}).toString().replace(/(\n)/g, '').split('*')[1];
var param = {};
var html = $.tmpl(tmpl_html,param) || '';
var $target = $("#sidebar > ul:first-child");
$target.css("position","relative");
$target.append(html);
// 初期化
$("#discoveryBox").html("チェック中");
var check_discoverer = playerName;
var result = {};
result.discoveryFlag = false;
$.ajax({
type: 'get',
url: '/card/event_battle_top.php?scope=4',
dataType: 'html',
}).then(
function(data){
$(data).find(".npcBusho > dl:not(.bottom)").each(function(){
var battle_d_busho = $(this).find("dd").eq(0).text();
var battle_d_no = $(this).find("dd").eq(2).text();
var discoverer = $(this).closest(".npcBusho").find("dl.bottom .discoverer").text(); // 発見者
var attack_count = $(this).closest(".npcBusho").find("dl.bottom .attack_count").text(); // 攻撃回数
if(discoverer == check_discoverer){
result.discoveryFlag = true;
result.battle_d_busho = battle_d_busho;
result.battle_d_no = battle_d_no;
}
});
// 表示反映
if(result.discoveryFlag){
$("#discoveryBox").html("<a href=\"/card/event_battle_top.php\">∀・) "+result.battle_d_busho+"ミッケ</a>");
}else{
$("#discoveryBox").html("ω-) オランガナ");
}
},function(data){
}
);
}
if(location.pathname == '/village.php' || location.pathname == '/facility/unit_status.php'){
// localstoragedata
var playerName = GM_getValue(serverName + "_playerName", "");
if(playerName == void(0) || playerName == ""){
// 君主名を取得しlocalstorageに保持する
$.ajax({
type: 'get',
url: '/user/',
dataType: 'html',
}).then(
function(data){
playerName = $.trim($(data).find("#gray02Wrapper > table > tbody > tr:nth-child(2) > td:nth-child(3)").text());
GM_setValue(serverName + "_playerName",playerName);
// Run
DiscoveryChecker(playerName);
},function(data){
}
);
}else{
// Run
DiscoveryChecker(playerName);
}
}
// 同盟チェッカー -----------------------------------------------------------------------------------------------------------------
function AllianceChecker(){
// チェッカーボタンの設置
var tmpl_html = (function(){/*
<li>
<a id="aChecker" style="">「同盟員の戦闘」を読込中</a>
<ul id="aCheckerResult"></ul>
<style>
<!--
#aChecker{
display:block;
margin:3px 0 0 0;
background-color:#000000;
color:#FFFFFF;
cursor:pointer;
height:1.5em;
line-height:1.5em;
padding: 2px 5px;
border-radius: 4px;
font-size: 11px;
}
#aCheckerResult{
background-color: #FFFFFF;
width: 290px;
padding: 5px;
opacity: 0.9;
position: absolute;
top: 30px;
right: 10px;
z-index: 99999;
border-radius: 5px;
display:none;
font-size: 11px;
}
#aCheckerResult li{
margin-bottom:3px;
}
#aCheckerResult a{
color:#000000;
}
-->
</style>
</li>
*/}).toString().replace(/(\n)/g, '').split('*')[1];
var param = {};
var html = $.tmpl(tmpl_html,param) || '';
var $target = $("#navi01 .navi01_02");
$target.after(html);
$("#aChecker").closest("li").css("position","relative");
// チェッカーボタンへイベント設定
// 初期化
$("#aCheckerResult").html("");
var pageDatas = [];
var npcDatas = [];
var check_count = 0;
$.ajax({
type: 'get',
url: '/card/event_battle_top.php?scope=2',
dataType: 'html',
}).then(
function(data){
// 複数ページか
var pages = $(data).find(".pager .last").prev().find("a").attr("title") || 1;
if(pages > 1){
$(data).find(".npcBusho > dl:not(.bottom)").each(function(){
var one_data = getOneDataParam($(this));
npcDatas.push(one_data);
});
for(var i=2;i<=pages;i++){
// チェック処理
var onePageData = getPageData(i,npcDatas);
pageDatas.push(onePageData);
}
$.when.apply($,pageDatas).then(
function(){
$(npcDatas).each(function(index,value){
var new_html = "<li><a data-btype=\""+value.battle_d_btype+"\" data-eid=\""+value.battle_d_no+"\" href=\"\">"+value.battle_d_busho+"</a> "+value.battle_d_btype+":参戦人数 "+value.battle_d_join+":"+value.battle_d_hp+"万:"+value.battle_d_discover+"</li>";
$("#aCheckerResult").append(new_html);
});
$(document).off("click").on("click",'#aCheckerResult a',function(){
var entry_id = $(this).attr("data-eid");
var battle_type = $(this).attr("data-btype");
if(battle_type != ''){
raidSortFunction(battle_type,entry_id);
}else{
location.href='/card/event_battle_attack.php?entry_id='+entry_id;
}
return false;
});
$("#aChecker").html("「同盟員の戦闘」の読込完了[Click]");
$("#aChecker").off("click").on("click",function(){
$("#aCheckerResult").slideToggle();
});
}
);
}else{
// 1ページの為複数ページの処理不要
$(data).find(".npcBusho > dl:not(.bottom)").each(function(){
var one_data = getOneDataParam($(this));
npcDatas.push(one_data);
});
$(npcDatas).each(function(index,value){
var new_html = "<li><a data-btype=\""+value.battle_d_btype+"\" data-eid=\""+value.battle_d_no+"\" href=\"\">"+value.battle_d_busho+"</a> "+value.battle_d_btype+":参戦人数 "+value.battle_d_join+":"+value.battle_d_hp+"万:"+value.battle_d_discover+"</li>";
$("#aCheckerResult").append(new_html);
});
$(document).off("click").on("click",'#aCheckerResult a',function(){
var entry_id = $(this).attr("data-eid");
var battle_type = $(this).attr("data-btype");
if(battle_type != ''){
raidSortFunction(battle_type,entry_id);
}else{
location.href='/card/event_battle_attack.php?entry_id='+entry_id;
}
return false;
});
$("#aChecker").html("「同盟員の戦闘」");
$("#aChecker").off("click").on("click",function(){
$("#aCheckerResult").slideToggle();
});
}
},function(){
}
);
function getPageData(page,npcDatas){
var d = new $.Deferred;
var page = page || 1;
$.ajax({
type: 'get',
url: '/card/event_battle_top.php?p='+page+'&scope=2',
dataType: 'html',
}).then(
function(data){
$(data).find(".npcBusho > dl:not(.bottom)").each(function(){
var one_data = getOneDataParam($(this));
npcDatas.push(one_data);
});
d.resolve(data);
},function(data){
d.reject();
}
);
return d.promise();
}
function getOneDataParam($obj){
var one_data = [];
one_data['battle_d_busho'] = $obj.find("dd").eq(0).text();
var hp = $obj.find("dd").eq(6).text();
var hp_data = hp.split("/")[0].replace(/,/g,"");
one_data['battle_d_hp'] = Math.round(hp_data/10000);
one_data['battle_d_no'] = $obj.find("dd").eq(2).text();
var join_text = $obj.find("dd .join").text();
var join_data = join_text.split("/");
one_data['battle_d_join'] = join_data[0];
one_data['battle_d_btype'] = $obj.find("dd").eq(1).text();
one_data['battle_d_discover'] = $obj.closest("div").find(".discoverer").text();
return one_data;
}
}
AllianceChecker();
/* 汎用Function
-----------------------------------------------------------------------------------------------------------------*/
// Cookie情報取得Function
function getCookie(key){
var cookieString = document.cookie;
var cookieKeyArray = cookieString.split(";");
for(var i=0; i < cookieKeyArray.length; i++){
var targetCookie = cookieKeyArray[i];
targetCookie = targetCookie.replace(/^\s+|\s+$/g, "");
var valueIndex = targetCookie.indexOf("=");
if(targetCookie.substring(0, valueIndex) == key){
return unescape(targetCookie.slice(valueIndex + 1));
}
}
return "";
}
// onClickEventの前に関数を差し込む
function prependEvent(target, newEvent){
var clickHandler;
clickHandler = target[0].onclick;
target[0].onclick = null;
target.click(newEvent);
target.click(clickHandler);
}
})(j$);
@puyo-sh
Copy link
Author

puyo-sh commented Jul 10, 2015

[機能]
 ・レイドの各ショートカットリンクを作ります。
 ・ひとこめの戦闘No.を直リンクに代えます。(4桁以上の数値を戦闘No.として認識します)
 ・レイド画面で武将をセットすると、現在のレイド情報をひとこめに投稿するボタンが付きます。
 ・レイドのトップ画面(event_battle_top.php)で、NPC武将を選択すると
  対象武将の討伐タイプによって自分のデッキをソートします。
 ・ひとこめに[攻][防][知][速]のいずれかの文字列が入っている場合、直リン時に
  その文字列情報を元にデッキをソートします。(優先度は左側が高いです)
 ・レイドの全体画面で張角さんがいるかチェックできるボタンを追加 発見すると戦闘No.を出力します。

@hataboo0109
Copy link

ひとこめに投稿できません><

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