2006年10月20日

MAP認識機能のプラグイン化5

要望のあったMAPライブラリのプラグイン化。
GetActorsから射線の通っていない敵をフィルタリングして、射線の通っていない敵を追わないようにします。 ホムンクルス用ライブラリ配布所のMAPライブラリを使いたかったのですが、 正常に動作しなかったため工体AIのコードを流用しました。 即興のため以下の問題点があります。

  • 自分で勝手に考えたいいかげんなアルゴリズムのため、ROクライアントの射線判定(ブレゼンハムアルゴリズム)と微妙に判定が異なる
  • ROMapSelectで指定できるのがダンジョンマップのみで、フィールドマップは指定できない(current_mapcode.luaを手作業で書き換える必要がある)
  • MAPファイルの形式が古いものである(rev12の記事の修正をファイル単位で行う必要があります)
MapFilter

使用方法

  1. 工体AIのMAPフォルダをUSER_AIフォルダの下に置き、フォルダ名をMAP_OLDに変更します
  2. ROMapSelect.htaおよびromapselectフォルダをUSER_AIに移動します
  3. MapFilterプラグインを追加後、ROMapSelect.hta をダブルクリックして起動し、マップを選択します
USER_AI
 ├ MAP_OLD
 ├ ROMapSelect.hta
 ├ romapselect
 │
 ├ roaiplus.js
 └ ...

まだ動きませんが、いちおうホムンクルス用ライブラリ配布所のMAPライブラリ対応のプラグインも貼っておきます。

BresenhamFilter

こちらはMAPライブラリをダウンロードしてMAPフォルダをUSER_AIフォルダの下に置いてください。



2006年10月13日

ROAIPlus rev462

ROAIPlus rev46をダウンロード

変更点

  • MscomDlg.CommonDialogコンポーネントがない場合は代替手段を使う
  • ステータスモニタ(HP、SPゲージ、状態表示)の追加
ROAIPlus rev46 ROAIPlus rev46 Status Monitor

MscomDlg.CommonDialog についてはライセンスの問題?により インストールしても使用できない場合があるようなので、 MscomDlg.CommonDialog がない場合は別の方法を使うようにしました。

起動時に「オブジェクトがありません」と出る不具合も対処できているはず。



2006年10月05日

ROAIPlus rev38について3

「Comdlg32.ocx」というコントロールがインストールされていない場合、 「"MscomDlg.CommonDialog"のオブジェクトが作成できない」という旨のエラーが出て、 プラグインの追加、およびTraceAIの保存が出来なくなるようです。 このファイルはいわゆるVBランタイムと言われるものの一部で、 ベクターなどでVBランタイムをインストールすれば一緒についてきます。
もしくは、以下のサイトから単体のComdlg32.ocxをインストールできます。
http://www.runan.net/program/runtime/dl.cgi?file=comdlg32

また、起動時に「オブジェクトがありません」と出る件ですが、roaiplus.js 315行目以降の

	while(true){
		WScript.Sleep( 100 );
		try{	// 途中でIEが終了してもエラーを出さずに終了する
			Run();
		}catch( ex ){
			WScript.echo(ex.message);
		}
	}

この部分を

	while(true){
		WScript.Sleep( 100 );
//		try{	// 途中でIEが終了してもエラーを出さずに終了する
			Run();
//		}catch( ex ){
//			WScript.echo(ex.message);
//		}
	}

とコメントアウトすれば、エラーの行などの詳細情報が出るようになりますので、 それを報告していただけると助かります。

ところでいつの間にか工体AIの作者名がnull.ということになっているようですが・・・null.は私の名前ではありませんよ><



2006年10月03日

ROAIPlus rev384

ROAIPlus rev38をダウンロード

AIでよく使われる機能をプラグイン化し、どのAIにも適用できるようにしました。
今のところ下記のプラグインを製作済みです。

AutoExit -- 寝落ち対策
AutoPP -- 自動ポーションピッチャー
AspdAccel -- 進化後ASPDの最適化
RevolverWrap -- くるくる機能

これらプラグインはこちらの記事でコピーペーストを行ってください。
プラグインはluaファイルとして USER_AI/plugins/ フォルダの中に入れる必要があります。
例: AutoExit → plugins/AutoExit.lua

プラグインを使用するには、ROAIPlusの設定ウィンドウから使いたいプラグインを追加していってください。この作業をしてはじめてプラグインが有効になります。 設定ウィンドウはOptionsボタンもしくはF1キーで出ます。

ROAIPlus rev38 Options

ここで追加したプラグインがAIを切り替えるたびにロードされ、自動的にAIの一部として組み込まれます。

また、新しくプラグインを作るための記事も別途書いていきます。



プラグイン一覧5

AutoExit

工体AIに実装されている寝落ち対策とほぼ同様のものです。 スキル「安息」を使った寝落ち対策機能が追加されています。

AutoPP

自動ポーションピッチャーです。

AspdAccel

ASPD向上。一般的に進化後のための対策とされていますが、進化していないホムにもそれなりの効果があるようです。

RevolverWrap

ホムンクルス用ライブラリ配布所で配布されている「くるくるライブラリ」をプラグインとして実装したものです。動作にはくるくるライブラリ(revolver.lua)が必要です。 使用の際は plugins フォルダの中に lib フォルダを作り、その中にrevolver.luaを入れてください。また設定も plugins\lib\revolver.lua の中で行います。

※AutoExit、AutoPPについて
AIからケミスキルを使用することは一般的にグレーゾーンと言われています。使用は自己責任で。



機能紹介1

いまさらながら工体AIの機能をまとめてみました。

  • 動作関連
    • 横殴り防止
      • 敵の周囲数マスにプレイヤーやホムがいないか確認
      • 遠距離から魔法を撃っている場合の横殴り対策
    • アクティブ、非アクティブ切り替え
    • ケミのタゲを最優先に行動
    • 指定したパーセント以下のHPになったら敵から逃げる
      • 逃亡中でも自分にタゲが来ていない時はケミを支援する
      • 瀕死の時、敵が長射程Mobのみなら逃げ回らない(ほかにそうでないMobがいたら逃げる)
    • 遠くの敵はケミの近くまで釣ってくる&攻撃中にケミが離れたら追う
    • マップファイルを読み込んで壁の向こうなどの敵を追わない
      • マップ設定をリアルタイムで操作可能 (ROMapSelect)
    • 待機状態になると主人の北へ、待機状態が解除されると主人の南へ移動
    • 敵に攻撃する時の距離を指定可能
    • 敵を攻撃する際、誰を攻撃しているかによる優先度の設定(デフォルトはホムを最優先)
    • ホムの攻撃モーションをしっかり表示させる機能
    • 10万ルールの性質を利用して敵の生死を確認する
  • スキル関連
    • SP量を調節しつつ自動でカプリスやムーンライトを使う
      • 敵が強敵の場合は通常よりも多くスキルを使う
      • MHの場合は通常よりも多くスキルを使う
      • 敵が高DEFの場合は通常よりも多くスキルを使う
      • MDEFの高い敵にはカプリスを使わない
      • 聖や闇属性の属性レベルの高いMobにはカプリスを使わない
    • ケミのHPが減ったらリーフがヒールスキルを使う
    • 一定時間ごとにホムが緊急回避、ディフェンス、フリットムーブをかける
      • まわりに敵がいるときのみフリットムーブ、ディフェンスをかける
    • ショートカットからスキルを使った時に遠距離から発動
    • 初撃(ファーストアタック)にのみスキルを使用する
  • 移動関連
    • ケミから離れないように同じスピードで追いかける
    • Alt+右クリックでの移動後、その座標に留まる(標準AIではケミの近くに戻ってしまう)
    • ケミに追従する時、常に最短距離を歩いて前に出ない
    • 索敵中や移動中のスタック対策
  • Mob関連
    • 草やきのこを無視
    • きのこ、草にはスキルを使わない
    • バイオプラントを殴らない
    • ケミが草や無抵抗Mobを叩いていたら手伝う
    • 敵の詠唱妨害を最優先で行う
    • アクティブ時に指定したモンスターを無視する
    • ホムが非アクティブのときに自分から攻撃させるモンスターを指定可能
    • 指定したレベル以上のモンスターは攻撃しない
    • 指定したレベル以下のMobにはスキルを使わない
    • モンスターの種類による攻撃優先度の設定
  • プレイヤー関連

プレイヤーやホムのいるセルをAlt+右クリック: 友達登録
プレイヤーの西と東のセルをAlt+右クリック: 擬似オーナー機能
ホム自身の西と東のセルをAlt+右クリック: 範囲友達登録

冬物語さんの公開されている改良版ではさらに機能が追加されています。こちらの最新版はいまだにタナトスパッチに対応していないため、工体研究所でも改良版の使用を推奨します。



2006年09月28日

ROAIPlus rev333

いつの間にか随分時間が立ってしまいました。
ホム実装が3/14、最終更新が4/25でしたので、おおよそ活動期間の5倍もの時間サイトを放置していたわけですね。 工体AIなんかとっくの昔に消えているだろうと思っていましたが、 冬物語さんが修正パッチを当てているおかげでまだまだ現役のようで、 ありがたいやら、夜逃げした自分が恥ずかしいやら・・・

とは言うものの、今の自分にAIをいじる気力があるかと言われると、かなり厳しいものがあります。 AIのアップデートに関してはしばらく保留とさせてください。 かわりにROAIPlusの最新版を中間報告として置いておきます。

ROAIPlus rev33 ROAIPlus rev33 Console

ROAIPlus rev33をダウンロード

変更点

  • 初回限定の人から報告のあった io.lines、またその他いくつかの入出力関数に対応していない点を修正(rev12+patch2のマージ)
  • TraceAIのリアルタイム表示を別窓で表示可能に
  • TraceAIの「小窓化」「保存」「消」ボタンの実装
  • ウィンドウの位置や設定を保存
  • MyState のリアルタイム表示とAIが待機状態かどうかの表示
  • 設定ウィンドウの追加(Optionsボタンを押すか、もしくはF1キー)
  • AIを保護モードで呼び出し、エラーがあった場合はROAIPlus側から通知する
  • PauseボタンでAIの呼び出しを一時停止
  • RefreshボタンでAIを再起動

ROAIPlusがAIにアクセスする際、保護モードによってAIを呼び出すようにしました。これによってAIがエラーを吐いてROクライアントが停止し、 その間にケミが敵にタコ殴りにあうといった被害がなくなります。エラーメッセージはROクライアントではなくROAIPlusがダイアログで通知します。またその通知方法も設定により選択可能です。
※ROAIPlus側のバグによってエラーが発生した場合は通常どおりのエラーメッセージがROクライアントから出ます

MyStateをリアルタイムで表示し、さらにAIが待機状態に入ると「Alt+T」の表示が出るようになりました。この機能はデフォルトではOFFになっています。Optionsボタンで現れる設定の「AIの変数や周辺状況を通知する」にチェックを入れることで機能が有効になります。



2006年04月25日

ROAIPlus rev123

という訳でいちおう完成したので公開してみます。

ダウンロード

USER_AIのフォルダ名をなんでもいいので変更(USER_AI→MY_AIなど)し、 かわりにダウンロードしたUSER_AIフォルダをAIフォルダの下に置きます。 ほかに切り替えたいAIも適当なフォルダに入れていくと、下のようなフォルダ構成になると思います。

  • AI
    • AI.lua (標準AI)
    • Const.lua (標準AI)
    • Util.lua (標準AI)
    • USER_AI (ROAIPlus)
      • roaiplus.js
      • AI.lua
      • res
    • 0MATE_AI
      • AI.lua
      • ...
    • KUMA_AI
      • AI.lua
      • ...
    • AIDEV_AI
      • AI.lua
      • ...
    • ...

これで作業は終わりです。 roaiplus.jsをダブルクリックして実行してみてください。下のようなウィンドウが出るはずです。コンボボックスからAIの一覧が選択可能になっているので、コールホムをしたあとにAIを切り替えてみてください。

ROAIPlus rev12

Nortonなど一部のアンチウィルスソフトでは警告が出るかもしれませんが、悪質なスクリプトではないので 許可してあげてください^^;

動作原理としては、ROクライアントが USER_AI/AI.lua をロードする → AI.luaが XXXX_AI/AI.lua をロードする といった感じでしょうか。 これだけだと外部ファイルを読み書きした時にUSER_AIフォルダの下に作成されてしまうので、 ちゃんとXXXX_AIの下に作成されるよう細工も施してあります。



2006年04月22日

開発中のユーティリティ5

85af774d.png

ROクライアントとAIの間に割り込んで、ウィンドウからの操作でAIをリログなし、フォルダの変更なしで切り替えられるようになっています。 AI側に細工をほどこす必要はありません。工体AIもゼロマテAIもくまーAIも素のままでOKです。

今までブログで公開してきたテクニックをあますところなく投入した、という感じ。 待機状態の表示やら何やらの機能も付け足していこうかなと。

※画面は開発中のものです



rev1034

以下の問題点を修正しました。

  • FOLLOW_OWNER_TARGETTING でのタゲの切り替えがうまくいってなかったのを修正
  • 属性の不明な敵がいるとエラーが出るのを修正

AIをダウンロード