忍者ブログ

方向音痴のSkyrim

PCゲーム「Skyrim」の雑多なCKいじり日記

フォロワー拡張Modの自作05【Script】

Scriptの内容はあらかじめ用意したので、それをScriptにコピペしてコンパイルします。
このScriptに、フォロワーを制御するすべてのFunctionを収めるつもり。



Scriptを選択して右クリック。Edit Sourceします。
Editウィンドウが開いたら、以下の内容になるように貼り付けます。
Propertyの各行も、分かりやすいようにちょっとだけまとめてみました。
貼り付けたらEditウィンドウ上部よりFile > Saveします。無事にコンパイルが通れば、ひとまず成功です。


掃除人フォロワーを作ったときのScriptに手を加えて修正したものです。最初にScriptを書いた時はFunctionを一つ作るごとに動作テストしてました。一度土台を作ってしまえば似たようなクエストで使いまわせるので、今回はずいぶん楽。一気に全部書いて、まとめて動作確認するつもり。
もし間違ったPropertyを登録してしまった時は、このEdit画面で間違えたPropertyを消します。もし消したいPropertyに値を与えていたら、Propertyの画面で「ClearValue」ボタンを押して登録していた値を事前に消しておきます。そうしておかないとPropertyのデータが中途半端に残って、PapyrusLogにエラーが出るようです。値を消し忘れても、CKで一度セーブした後、CKを立ち上げなおして再度読み込み&セーブしても直るようです。
逆にAddし忘れたPropertyがあれば、Scriptに直接書き込むこともできます。その場合はセーブしてEdit画面を閉じた後、「Property」ボタンを押して具体的な値を設定します。

作ったFunctionは上から順に、「人間フォロワーの雇用」「動物フォロワーの雇用」「自分のAliasを検索」「待機のOn/Off」「人間フォロワーの解雇」「動物フォロワーの解雇」
メンテナンス用として「人間フォロワーの全解雇」「動物フォロワーの全解雇」です。

基本的にバニラのScriptを真似していますが、全体的に簡素化、解雇に関してはかなり簡略化しています。バニラのフォロワーの解雇処理がややこしいのは、クエストがらみで強制的に別のフォロワーと置き換えられたり別れさせられたりするからみたいです。同胞団とか結婚式とか。自作クエストにはそういったしがらみがない上、「従者と別れた」等のお知らせメッセージも出さないつもりなので、要らない部分はごっそり削りました。

雇用時にフォロワーに設定している"IgnoreFriendlyHits()"は仲間割れ防止用の設定ですが、コメントアウトしています。この設定はかなり強力で、試したところ、プレイヤーから執拗な攻撃を受けても敵対できず、一方的に殺されるだけになってしまいました。この辺の挙動はできるかぎりバニラフォロワーに近い形にしたいので、他の仲間割れ防止策を思いつくまでは保留。どうしても思いつけなかったら、解禁することにします(どちらにしても、バニラ枠フォロワーからの一方的な仲間割れ攻撃は受けそうなんですけど)。

「自分のAliasを検索」するFunctionは、複数フォロワーを扱う際には必須の処理です。プレイヤーが話しかけた相手がどのAliasに入っているかが分からないと、待機も解雇も行えません。話しかけた相手のReferenceから直接Aliasを知るような方法が分からなかったので、Aliasの中身を順番に見ていき、話しかけた相手のReferenceと一致するかどうか調べて探し出す方法をとっています。Aliasが増えると検索に時間がかかるので、FactionのRankなどを利用して個々のフォロワーに自分のAlias番号を持たせるなど、別の方法でAliasを割り出す必要が出てくるかと思います。


Scriptをセーブしたら、もう一度「Property」ボタンを押して、設定したオブジェクト類が外れたりしていないか確認しておきます。Script編集に没頭しているうちに何かやらかして、設定値がいつの間にか外れていることがあるので。CKを起動せず、外部のエディタツールなどでScriptだけを編集&コンパイルしていた場合は特に要注意です……。


同じようにして、AliasにAddしたScriptにも以下のソースを貼り付けてSaveします。


これは人間フォロワー用。
フォロワーAliasを3つ作っていますが、同じひとつのScriptをPropertyなしで使用しているので、どれかのAliasでScriptを編集するだけ。同じScriptを共有しているといっても、同じ指示書を配布しているようなもので、ゲーム内での処理は個々のAliasで別々に行われます。



こちらは動物フォロワー用です。

どちらのScriptも内容は基本的に同じです。以下の3つの処理を行わせています。

・待機を指示されたら3日後に自分の状態を確認し(QuestScriptから3日後に処理を開始しろの指示が飛んでくる)、まだ待たされているなら自力で待機命令を解除してプレイヤーのところに戻る。
・プレイヤーから攻撃を受けて敵対状態になったら、自動的に雇用解除。
・死亡したら自動的に雇用解除。

これもバニラフォロワーにくっついているScriptをお手本にしています。

ここまでできたら、あとはそれぞれの会話文に処理を呼び出す一文を加えるだけで、フォロワークエストを実際に使用することが可能になります。

前へ | 次へ
PR

コメント

2. ブログ、楽しませていただいております!

UNI様、はじめまして!
ファル粕と申します。一年前からスカイリムをはじめて、つい最近まで通常のプレイをしておりましたが、ふと思い立ち、ckを勉強しはじめました。ckは自分には敷居の高いもので、何から手をつけて良いかわからなかったのですが、景色を見ながらのんびり旅をするのが好きなので、生活に関連したmodを作ってみたいなぁと探していたところ、フォロワーが人間らしいリアクションをとるUNIさんの考えたAIを再現したいと思い、挑戦しています。
QuestScriptのコンパイルまで、なんとか行けたのですが、GetName is not a function or does not existのエラーが出てしまい…先に行けない状況です。自分でも原因を調べておりますが、イスグラモルの知性が足りないようです…アドバイス頂けたなら幸いです。
何より、こんなに丁寧に理論をまとめて下さっているページが他に見当たらないので、それだけでも大変感謝しております!

Re:ブログ、楽しませていただいております!

ファル粕さん、こちらこそはじめまして。
私もCKは今年になってからさわりはじめて、まだ日は浅いですが作る楽しみにどっぷりはまりこんでしまいました!
きちんとした記事じゃないかもしれませんが、試行錯誤している過程がどなたかのお役に立てればと、恥ずかしげなく色々書いちゃってます。
未熟者ゆえに間違ったことや勘違いもありますので、眉に唾をつけてごらんいただけると幸いです。(あ、でも自作MODの動作確認はちゃんとやってますよ!)

>GetName is not a function or does not exist
早速ですが、すみませんっ。
GetName()はSKSEを導入していないと使えない関数でした。
デバッグ用メッセージでNPCの名前を表示させるのに使っていますが、Scriptを機能させるのに必須ではありません。
記事の方のScriptをSKSEなしで動作するように、変更しました。こちらをコピペして、もう一度試してみてください。多分大丈夫かと思うのですが、なにかありましたらまた教えてくださいませ。
成功を祈ってます!

コメント

3. 初mod

Uniさん、ありがとうございます!まさか、こんなに早くお返事をいただけるとは…‼︎しかも、scriptの修正までして下さって、なんて親切なお方なんだ。"ありがとう、導き手よ"

あれから「フォロワークエストの自作07」まで作成を進めております\(^o^)/
05〜07のところが一番難しかったです。大変でしたが、ブログの説明がとても細やかでわかりやすかったので、かなりやる気がキープ出来ました!この理論のすごい所はセラーナのようなAIのNPCがDLCがない人にも自分で作れることですね‼︎

Uniさんにアドバイスを頂いて、思わぬことも含め、色々発見がありました。

<再現できた箇所>
•3人までちゃんと雇用できる
•通常、雇用できない人も連れて行ける
•従者の選択肢が重複しない

<再現できなかった箇所>
•待機ができない
•解雇できない
•動物の雇用選択肢がでない
•雇用する前から解雇の選択肢がすでに表示されている

<発見したこと>
•ファストトラベルすると、通常の従者より着いてくるまでにしばらく待機時間がいる。
•手伝ってもらうで場所を指定すると、待機するが、その後ついてこなくなる。
◎SKSE v1.6を導入してあるはずなのに、Getname()でエラーが出た→導入にミスがあった(?)

…など、問題は山済みですが、それ以上に作成の楽しさが上回っております‼︎ Scriptが分かれば、解決法があるかもしれないですが、まだ理解が追いついてきません(^^;;

レイロフの家にて
skyrim.jpn.org/images/537/53752.jpeg

Re:初mod

この導き手は重度の方向音痴ですから、気をつけて!

と冗談はさておき、画像拝見しました。居候が増えてる……!
それにしてもイリレスさん、ちゃんと護衛をやっていたんですね。首長の椅子の傍に立っているだけかと思っていました。頼もしい。このままハイフロスガーへ連れて行ってあげたい面子ですね。

>SKSE v1.6を導入してあるはずなのに…
私はMod OrganizerでMODを管理しているのですが、MO経由でCKを起動させているとSKSEの関数を使った場合コンパイル時にエラーがでました。なのでCKはMOを経由させずに起動しているのですが(SKSEもMOではなくSkyrim本体に導入しています)、もしかしてこの状況に該当するでしょうか?

>ファストトラベルすると、通常の従者より着いてくるまでにしばらく待機時間がいる
これに加えて、屋外から建物内、ダンジョン内部でのセル移動にもついてこなかったりするようです(^^;
これは「Procedure:Follow」が常に動いていない場合に起きるようで、Sandbox入りAIを使ったフォロワーの欠点ですね。のんびり旅をしていると、待てばいいやってなるのですが、急いでいる時は困りものかもしれません。ファストトラベル先で敵に囲まれたりすると絶体絶命ですね……。

「雇用」はできるのに「待機」、「解雇」、「待機→追従」ができないのは、もしかしたら各ダイアログのPapyrusFragmentのスクリプトがうまく動いてないのかも、です。
スクリプトを生成するときに「;」セミコロンを入力したと思うのですが、これがスクリプトの記述の前についてないか確認してみてください。Papyrusは「;」以下から改行までをコメントとみなして、処理をしてくれないので……。もし「;」がついたままだったら、削除してCompileしなおしてくださいませ。

>動物の雇用選択肢がでない
>雇用する前から解雇の選択肢がすでに表示されている
こちらはダイアログのConditionsにミスがあるか、相手NPCのファクションがなにか想定外なことになっているか、が考えられます。
Conditionsの設定はどうにも苦手でして、私も失敗しながら少しずつ調整したりしてます。

あともう少しで自作フォロワークエストの作成が一段落するので、第9回か10回の記事でサンプルファイルを上げてみますね。環境の違いなどで、もしかしたらうまく動作しないかもしれませんが、CKで中身を見るだけでもなにかお役に立つかもしれません。お待ちくだされば幸いです!

コメント

4. Mod修正中です

画像ご覧になって下さって、ありがとうございます!

レイロフの家で自分が待機していたところ、それぞれイスに腰かけたり、料理をしたり…とフォロワーが自然に面白い行動を取りはじめてうれしくなりました!!
CKをやり始めるまでは、キャラクターごとに個性的なアクションが登録されていて、それを再生していると思っていたのですが、実は部屋の中に目に見えないアクチベーターが仕込まれていたんですね。
ファストトラベルやダンジョン内でちょっと遅れてくる仕様も、自分にはドラマチックに感じました。移動先にドラゴンが湧いてこの場をしのげるかという状況の中、後ろからスコールが剣を縦に構えて「今日がお前の最後の日だ、ドラゴン!」と特攻してきたときは、皮はぎ職人のシルバーハンドに無残やられた彼の面影はなかった…!
このメンバーで旅したら楽しそうだなぁと思うのですが、CKの"運命共同体の呪い"が解けない限りは、Modを入れたまま旅を続けるのは難しいようです…。

雇用選択肢の表示の問題は、Uniさんのアドバイス通りConditionsのミスが見つかり、改善することができました!!ありがとうございます(^_^)
めでたくリバーウッドの犬、スタンプを仲間にすることができました。しかし人間同様、解雇の選択肢が出ませんでした。
一度飼ったペットは死ぬまで手放せない…妙にリアリティーがある仕様となっております。
待機、追従のPapyrusの方の問題は本当に難しいですね…。最近発覚したミスでは、数字の「0」(ゼロ)をアルファベットの「O」(オー)と間違えて入力してあったりという…
いかにも"ファルカス的な"ミスもあり、少しずつ修正していっているはずなのですが、自分でもどこをどう間違えてるかわからない状況であり、依然として混沌としておりますw
もしかするとModの管理の悪さが影響しているかもしれません。最初はNMMを使っていたのですが、Modをアンインストールした際にフォルダを丸ごと消失したことがトラウマとなり、
Dataフォルダに地道にコピペしながら、ノートに何のModのどのファイルを入れたかを記録し、wryebashでアクチベートだけするという変な(?)方法を用いて管理しております。
UniさんはMod Organizerを使用されているのですね。できれば、MOに完全に移行したいのですが、今のデータもそれなりに愛着が湧いてしまって、どうしようかなと考えております。

「自作フォロワークエスト」の記事、毎回とても楽しみにしております!Uniさんが記事を完成されたら、また意外な発見があるかもしれないので今から楽しみです!!
(ブログタイトルにも方向音痴の…とありますが、他に類を見ない面白い方向性を追求されていますよ!)
自分はPCを使っていながらも、ノートも書いちゃうようなアナログ脳なので、実現するかは分かりませんが、いつか同胞団の部隊が街道を巡回するようなModを自分で作ってみたいです。たまに仕事をしてる同胞団に野山でばったり会ったりしますが、メンバーは基本変わらないので物足りないです。ファルカス隊、アエラ隊など新しい部下がもっといたら面白いかとww
同胞団も、盗賊ギルドも、魔術師大学も、街以外の場所に人が居なさすぎですよね…帝国、ストクロ、サルモール並みに幅を利かせてほしいなぁ…。

Re:Mod修正中です

あのスコールさんはハンティング・グラウンド帰りでしたか^^;
特定の猛獣討伐イベントだけでなく、同胞団のメンバー達が街道を巡回警備してくれるようになったら、頼もしいですよね。か弱い一般人RPしている時は特に、彼らの存在がありがたくなりそうです。

自作フォロワークエストですが、第10回にサンプルファイルをあげてみました。もしかしたら当方の環境でしか動作しない、大変恥ずかしいものかもしれないのですが、何かのお役に立てば幸いです。
過去記事も見直して、なにか記述のし忘れが無いかチェックしてみますね。時々スクリーンショットだけ貼り付けて、それで説明したつもりになっているときがあるもので……。もし修正があれば、記事の冒頭に赤字で印をつけておきます~。

Author

UNI
Skyrimで遊ぶのも、CKで改造するのも好きなファンタジー好きです。
戦闘苦手で難易度は基本EASY、慣れてもNORMAL程度。 アンデッド恐怖症なので、ノルド遺跡探索が辛い……。

ブログ内検索

最新コメント

[10/20 放浪者]
[10/10 斥候]
[10/03 放浪者]
[10/02 放浪者]
[09/29 竜崎まりん]