CSを使えばアイテムやNPCのステータス変更などのオブジェクト操作を行うことができ、自由に配置することもできます。また、AIパッケージで自由に動き回らせることもできます。これだけでも十分楽しいのですが、もう一歩進んでスクリプトを使えば独特な効果を得ることが可能です。
今回は数パートの記事に分けてスクリプトを使い方を説明します。ただ、私は未だスクリプト初心者ですので、今からOblivionのスクリプトを始めようとされる方の初めの一助になる範囲での記事となります。
また、1つのことを実行させる為に書くスクリプトは各人様々です。私が提示するものより、よりスマートな書式や理解方法も多々あると思います。私としては作動すればそれでOKという、アバウトな考え方で進めてまいりますので、参考としてご利用ください。よろしくお願いします。
スクリプトを始めるに当たって、ぜひ手許に置いておきたいのがCSのヘルプです。wikiで日本語化されたものが紹介されています。このページの最下部に日本語ヘルプファイルへのリンクがあります。
概念
CSにおけるスクリプトとは、ゲーム内の事象を操作するための命令文の集合体と言えるかもしれません。スクリプトにはさまざまな条件文や命令文が並んでいます。こういったものが集まって、「ある時はA」、「あるときはB」などというように事象を操作することができるのです。
・・・?
こんな難しい書き方をすれば余計に判りにくいかもしれませんので、大雑把に考えます。
重要なのは、
・いつ
・どういう条件で
・何をするのか
ということになります。
この中で最も重要なのは「何をするのか」という部分です。それはOblivionに備わっていない機能を動かすことはできませんし、事象を発生させる核になる部分だからです。よって、実現したいアイデアがある場合は、それがOblivionで可能なことであるかどうかを先に考えた方がやりやすいと思います。
この記事では具体的な操作方法に触れず、どういうものなのかを説明しています。
1.何をするのか? (functionとAIパッケージ)
スクリプトを使う時にまず初めに覚えたいのがfunctionとAIパッケージです。この2つを使って、事象を発生させたり、NPCを動かしたりできるようになります。
functionとはゲーム内で起こる様々な事象を実際に実行させたり、現在どういう状態なのかを取得したりするのに使います。下の図はCSヘルプのfunction一覧画面です。たくさんのコマンドが用意されています。主に直接的に事象を操作するのに使います。
functionに備わっている機能は直接的に事象を発生させるコマンドがほとんどです。これを全部覚えるのはほとんど不可能ですし、ヒマな時に眺めて、「今度はこういうことをやってみよう」と思ってメモしておくと後々便利だと思います。

一方、AIパッケージの方はNPCやCreatureに一定の行動を起こさせる為に使います。例えば、食事、睡眠、移動、追従など一通りの動作が用意されています。下の図はCSヘルプ内のAIパッケージ一覧です。それぞれの項目をクリックすると、詳しい設定方法が表示されます。

※当ブログ内のAIパッケージ記事もよろしければ参考にお使いください
→ AIパッケージ編集画面
→ Follow AIパッケージ
→ Wander AIパッケージ
→ Sleep AIパッケージ
→ Use Item At AIパッケージ
2.どういう条件で (変数とその設定と変更)
例えば、AIパッケージで作動条件を指定する場合、主に日時で指定します。「何曜日の何時から何時間、どこそこへ向かう」といった設定がこれに相当します。こういった条件を新たに作るのが変数です。変数は一部を除いてユーザーが独自で用意します。ここからスクリプト記述が始まります。
α.変数を作る
まず、GameplayメニューからEdit Scriptsを選択し、スクリプト編集ウインドウを表示させます。次に、編集画面でScript>Newを選択すると、文字を打ち込めるようになります。(下図を参考にしてください)



上図のようにまずスクリプト名を記述します。そして、変数を宣言します。最後にスクリプトを添付する対象を指定します。(具体的な使い方は別項にて。まずはこういう仕組みのものだということを書いております)
<構文>
スクリプト名構文
→ scn スクリプト名
変数の宣言構文 (short以外の宣言もあります)
→ short 変数名
添付対象
→ プルダウンメニューから選択
ここまで済んだら、セーブします。セーブされたスクリプトはオブジェクトやNPC、クエストなどのスクリプト設定用のプルダウンメニューに表示されるようになるので、そこで指定します。
<ポイント>
スクリプトを用意したら、それをなんらかのオブジェクトやクエストに添付しなければゲームでは有効になりません。オブジェクトに設定した場合は、そのオブジェクトがプレイヤーの近くにいるときに作動し、クエストに添付した場合はそのクエストが有効な時に作動します。
例えば、コンパニオンにある行動をさせたり、アイテムが特殊な効果を持つためのスクリプトなら、そのオブジェクト自体に添付し、一方、常に作動させたいなら、自作クエストを用意して発生優先度を最大値にし、そのクエストに添付するとおいう考え方でほとんど問題ないでしょう。
β.変数の値をを変化させる
この項目のテーマである「どういう条件で」を切り分けるには、今作った変数の値を変化させます。スイッチの切替回路のようなものです。
<変数の値を変更する構文>
→ set 変数名 to 値
→例 : set SampleParameter01 to 1
所定の位置にこのように書くと、SampleParameter01という変数が「1」に変更されます。
次にどういう状況でスイッチが作動するのかを書きます。考えられることは様々です。会話で発生させたり、アイテムを装備した時に発生させたり、色々な状況で指定できます。スクリプト内で変更させることもできます。
例えば、会話で発生させるなら、Questウインドウの中のTopicタブにあるResult Script欄を使用できます。下の図の場合、新しいSampleTopicという会話を用意して、会話終了後に変数の値を変更するようにしています。

<ポイント>
クエストウインドウのTopic内で変更させるには、その変数が存在するスクリプトが添付されているオブジェクト名も書かなければいけません。
例えば、さきほど作ったSampleScriptがSampleNPCというIDのNPCに添付されている場合の構文は上記参考画像のようになります。
→ set スクリプト添付物のID.変数名 to 値
→ 例 : set SampleNPC.SampleParameter01 to 1
3.いつ (BeginとIfとCondition)
α.beginとendブロック
Beginはいつそのスクリプトが実行されるのかを指定します。これはスクリプトの中に書きます。
--参考スクリプト--
scn SampleScript
short SampleParameter01
begin GameMode
set SampleParameter01 to 1
end
---------------
beginはendと1セットで使われ、beginの隣に書かれている条件(この場合なら「GameMode」)の時にブロック内の命令を実行します。今回のGameModeの意味はゲームの最中ずっと実行という意味です。そのため、この例文の場合なら、ゲーム中ずっと、SampleParameter01という変数内に「1」の値が入り続けます。普通はこういう使い方はしません。
では、このスクリプトがある装備に添付されているとして、装備をした時に変数の値を変更するならこうなります。
--参考スクリプト--
scn SampleScript
short SampleParameter01
begin OnEquip
set SampleParameter01 to 1
end
---------------
このように、スクリプトが実行される条件を指定するのがbegin-endブロックです。
β.If文
スクリプトがどういう条件で実行されるのかを規定するのがbegin endブロックなら、さらに細かい条件を指定するのがIf文です。If文は「If」と「endif」をセットで用います。また、「If」で指定した条件以外の時はという意味で「else」を用います。さらに、他の条件ではという意味で「elseif」を使います。
--参考スクリプト--
scn SampleScript
short SampleParameter01
begin GameMode
if(player.GetActorValue Health<10)
set SampleParameter01 to 1
elseif(player.GetActorValue Health>100)
set SampleParameter01 to 2
else
set SampleParameter01 to 0
endif
end
---------------
上記が意味するのは、
・ゲーム中に → Begin Gamemode
・体力が10より小さい時は → if(player.GetActorValue Health<10)
・変数を1にして → set SampleParameter01 to 1
・100より大きい時は → if(player.GetActorValue Health>100)
・変数を2にして → set SampleParameter01 to 2
・それ以外なら → else
・変数を0にしなさい → set SampleParameter01 to 0
ということになります。
もちろん、変数操作ではなく、直接的な結果を書くこともできます。
--参考スクリプト--
scn SampleScript
begin GameMode
if(player.GetActorValue Health<10)
player,AddItem PotionSkooma, 1
endif
end
---------------
この場合なら、プレイヤーの体力が10より小さいならスクーマをプレイヤーのインベントリーに追加しなさいということになります。この場合ならBegin GameMode指定なので、10より小さいうちは延々と追加され続けますが・・・。
ここまでが、beginとifの使い方です。
γ.condition
QuestウィンドウのTopicやAIパッケージにはConditionタブというものがあります。これはその会話文やAIがどういう条件の時に作動するかを決定するものです。ここでもう一度変数の出番になります。
いままで、変数を設定したり、値を変更させる装置をチマチマと作ってまいりました。その値をAIパッケージや会話文のconditionタブに指定して、変数が一定の値である時という条件で、話題を発生させたり、AIを作動させたりできるようになります。

手順としては、
・Newをクリック (※1)
・GetScriptVariable (※2/Variable=変数の意)
・オブジェクト名と変数名と指定 (※3)
・式を設定 (※4)
・値を設定 (※5)
ここまでの作業で一定条件により、AIや会話文が作動するようになります。
概念図

具体的な方法については次回以降にサンプル付きで説明して参ります。
今回は数パートの記事に分けてスクリプトを使い方を説明します。ただ、私は未だスクリプト初心者ですので、今からOblivionのスクリプトを始めようとされる方の初めの一助になる範囲での記事となります。
また、1つのことを実行させる為に書くスクリプトは各人様々です。私が提示するものより、よりスマートな書式や理解方法も多々あると思います。私としては作動すればそれでOKという、アバウトな考え方で進めてまいりますので、参考としてご利用ください。よろしくお願いします。
スクリプトを始めるに当たって、ぜひ手許に置いておきたいのがCSのヘルプです。wikiで日本語化されたものが紹介されています。このページの最下部に日本語ヘルプファイルへのリンクがあります。
概念
CSにおけるスクリプトとは、ゲーム内の事象を操作するための命令文の集合体と言えるかもしれません。スクリプトにはさまざまな条件文や命令文が並んでいます。こういったものが集まって、「ある時はA」、「あるときはB」などというように事象を操作することができるのです。
・・・?
こんな難しい書き方をすれば余計に判りにくいかもしれませんので、大雑把に考えます。
重要なのは、
・いつ
・どういう条件で
・何をするのか
ということになります。
この中で最も重要なのは「何をするのか」という部分です。それはOblivionに備わっていない機能を動かすことはできませんし、事象を発生させる核になる部分だからです。よって、実現したいアイデアがある場合は、それがOblivionで可能なことであるかどうかを先に考えた方がやりやすいと思います。
この記事では具体的な操作方法に触れず、どういうものなのかを説明しています。
1.何をするのか? (functionとAIパッケージ)
スクリプトを使う時にまず初めに覚えたいのがfunctionとAIパッケージです。この2つを使って、事象を発生させたり、NPCを動かしたりできるようになります。
functionとはゲーム内で起こる様々な事象を実際に実行させたり、現在どういう状態なのかを取得したりするのに使います。下の図はCSヘルプのfunction一覧画面です。たくさんのコマンドが用意されています。主に直接的に事象を操作するのに使います。
functionに備わっている機能は直接的に事象を発生させるコマンドがほとんどです。これを全部覚えるのはほとんど不可能ですし、ヒマな時に眺めて、「今度はこういうことをやってみよう」と思ってメモしておくと後々便利だと思います。

一方、AIパッケージの方はNPCやCreatureに一定の行動を起こさせる為に使います。例えば、食事、睡眠、移動、追従など一通りの動作が用意されています。下の図はCSヘルプ内のAIパッケージ一覧です。それぞれの項目をクリックすると、詳しい設定方法が表示されます。

※当ブログ内のAIパッケージ記事もよろしければ参考にお使いください
→ AIパッケージ編集画面
→ Follow AIパッケージ
→ Wander AIパッケージ
→ Sleep AIパッケージ
→ Use Item At AIパッケージ
2.どういう条件で (変数とその設定と変更)
例えば、AIパッケージで作動条件を指定する場合、主に日時で指定します。「何曜日の何時から何時間、どこそこへ向かう」といった設定がこれに相当します。こういった条件を新たに作るのが変数です。変数は一部を除いてユーザーが独自で用意します。ここからスクリプト記述が始まります。
α.変数を作る
まず、GameplayメニューからEdit Scriptsを選択し、スクリプト編集ウインドウを表示させます。次に、編集画面でScript>Newを選択すると、文字を打ち込めるようになります。(下図を参考にしてください)



上図のようにまずスクリプト名を記述します。そして、変数を宣言します。最後にスクリプトを添付する対象を指定します。(具体的な使い方は別項にて。まずはこういう仕組みのものだということを書いております)
<構文>
スクリプト名構文
→ scn スクリプト名
変数の宣言構文 (short以外の宣言もあります)
→ short 変数名
添付対象
→ プルダウンメニューから選択
ここまで済んだら、セーブします。セーブされたスクリプトはオブジェクトやNPC、クエストなどのスクリプト設定用のプルダウンメニューに表示されるようになるので、そこで指定します。
<ポイント>
スクリプトを用意したら、それをなんらかのオブジェクトやクエストに添付しなければゲームでは有効になりません。オブジェクトに設定した場合は、そのオブジェクトがプレイヤーの近くにいるときに作動し、クエストに添付した場合はそのクエストが有効な時に作動します。
例えば、コンパニオンにある行動をさせたり、アイテムが特殊な効果を持つためのスクリプトなら、そのオブジェクト自体に添付し、一方、常に作動させたいなら、自作クエストを用意して発生優先度を最大値にし、そのクエストに添付するとおいう考え方でほとんど問題ないでしょう。
β.変数の値をを変化させる
この項目のテーマである「どういう条件で」を切り分けるには、今作った変数の値を変化させます。スイッチの切替回路のようなものです。
<変数の値を変更する構文>
→ set 変数名 to 値
→例 : set SampleParameter01 to 1
所定の位置にこのように書くと、SampleParameter01という変数が「1」に変更されます。
次にどういう状況でスイッチが作動するのかを書きます。考えられることは様々です。会話で発生させたり、アイテムを装備した時に発生させたり、色々な状況で指定できます。スクリプト内で変更させることもできます。
例えば、会話で発生させるなら、Questウインドウの中のTopicタブにあるResult Script欄を使用できます。下の図の場合、新しいSampleTopicという会話を用意して、会話終了後に変数の値を変更するようにしています。

<ポイント>
クエストウインドウのTopic内で変更させるには、その変数が存在するスクリプトが添付されているオブジェクト名も書かなければいけません。
例えば、さきほど作ったSampleScriptがSampleNPCというIDのNPCに添付されている場合の構文は上記参考画像のようになります。
→ set スクリプト添付物のID.変数名 to 値
→ 例 : set SampleNPC.SampleParameter01 to 1
3.いつ (BeginとIfとCondition)
α.beginとendブロック
Beginはいつそのスクリプトが実行されるのかを指定します。これはスクリプトの中に書きます。
--参考スクリプト--
scn SampleScript
short SampleParameter01
begin GameMode
set SampleParameter01 to 1
end
---------------
beginはendと1セットで使われ、beginの隣に書かれている条件(この場合なら「GameMode」)の時にブロック内の命令を実行します。今回のGameModeの意味はゲームの最中ずっと実行という意味です。そのため、この例文の場合なら、ゲーム中ずっと、SampleParameter01という変数内に「1」の値が入り続けます。普通はこういう使い方はしません。
では、このスクリプトがある装備に添付されているとして、装備をした時に変数の値を変更するならこうなります。
--参考スクリプト--
scn SampleScript
short SampleParameter01
begin OnEquip
set SampleParameter01 to 1
end
---------------
このように、スクリプトが実行される条件を指定するのがbegin-endブロックです。
β.If文
スクリプトがどういう条件で実行されるのかを規定するのがbegin endブロックなら、さらに細かい条件を指定するのがIf文です。If文は「If」と「endif」をセットで用います。また、「If」で指定した条件以外の時はという意味で「else」を用います。さらに、他の条件ではという意味で「elseif」を使います。
--参考スクリプト--
scn SampleScript
short SampleParameter01
begin GameMode
if(player.GetActorValue Health<10)
set SampleParameter01 to 1
elseif(player.GetActorValue Health>100)
set SampleParameter01 to 2
else
set SampleParameter01 to 0
endif
end
---------------
上記が意味するのは、
・ゲーム中に → Begin Gamemode
・体力が10より小さい時は → if(player.GetActorValue Health<10)
・変数を1にして → set SampleParameter01 to 1
・100より大きい時は → if(player.GetActorValue Health>100)
・変数を2にして → set SampleParameter01 to 2
・それ以外なら → else
・変数を0にしなさい → set SampleParameter01 to 0
ということになります。
もちろん、変数操作ではなく、直接的な結果を書くこともできます。
--参考スクリプト--
scn SampleScript
begin GameMode
if(player.GetActorValue Health<10)
player,AddItem PotionSkooma, 1
endif
end
---------------
この場合なら、プレイヤーの体力が10より小さいならスクーマをプレイヤーのインベントリーに追加しなさいということになります。この場合ならBegin GameMode指定なので、10より小さいうちは延々と追加され続けますが・・・。
ここまでが、beginとifの使い方です。
γ.condition
QuestウィンドウのTopicやAIパッケージにはConditionタブというものがあります。これはその会話文やAIがどういう条件の時に作動するかを決定するものです。ここでもう一度変数の出番になります。
いままで、変数を設定したり、値を変更させる装置をチマチマと作ってまいりました。その値をAIパッケージや会話文のconditionタブに指定して、変数が一定の値である時という条件で、話題を発生させたり、AIを作動させたりできるようになります。

手順としては、
・Newをクリック (※1)
・GetScriptVariable (※2/Variable=変数の意)
・オブジェクト名と変数名と指定 (※3)
・式を設定 (※4)
・値を設定 (※5)
ここまでの作業で一定条件により、AIや会話文が作動するようになります。
概念図

具体的な方法については次回以降にサンプル付きで説明して参ります。
この記事のトラックバックURL
http://monarque.blog84.fc2.com/tb.php/160-ee8ed8c1
この記事にトラックバックする(FC2ブログユーザー)
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
お知らせ
コンテンツ
目次から各記事をご覧いただけます。攻略と狩場については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大軍団編成を目標に遊んでおります。
本当におバカな妄想ブログですが、どうぞよろしくお願いします。
