2010年06月15日

ブラウザ三国志 Ajax施設建設(Ajax+jQueryサンプル)

AjaxとかjQueryの勉強がてら何となく作りました。実用になるかは微妙ですがサンプルとしてUpしときます。

ブラウザゲーム「ブラウザ三国志」用のFirefoxアドオン(Greasemonkeyスクリプト)です。都市画面での施設建設操作において、Ajaxにより裏で非同期通信させることで画面遷移をなくすというものです。

bro3_ajax_fac
平地タイルや各施設タイルを右クリックするとメニューが表示されるので、施設未建設の場合は建設する施設を選択、建設済の場合はレベルアップする回数を選択して下さい。

当ツールからの施設建設で起こる下記の動作は、画面の一部のみを差し替えるという作りからくる制限です。
・時計のカウントダウンが止まる
・ヘッダーの資源量表示が減らない

【インストール】
Firefoxブラウザ(3.6.3以上推奨)上で、かつGreasemonkeyアドオン(0.8.20100408.6以上推奨)が有効にされた状態において、下記リンクをクリックして下さい。Google Chrome には対応していません。
最新版: 0.1.8
旧版(現在は動作しない): 0.1.7 0.1.6 0.1.5

また、関連してタイマーツールについて、画面遷移がない場合でも建設完了時刻が登録されるように対応しています(Ver.1.31)。連携させたい場合は合わせてインストールして下さい(http://blog.livedoor.jp/froo/archives/51423697.html)。

【ライセンス】
GPLです。当ツールを改変して再頒布頂いて問題ありません。
その際、このBlogにその旨のコメントと再頒布サイトからリンクを頂けると喜びます。

他にもブラ三用のツールを作ってますのでよろしかったらどうぞ。
http://blog.livedoor.jp/froo/archives/51453488.html

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/froo/51568772
この記事へのコメント
削除施設があると、のこり時間にずれが発生します。

* 建設中 畑(レベル2)が09:23:15に完了します。(あと00:56:45)
* 建設準備中 畑(レベル3)が09:30:44に完了します。(あと00:11:03) キャンセル
* 弓兵舎(レベル1)を削除中です。10:18:05に完了します。(あと00:58:24)
Posted by どらごら at 2010年06月18日 09:25
ご指摘ありがとうございます。修正してUPしました。
Ver.0.1.1

カウントダウンを再設定するのが難しそうだったので、
Ajax送信後は全てのカウントダウンを止めることにしました。
再度カウントダウンを開始したい場合はページを再読み込みして下さい。
Posted by 浮浪プログラマ at 2010年06月18日 18:17
Ver.0.1.1の修正で、逆に既存の建設がなかった場合にエラーになって
くるくるアニメーションが止まらなくなっていたので再UPしました。
Ver.0.1.2
Posted by 浮浪プログラマ at 2010年06月19日 10:06
ブラウザ三国志 Ajax施設建設のみアンインストール
するにはどうしたらいいでしょうか?
少し使いにくく消したいのです
それ以外はとても重宝しております
Posted by 感謝 at 2010年06月23日 20:49
Firefoxメニューの[ツール]-[Greasemonkey]-[ユーザスクリプト管理]から
アンインストールできます。
Posted by 浮浪プログラマ at 2010年06月23日 21:24
これを応用して糧村自動畑自動耕しなんて出来ませんかね??
Posted by 通りすがり at 2010年06月29日 01:09
176行の後ろにこれ追加でmixiでも動きますた
if(getUrlParameter(target.href, "SSID")){
query = query + "&SSID=" + getUrlParameter(target.href, "SSID")};
Posted by b at 2010年06月29日 15:13
>>通りすがりさん
自動化は利用規約的に問題ありそうなので考えていません。

>>bさん
情報ありがとうございます。
Posted by 浮浪プログラマ at 2010年06月30日 02:18
mixi鯖の仕様変更(6月28日の広告追加)でエラーになっていたので対応しました。
Ver.0.1.3
Posted by 浮浪プログラマ at 2010年07月01日 21:26
いつも使わせてもらっています。

ここに書いていいことかどうかはわかりませんが
いままで内政の建設中の建物や畑は点滅してたはずなんですが
なぜか昨日から点滅しません。
なんででしょうかね?
Posted by てぽ at 2010年07月15日 14:22
それってブラウザ三国志Beyondの機能なんじゃないかなと思います。
http://www1.ocn.ne.jp/~hatt/3gkb/
Posted by 浮浪プログラマ at 2010年07月15日 21:22
>てぽ
ちゃんとどのツールがどういう動作をしているか理解して使いましょう。
作者じゃない人に疑問を投げかけるのも迷惑なはなしですので。
Posted by 通りすがり at 2010年07月16日 14:10
必要資源が表示できれば親切かもしれません
簡単に実装できるならの要望で。
Posted by b at 2010年07月16日 14:26
このツールに改善要望出すほど使ってる人がいるとは。
私も初期の資源カツカツの時期には必要資源を参照したいと感じたことありました。

でも話のネタ的に作ったものなので成長はあまり期待しないで下さいw
Posted by 浮浪プログラマ at 2010年07月17日 06:15
いやー、これは手放せないですよw
特にmixi21とか常に重いトコは画面出来るだけ変えたくないしw
生産8000以上あって兵士も作ってないのに
なぜ資源がたまらないのか不思議だったわけですが、
これ常用してると必要資源とか見ることがなくなって、
厩13とか各10万以上必要という認識もなく上げてたら
知らないうちに枯渇してたという落ちでしたw
Posted by b at 2010年07月17日 14:13
便利に使わせていただいています。
最近右クリックで施設のレベルUP等すると、
時間が動かないのですが、
自分だけでしょうか?


Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 ( .NET CLR 3.5.30729; .NET4.0C)
Posted by qt at 2010年07月19日 08:25
時計のカウントダウンが止まるのは仕様です
Posted by 浮浪プログラマ at 2010年07月19日 11:31
これ便利ですねw
地図同様ありがたく使わせてもらってます。
Posted by 三重 at 2010年07月28日 01:17
今まで以下の右クリック拡張ツールを使っていました。
http://www.dosukoi-kissa.com/blog/?p=241

Ajax施設建設では何も施設が建っていなくても建設出来るのが
便利なところだと思います。
難点はやはり時間のカウントダウンが止まってしまうところでしょうか。
Posted by Janus at 2010年08月22日 04:16
問題点?を発見したので報告します。

糧生産値の基本値が、設備の建設に必要な食糧消費量を満たしていない場合、

 食糧の生産量が足りません。
 先に食糧生産量を増やす必要があります。

というメッセージが出て、通常は建設することができません。

ところがAjax施設建設を使って右クリックで建設すると、なんと!できてしまいます。

同盟に加入しながら放置している鯖で、寄付ぐらいはしようと思いせっせと倉庫を作っていて気付きました。

以上です。
Posted by arara at 2010年08月27日 01:39
ご報告ありがとうございます。
これはブラ三本体サイトのバグを見つけたっぽいですねw
これを利用してチートとかはできなそうですけども。
Posted by 浮浪プログラマ at 2010年08月28日 07:58
0.1.4バグ報告

再現方法
・平地からの生産時
・複数の生産出来る物がある
・生産可能リストの途中に、材料不足で生産出来ないのが存在する

上記条件がそろうと、生産出来ないの以降が表示されません。
例)
・畑、伐採所、銅雀台、倉庫、防具工房、兵舎、宿舎
が作成出来るときに、石が少ない時
銅雀台が生産出来ないと、表示されるのが
・畑、伐採所
のみとなる。

Posted by ded at 2010年09月02日 20:47
バグ報告ありがとうございます
Posted by 浮浪プログラマ at 2010年09月02日 21:41
突然使えなくなりまして…

状況としてはFlashゲームで遊んでいた所突然PCが再起動。
その後右クリック建築が出来なくなったようです。

削除してインストールし直してみたのですが変わらず…
エラーコンソールに
エラー: Security Manager vetoed action

ソースファイル: file:///C:/〜略〜/bro3_ajax_fac.user.js 行: 4294966920
が2つ表示されているのですが意味不明な桁の大きさに…

何か原因が分かったりしないでしょうか?
Ajaxというのに必要な何かが壊れたんでしょうか…
Posted by お助けを>< at 2011年01月22日 13:37
Firefox更新したら使えなくなりまいた・・・
便利だったから使えないとものすごく不便になりました
Posted by わしも at 2011年01月22日 15:13
グリモン更新したら右クリで表示しなくなりました。。上の方と同じく非常に不便^^;;
Posted by 上に同じく at 2011年01月22日 17:48
Greasemonkeyのバージョンが0.9.0にUpすると動かなくなるようです。調べてみます。
Posted by 浮浪プログラマ at 2011年01月22日 19:05
いつも使わせてもらっています。
グリモン更新してからだと思いますが、地図ツールの中域、広域も開かなくなりました。
Posted by 名も無き君主 at 2011年01月22日 19:34
地図ツールについては私の環境ではエラーは発生していません。
Posted by 浮浪プログラマ at 2011年01月22日 20:31
対応は難しそうなので一旦公開停止としました。
Posted by 浮浪プログラマ at 2011年01月22日 21:25
Ver.0.1.6 を公開しました。
・Greasemonkey 0.9.0 に対応
Posted by 浮浪プログラマ at 2011年01月23日 00:17
素早い対応有難うございます。
地図ツールは最新のをインストールすれば解決しました。
Posted by 名も無き君主 at 2011年01月23日 00:35
9/2に報告されているバグですが
ソース追ってみたら対策がわかったので報告します
Ver.0.1.6
214行あたりの
break;
を削除

216行あたりの
// 施設名を取得
facilityName = $("#workTable" + i +
" tbody:eq(0) tr:eq(1) td:eq(1) font").text();

// メニューに施設レベルアップコマンドを追加
appendLvupItem(i * 10, "建設" + facilityName, query, 1);


205行
query = lvupLink.href.replace(/^.*\?/, "");
の直後に移動
つまり204行
if (lvupLink) {
のルーチンに入れてしまう
Posted by b at 2011年03月03日 06:28
お、ありがとうございます。
バグ報告あったのすっかり忘れてました^^;

ご提案の方法でもいけそうですが、
元々の意図からするとbreak→continueで行こうかと思います。
Posted by 浮浪プログラマ at 2011年03月03日 08:49
Ver.0.1.7 を公開しました。
・生産可能リストのバグ(2010年09月02日 20:47報告)を修正
Posted by 浮浪プログラマ at 2011年03月03日 21:25
資源消費なしで建設できるんですか??
Posted by こき at 2011年03月16日 15:44
できません。
画面をリロードしてみてください。更新されて減っているのが分かります。
Posted by 浮浪プログラマ at 2011年03月16日 22:26
はじめまして。浮浪プログラマさんのスクリプトを愛用しています。
建設の他に、施設の削除もできたらいいなと思ったんですが、ご検討いただけたらお願いいたします。
いつもありがとうございます^^
Posted by LH at 2011年03月30日 19:26
ご提案ありがとうございます。

以前検討したことがあったのですが、
施設の削除は建設と画面遷移が違うので、既存の実装が流用できない難点があり、
しかも私は施設の削除をほとんどしないのでコストパフォーマンスが・・・ってことで見送った経緯があります。
Posted by 浮浪プログラマ at 2011年03月30日 22:26
なるほど。ちょっと難しいのですね^^;
ご検討ありがとうございました^^
Posted by LH at 2011年03月31日 11:19
http://www.dosukoi-kissa.com/blog/?p=241
このスクリプトなんですが、右クリックメニューの制御を浮浪プログラマさんのような部分的にだけ発動させたいのですがよくわかりません。
まともにコピペできないので困っています;;
お暇があったら教えていただけると大変ありがたいです(*・ω・)*_ _))ペコリン
Posted by プロト at 2011年06月22日 18:54
コピペしたいときだけGreasemonkeyを無効にするって対応はどうでしょう?
サルの顔をクリックするだけでOn/Offできます。
切り替え後にページ更新が必要ですが、たまにやるだけなら。
Posted by 浮浪プログラマ at 2011年06月23日 06:57
あるいは、コピペだけなら、範囲選択したあとに、
右クリックじゃなくてショートカットキー(Ctrl+C、Ctrl+V)を使うという手も。
Posted by 浮浪プログラマ at 2011年06月23日 07:02
4/23-25改変への対応です
地図ツールとbeyondはgnavi参照してるのをgNavに変更するだけかな(?)
セット先拠点が動作しないらしい件は
拠点1コしかないので確認出来てない

ajax建設はそう簡単にはいかず、
施設リストのページにある建設リストのhrefが
スクリプトになったためそのままでは使えません

とりあえず使えるようになったので報告
これをどこかに追加
function ssid() {
var s = $("#comment_str").attr("onKeyPress");
s=s.replace(/^.+value ,'/,"").replace("');}","");
return "&ssid=" + s;
}

以下書き換え
#function createLvupListの中(ssid追加)
query = "x=" + getUrlParameter(target.href, "x") +
"&y=" + getUrlParameter(target.href, "y") + ssid();

#function loadFacilitiesの中(引数にtarget.href追加)
// Ajaxで施設画面をロード
$("#facilityWork")
.load(target.href + " #gray02Wrapper", createFacilityList(target.href));

#function createFacilityListの中(引数受取り)
function createFacilityList(th) {
//xyだけ残して捨てる
th = th.replace(/^.*\?/, "").replace(/#.+/, "");
中略
lvupLink = $("#workTable" + i + " .lvupFacility .main a").get(0);
↓//画像アドレスを施設idとして使う
lvupLink = $("#workTable" + i + " .imgs img").get(0);
中略
//orig query = lvupLink.href.replace(/^.*\?/, "");
↓//idだけ残して捨てる
query = th + ssid() + "&id=" + lvupLink.src.replace(/^.*facility_/, "").replace(".png", "");

これだけ
だったかな多分
Posted by b at 2012年04月23日 23:11
↑資源不足で建設不可なものも出てたのでcreateFacilityList一部変更
#function createFacilityListの中(引数受取り)
//xyだけ残して捨てる
中略
tables[i].id = "workTable" + i;//そのまま
//orig lvupLink = $("#workTable" + i + " .lvupFacility .main a").get(0);
//↑に代えて↓追加
if(!($("#workTable" + i + " .lvupFacility .main").get(0).innerHTML.match("資源が足りません"))){
//↓画像アドレスを施設idとして使う
lvupLink = $("#workTable" + i + " .imgs img").get(0);
if (lvupLink) {//そのまま
//orig query = lvupLink.href.replace(/^.*\?/, "");
//↓idだけ残して捨てる
query = th + ssid() + "&id=" + lvupLink.src.replace(/^.*facility_/, "").replace(".png", "");
Posted by b at 2012年04月24日 01:06
ありゃー、本鯖の仕様が大分変わったみたいですね。
ご報告ありがとうございます。
Posted by 浮浪プログラマ at 2012年04月24日 06:16
本鯖で4月23日(mixi鯖は4月24日?)の仕様変更により動作しなくなったため、公開を停止しました。
Posted by 浮浪プログラマ at 2012年04月24日 06:30
とりあえず上記で手元では不自由なく使えてるぽいので
時間のあるときにスマートに書き直してくださいw
Posted by b at 2012年04月24日 07:31
これすごい便利だったので何とか対応してもらいたいです。
修正方法聞いてもちんぷんかんぷん・・・
お忙しいかもしれませんが時間が空いた時に是非お願いします。
Posted by トマト at 2012年04月24日 14:41
いつもお世話になっています。
Ajax施設建設、とても便利だったので動かなくなってしまって悲しいです・・・
お時間があればで結構ですので見ていただければ幸いです。よろしくお願いします
Posted by kpc at 2012年04月24日 17:54
案外使ってる人いるようなので、今日の夜にでもbさん案を見てみます。
問題ないようなら取り込んで公開再開します。
Posted by 浮浪プログラマ at 2012年04月25日 07:28
新しく追加のssidパラメータはGETで送るとよくない気もするので、
週末にゆっくり考えてからにします。
Posted by 浮浪プログラマ at 2012年04月26日 23:24
Ver.0.1.8にバージョンアップしました。
・4月23日の本鯖メンテ(mixi鯖は4月24日)に対応
Posted by 浮浪プログラマ at 2012年04月27日 22:25
これでまた快適な日々が戻ってきます・・・!
バージョンアップありがとうございました。
Posted by kpc at 2012年04月29日 15:32
都市画面リロードで時計のカウントダウンが止まるようになりました。
一応報告です
Posted by トマト at 2012年05月03日 14:29
ツールでの建設直後に時計が止まるのは初期からあった制限です。

>当ツールからの施設建設で起こる下記の動作は、画面の一部のみを差し替えるという作りからくる制限です。
>・時計のカウントダウンが止まる
>・ヘッダーの資源量表示が減らない
Posted by 浮浪プログラマ at 2012年05月07日 07:05
久々に来てみたら更新されていたので嬉しいです^^
手動よく上げたりしているので重宝してました。
mixi鯖でずっと前から使っております。

アップデートありがとうございます^^
Posted by goma at 2012年05月29日 18:08
「平地タイルや各施設タイルを右クリックするとメニューが表示されるので、施設未建設の場合は建設する施設を選択」

という仕様が出来なくなっておりました。
FOX 3.6.2.8 
グリモン 0.9.18
で使用しております
Posted by ゴマ at 2012年06月01日 21:47
あれ?なんででしょうね。
私の下記環境では問題なく動いてます。
ツール: 0.1.8 (右クリックポップアップ時に右下に表示)
Firefox: 12.0
Greasemonkey: 0.9.20

下記の6に書いてあるエラーコンソールに何かメッセージが出力されてませんか。
http://blog.livedoor.jp/froo/archives/51465404.html
Posted by 浮浪プログラマ at 2012年06月02日 06:21
あれれれれ、動いているんですねなんででしょう(^^;;

エラーコンソールをみてみましたが、
エラーのほうをクリックしても何も表示されませんでした。

平地タイルをクリックすると建設できるものが表示されないのですが、
「建設済の場合はレベルアップする回数を選択」というほうの、LvUPするほうは出来ます。

インストし直してみてもダメみたいなので・・・・
FOXが古いからというのは無いのかな・・・
Greasemonkey: 0.9.20 にアップしてみます(以前使用していた地図ツール(MMCさんのツール)がGreasemonkeyを新しいのにすると使えなくなるので古いままにしてあった(^^;;)
Posted by ゴマ at 2012年06月02日 14:51