2012年5月10日木曜日

プリムのリンク番号をチェックするスクリプト

プリムのリンク番号はllDetectedLinkNumberっていう関数で知ることができるんですね。それで、その関数のページにもタッチでリンク番号を表示する簡単なスクリプトが載ってるんですが、何となくリンク番号を表示したプリムがグロー全開で光るようにスクリプトを書いてみました。これならタッチしにくい場所とかで手がすべって隣のプリムをタッチしてたりって感じの失敗がなくていいんじゃないかなって思いますw

// タッチでリンク番号を表示

default
{
    touch_start(integer total_number)
    {  // タッチされたとき
        key id=llDetectedKey(0);  // タッチしたアバターのキー
        if (id == llGetOwner()) {  // オーナーだったら
            integer num=llDetectedLinkNumber(0);  // タッチされたプリムのリンク番号
            list faces=[];  // グローデータ記録用リスト
            integer i;
            integer j=llGetLinkNumberOfSides(num);  // タッチされたプリムの全面数
            for (i=0; i < j; i++) {  // 面の数だけ繰り返し
                list glow=llGetLinkPrimitiveParams(num,[PRIM_GLOW,i]);  // 面ごとにグローを取得して
                faces+=[PRIM_GLOW,i]+glow;  // グロー設定で使える形式にしてリストに保存
            }
            llOwnerSay("Link no."+(string)num);  // タッチされたプリムのリンク番号を表示
            llSetLinkPrimitiveParams(num,[PRIM_GLOW,ALL_SIDES,1.0]);  // タッチされたプリム全面のグローを1.0にセット
            llSetLinkPrimitiveParamsFast(num,faces);  // グローを元に戻す
        }
    }
}

タッチしたプリムが持つ面の数をllGetLinkNumberOfSidesで調べて各面のグローを記憶させるので、元々グローを設定したプリムがあっても支障が出ません。あとllSetLinkPrimitiveParamsは、llSetLinkPrimitiveParamsFastにするとノーウェイトでグローが視認できなかったので使用してます。(llSleep入れて調整してもよかったんですが)

スクリプトをオブジェクトの親プリムに入れてください。オーナーがタッチしたときにタッチされたプリムがグローで光って、オーナーのチャットにリンク番号が表示されます。

0 件のコメント:

コメントを投稿