2007年12月14日
装着確認

<装着確認> 2007/06/21 - 2007/12/14
オブジェクトを装着した時 attach と on_rez は
どちらが先に発生するかテスト
補足
attach(key id) アタッチされた/デタッチされた
装着イベント
agentが objectを脱着した際に呼ばれる
id == NULL_KEY の時 デタッチしたと判断できる
また、on_rez で llGetAttached() == 0 であれば、
アタッチせず 地面に置いたと思われる
引数 id はアタッチした物体のUUID
以下をテスト
1.複数プリムを選択
2.選択状態のまま右クリックで Take
3.この状態のオブジェクトを着ると?
You can't attach multiple objects to one spot.
と表示され、着ることはできない。 れっ?できるぞ。
インベントリ内のアイコンの形が箱でなく、
砕けた箱の様なアイコンになっている。
れっ?、昔は出来なかったのに今はできる。
アイコンも砕けてない。普通の箱形だ。 2007/12/12
default
{ on_rez(integer total_number){
llOwnerSay("Event On-rez 1 - " + (string) llGetAttached());
llResetScript();
llOwnerSay("Event On-rez 2");
}
attach(key attached_key ){
if ( attached_key == NULL_KEY ) {
llOwnerSay("Event attach(NULL_KEY)");
} else {
llOwnerSay("Event attached_key = " +
(string) attached_key);
}
}
state_entry(){
llOwnerSay("state_entry");
}
}
テスト結果
インベントリから着た時、地面に置いた時
Event On-rez 1 - n (nは着た場所 right hand なら6)
state_entry (0は地面に置いたので着ていない状態)
取り外した時、ドロップした時
Event attach(NULL_KEY)
地面に置いた状態から着た時
Event attached_key = xxxx-xxx(UUID)
注意
リセットによって "Event On-rez 2" が表示されなかった
インベントリから着ると attach イベントが発生しない
所感
テスト結果は変わりないが、リンクオブジェクトは着れる。
微妙に昔と仕様が変わることってがあるらしい。
2007年11月20日
2007年11月18日
スクリプトのエラーチェック

スクリプト作ってエラーって方がいたので、
ホームページにコピペして、
シンタックス(文法)チェックをしてくれるサイトを紹介しよう。
http://w-hat.com/lslint/
上記サイトをスクロールダウン。
下の白いテキストボックスにスクリプトを貼って
<Run lslint!>ボタンを押す。
いかがかな?
でも、ホームページに貼ってボタンを押したってことは、
ホームページの作者にスクリプトがばれるので、
秘密にしたいスクリプトがあれば注意。
もっともスクリプトはオブジェクトとコミだし、
作った時点でバグも潜んでいるだろうから、
ばれてもあんまり関係ないんだよね。
2007年08月09日
フェイルセーフ

スクリプトをやってて思うのですが、
心がけるのは、分かりやすさと安全性です。
以下の例は物を生成し、生成した時に一次属性にして、
何かあっても自動的に削除されるようにと言う指定です。
引数の piNum は必ず0より大きい数字になる設計なので、
特に問題はないのですが、
<い> は if文の上の<あ>に書くのが正解です
(わけあって<い>に書くなら<い>が正解)
予想外の動きがあっても、安全側に進む。
これをフェイルセーフといいます。
Do - Loop には必ず脱出方法を考える今日このごろ。
僕の状態と同じ。常に脱出方法を考えておかないと・・ね。
【例】
on_rez(integer piNum)
{ //<あ>
if (piNum > 0)
{ //ここにはいろいろ記述してますが省略
//一次属性にして約一分後には自動的に削除
<い> llSetPrimitiveParams([PRIM_TEMP_ON_REZ, TRUE]);