オブジェクトをRezした時のイベント

朔夜

2008年12月06日 14:42


on_rezしたオブジェクトを消す仕組みを考えていたら、object_rezっていう便利なイベントを発見しました。
このイベント、すごく便利です。

object_rez(key rez_id){
}

key rez_idにはrezしたオブジェクトのUUIDが入ります。
つまり、自分が何をrezしたのかを記憶することが可能なんですね。(当たり前のことですみません>< 今までこのイベントの存在すら気づいてませんでした;)

そんなわけで、こんな風にしてみました。

===== 本体のスクリプト =====
object_rez(key rez_id){
llWhisper(ch_del,(string)rez_old_id);//削除命令
rez_old_id = rez_id;
}

===== Rezされる方のスクリプト =====
on_rez(integer rez){
handle = llListen(ch_del,"","",(string)llGetKey());
}
listen(integer channel, string name, key id, string message){
if(message==(sgring)llGetKey()){ //一応受信メッセージをチェック
llDie();
}
}

これで、新しくrezした時に元々rezされていたオブジェクトを確実に削除できるようになりました。
上記だとRezしてから古いオブジェクトを削除していますので、もし削除してからRezしたい場合はllRezObject~の前に削除命令を出してあげればOKです^^

イベントって色々と便利だなぁと日々思いつつ、今欲しいのはchangeイベント中で「名前」や「説明」が変わったときの判定です^^; インベントリの中身が変わったのは判定できるのに、どうして名前とかの変化には対応しないんでしょう~。
あと、listenイベント内でDetectとか使えると便利だなーと感じるのは、私だけでしょうか;(llGetObjectDetailsを使うのがいちいち面倒なので、Detectで簡単に調べられるといいなぁ、とか)

ただいま全力でCSR準備中です~っ。
ずっとSet busyですみません>< あとちょっと・・・!
・・・雑記