忍者ブログ

方向音痴のSkyrim

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

フォロワー拡張Modの自作12【傭兵を雇ってみる2】

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

フォロワー拡張Modの自作12【傭兵を雇ってみる2】

傭兵を雇用するためのダイアログを作成します。
傭兵雇用のダイアログはこれだけ必要になります。
  • 無料での再雇用
  • お金を払って雇用
  • お金がなくて断られる
  • 仲間がいっぱいで断られる
4つもあります。そしてこれらのダイアログのConditionsには必ず、「現在の雇用人数(自作Global変数のFollowerCount)」と「最大雇用可能人数」の比較が入ってきます。
ダイアログを作る前に、一考。
このままこれまで通りのConditionsの作り方をすると、あとからAliasを増やしたり減らしたりしたくなった時、以前作ったダイアログを含め全てで「最大雇用可能人数」を変更しなくてはならず、大変面倒です。変更箇所が多くなるほど、ミスも起きやすくなるもの。
そこで、楽な方法をとることにしました。「最大雇用可能人数」のGlobal変数を作って、これを各ダイアログのConditionsで使うことにしましょう。



こんな感じで、人間フォロワー、動物フォロワーそれぞれの最大雇用数を保存するGlobal変数を作ります。この値はゲーム内で変更するようなものではないので、「Constant」にチェックを入れます。ちなみに「Constant」にチェックを入れたからといって、変数の値を絶対的に固定できるわけではないようです。ゲーム内でコンソールを使えば、値を変えられてしまいます。
しかし「Constant」にチェックを入れておくと、そのGlobal変数はセーブデータに記録されないので、セーブデータに無駄なものを混入させずにすみます。ロードすれば値は巻き戻るでしょう。
この値をコンソールで弄る人は製作者本人以外そうそういないはずなので、基本心配はないと思われます。



自作フォロワークエストを開き、一般フォロワーの雇用ダイアログを開きます。
まずはConditionsに、
・「PotentialHireling」ファクションに入っていない
という条件を追加します。
これで傭兵NPCにこのダイアログは出てこなくなります。



次にConditionsの最後の行。「SL01SPSFollowerCount」の値の比較を、こんな感じに変更します。
「Use Global」にチェックを入れるとGlobal変数を選べるようになるので、先ほど作った最大雇用数のGlobal変数を指定します。



最終的にこうなります。
仲間がいっぱいで断られるダイアログもこれと同じように変更して、傭兵NPCでそのダイアログが出ないように設定します。



動物フォロワーはGlobal変数の条件文を変えるだけでOKです。
こちらも雇用、雇用を断る、両方で変更します。


これで以前に作ったダイアログの修正は完了。
同じDialog Viewに、傭兵雇用のDialog Branchを新規作成します。


作成したBranchに、4つのダイアログを作成。
ダイアログの順序は、この記事の冒頭で並べた順番と同じにします。

Topic Textには、お金を払って雇用するときのセリフを入力しました。
「{ Consider yourself hired. (<global=hirelinggold> gold)」
<global=hirelinggold>は、Global変数「hirelinggold」をダイアログ内で表示させるText Replacementです。実際にゲーム内で表示させるには、「Quest Data」内にてGlobal変数を登録する作業も必要になります。



忘れないうちに、先にやっておきます。
右下の「Text Display Globals」の欄に、ダイアログで使うGlobal変数を「New」で登録。これで表示されるはず。



ダイアログの続き。最初に、「再雇用」ダイアログを作りました。
Promptには「また雇いたいんだけど……」と書き込みます。
一番上のConditionsでは、Global変数「GameDayPassed」の日時と「自作CanRehire」の日時を比較して、再雇用可能期間内であることを条件にしています。
「PotentialHireling」は、傭兵が入っているファクション。自作のフォロワーNPCなどにこのファクションをつけてあげると、傭兵として雇うことができるようになります。

EndのPapyrusFragmentには、
(GetOwningQuest() as SL01SPSHirelingScript).SL01ReHire(akSpeaker)
と入力。



2番目は普通の雇用ダイアログです。
返事にはSharedInfoを使いました。「買収に応じたときの返答」がぴったりでした。
Conditionsの最初では、プレイヤーが雇用料金分のゴールドを持っていることを条件にしています。
EndのPapyrusFragmentには、
(GetOwningQuest()as SL01SPSHirelingScript).SL01PayHireling(akSpeaker)
と入力。



3番目はお金が足りなかったときの返答。
Promptには「ツケで雇える?」みたいなことを書いて、お金が足りないことをプレイヤーに知らせます。「それでは何も変わらんぞ」と言われて断られます。



4番目は仲間がいっぱいのときの返答。
一般フォロワーのダイアログを共用させてもいいのですが、一応傭兵専用のを作っておきました。



こんな感じに仕上がりました。
OKしてQuestを確定し、きちんと動作するかテストをします。
雇用と解雇の処理ですが、ただで雇える一般のフォロワーに対し、傭兵は少し時間がかかります。恐らく複数のScript間で処理をやり取りしているためだと思います。自作のHirelingScriptは個々の処理が少ないのでいっそ削除して、各ダイアログのPapyrusFragmentや、SPSQuestScriptにそれぞれの処理を移動させた方が、動作が速くなるかもしれません。

テスト結果に問題がなければ、SPSQuestScriptのデバッグ用メッセージは全てコメントアウトします。
次は、フォロワー同士の仲間割れ防止に挑戦します。多分これで最後になる……はず。

前へ | 次へ
PR

コメント

※スパム対策のため、コメント内やその他の項目に「http://」や「https://」があると投稿できません。全角で入れていただくか、URLであることを明記して以降のアドレスのみ入れていただくかでお願いします。 For stopping spam comments, this form doesn't accept the following words, "http://" and "https://".

Author

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

ブログ内検索