Welcome! Wikis are websites that everyone can build together. It's easy!

スクリプトについて

経験の無い人にもわかるように書こうと思ったが、イマイチまとまらないのでとりあえずメモ程度に。そのうちイチからわかるようにするかも

基本はC言語と同じだが、機能は大幅に削除されている。
  • ステートメントはBegin~EndとIf~EndifとSetとReturnのみ。
  • OBSEならLavel/GotoSaveIP/RestoreIPを使って繰り返し文の真似事が可能。
  • 変数はShort、Long、Flort、Refのみ。
  • 関係演算子は> >= == <= < !=
  • 算術演算は+-*/と%(除り)を確認。
  • 論理演算は 論理積(&&)と 論理和 (||) を確認
  • 関係演算が真なら1、否なら0になる。
  • 0以外は真として認識するため                                                                                             If IsSneaking == 1If IsSneakingと略すことは可能。                                                               だが否定は無いのでIf !IsSneakingは出来ない。
  • set文に関係演算を使うことは可能。                                                                   Aが100以上140未満のときだけ、Bに20をいれ、それ以外は10を入れる場合、                                                                          Set B to ((A >= 100) && (A < 140 )) * 10 + 10 とif文を使わずに一行で実現可能。
  • 計算式はSet文以外には書けない。
自分のIDを取得するGetSelfは、Itemsでは使えない。おそらくいくらでも増えるものや使い捨てるものが多いからであろう。
スクリプト内で実行不可能なことがあると、直ちに中断されてしまう。SetされていないRef変数を参照しようとすると、それ以降の命令は実行されない。

スクリプトが与えられた各リファレンスは独自の変数を持つが、外部からそれを参照することはできない。一旦グローバル変数やクエスト変数を中継するしかない。おそらくNPC.Hensuuとなるとファンクションとの区別がつかなくなるからであろう。

クエストのEditorIDは先頭の数字が無視される?000testはTestとして認識される。a000Testならそのまま認識される。

魔法が当たったときに実行されるOnMagicEffectHitは、生物以外では範囲魔法には反応せず、直撃でしか実行されない。


DisableをしてもそのObjectはなくなるわけではない。同Cell内にいる限りScriptは延々実行されてつづけている。

ScriptEffectFinishでは、あまり時間のかかる処理をさせるとフリーズする。Finish部にMessageBoxなどをつけて、リキャストしたりすると一発で固まる。

GetSecondsPassedは動き続けるようなBegin-End節、つまりGameMode、MenuMode、ScriptEffectUpdateでしか働かない。これは単純にそれらの節が以前に実行されてからの経過時間のみを示す。

QuestStageのResultScriptは、setstageされるたびに実行されるため、応用すれば繰り返し処理や関数として利用できる。

SetposはActorやItems以外のオブジェクトではデータ上は移動してるのにグラフィックは移動しないなど上手く動かない。


接触したときに実行されるOnTorigger系は、当たり判定ポリゴンと重ならないと発動しない。つまり、炎のように素通りできるモノでないと発動しない。ただし、素通りできるあたり判定をnifに追加すれば、普通のアイテムでもOnTorrigerは可能である。詳しいことはわからないが、firearcanemedium01.nif(魔法大学の紫の炎)のトップ下にあるDamageSphereというValueのノードをコピペすれば、接触判定が可能となることを確認した。


MassageBoxは一見処理が止まっているように見えるが、実際は次のフレームに移らないだけで、そのフレームでの処理はMessageBoxが出ている間に最後まで実行されてしまっている。だからMessageBoxのあとにMessageをおくと、MessageBoxを消してからではなく、出ている間にMessageが表示される。つまりGetButtonPressedも同一フレーム内では有効にならないということになる(選択分岐は次のフレームまで待たねばならない)


Latest page update: made by Anonymous, May 21 2007, 12:15 PM EDT (about this update About This Update Posted Anonymously Edited anonymously

1 word added
1 word deleted

view changes

- complete history)
Keyword tags: None (edit keyword tags)
More Info: links to this page

Anonymous  (Get credit for your thread)


Started By Thread Subject Replies Last Post
Anonymous フォーマットに失敗('A`) 0 Oct 22 2007, 8:33 AM EDT by Anonymous
Thread started: Oct 22 2007, 8:33 AM EDT  Watch
0.NiNode 親オブジェクト
|---1.NiNode DamageSphere
__|---2.NiStringExtraData (CS Wikiにある程度の詳細があります)
__|---3.bhkSPCollisionObject
____|---4.bhkSPCollisionObject
____|---1.NiNode DamageSphere
cf.
ttp://cs.bethsoft.com/constwiki/index.php/NifSkope_Comprehensive_Guide
-> Extra String Data: UPB Block が SPCollisionObject 絡みで必要な情報
Do you find this valuable?    
Keyword tags: None (edit keyword tags)
Anonymous onTrigger 追加メモ 0 Oct 22 2007, 8:22 AM EDT by Anonymous
Thread started: Oct 22 2007, 8:22 AM EDT  Watch
Nif時点で bhkSPCollisionObject が子ノードに存在するかどうかが onTrigger が発生するかどうかの分かれ目
追記:インベントリに入りうるアイテムに bhkSPCollisionObject が設定されているとどーもCTDを起こす模様
NiNode 親オブジェクト
|---NiNode DamageSphere(名前多分何でも良い)
|---NiStringExtraData 必須 親オブジェクト直下のNiStringExtraDataからコピーでおk
|---bhkSPCollisionObject
|---Trigger発動コリジョンを表す何かしらのシェイプオブジェクト
Do you find this valuable?    
Keyword tags: None (edit keyword tags)
Anonymous ingame function他 追加情報 0 Oct 12 2007, 4:48 PM EDT by Anonymous
Thread started: Oct 12 2007, 4:48 PM EDT  Watch
>スクリプトが与えられた各リファレンスは独自の変数を持つが、外部からそれを参照することはできない。

persistent referenceとして設定されたWorldObjectにreference editorIDを設定した場合、外部のスクリプトからそのオブジェクトの変数を参照可能になる。
これと onActivate - ref.activate actionRef, 1 機構を応用して関数的なものを実装することができる。
cf. http://cs.elderscrolls.com/constwiki/index.php/Ingame_Functions
んが、同一フレーム内で ref.activate できる回数には制限がある模様。

判明しているスクリプト仕様(追加):
単項+演算子はスクリプト実行を停止させる。
具体的に言うと set a to -b はOKだが set a to +b は駄目。
if - endif の入れ子は10個まで。

デフォルトのスクリプトエディタはプロポーショナルフォントで使いにくい。誰かサクラエディタ用の定義ファイルくだs
Do you find this valuable?    
Keyword tags: None (edit keyword tags)