前回はヒーラーのエイリアスと、AIパッケージを作って、それをヒーリングシーンとしてお膳立てしてやるところまで、やりました。
次はそのヒーリングシーンを呼び出すための仕組みを作りたいと思います。
動作確認を兼ねて、ドール城にカチコミにいきました。喧嘩上等ォ。

ドール城よりもブルーパレスの方が手ごわかった。不死属性の首長たちがてんこもりで。

ドール城よりもブルーパレスの方が手ごわかった。不死属性の首長たちがてんこもりで。
【手順4】 対象を監視するモニタリングクエストを用意する
ヒーラーに対象となるキャラを回復させるためには、ヒーリングさせたいタイミングで、ヒーリングシーンをスタートさせてやる必要があります。ヒーリングさせたいタイミング、とは、前回もちらっと触れましたが、対象(今回はプレイヤー)の体力値がある程度減った時です。
対象の体力値を取得すること自体は簡単なのですが、これは常時、ヒーラーがゲーム上で稼動している間、ずっと取得しつづけるような仕組みにしないといけません。
つまり、対象の体力値を取得し、一定値以下に減っていればヒーリングシーンをスタート、そうでなければ何もしない……という処理を一定の間隔で行う必要があります。
対象の体力値を一定間隔でモニタリングする仕組みを作るために、まずは専用のモニタリングクエストを用意します。

このクエストは、ヒーラーを雇用したタイミングで開始し、解雇したら終了させます。
また、ヒーラーが雇用されるたびに何度でもこのクエストのステージが使えるように、「Allow repeated stages」にチェックを入れておきましょう。
優先順位の「Priority」は0でかまいません。
このクエストは、役者も小道具も何も無い、裏方に徹したサポート用のクエストですので。
クエストを作成したら、一度設定画面を閉じてesp自体を保存してください。
クエストのオブジェクトは一度「保存」を挟まないと、設定できない箇所が多くあります。
保存が済んだら、再びクエストを開いて「Scripts」のタブを押します。
ここに新規スクリプトとして、モニタリングするスクリプトを追加してやります。
すみません。激しい色使いで。このくらいカラフルじゃないと、おばちゃん見づらいんです…

えーと、スクリプトについては、スクリプト内のコメント以上に詳しく説明する箇所は無いのですが……まあ、いつもこれだけ詳しくコメントつけてるのに、しばらく経つと自分でも何をしていたのかわかんなくなるんですよねえ……
とりあえず、簡単に要点をまとめてみますと。
まず、ゲーム内で一定の間隔で一連の処理をさせるために、「RegisterForSingleUpdate()」という命令を使っています。
この命令は、カッコ内で指定した数値のタイミング後に「OnUpdate」以下のイベントの処理を行ってくれるという……あらかじめ用意した処理を予約しておくための命令です。
SingleUpdateなので、一回こっきりの予約なのですが、予約した処理の中に、再び次回予約の「RegisterForSingleUpdate()」を入れていますので、最初の一回を起動しさえすれば、後は半永久的に処理し続けてくれます。
その最初の一回目……初回起動の命令が、「スクリプトの起動」というところで記述している「Setup()」という自作関数です。
この関数を呼べば最初の一回目の処理が始まります。
あとは、「event OnUpdate()」以下で、ヒーリング対象の体力をチェックする処理を用意しておくわけですが、大事なのは、ヒーリングシーンの最中はモニタリング処理をカットする、という点です。
前回も触れましたが、ヒーリング中の場合は処理をしない、という分岐を挟まないと、対象の体力値が減っている限り、このモニタリングスクリプトはヒーリングシーンを開始する命令をえんえんと出し続けてしまいます。
ヒーリングシーンは非常に繊細な処理ですから、シーンの最中はできるだけ邪魔しないようにそっとしておいてあげてください。
上記のスクリプトでは、プレイヤーの体力が8割を切っていたら、ヒーリングシーンをスタートさせることにしています。
ヒーリングシーンがスタートすると、前回作成したように、Phase1の開始時にHealingnowのフラグがオンになりますので、そのフラグがオンの場合は、何もしないように処理を回避しています。
ヒーリングシーンのPhase3が完了したら、Healingnowのフラグがオフになりますので、そうしたらまたこのモニタリングスクリプトは、対象の体力値をチェックしはじめます。
スクリプトの仕組みとしては、そんな感じです。
ちなみに……このモニタリングスクリプトでは、フォロワー全員のAIをセラーナちゃん式のAIパッケージに切り替えるためのモニタリング処理も一緒に行わせる寸法でいます。
(…というか、もう搭載しちゃいました☆セラーナちゃんみたいなフォロワーが3人もいると非常にカオスです)
こういう、常時駆動型のスクリプトって、処理が重たくなりそうなので、いくつも付けるのはイヤなんですよね。
フォロワー全員にセラーナAIをつけるためと、ヒーラーのために、わざわざモニタリングスクリプトを別々に用意するのはもったいないと思ったので、一緒のModに統合してしまうことにしました。
そのため、今回は、ゲームのデフォルトのフォロワーシステムである「DialogueFollower」を直接改造するという暴挙に出ています。
単にヒーラーを作りたい、というだけならば、新規のフォロワーシステムを作って、そこにヒーラーの機能を搭載するのが、はるかに安全ですので、そちらをおすすめします。
さて、スクリプトを設置し終えたら、次はそのスクリプトを起動するための準備をします。
……おっと、その前に大事なことを忘れていました。
作成したモニタリングスクリプトのプロパティを、忘れずに指定してあげてください。
このスクリプトで使っているプロパティは3つ……整数型のプロパティの「UpdateInterval」とScene型のプロパティの「HealingScene」と、クエスト拡張Script型のプロパティの「DialogueFollower」です。
「UpdateInterval」はRegisterForSingleUpdate()を行う、モニタリングの間隔の数値として用意した値です。おばちゃんは「1」を設定しています。
「HealingScene」は、【手順3】で用意したヒーリングシーンを指定してください。
そして最後の「DialogueFollower」は……これは、ヒーリング中かどうかのフラグをプロパティとして設定したスクリプトのクエストを指定します。
おばちゃんは「DialogueFollower」クエストの「DialogueFollowerScript」スクリプトの中にフラグを追加したので、上記のような指定になっていますが、別のクエストの別のスクリプトの中に用意した場合は、それに合わせて変えてくださいね。
プロパティの設定が済んだら、次はスクリプトを起動させるために、クエストのステージを準備しましょう。
「Quest Stages」のタブに移って、ステージ0を作成してください。

ステージ0は、念のため「Start Up Stage」にチェックを入れておいてください。
「Start Up Stage」にチェックの入っているステージが、クエストが開始された時に最初に適用されるステージになります。
チェックを入れたら「Log Entry」の欄で右クリック→Newを押して、空のエントリーを挿入します。
本来はここに、ストーリー性のあるようなクエストでしたら、クエストの概略の文章を入れたりするんですけどね。
このクエストは、決してプレイヤーの目からは見えない裏方のクエストなので、そういう余計な説明は要りません。
重要なのは「Papyrus Fragment」という欄に追加するスクリプトです。

「kmyQuest」って何の略字なのかわかりませんが……まあ、それは置いておいて。
「kmyQuest」には、先程設置したモニタリングスクリプトを選択します。
そしてスクリプト記入欄に、「(kmyQuest as oba_UFS_MonitoringScript).Setup()」という一行を記述します。
(※スクリプトの名称などはご自分の環境に合わせて適宜、変更してくださいね)
これは先程のモニタリングスクリプトの中で用意した、初回セットアップの関数を呼び出すための記述です。
つまり、このクエストが始まってステージ0になった瞬間に、モニタリングスクリプトが起動して、モニタリングが始まるようにするのです。
これで、このクエストを開始すればモニタリング処理が始まり、このクエストを終了させればモニタリング処理そのものが消える……という仕組みが出来上がりました。
以上、これでモニタリングクエストは完成です。
【手順5】 ヒーラーのActorを用意する
さて、いろいろ準備が整ってきましたが……あともう一つだけ、予め準備しておかなきゃならないものがあります。それは、ヒーラーになるためのキャラクター(Actor)です。
残念なことに、ヒーラーには誰でもなれるわけではないんですよね。
少なくとも、おばちゃんの作ったこのヒーラーModの仕様ですと、確実にヒーリング行為を行うためには、ちゃんとセッティングされたキャラじゃないとうまく動いてくれませんでした。
ヒーラーのActorの設定として、必要不可欠なセッティングは、以下の3つです。
(1) Actorのステータスの「クラス」
(2) Actorの取得している「スペル」
(3) Actorの所持している「近接武器」の有無
ちなみにおばちゃんは、ヘイムスカー氏のActorを複製したものでしか試していないので、もしかしたら別種族だったらまた違うセッティングが必要なのかもしれません。
あくまで、ノルド男性ならこんな感じ、という参考までにごらんください。
(1)のクラスについては、これは「CombatMageElemental」というクラスが最適でした。
もちろん全部のクラスを試したわけではないので、もっと他に適したクラスがあるかもしれないのですが……ただ一つだけ言えることは、魔法をガンガン使えるタイプのクラスじゃないと、ヒーリング行為を行うことは難しい、ということです。
クラスの設定欄はActorの「Stats」のタブの下の方にあります。


最初はヒーラーは回復呪文さえ使えればいいんじゃない?と思っていたのですが、少なくともヘイムスカー氏の元のクラスの「Priest(プリースト)」のままでは、うまく動いてくれませんでした。
これは、おばちゃんがいろいろ観察してて思っただけなんですが……回復魔法のスキルの有無より、破壊魔法や変性魔法といった実戦で使える魔法のスキルを数多く持っているということが、ポイントのような気がするんです。
なぜかと言いますと……戦闘中の動作ってホント、システム側からの干渉がありすぎて、CKでは全くどうにもならないんですよ。
たとえば、誰でも心当たりがあるんじゃないかと思いますが、敵に遭遇した時、リディアさんみたいなマッチョなフォロワーにはもっと前方に壁として突っ込んでいって欲しいのに、後ろの方でちまちま弓を打っていて、全然前に出てきてくれない、ということがあります。
(その逆も多いですが……)
あれはたぶん、敵との距離が一定の間隔以上だと弓で攻撃する、という決まりがあるんだと思うのです。
敵の所まで走っていって殴った方が絶対に早いし強いのに、一定以上の距離があると、絶対に弓を取り出します。
そういったシステムから直接操作される現象は、何も弓だけではありません。
キャラの一定距離以内に敵が入ってくると、キャラは反射的に近接武器を構えます。
それは「システムからの神の声」のようなものです。
だから、ヒーリングシーンの真っ最中の、かめはめ波みたいな大げさなモーションを取ろうとしている最中でも、容赦なく割り込んできたりします。
もうこの干渉は、どうやっても止まりません。
プレイヤーのチームメイトをやめて戦線離脱するしかないです。
…で、何故、魔法をガンガン使うタイプがヒーラーに適してるか、というと。
魔法って、武器を構えるよりはるかにモーションが早いし、立ち直りが早いからです。
デュアルキャストは時間がかかっちゃいますが、ファイアボルトとかは片手をあげるだけで済みますし、オークフレッシュみたいな防御魔法などは一瞬シャキーンと光るだけです。
武器の方は、ただ構えるだけでも時間がかかるのに、さらになんか武者震いするようなモーションしたりとか、余計な動作がものすごく多い気がするんですよね。
そのせいで、ヒーリングするためのAIパッケージの動作になかなか移れないのです。
だから、ヒーラーにはできるだけ武器はつかわせないことがポイントです。
破壊魔法やフレッシュ系の防御魔法といった、立ち直りの早い魔法をガンガンつかわせてできるだけ無駄なモーションを行わせないようにするんです。
まあ、このセッティングのおかげで、ヒーラーというより、魔術師として活躍する方が目だってしまうんですけどね。
次に重要なセッティングは(2)のActorが取得している「スペル」です。
これはまず、「Healing」を取得していないと回復を行ってくれません。必須です。

いちおう、「Healing」さえ取得していれば、戦闘中でもヒーリングしてくれるのは確認しましたが、前述したように魔法をできるだけ数多く使わせるために、手間のかからない魔法のスペルをできるだけ数多くぶち込んでやった方が、ヒーリングの成功率が上がります。
Perkは無しでもかまいません。
おばちゃんは回復魔法の効果を上げるために付けてやってますが。
それから次に大事なのは(3)の「近接武器」の有無です。
これも理由は前述した通りです。近接武器を持っていると、ムダにぶんぶん振り回そうとするので、Actorのインベントリから取りのぞいてください。

ちなみにヒーラーのエイリアスの方で、弓を持たせる設定をしておらず、キャラクターが何も武器を持っていない丸腰の状態になると、戦闘に参加しなくなってしまいますのでご注意くださいね。
本当は弓も取り上げたいのですが、丸腰にはさせられないので、仕方なく持たせてやってるんです。
でもまあ、遠距離で使える魔法を取得していると、弓を背中から取り出して構えた瞬間に、「あ、俺には魔法があったんだ!」ということを思い出すのか、弓をしまってくれます。
最初から魔法使ってよ!と思いますが、そのくらいのモーションは大目に見てあげるしかないです。
以上で、ヒーラー用のActorの設定は終了です。
しつこいですが、この辺の調整は、たまたまおばちゃんの環境でうまくいってる…というだけかもしれませんので、あくまで参考程度にお考えください。
記事としては、いちおうこの辺りまでが、「ヒーラーの作り方」ということになります。
あとは【手順3】で用意したモニタリングクエストを、ヒーラーをフォロワーとして雇用する時に開始させてやるだけです。
ヒーラーのエイリアスをフォロワーとして働かせるためには、ヒーラー用のフォロワーシステムを作らなきゃなりませんが、それはヒーラーの作り方というより、フォロワーシステムの作り方になってしまうからなあ……どの程度、突っ込むべきなのか、悩みます。
ひとまず、長くなったので終わります。
続きはまたの機会に。
おまけ。ワンコになつかれてるレイロフ君。

フロドナー君をフォローするように設定してるのに……どうしてここに。
それにしてもヘイムスカー氏がやかましいです。真夜中なのに……大迷惑。

フロドナー君をフォローするように設定してるのに……どうしてここに。
それにしてもヘイムスカー氏がやかましいです。真夜中なのに……大迷惑。
【関連記事】
・ヒーラーフォロワーの作り方(1)・フォロワーの仕組み
・フォロワー用ボイスタイプ追加Mod
・きみはペット ~アニマルフォロワーのしつけ方~