2006年10月20日
MAP認識機能のプラグイン化
要望のあったMAPライブラリのプラグイン化。
GetActorsから射線の通っていない敵をフィルタリングして、射線の通っていない敵を追わないようにします。
ホムンクルス用ライブラリ配布所のMAPライブラリを使いたかったのですが、
正常に動作しなかったため工体AIのコードを流用しました。
即興のため以下の問題点があります。
- 自分で勝手に考えたいいかげんなアルゴリズムのため、ROクライアントの射線判定(ブレゼンハムアルゴリズム)と微妙に判定が異なる
- ROMapSelectで指定できるのがダンジョンマップのみで、フィールドマップは指定できない(current_mapcode.luaを手作業で書き換える必要がある)
- MAPファイルの形式が古いものである(rev12の記事の修正をファイル単位で行う必要があります)
使用方法
- 工体AIのMAPフォルダをUSER_AIフォルダの下に置き、フォルダ名をMAP_OLDに変更します
- ROMapSelect.htaおよびromapselectフォルダをUSER_AIに移動します
- MapFilterプラグインを追加後、ROMapSelect.hta をダブルクリックして起動し、マップを選択します
USER_AI ├ MAP_OLD ├ ROMapSelect.hta ├ romapselect │ ├ roaiplus.js └ ...
まだ動きませんが、いちおうホムンクルス用ライブラリ配布所のMAPライブラリ対応のプラグインも貼っておきます。
BresenhamFilterこちらはMAPライブラリをダウンロードしてMAPフォルダをUSER_AIフォルダの下に置いてください。
2006年10月13日
2006年10月05日
ROAIPlus rev38について
「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 rev38
AIでよく使われる機能をプラグイン化し、どのAIにも適用できるようにしました。
今のところ下記のプラグインを製作済みです。
AutoExit -- 寝落ち対策
AutoPP -- 自動ポーションピッチャー
AspdAccel -- 進化後ASPDの最適化
RevolverWrap -- くるくる機能
これらプラグインはこちらの記事でコピーペーストを行ってください。
プラグインはluaファイルとして USER_AI/plugins/ フォルダの中に入れる必要があります。
例: AutoExit → plugins/AutoExit.lua
プラグインを使用するには、ROAIPlusの設定ウィンドウから使いたいプラグインを追加していってください。この作業をしてはじめてプラグインが有効になります。 設定ウィンドウはOptionsボタンもしくはF1キーで出ます。

ここで追加したプラグインがAIを切り替えるたびにロードされ、自動的にAIの一部として組み込まれます。
また、新しくプラグインを作るための記事も別途書いていきます。
プラグイン一覧
工体AIに実装されている寝落ち対策とほぼ同様のものです。 スキル「安息」を使った寝落ち対策機能が追加されています。
AutoPP自動ポーションピッチャーです。
AspdAccelASPD向上。一般的に進化後のための対策とされていますが、進化していないホムにもそれなりの効果があるようです。
RevolverWrapホムンクルス用ライブラリ配布所で配布されている「くるくるライブラリ」をプラグインとして実装したものです。動作にはくるくるライブラリ(revolver.lua)が必要です。 使用の際は plugins フォルダの中に lib フォルダを作り、その中にrevolver.luaを入れてください。また設定も plugins\lib\revolver.lua の中で行います。
※AutoExit、AutoPPについて
AIからケミスキルを使用することは一般的にグレーゾーンと言われています。使用は自己責任で。
機能紹介
いまさらながら工体AIの機能をまとめてみました。
- 動作関連
- 横殴り防止
- 敵の周囲数マスにプレイヤーやホムがいないか確認
- 遠距離から魔法を撃っている場合の横殴り対策
- アクティブ、非アクティブ切り替え
- テレポやMAP移動時に自動的にノンアクティブ状態にする
- 指定したパーセント以下のHPになるとホムをノンアクティブにする
- ムーンライト、カプリス Lv1 Lv2 を使った
手動でのアクティブ/非アクティブの切り替え
- ケミのタゲを最優先に行動
- 指定したパーセント以下のHPになったら敵から逃げる
- 逃亡中でも自分にタゲが来ていない時はケミを支援する
- 瀕死の時、敵が長射程Mobのみなら逃げ回らない(ほかにそうでないMobがいたら逃げる)
- 遠くの敵はケミの近くまで釣ってくる&攻撃中にケミが離れたら追う
- マップファイルを読み込んで壁の向こうなどの敵を追わない
- マップ設定をリアルタイムで操作可能 (ROMapSelect)
- 待機状態になると主人の北へ、待機状態が解除されると主人の南へ移動
- 敵に攻撃する時の距離を指定可能
- 敵を攻撃する際、誰を攻撃しているかによる優先度の設定(デフォルトはホムを最優先)
- ホムの攻撃モーションをしっかり表示させる機能
- 10万ルールの性質を利用して敵の生死を確認する
- 横殴り防止
- スキル関連
- SP量を調節しつつ自動でカプリスやムーンライトを使う
- 敵が強敵の場合は通常よりも多くスキルを使う
- MHの場合は通常よりも多くスキルを使う
- 敵が高DEFの場合は通常よりも多くスキルを使う
- MDEFの高い敵にはカプリスを使わない
- 聖や闇属性の属性レベルの高いMobにはカプリスを使わない
- ケミのHPが減ったらリーフがヒールスキルを使う
- 一定時間ごとにホムが緊急回避、ディフェンス、フリットムーブをかける
- まわりに敵がいるときのみフリットムーブ、ディフェンスをかける
- ショートカットからスキルを使った時に遠距離から発動
- 初撃(ファーストアタック)にのみスキルを使用する
- SP量を調節しつつ自動でカプリスやムーンライトを使う
- 移動関連
- ケミから離れないように同じスピードで追いかける
- Alt+右クリックでの移動後、その座標に留まる(標準AIではケミの近くに戻ってしまう)
- ケミに追従する時、常に最短距離を歩いて前に出ない
- 索敵中や移動中のスタック対策
- Mob関連
- 草やきのこを無視
- きのこ、草にはスキルを使わない
- バイオプラントを殴らない
- ケミが草や無抵抗Mobを叩いていたら手伝う
- 敵の詠唱妨害を最優先で行う
- アクティブ時に指定したモンスターを無視する
- ホムが非アクティブのときに自分から攻撃させるモンスターを指定可能
- 指定したレベル以上のモンスターは攻撃しない
- 指定したレベル以下のMobにはスキルを使わない
- モンスターの種類による攻撃優先度の設定
- プレイヤー関連
- 寝落ち対策
- 終了時間が近づいたらケミの周りを動いて知らせる
- 安息寝落ち防止パッチ
- 友達登録(パーティメンバを手動で覚えさせる)機能
- フレンドリストに職業も書き出す
- 指定した範囲内のプレイヤーすべてを友達登録する機能
- シーズモードに対応 (友達登録したプレイヤーは攻撃しない)
- 近くにペットやホムがいたら求愛行動を取る(デフォルトはOFF)
- 一時的に他のプレイヤーを飼い主としてふるまう(擬似オーナー機能)
- ケミから離れすぎてホムが迷子にならないように、敵を攻撃しにいく最大距離を指定
- 寝落ち対策
プレイヤーやホムのいるセルをAlt+右クリック: 友達登録
プレイヤーの西と東のセルをAlt+右クリック: 擬似オーナー機能
ホム自身の西と東のセルをAlt+右クリック: 範囲友達登録
冬物語さんの公開されている改良版ではさらに機能が追加されています。こちらの最新版はいまだにタナトスパッチに対応していないため、工体研究所でも改良版の使用を推奨します。
2006年09月28日
ROAIPlus rev33
いつの間にか随分時間が立ってしまいました。
ホム実装が3/14、最終更新が4/25でしたので、おおよそ活動期間の5倍もの時間サイトを放置していたわけですね。
工体AIなんかとっくの昔に消えているだろうと思っていましたが、
冬物語さんが修正パッチを当てているおかげでまだまだ現役のようで、
ありがたいやら、夜逃げした自分が恥ずかしいやら・・・
とは言うものの、今の自分にAIをいじる気力があるかと言われると、かなり厳しいものがあります。 AIのアップデートに関してはしばらく保留とさせてください。 かわりにROAIPlusの最新版を中間報告として置いておきます。
変更点
- 初回限定の人から報告のあった 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 rev12
という訳でいちおう完成したので公開してみます。
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を切り替えてみてください。

Nortonなど一部のアンチウィルスソフトでは警告が出るかもしれませんが、悪質なスクリプトではないので 許可してあげてください^^;
動作原理としては、ROクライアントが USER_AI/AI.lua をロードする → AI.luaが XXXX_AI/AI.lua をロードする といった感じでしょうか。 これだけだと外部ファイルを読み書きした時にUSER_AIフォルダの下に作成されてしまうので、 ちゃんとXXXX_AIの下に作成されるよう細工も施してあります。