前回の後半で、フォロワーを2人分検索できるようProcedure Treeを改造しました。
Waitで0.5秒の検索時間をとっているため、Procedure:Findを含むBranchをただ二つ並べただけでは、最大で1秒検索に時間がかかってしまいます。
これを改善したのが、上図下段。「Run Until All Children Complete」にチェックを入れたSimultaneousにFindのBranchを突っ込んでみました。Simultaneousは子要素のどれかひとつが終了すればBranch終了となりますが、「Run Until All Children Complete」にチェックを入れると子要素すべてを実行完了するまでは終了しなくなります。そのためのフラグなはずです。
この設定により、フォロワー2人分の検索を同時に行える構造になりました。3人、4人と増やしても検索時間を0.5秒以内に抑えられるはずです。でも実際に3人目を探せるようBranchを追加すると、3人目の検索がうまくいきませんでした。
↑後に実は2人目の検索すらうまくいってなかったことが判明し、結局編集は元に戻しました(涙)
。FindTimeのみ0.25秒に縮めることで検索時間を0.5秒以内に収められます。「Run Until All Children Complete」自体がうまく動作しないと言うより、何かミスをして意図したとおりに動かなかっただけだと思います(2015/03/22追記)
ProcedureTree構築はうまくいったと見せかけて、出鼻をくじかれたり裏切られたりということが多いです。
また、Procedure Treeの根っこであるSequenceの「Repeat When Complete」にチェックを入れると、UseMagicで回復行動をとるたびにProcedure Treeが最初から再生されるようになり、Findで検索したObjectListがきちんと更新されるようになりました。今まではまともに処理が回ってなかったのか……な。……よく分からない。
UseMagicで度々起こっていた魔法を構えたまま固まる現象も、ほとんど見られなくなりました。
ほんの少しの工夫や設定の見直しや手当たり次第のあれやこれやで動きが大幅改善されるので、Procedure Tree作りは奥深いです。
最初に書いた3人目の検索がうまくいかない件も、こちらの設定ミスによるのか、Simultanerousの仕様をよく理解していないための間違ったTree構造にしてしまったのか、分かりません。問題を切り分けようと色々試してはみたものの、はっきり「これがマズかった」という結論までにはたどり着けませんでした。分からなかったら適当なところであきらめて、別の方法を探すというのも大切かもしれません。
改善されたProcedure Treeで、ヒーラーが活躍。
手前のエルフ鎧のフォロワーを回復した直後、オーク女性を検索して回復しています。
エルフ鎧のほうにまだ回復魔法のエフェクトが残って光っているところから、続けざまに回復できているのが分かるかと思います。
回復が遅れるときは本当に遅れるんですけどね。落差が激しいです。
ObjectListの更新がスムーズに行くようになったので、フォロワーの検索枠も当初どおり1つに戻してもいいかもしれません。
一方で回復行動を行わないとListが更新できないので、検索枠2つのまま、(運がよければ)2人のフォロワーの体力を監視できるほうがより頻繁な回復が望めそうではあります。
FindのLocationをヒーラーの周辺にしているため、すぐ近くにいるフォロワーが検索されることが多いです。
頻繁にダメージを受けるのは白兵戦を行うフォロワーなので、ヒーラーもメイスなどを持たせた直接攻撃タイプのほうが、案外よかったりするのかもしれません。弓使いだと敵にも味方にも近づいてくれない。
あらかたできたら、あとは細かなConditionをProcedure Treeに設定して仕上げます。残りマジカが使用魔法より低いときは使わないとか、「他者治癒」は機械やアンデッドには効かないのでそういった相手にも使わないとか。
最後にAI Packageの実行条件をこんな形に追加変更してみました。
プレイヤーと敵対したら、このヒーラーAIは無効になるように。そして、AIの実行自体も、特別なアイテムを持っているときだけに限定しました。
これだとプレイヤー側でNPCのカスタムAIを使うか使わないかを簡単に決められます。フォロワー雇用クエストの指示に完全に従ってもらいたいときは、アイテムを取り上げればいいだけです。
仲間を探して回復させるのと同様にして、特定の状況下で補助魔法を使えるようTreeをさらに改造しました。
このNPCは普段はドワーフ遺跡めぐりをしているので、シャウラスやファルメルの対処法を知っている=毒耐性の魔法(自作で用意)を使えるということにしてみました。
シャウラスやファルメルを敵として察知したときのみ、仲間にオークフレッシュっぽい毒耐性の防御魔法をかけてくれます。
毒耐性魔法を使わせる「Procedure:UseMagic」のConditionsに、「Combat Target」がシャウラスのファクションに入っているかどうかを加えることで簡単に設定できます。この「Combat Target」は、NPCが攻撃対象としている相手のReferenceが入っています。
特に「Combat Target」は、Combat Override PackageのPublic Package Data内にて、「Interrupt Data」としてSingleRefやLocationで設定することが可能です。これはCombat Override Packageだからこそできる設定なので、敵に対する行動にも活用できます。
さて、回復と補助のCombat Overrideがとりあえず形になりました。しばらくはこのPackageで遊んでみて、どれだけ頼もしいか観察してみるつもりです。
前へ |
次へ
1. はじめまして、目から鱗です。勉強させていただきます。
ヒーラーフォロワーMODを作成の参考にと、UNIさんのページにたどり着きました。
AI packageの編集でかなり複雑な事が出来るのですね。
分かり易い丁寧な記事で、今まで抱えていた疑問が一気に氷解して行くようでした。
記事を参考にしながらMOD作成してみようと思います。
素晴らしい記事に出会えました事に感謝いたします。ありがとうございました。
そして、これからもよろしくお願い致します。
Re:はじめまして、目から鱗です。勉強させていただきます。
私もまだ試行錯誤中で分からないことも多いのですが、こちらの記事が参考になったようで嬉しいです!
制約はかなりあるものの、AI Packageは作りこめば作りこむほど色々なことができるようになるのでやりがいがあります。NPCが自分で考えて動いているように見えるのが一番の魅力でしょうか。
同じくAI Packageに興味を持たれている方々からもコメントをいただき、新しい可能性に気づかせてもらうことも多いです。AIの自作をはじめて二年近くになりますが、面白くて全然飽きません。本当に奥が深いです。
こちらこそどうぞよろしくお願いします。