Fallout好き:主にFallout New Vegas

Fallout好き:主にFallout new Vegas

2013年6月11日火曜日

MOD作成:OnDropの挙動

テディベア(Teddy Bear)をくぼんだ岩から取った時、CTDする。
スクリプトでは、begin Ondrop しかない。つまり、アイテムを置いた時だけ処理が走るはず。
下記がそのスクリプト。先頭が;の行はコメント行。
------------------------------------------------------------------
scn YMTHollowRockRandomScaleScript

float rnd
ref myself
float min .5
float max 10
short doonce

begin ondrop
;if doonce == 0
; set doonce to  1
;endif
; set min to .5
; set max to 10
set myself to getself
; set rnd to min + GetRandomPercent * ( max - min + 1 ) / 100
set rnd to .5 + GetRandomPercent * 10.5 / 100
showmessage YMTHollowRockScaleMesg rnd
myself.setscale rnd
; myself.resurrectactor
activate
end
------------------------------------------------------------------

各行をコメントアウトして、原因となっている行がわかった。
太文字の myself.setscale rnd だった。
つまり、アイテムを取った時にsetscaleコマンドを実行するとCTDするんだろう。
setscaleはオブジェクトの倍率を指定するコマンド。まあ、アイテム取得時に実行する必要はないのでCTDしてもおかしくはないと思う。
問題は、アイテムを取得した時になぜ begin OnDrop の中が実行されてしまうのか?ということ。

ってことで改めて、GECKのWEBサイトを見た。


で、

「スクリプトオブジェクトはコンテナのインベントリから削除されたときにこのブロックは一度だけ実行されます。パラメータが使用されていない場合は、オブジェクトが何のインベントリから削除されるたびに、ブロックが実行されます。」(Google翻訳)

だそうだ。なるほど、コンテナ(Container)から取り出した時に実行されるから、くぼんだ岩から取り出した時に実行されるんだな。

でもまだわからないことがある。コンテナから取り出した時に実行されるはずなのに、実行されない時がある。実行されたかどうかはshowmessageで画面に表示されたかわかる。それが表示されないことがある。

そんな問題もあるが、とりあえず
begin OnDrop
begin OnDrop player
にすれば、playerのコンテナから取り出した時(つまり多分置いた時)だけ実行されるはず。
くぼんだ岩から取り出した時に実行されない理由はわからないが、それは必要ないので、とりあえずこれで回避してみる。
で、とりあえず動いた。

ただ、倍率変更は置いた時にしたいからまだ試行錯誤になる。

0 件のコメント:

コメントを投稿