日記/2015-10-13
ホムAI:0.69 情報メモ†
先日の記事もあわせて、いくつか気になる点が出てきています。
いずれも『致命的とはいえない』レベルではあるのですが、
あまり貯めると面倒なので、適当に更新しようかと思います。
以下、自分のメモ的要素も含めて。
ステータス読み出しで落ちる可能性†
テレポなどのAIリロード前後での状態(通常/追従など)を維持するために、
ファイルを使ってデータを中継している。
そのファイルが何らかの理由で異常になると、AIが落ちる可能性がある。
起きる現象は致命的に見えるが、この『異常』はファイル入出力途中でRO自体/OS自体がおちるようなときにしかおきないはず。
そのため、一般的には発生しないので危険度が低い。つーか友瀬自体は一度も発生したことはない。
ただ、実際に発生したユーザさんがいるようなので、手を入れておこうかな、というレベル。
具体的な場所は showstate_rap.lua の function CheckSavedStatusFileMode() 内の以下の2つ。
- ファイルオープンに失敗した場合に、適切ではない動作になる。
- 現状:if(fp == nil) then return
- 修正:if(fp == nil) then return 1
- ファイルがあったが、内容がおかしい場合におかしくなる
- 現状の『tmpstate = fp:read()』の直後に以下を追加。
- if tmpstate == nil then tmpstate = StatusList[1]
手動スキル使用後の行動†
Glenelg はもともとバニル用のAIだったため、遠距離から手動でスキルを撃った場合に
『非戦闘のIDLE状態に戻る』
仕様になっている。
別の言い方をすると『遠距離からの手動でカプリスを撃った後は、あえて接近戦を仕掛けない』仕様。
ですがこの仕様、多くのホム/ホムSの持つ接近戦用スキルでも同じように動いており、結果好ましくない動きをするケースがある。
具体的なケースの1つとしては、数セル先の非アクティブ対象の敵に対してスキル指定した場合。
- スキルを手動指定→ホムはその敵に接近移動開始する。
- 接近戦用スキルの射程内にまで近づいたら、そのスキルで攻撃を行う。
- スキル使用終了したので、ホムは『IDLE』状態になる。
- IDLE 状態なので、ホム、索敵開始。
- 今スキルで狙った相手は『ホムにとっては非アクティブ対象』なので、『近くに積極的に攻撃すべき敵がいない』状態である。
- 『近くに敵がいない』ので、ボスへの追従行動開始。
ボスの足元に移動開始。- わかりますよね?
わざわざ『白兵戦スキル』を使わせたのだから、ユーザが想定するのはおそらく『そこで足を止めて、その敵に通常攻撃開始』です。
戻ってこられても困るわけです。 - ちなみに、敵側がアクティブ型だったり敵のASPDが十分速かったりすると、比較的目立ちません。
なぜならば:上記ホムが『IDLE』になる前後でその敵がホムに対して攻撃を開始するため。
ホムはIDLE状態での索敵処理の中で、それを『反撃すべき敵』と判断して戦闘を開始するわけです。
- わかりますよね?
実はいちおー、上記に対しては現状の Glenelg のままでも対応はできる。
そうなっているから、友瀬は困ってなかったわけで。
具体的には『接近戦をしたい場合は、普通に攻撃指定する』だけでよい:
接近戦スキルをオートスキル指定しておけば、接近後の初撃でスキルを使ってくれる。
スキル割当などで例えば『ソニッククローLv4』を『対象を攻撃』に割り当てておけばいいのです。
ただ、接近戦スキルがいろいろあって状況によって使い分けたい、という希望もありそうなので。
『使用したスキルの種類によって振舞いを変える』仕組みを作ってもいいかな、と。
- 射撃系スキルでは、状態をIDLEに戻す。現状の仕様通り。
- 白兵戦系スキルでは、状態を ATTACKにする。その敵に戦闘開始。
- 射撃系スキルでも『戦闘を継続する』ことを望む人がいるかもしれない。
それについては、前述の『対象を攻撃』で我慢する。
- 射撃系スキルでも『戦闘を継続する』ことを望む人がいるかもしれない。
意外と面倒なので、ここでの変更部分の詳細記載はしません(^^;
ご意見などがあれば。