Already a member?
Sign in
- EasyEdit
- Edit tags
- Email page
-
(what's this?What are these tools?
People just like you can add or edit the content on this site. If you want to try editing, but aren't ready to add to this site, try our demo area.
Read more about editing pages at Wetpaint Central.
)
スクリプトについて
経験の無い人にもわかるように書こうと思ったが、イマイチまとまらないのでとりあえずメモ程度に。そのうちイチからわかるようにするかも
基本はC言語と同じだが、機能は大幅に削除されている。
スクリプト内で実行不可能なことがあると、直ちに中断されてしまう。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も同一フレーム内では有効にならないということになる(選択分岐は次のフレームまで待たねばならない)
基本はC言語と同じだが、機能は大幅に削除されている。
- ステートメントはBegin~EndとIf~EndifとSetとReturnのみ。
- OBSEならLavel/GotoやSaveIP/RestoreIPを使って繰り返し文の真似事が可能。
- 変数はShort、Long、Flort、Refのみ。
- 関係演算子は> >= == <= < !=
- 算術演算は+-*/と%(除り)を確認。
- 論理演算は 論理積(&&)と 論理和 (||) を確認
- 関係演算が真なら1、否なら0になる。
- 0以外は真として認識するため If IsSneaking == 1 をIf IsSneakingと略すことは可能。 だが否定は無いのでIf !IsSneakingは出来ない。
- set文に関係演算を使うことは可能。 Aが100以上140未満のときだけ、Bに20をいれ、それ以外は10を入れる場合、 Set B to ((A >= 100) && (A < 140 )) * 10 + 10 とif文を使わずに一行で実現可能。
- 計算式はSet文以外には書けない。
スクリプト内で実行不可能なことがあると、直ちに中断されてしまう。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
Edited anonymously
1 word added
1 word deleted
view changes
- complete history)
Edited anonymously
1 word added
1 word deleted
view changes
- complete history)
Keyword tags: None
(edit keyword tags)
More Info: links to this page
| 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)
|
|||