2010年6月4日金曜日

OBSEのSetDoorTeleport

既存のコンパニオンを船に帰宅させるために、ワールドスペースと船を結びつけておく必要がある。
そこで、ワールドスペースに船と繋がった1つのドアを配置可能なようにしようと思っていたので実装した。

ドアには、スタトレのパターン強化装置のような形を採用。

これで任意の場所と、船の転送機の1つを結びつけたり、必要なければドアを消したりする。


CSの関数ドアのマーカーは移動できないのでOBSEを使う。

SetDoorTeleport というのがそれなのだが。

引数がややこしい。

動かすのはパターン強化装置のほうなのだが

set tx to パターン強化装置.GetPos x
同様に ty,tz, GetAngle z で az

転送機.SetDoorTeleport パターン強化装置 tx,ty,yz,az

のようにやる。
最初、パターン強化装置.SetDoorTeleport でやっていて、うまくいかねーと数時間悩んだ。


SetDoorTeleport は OnActivate、OnEquip、GameModeで試したが、どれでやっても大丈夫な模様。
MoveTo,Enableの流れで1フレーム以上処理がかかる場合があるということなので、Activate、OnEquip後 GameModeで回したほうがよさそう。


インテリアーセルに配置したドアは、MoveToでワールドスペースに移動して SetDoorTeleport をやっても、うまくいかない模様。(実験継続中)
PosWorldなども試してみる予定。
移動の関数は、全て同じ関数の実態を呼んでるらしいという見方が強いが、MoveToとMoveToXMarkerに関しては、コードに違いがあったという投稿の引用をCSWikiのどっかで読んだ気がする。
なのでもしかしたら挙動が違うかもしれない。

ワールドスペースに配置したものは、ワールドスペース内で、移動させても大丈夫だった。

0 件のコメント:

コメントを投稿