忍者ブログ

方向音痴のSkyrim

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

Procedure Treeレシピ02【製材所で働く】

×

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

Procedure Treeレシピ02【製材所で働く】

製材所で、「丸太をおろす→レバーを押す」という一連の行動を作ってみます。



最初に製材所で働くNPCのPackageを参照します。
こちらはミックスウォーター工場の主ギルフレさんのスケジュール。
丸太を切る作業に関してはどこの工場主も同じように、上記3つのPackageを持っています。
ところがこれとそっくり同じPackageを自作NPCにつけても、ギルフレさんのようにてきぱきと動いてはくれません。丸太をおろすことはできても、レバーを押す行動が1時間に1回しかできません。



丸太をおろすPackage。PackageTempleteは「ActivateSpecialFuniture」。これはスケジュール中、指定されたオブジェクトを何度も繰り返しアクティベートする行動になります。
Conditionsタブ内を見ると、こんな条件が設定されています。



レバーを押すPackage。PackageTempleteは「Activate」。これはスケジュール中、指定した回数だけオブジェクトをアクティベートする行動。ここでは1回のみ指定されています。
Conditionsタブ内を見ると丸太おろしのPackageと似ていますが、Valueが「2」のときだけ実行するようになっています。
どちらのPackageでも、丸太を切る機械の「ResourceState_var」がどの値をとるかによって、実行が制御されています。

以上からPackageの設定どおりだと、自作NPCが1時間に1回しかレバーを押せない理由が分かります。むしろ工場主が1時間に何度でもレバーを押すことができるほうが、不思議です。



実はこの機械、Script付きの特殊なオブジェクトになっています。
Scriptを見ると、Propertyに工場主が「Worker」として指定されています。工場主が1時間に何度でもレバーを引けるのは、このScriptで自分が指定されているから。定期的にAI Packageが再計算&実行されているのです。
それでは「ResourceState_var」はどこに隠されているのかというと。


 
機械についているScript「ResourceObjectSawMillScript」……の親にあたる「ResourceObjectScript」に隠れていました。
下のほうには、ResourceStateに関するPropertyも並んでいます。
これによると、ResourceState「0」が「丸太のロード待ち」、「2」が「裁断準備完了」の状態を表していることが分かります。「1」は「裁断中」です。そして「Worker」のAI PackageはStateが変わるタイミングで再計算されています。

Scriptで指定できる「Worker」は一人のみ。では自作NPCを製材所で働かせようと思ったら、彼のために新しい裁断機を用意し、それの「Worker」に彼を指定すればいいことになります。
しかしギルフレさんの手伝いをさせたい場合はどうすればいいのか。考えた挙句、ギルフレさんが持つ3つのスケジュールをひとつのAI Packageでごり押し再現することにしました。

AI Package内のProcedure Treeは、非常に短いスパンで常に実行条件がチェックされているようです。これを利用して、Scriptが「Worker」のAI Packageを再計算する処理と似たような効果を出すことができます。



そしてできたのがこちら。
工場主が近くにいない場合(死亡も含む)、丸太をおろしてレバーを押し、裁断中はリラックスした行動をとる。
工場主が近くにいるときは、丸太おろしに徹する。
以上の行動をとるAI Package Templeteです。
Procedure Treeで設定している「工場主の死亡判定」や「自分と工場主との距離」は、Public Package Dataの「MillOwner」を使って行っています。
Public Package Dataは「Public」フラグをすべてYesにしました。これでこのTempleteを参照するAI Packageに、必要な値を全部表示することができます。

このTempleteは一般的なTempleteと違って、あとからさらにProcedureTreeへの微調整が必要な不完全Templeteとして使用します。

新しくAI Packageを作ったら、まずこれをTempleteとして設定。ProcedureTreeや各種Dataを読み込みます。読み込んだらTempleteを「None」に変更して、それぞれの値を各製材所に合わせて埋めていきます。
そしてProcedure Treeで条件設定しているResourceStateの値の参照を、各製材所の裁断機を直接指定して行います。


 
アンガの工場専用Packageはこうなります。

ひとつ問題点としては、丸太をおろしにいく「Procedure:Activate」が動いているとき、プレイヤーや他のNPCが先に丸太を下ろし始めると、棒立ち状態になって動けなくなること。
話しかける、または時刻が変わるタイミングで棒立ちは解消されるようです。

ドラゴンブリッジとソリチュードの製材所は使用されていないようなので、このPackageをつけた自作の労働者を置いても楽しいかもしれませんね。

作成したAIは「SLPackages」にて公開しています。ご興味があればぜひどうぞ。

前へ | 次へ
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程度。 アンデッド恐怖症なので、ノルド遺跡探索が辛い……。

ブログ内検索