忍者ブログ

方向音痴のSkyrim

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

AI Packageテンプレート

×

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

AI Packageテンプレート


冒険者向けの旅行用テンプレートが多めです。
Pablic Package Dataの各項目は、できる限りバニラテンプレートで使われている項目と名前を合わせています。機能も同じにしてあります。
オリジナルで追加した項目のみ、説明をつけました。

 目次 
【汎用テンプレート】【AllDay系Sandboxテンプレート】【Follow系テンプレート】【特殊なテンプレート】


【汎用テンプレート】
既存のテンプレートを拡張したり、よりゆるい条件で使えるようにした、使用頻度が多そうなテンプレートです。

・SL00SLFTemplateSandboxMultiLocation
バニラのテンプレート「SandboxMultiLocation」とほぼ同じ使い方ですが、30箇所まで指定することができます。ただし各ロケーションでの解錠機能(Unlock On Arrival?)はありません。
各ロケーションで「食べる」、「家具を使う」、「マーカーを使う」の行動は必ず行います。「睡眠をとるか」、「無目的にウロウロするか」の設定のみ可能です。
Flagsで「Prefered Speed」にチェックを入れていない場合、各ロケーション間は早足で移動します。

【Public Package Data】
  • Location01~30:すべて埋める必要はありません。番号を飛び飛びに使っても大丈夫ですが、Location1は必ず使用してください。
  • LocationTime01~30:各ロケーションで過ごす時間(リアル時間の秒数)。ゼロのままだと、該当ロケーションには立ち寄らなくなります。特に「LocationTime01」がゼロだと、Location01の場所でずっと過ごします。
  • Random?:各ロケーションをランダムに回るか、順番に回るかを決められます。推奨は"True"です。AI Packageが何らかの理由でリセットされると、行動が一番最初に巻き戻されてしまいます。そのため1~30番のロケーションを順番に巡らせるつもりで"False"に設定しても、リセットされるたび1番のロケーションに戻ってしまい、実質適切に機能しません。町から町への長距離移動だと、結局1番~3番あたりのロケーションしか回れないようです。ひとつの町の中だけなど、各ロケーション間の距離が近ければ多少は機能するかもしれません。

・SL00SLFTemplateEatSitorStand
バニラの「Eat」テンプレートと挙動が微妙に異なる食事用テンプレート。
バニラの「Eat」同様椅子に座って食べるのが基本ですが、椅子が見つからなければ即立ち食いを行えます。自分の周りに落ちている食べ物を探して拾う行動は行いません。旅人NPCなどに場所を問わず食事をさせるのに便利です。
「Fake Food?」を"False"にすると、所持品に食べ物があった場合それを実際に消費して飲食します。食べ物がなければアニメーションのみ行います。「Fake Food?」が"True"だと飲食アニメーションのみになります。


【AllDay系Sandboxテンプレート】
これひとつで24時間分の生活を大雑把に決められます。日中の行動と睡眠行動がセットになったテンプレート。睡眠に指定された場所以外では眠りません。単純な生活を営むNPCにはこのテンプレートを使用したAIひとつで十分ですし、このAIをベースとして上位に別AIを設定すれば複雑な生活パターンを手軽に作成することも可能です。

・SL00SLFTemplateAllDaySandbox
このPackageひとつで、朝(8:00~11:00)、昼夕(11:00~18:00)、晩(18:00~23:00)、睡眠(23:00~8:00)と24時間の過ごす場所をまとめて指定できます。すべてのロケーションでSandboxのみの行動を行います。睡眠で設定されたロケーションでだけ、気が向いたら寝ます。昼夕のみ、最大3つまで異なるロケーションをランダムに巡らせることが可能。一箇所だけでいいという場合は「AfternoonLocation 1」のみに設定を入れ、「AfternoonLoc Time 1」をゼロにしてください。

・SL00SLFTemplateAllDayWorkandSleep
このPackageひとつで日中(8:00~20:00)、晩(20:00~23:00)、睡眠(23:00~8:00)を決められます。日中はSandboxによる行動を最大2つのロケーションでとりますが、睡眠は指定されたロケーションで自分が使えるベッドを積極的に探します。ベッドがなければSandboxの行動をとり続けます。
店主など生活リズムが単純なNPC向け。

・SL00SLFTemplateAllDaySleepSandbox
このPackageひとつで日中(7:00~23:00)、睡眠(それ以外の時間)を決められます。睡眠は自分が使えるベッドを積極的に探します。AllDay系のテンプレートではもっとも単純なものです。


【Follow系テンプレート】
指定されたターゲット(リーダー)を追従するテンプレートです。リーダーはNPC(Actor)を想定して作っています。
一般的なフォロワーと似たような挙動をとらせることが可能です。セラーナのように追従対象が止まっていたり近くにいるとSandboxによる自由行動を行い、追従対象が隠密姿勢をとると自分も隠密します。
Actor Valueの「WaitingForPlayer」を"1"に設定すると待機も行います。

・SL00SLFTemplateFollowSandbox
リーダーについていく「Follow」Packageを拡張したテンプレートです。他Follow系テンプレートの基礎となる構造をもっています。
Sandboxによる自由行動は、居住地ではリーダーが近くにいる時、その他の場所ではリーダーが動かずにいる時だけ行います。リーダーが隠密姿勢をとれば自由行動を控え、自身も隠密姿勢をとります。そのほか設定によりいくつかの行動を追加で行います。

【Public Package Data】
  • Target to Follow:追従対象となるリーダーを指定。
  • Follow Min/Max Radius:追従時のリーダーからとる距離の設定。Maxより遠くにいると走って追いつこうとし、Minより近くにいると立ち止まります。MinとMaxの間の距離にいるときは、リーダーの歩調と合わせます。
  • Accompany?:"True"にすると、リーダーに追従しつつも、並んで歩いたり先行したりすることがあります。まれにはぐれてボーっと突っ立ていることもあります。リーダーがプレイヤーのとき設定は強制的に無効となります。"False"にすると、リーダーの後ろをついていくだけになります。この設定だと、リーダーからはぐれることはほとんどありません。
  • SandboxTriggerRadius:自分とリーダーの距離がこの範囲内だと、Sandboxによる自由行動を行います。範囲を外れると追従行動を行います。
  • SandboxLocation:推奨はRadiusのみの変更です。Radiusは「SandboxTriggerRadius」以下がお勧め。
  • AllowSleeping?:睡眠を許可するかどうか。"True"だと自由行動中に寝たければ寝るほか、0時~6時までの時間帯にリーダーが「SandoboxTriggerRadius」範囲内にいれば場所を問わず、寝るためのベッドを探します。リーダーが範囲から離れるか戦闘の構えを取ると睡眠行動はキャンセルされます。
  • UseMagic Candlelight?:21時~4時の時間帯、屋外かつ居住地以外の場所で、たいまつを持っていなければ「灯火」の魔法を使います。隠密をしていると使いません。「灯火」を覚えていなくてもマジカさえあれば使えます。
  • UseMagic Muffle?:隠密開始時、「消音」魔法を使います。すでに消音の効果がかかっていたり、装備品などで同等の効果を得ているときは使いません。「消音」を覚えていなくてもマジカさえあれば使えます。

・SL00SLFTemplateFollowFleeSandbox
上記「SL00SLFTempleteFollowSandbox」の機能に加えて、「ある対象に近づかない」行動を追加したテンプレートです。設定次第で前述とまったく同じテンプレになるのですが、使うシーンが限られていそうなのでわけました。
ある対象にプレイヤーを設定するとプレイヤーを早足で避けるようになります。たぶんそのNPCに通路を塞がれる問題が軽減されます。ある対象にリーダーを設定すると、リーダーから必ず一定の距離をおいて追従する行動になります。

【Public Package Data】
  • Flee?:避ける行動をとるかどうか。"False"だと上述テンプレートとまったく同じ挙動になります。
  • FleeTarget:避ける対象。
  • FleeTrigger:避ける距離。FleeTargetがこの範囲に入ると、範囲外まで早足(fast walk)で逃げます。

・SL00SLFTemplateFollowFleeAcquireSandbox
上記「SL00SLFTempleteFleeFollowSandbox」の機能から「灯火」「消音」使用機能を取り除いた代わりに、アイテムを探して拾う行動を行えるテンプレートです。「Target Criteria」の設定にクセがあるため、慣れないとやや扱いづらいです。
探すアイテムは最大2種類設定できるほか、別枠で植物採集もさせることができます。アイテムの取得行動は居住地や軍キャンプ以外の場所でのみ行います。基本的に盗みは行いません。
拾いたいアイテムが手の届かない場所にあると、なんとかして近づこうと無駄な努力を続けます。リーダーが遠くに離れればあきらめてついてきます。

【Public Package Data】
  • FindLocation:アイテムを探す範囲の指定。"Near Self"かデフォルト設定の"Target to Follow"を中心とした範囲を設定してください。
  • AcquireAllowRadius:居住地以外の場所にいるとき、リーダーとの距離がこの範囲内でのみ、取得行動を行います。「FindLocation」で設定したRadiusより少し大きめだとゆとりをもって拾えます。アイテムをうまく拾えず往生していても、リーダーがこの距離だけ離れればあきらめてついてきます。
  • Target Criteria:取得するアイテムの設定。ObjectTypeで設定すると「武器全般(Weapon:Any)」「薬全般(Posion)」などModで追加されたアイテムも含めて取得させることが可能です。FormListを指定しても無効になるなど有効になる設定が限られているので、設定が機能しているかのテストプレイが少々手間です。探すのは1種類でいいという場合は、使わないTarget Criteriaを"NONE"のままにしておいてください。
  • AcquireRandomizeList?:FindLocation内で見つけたアイテムの取得する順番をランダムに並べ替えます。"False"にすると、FindLocationの中心に近いものから拾っていく傾向になるようです。複数のNPCがアイテムを拾う場合は"True"推奨。同じアイテムの取得競争にならずにすみます。
  • Gather Flora?:植物を集めるかどうか。スキーヴァの丸焼き、吊るしたウサギ、雉、サーモン、乾燥ハーブも対象になります。所有権の判定ができない方法で取得するため、場合によっては盗むこともあります(狩人や漁師のキャンプで盗みになってしまう可能性が高いです。怒られませんが)。


【特殊なテンプレート】
使えるシーンが限られている特化型テンプレート。

・SL00SLFTemplateCaravanFollower
カジートキャラバン追従に特化したテンプレートです。リーダーが移動していると追従のみ、動いていないとその近くで自由行動を取るシンプルな挙動。
リーダーを優先度順に4人まで設定でき、リーダーが死ねば次に優先度の高いリーダーに追従します。
設定したすべてのリーダーが死亡するとAI自体が止まり、棒立ちになります。このテンプレートを使用する際は、リーダーに設定したNPCの誰か一人が生きている状態でのみPackageが実行されるようにしてください。

・SL00SLFTemplateSawMillLoadandSawRaw
製材所の手伝い用Package。工場主がいる場合は丸太降ろしに徹しますが、工場主が近くにいないときや死亡した場合、裁断用のレバーを引く行動も行います。
丸太の裁断機はScriptがついた特殊なオブジェクトであるため、工場主以外のNPCに裁断機をスムーズに使用させるのは困難です。このPackageはそれを可能にします。動作が少し不安定なので、プレイヤーなどに仕事の横取りをされるとAIが止まることがあります。止まっていたら話しかけると大体直ります。ほっといてもそのうち直ります。
テンプレートの名がついていますが、実際には半テンプレートです。一度このテンプレートを設定してから「None」にし、Procedure Treeに変更を加える必要があります。

【Public Package Data】
MillOwner:工場主を設定します。
ResourceObject:使用する裁断機を指定します。
Lever:裁断機を作動させるレバーを設定します。
SandboxLocation:裁断中どこでリラックスするかを決めます。
Energy:リラックス中、一つの行動にかける時間。値が小さいほどせわしなく動きます。

上記以外の「Public Package Data」は弄らないでください。
次にProcedure TreeのConditionsに修正を加えます。


Procedure Tree欄にある、「Procedure:Activate」「Procedure:Activate」「Procedure:Sandbox」それぞれで以下の変更を行います。
  1. 変更するProcedureをクリックして選択。
  2. 画面下の「Item Conditions」のところに一行だけConditionが設定されています。これをダブルクリック。
  3. Condition Itemというウィンドウが開きます。真ん中のボタンをクリック。
  4. Select Function Parametersというウィンドウが開きます。「Parameter 1」のところのボタンをクリックして、製材所の裁断機を設定してください。「Parameter 2」に"::ResourceState_var"が表示されているのを確認します。表示されていなければ、ドロップダウンメニューから選択しなおしてください。ここまでできたらOKボタンを押して順にウィンドウを閉じていき、Conditionを確定します。
あとはScheduleタブなどでこのPackageを実行する時間などを決めれば完成です。
「SLFollowers」では「SL00SawMill」から始まるIDで、アンガの工場などでの具体的なスケジュールを作っています。
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程度。 アンデッド恐怖症なので、ノルド遺跡探索が辛い……。

ブログ内検索