Last active
January 20, 2017 01:08
-
-
Save puyo-sh/ad10740a12b61c851674 to your computer and use it in GitHub Desktop.
ブラウザ三国志 簡易出兵ツール
This file contains 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 3gokushi-TroopTool | |
// @namespace https://github.com/puyo-sh/bro3 | |
// @description ブラウザ三国志 出兵ツール | |
// @include http://*.3gokushi.jp/* | |
// @version 1.3 | |
// @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 | |
// @grant GM_getValue | |
// @grant GM_setValue | |
// @grant GM_deleteValue | |
// ==/UserScript== | |
// ver 0.1 α版 | |
// 選択中の拠点にセットされている武将を出兵先で指定した座標にすべて出兵する | |
// ただし、攻撃の基礎値が3000以上とする | |
// ver 1.0 | |
// テキスト入力による登録を廃止。領地画面から登録/解除できるように。 | |
// ver 1.1 | |
// 援軍も可能に。攻撃と違い制限は無し。 | |
// ver 1.2 | |
// g1-t MAP対応 | |
// ver 1.3 | |
// 出兵画面仕様が変わったことで援軍できなくなっていた為、突貫修正。 | |
j$ = jQuery.noConflict(true); | |
(function ($){ | |
// 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); | |
}; | |
} | |
// サーバー名の取得(localstorageのkeyに利用) | |
var serverName = location.hostname.split(".")[0]; | |
// 出兵ボックスを生成 --------------------------------------------------------------------------------- | |
function makeTroopBox(param){ | |
var troopXY = GM_getValue(serverName + "_troopXY", ""); | |
var param = {}; | |
if(troopXY == void(0) || troopXY == ""){ | |
param.troopXY = '<span style="color:#FF0000">未設定</span>'; | |
}else{ | |
var xy_obj = troopXY.match(/([\-0-9]{1,4}),([\-0-9]{1,4})/); | |
param.troopXY = '<a href="/land.php?x='+xy_obj[1]+'&y='+xy_obj[2]+'">'+troopXY+'</a>'; | |
} | |
var troop_html = (function(param){/* | |
<li> | |
<div id="troopBox" class="clerfix"> | |
{{html troopXY}} | |
<div id="troop_run"></div> | |
<a class="troop_run" href="javascript:void(0)" data-code="302">討伐</a> | |
<a class="troop_run" href="javascript:void(0)" data-code="301">援軍</a> | |
</div> | |
<style> | |
<!-- | |
#troopBox{ | |
font-size:0.8em; | |
padding:5px; | |
top:0;left:0; | |
background-color:#000000; | |
border:1px solid #FFFFFF; | |
} | |
#troop_xy{ | |
width: 90%; | |
} | |
#troop_run{ | |
padding:2px 5px 0 5px; | |
margin-bottom:5px; | |
color:#FFFFFF; | |
} | |
.troop_run{ | |
padding:2px 5px 0 5px; | |
color:#000000; | |
text-decoration:none; | |
pointer:curor; | |
background-color:#FFFFFF; | |
} | |
--> | |
</style> | |
</li> | |
*/}).toString().replace(/(\n)/g, '').split('*')[1]; | |
var html = $.tmpl(troop_html,param) || ''; | |
var $target = $("#sidebar > ul:first-child"); | |
$target.css("position","relative"); | |
$target.append(html); | |
// 出兵ボタンEvent | |
$(".troop_run").off("click").on("click",function(){ | |
var troopXY = GM_getValue(serverName + "_troopXY"); | |
var troopCode = $(this).attr("data-code"); | |
if(troopXY == void(0) || troopXY == ""){ | |
alert("出兵先が未設定です"); | |
return false; | |
} | |
$("#troop_run").html('出兵開始'); | |
var card_nos = []; | |
var troopDatas = []; | |
// 設定中のXY座標を取得する | |
var check_xy = troopXY.match(/([\-0-9]{1,4}),([\-0-9]{1,4})/); | |
if(!$.isArray(check_xy)){ | |
$("#troop_run").html('出兵'); | |
alert("出兵先座標の値が不正です"); | |
return false; | |
} | |
var troop_x = parseInt(check_xy[1]); | |
var troop_y = parseInt(check_xy[2]); | |
if(!(troop_x >= -800 && troop_x <= 800 && troop_y >= -800 && troop_y <= 800)){ | |
$("#troop_run").html('出兵'); | |
alert("出兵先座標の値が不正です"); | |
return false; | |
} | |
// 出兵画面の情報を取得する | |
var onePageData = getTroopPageData(troop_x,troop_y,card_nos,troopCode); | |
onePageData.then( | |
function(){ | |
// 出兵実行 | |
if(card_nos.length > 0){ | |
$(card_nos).each(function(index,value){ | |
var unit_assign_card_id = value; | |
var oneTroopData = troopRun(unit_assign_card_id,troop_x,troop_y,troopCode); | |
troopDatas.push(oneTroopData); | |
}); | |
$.when.apply($,troopDatas).then( | |
function(){ | |
location.href="/facility/unit_status.php"; | |
} | |
); | |
}else{ | |
$("#troop_run").html('出兵'); | |
alert("出兵可能な武将が存在しません"); | |
return false; | |
} | |
},function(){ | |
} | |
); | |
}); | |
// 出兵画面のデータを取得する | |
function getTroopPageData(x,y,card_nos,troopCode){ | |
var d = new $.Deferred; | |
$.ajax({ | |
type: 'get', | |
url: '/facility/castle_send_troop.php?x='+x+'&y='+y, | |
dataType: 'html', | |
}).then( | |
function(data){ | |
// $(data).find(".bushoList > table").each(function(){ | |
$(data).find(".bushoList > table:not(:first)").each(function(){ | |
var busho_data = $(this).find("tr").eq(1).find("td").eq(1).html(); | |
var reg_busho_data = busho_data.match(/[-]?[0-9]+(\.[0-9]+)?/g); | |
// [2]:カードID [3]:討伐ゲージ | |
var busho_status = $(this).find("tr").eq(1).find("td").eq(2).html(); | |
var reg_busho_status = busho_status.match(/[-]?[0-9]+(\.[0-9]+)?/g); | |
// [0]:LV [1]:HP [2]:攻撃 [4]:速度 | |
if(troopCode == 302){ | |
// 出兵条件(攻撃3000以上とする) | |
if(parseInt(reg_busho_status[2]) >= 3000){ | |
if($.inArray(reg_busho_status[2], card_nos) == '-1'){ | |
card_nos.push(parseInt(reg_busho_data[2])); | |
} | |
} | |
}else{ | |
card_nos.push(parseInt(reg_busho_data[2])); | |
} | |
}); | |
d.resolve(data); | |
},function(data){ | |
d.reject(); | |
} | |
); | |
return d.promise(); | |
} | |
// 出兵処理 | |
function troopRun(unit_assign_card_id,x,y,code){ | |
var d = new $.Deferred; | |
var params = {}; | |
params["village_x_value"] = x; | |
params["village_y_value"] = y; | |
params["village_name"] = ""; | |
params["unit_assign_card_id"] = unit_assign_card_id; | |
params["radio_move_type"] = code; // 301:援軍 302:賊討伐 303:強襲 | |
params["radio_reserve_type"] = 0; | |
params["card_id"] = 204; | |
params["btn_send"] = "出兵"; | |
$.ajax({ | |
type: 'post', | |
url: '/facility/castle_send_troop.php', | |
data: params, | |
}).then( | |
function(data){ | |
d.resolve(data); | |
},function(data){ | |
d.reject(); | |
} | |
); | |
return d.promise(); | |
} | |
} | |
// 領地登録ボックスを生成 --------------------------------------------------------------------------------- | |
function makeLandSaveBox(param){ | |
var tmpCurrentLand = $("#basepoint .xy").text(); | |
var regCurrentLand = tmpCurrentLand.match(/(\(.*\))/g); | |
var currentLand = regCurrentLand[0]; | |
var troopXY = GM_getValue(serverName + "_troopXY"); | |
var param = {}; | |
if(troopXY == void(0)){ | |
param.xy = '未設定'; | |
}else{ | |
param.xy = troopXY; | |
} | |
var troop_html = (function(param){/* | |
<div id="landDataBox"> | |
出兵ツール 領地:<a class="save">[登録]</a> <a class="del">[解除]</a><br /> | |
現在の設定値:<span class="troop_land_xy">${xy}</span> | |
</div> | |
<style> | |
<!-- | |
#landDataBox{ | |
width:200px; | |
padding:5px; | |
background-color:#FFFFFF; | |
border:1px solid #000000; | |
color:#333333; | |
} | |
#landDataBox a{ | |
color:#0000DD; | |
cursor:pointer; | |
} | |
#landDataBox span{ | |
color:#DD0000; | |
} | |
--> | |
</style> | |
*/}).toString().replace(/(\n)/g, '').split('*')[1]; | |
var html = $.tmpl(troop_html,param) || ''; | |
$("#tMenu_btnif").append(html); | |
// 登録無し 解除ボタンを非表示にする | |
if(troopXY == void(0)){ | |
$("#landDataBox a.del").hide(); | |
} | |
// 登録ボタンEvent | |
$("#landDataBox a.save").off("click").on("click",function(){ | |
// localstorageにデータを保存 | |
GM_setValue(serverName + "_troopXY",currentLand); | |
$("#landDataBox a.del").show(); | |
$("#landDataBox .troop_land_xy").html(currentLand); | |
$("#troopBox").closest("li").remove(); | |
makeTroopBox(); | |
alert("「"+currentLand+"」を出兵先として登録しました"); | |
}); | |
// 解除ボタンEvent | |
$("#landDataBox a.del").off("click").on("click",function(){ | |
// localstorageにデータを削除 | |
GM_deleteValue(serverName + "_troopXY"); | |
$("#landDataBox .troop_land_xy").html("未設定"); | |
$("#landDataBox a.del").hide(); | |
$("#troopBox").closest("li").remove(); | |
makeTroopBox(); | |
alert("出兵先を解除しました"); | |
}); | |
} | |
// Run | |
makeTroopBox(); | |
if (location.pathname == '/land.php') { | |
makeLandSaveBox(); | |
} | |
})(j$); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment