前回のCSスクリプト自作方法 Part2 (基本サンプル編)で作った指輪のスクリプトをベースにして、NPCのAIパッケージをを操作する方法をご紹介します。作業は単純で、AIパッケージのConditionsタブの設定方法のお話になります。
スクリプトとAIパッケージ編集
まず、前回作ったスクリプトの体力回復に関る部分を削除し、変数の値代入に関するところだけ残しました。装備をすれば変数SampleEquipが1になり、装備を解除すれば0になるというだけの極めてシンプルなスクリプトになりました。

今回はこの指輪を装備したとにNPCをプレイヤーに付き従わせるようにしたいと思います。サンプルに使うのはコロール(Chorrol)・グレイメア亭(The Grey Mare)のエンフリッド(Emfrid)を使います。もちろん、自作したNPCやCreatureに同じ内容を設定することもできます。
初めに、この指輪に添付されているスクリプト内の変数を参照可能にするために、Render Windowで指輪をダブルクリックして、Persistant Referenceにチェックを入れます。ここにチェックの入っていないオブジェクトは参照できないので、今回の作業に限らず必要な作業です。指輪は前回と同じくコロールの魔術師ギルドに配置しています。これを行ってからAIパッケージの編集作業に移ります。

※Render WindowとAIパッケージ編集
→ Render Windowの簡単な使い方
→ AIパッケージ編集画面
→ Follow AIパッケージ
エンフリッド(Emfrid)のAIパッケージを開いたら、AIパッケージ欄を右クリックしてNewを選択し新しいパッケージを追加します。IDは任意のものを入力し、Package Typeには「Follow」を、そして、TargetにはPlayerを選択します。

次にConditionsタブをクリックしします。このタブはAIが作動する条件を入力する部分です。
まず、ウインドウ左下のNewのボタンを押します。すると、空白だったリストに1行追加されます。このままでは、何も設定されていないので、Newの右側にあるプルダウンメニューから「GetScriptVariable」を選択します。これは、AIパッケージの作動conditionになんらかのスクリプトの変数を使用するという意味です。
ここまで済んだら、その右側にあるCondition Parametersの部分にあるボタンを押します。すると下図のようなウインドウが開くのでParameter1の囲みにあるTARGETボタンを押します。この項目はスクリプトが添付されているオブジェクトを選択するものです。

下図のように、Cell欄には指輪が配置されているコロール魔術師ギルドを選択します。そしてRef欄にはスクリプトが添付されている指輪のIDを選択します。

次に、Parameter2の部分には、スクリプトの変数(今回はSampleEquip)を選択します。

ここまで済んだら、下図のようにウインドウ右下の数式の部分を「==」と「1」とします。これで、変数が1の時(=指輪が装備されている時)にエンフリッドはプレイヤーに追従するように設定されました。

下図のようになっていることを確認して、問題なければ作業完了です。

テストプレイ
指輪を装備してグレイメア亭へ行くとエンフリッドが附いてくるようになりました。

そして、指輪を外してしばらくすると、帰って行きました。無事作動したようです。

<注意点>
この方式の場合はFollowパッケージは作動/解除の切替に約10秒ほどのタイムラグが発生することがあります。
スクリプトとAIパッケージ編集
まず、前回作ったスクリプトの体力回復に関る部分を削除し、変数の値代入に関するところだけ残しました。装備をすれば変数SampleEquipが1になり、装備を解除すれば0になるというだけの極めてシンプルなスクリプトになりました。

今回はこの指輪を装備したとにNPCをプレイヤーに付き従わせるようにしたいと思います。サンプルに使うのはコロール(Chorrol)・グレイメア亭(The Grey Mare)のエンフリッド(Emfrid)を使います。もちろん、自作したNPCやCreatureに同じ内容を設定することもできます。
初めに、この指輪に添付されているスクリプト内の変数を参照可能にするために、Render Windowで指輪をダブルクリックして、Persistant Referenceにチェックを入れます。ここにチェックの入っていないオブジェクトは参照できないので、今回の作業に限らず必要な作業です。指輪は前回と同じくコロールの魔術師ギルドに配置しています。これを行ってからAIパッケージの編集作業に移ります。

※Render WindowとAIパッケージ編集
→ Render Windowの簡単な使い方
→ AIパッケージ編集画面
→ Follow AIパッケージ
エンフリッド(Emfrid)のAIパッケージを開いたら、AIパッケージ欄を右クリックしてNewを選択し新しいパッケージを追加します。IDは任意のものを入力し、Package Typeには「Follow」を、そして、TargetにはPlayerを選択します。

次にConditionsタブをクリックしします。このタブはAIが作動する条件を入力する部分です。
まず、ウインドウ左下のNewのボタンを押します。すると、空白だったリストに1行追加されます。このままでは、何も設定されていないので、Newの右側にあるプルダウンメニューから「GetScriptVariable」を選択します。これは、AIパッケージの作動conditionになんらかのスクリプトの変数を使用するという意味です。
ここまで済んだら、その右側にあるCondition Parametersの部分にあるボタンを押します。すると下図のようなウインドウが開くのでParameter1の囲みにあるTARGETボタンを押します。この項目はスクリプトが添付されているオブジェクトを選択するものです。

下図のように、Cell欄には指輪が配置されているコロール魔術師ギルドを選択します。そしてRef欄にはスクリプトが添付されている指輪のIDを選択します。

次に、Parameter2の部分には、スクリプトの変数(今回はSampleEquip)を選択します。

ここまで済んだら、下図のようにウインドウ右下の数式の部分を「==」と「1」とします。これで、変数が1の時(=指輪が装備されている時)にエンフリッドはプレイヤーに追従するように設定されました。

下図のようになっていることを確認して、問題なければ作業完了です。

テストプレイ
指輪を装備してグレイメア亭へ行くとエンフリッドが附いてくるようになりました。

そして、指輪を外してしばらくすると、帰って行きました。無事作動したようです。

<注意点>
この方式の場合はFollowパッケージは作動/解除の切替に約10秒ほどのタイムラグが発生することがあります。
今回は簡単なスクリプトを例にとってスクリプトの書き方についてお話します。この記事でのサンプルアイテムは「装備しているとプレイヤーの体力が30より小さくなった時に、体力を全快してくれる指輪」です。まずは、必要なものをリストアップするところから始めます。
(※参考画像はクリックで拡大します)
必要なもの
基本的な考え方として、思い浮かんでくることは色々ありますが、終いから考えると分かりやすいと思います。まず、具体的な処理を行う部分では、以下の3つが必要になりそうです。
・回復する命令文
・体力が30より小さいことを取得する条件文
・指輪を装備していることをあらわす条件文
次に、その準備として、下のものも必要になりそうです。
・指輪を装備していることあらわす変数
・装備/非装備に従って変数が切り替わるスイッチ
・変数そのもの
上記のものをスクリプト内に書き込み、好きな指輪に仕込めば、うまく作動させることが可能でしょう。
スクリプト記述
まずは回復するfunction自体を書かなければいけません。使用するfunctionは「ResetHealth」です。スクリプトの構文はfunction毎に違うので、それぞれCSヘルプで構文をチェックする必要はあります。今回は「○○.ResetHealth」となります。そして、回復するのはゲームプレイ中なので、「Begin Gamemode-End」ブロックに記述します。
----参考スクリプト----
Begin GameMode
player,ResetHealth
End
-------------------
まず、核となる部分が完成しました。これが意味するのはゲームプレイ中に「プレイヤーの体力を全快させなさい」という意味です。すなわち、このままでは常に全快させる命令が実行されてしまいます。次に「体力が30より小さい時は」という条件を入れないといけません。体力を参照するfunctionは「GetActorValue」を使用します。構文は「○○.GetActorValue ●●」です。○○は人、●●は属性値を指定します。
----参考スクリプト----
Begin GameMode
If(player.GetActorValue Health<30)
player,ResetHealth
Endif
End
-------------------
これで、プレイヤーの体力が30より小さい時は自動的に回復するようになりました。しかしながら、これでは、例の指輪を装備しているかどうかに関らず、30より小さい時にいつでも回復してしまいます。ここで変数を1つ作成します。指輪を装備していることを表すために「SampleEquip」という変数を自作します。そして、この変数が1の時は装備中、0の時は非装備であると考えてスクリプトを追記します。
----参考スクリプト----
short SampleEquip
Begin GameMode
If(SampleEquip==1&&player.GetActorValue Health<30)
player,ResetHealth
Endif
End
-------------------
この文が示すのは、SampleEquipが「1」で、なおかつ、体力が30より小さい時はプレイヤーの体力を全快させなさいという意味です。ここまでの作業で、実際に処理を行う核になる部分は完成しました。次に、SampleEquipという変数がサンプル指輪の装備/非装備を表すような記述が必要です。
さきほどまで記述してきたのは「Begin GameModeブロック」でしたが、特定の状況を指定してスクリプトを実行させるコマンドが用意されているのでそれを使います。今回使うのは「OnEquip」と「OnUnEquip」です。「OnEquip」は装備した時に実行され、「OnUnEquip」は装備を外した時には実行されます。
----参考スクリプト----
short SampleEquip
Begin OnEquip
set SampleEquip to 1
End
Begin OnUnEquip
set Sample Equip to 0
End
Begin GameMode
If(SampleEquip==1&&player.GetActorValue Health<30)
player,ResetHealth
Endif
End
-------------------
これでスクリプトが完成しました。

自作したスクリプトを保存し、好きな指輪に添付します。これにより、その指輪がプレイヤーの近くにいる場合はそのスクリプトが随時実行されます。

※アイテムの複製方法は以下の記事もお使いください。
→ オブジェクト(Object)複製の手順
→ 装備品の性能を編集する手順
そして、Render Widowで適当な場所に配置します。今回もコロール魔術師ギルドに設置しました。

※Render Windowについては以下の記事もよろしければ。
→ Render Windowの簡単な使い方
最後に必須ではありませんが、装備した時にこの指輪が特別なものであることを示す文や、回復した時にこの指輪の効果であることが判る文が表示されるようにしておくと面白いかもしれません。ダイアログを表示するには「MessageBox」、画面の左上に表示するには「Message」を使います。構文は「MessageBox ""」、「Message ""」であり、""の中に表示したい文章を記述します。

テストプレイ



(※参考画像はクリックで拡大します)
必要なもの
基本的な考え方として、思い浮かんでくることは色々ありますが、終いから考えると分かりやすいと思います。まず、具体的な処理を行う部分では、以下の3つが必要になりそうです。
・回復する命令文
・体力が30より小さいことを取得する条件文
・指輪を装備していることをあらわす条件文
次に、その準備として、下のものも必要になりそうです。
・指輪を装備していることあらわす変数
・装備/非装備に従って変数が切り替わるスイッチ
・変数そのもの
上記のものをスクリプト内に書き込み、好きな指輪に仕込めば、うまく作動させることが可能でしょう。
スクリプト記述
まずは回復するfunction自体を書かなければいけません。使用するfunctionは「ResetHealth」です。スクリプトの構文はfunction毎に違うので、それぞれCSヘルプで構文をチェックする必要はあります。今回は「○○.ResetHealth」となります。そして、回復するのはゲームプレイ中なので、「Begin Gamemode-End」ブロックに記述します。
----参考スクリプト----
Begin GameMode
player,ResetHealth
End
-------------------
まず、核となる部分が完成しました。これが意味するのはゲームプレイ中に「プレイヤーの体力を全快させなさい」という意味です。すなわち、このままでは常に全快させる命令が実行されてしまいます。次に「体力が30より小さい時は」という条件を入れないといけません。体力を参照するfunctionは「GetActorValue」を使用します。構文は「○○.GetActorValue ●●」です。○○は人、●●は属性値を指定します。
----参考スクリプト----
Begin GameMode
If(player.GetActorValue Health<30)
player,ResetHealth
Endif
End
-------------------
これで、プレイヤーの体力が30より小さい時は自動的に回復するようになりました。しかしながら、これでは、例の指輪を装備しているかどうかに関らず、30より小さい時にいつでも回復してしまいます。ここで変数を1つ作成します。指輪を装備していることを表すために「SampleEquip」という変数を自作します。そして、この変数が1の時は装備中、0の時は非装備であると考えてスクリプトを追記します。
----参考スクリプト----
short SampleEquip
Begin GameMode
If(SampleEquip==1&&player.GetActorValue Health<30)
player,ResetHealth
Endif
End
-------------------
この文が示すのは、SampleEquipが「1」で、なおかつ、体力が30より小さい時はプレイヤーの体力を全快させなさいという意味です。ここまでの作業で、実際に処理を行う核になる部分は完成しました。次に、SampleEquipという変数がサンプル指輪の装備/非装備を表すような記述が必要です。
さきほどまで記述してきたのは「Begin GameModeブロック」でしたが、特定の状況を指定してスクリプトを実行させるコマンドが用意されているのでそれを使います。今回使うのは「OnEquip」と「OnUnEquip」です。「OnEquip」は装備した時に実行され、「OnUnEquip」は装備を外した時には実行されます。
----参考スクリプト----
short SampleEquip
Begin OnEquip
set SampleEquip to 1
End
Begin OnUnEquip
set Sample Equip to 0
End
Begin GameMode
If(SampleEquip==1&&player.GetActorValue Health<30)
player,ResetHealth
Endif
End
-------------------
これでスクリプトが完成しました。

自作したスクリプトを保存し、好きな指輪に添付します。これにより、その指輪がプレイヤーの近くにいる場合はそのスクリプトが随時実行されます。

※アイテムの複製方法は以下の記事もお使いください。
→ オブジェクト(Object)複製の手順
→ 装備品の性能を編集する手順
そして、Render Widowで適当な場所に配置します。今回もコロール魔術師ギルドに設置しました。

※Render Windowについては以下の記事もよろしければ。
→ Render Windowの簡単な使い方
最後に必須ではありませんが、装備した時にこの指輪が特別なものであることを示す文や、回復した時にこの指輪の効果であることが判る文が表示されるようにしておくと面白いかもしれません。ダイアログを表示するには「MessageBox」、画面の左上に表示するには「Message」を使います。構文は「MessageBox ""」、「Message ""」であり、""の中に表示したい文章を記述します。

テストプレイ



お知らせ
コンテンツ
目次から各記事をご覧いただけます。攻略と狩場についてはxbox360版共通です。
Julienne 更新情報
Ver 4.0をリリースしました。
Julienneについてはこちらです。
リンクについて
当ブログへのリンクは大歓迎です。
その他
なんでもお気軽にコメントどうぞ!
Julienne 更新情報
Ver 4.0をリリースしました。
Julienneについてはこちらです。
リンクについて
当ブログへのリンクは大歓迎です。
その他
なんでもお気軽にコメントどうぞ!
コンテンツ
総目次
→ 総目次 (167)
カテゴリ別目次
→ 妄想プレイ日記 (21)
→ 攻略 (16)
→ 寄り道 (2)
→ ハック&スラッシュレポート (39)
→ CS (Construction Set) (29)
→ Mod (55)
→ Oblivion 雑記 (5)
リンク集
→ Oblivion リンク集
拍手コメントへのお返事
→ お返事
※()内は記事数です。
→ 総目次 (167)
カテゴリ別目次
→ 妄想プレイ日記 (21)
→ 攻略 (16)
→ 寄り道 (2)
→ ハック&スラッシュレポート (39)
→ CS (Construction Set) (29)
→ Mod (55)
→ Oblivion 雑記 (5)
リンク集
→ Oblivion リンク集
拍手コメントへのお返事
→ お返事
※()内は記事数です。
最近の記事
最近のコメント
このブログ内を検索
プロフィール
Author:pela
360版からPC版に移行して、悪党NPCの成敗とお気に入りNPC大軍団編成を目標に遊んでおります。
本当におバカな妄想ブログですが、どうぞよろしくお願いします。
