ソラマメブログ
< 2008年08>
S M T W T F S
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
アクセスカウンタ
オーナーへメッセージ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。 解除は→こちら
現在の読者数 3人

2007年11月28日

SIM内テレポーター(リンデンスクリプト Tips)

 ビルやモール等に見られるテレポート用のスクリプトです。
テレポーターを右クリックし、パイメニューのTeleportをクリックすると指定した座標へ瞬間移動します。
テレポート先に移動した後、テレポーターは自動的に元の位置に戻ります。
SIM内でのテレポートが可能です。

「スクリプト内容」
//
//  Teleportation(IN-SIM) SCRIPT    V1.0
//
//                    Created by Zero2000 Kid   2007/11/28


//----------- PARAMETER SET -----------------//
vector targetPoint=<242,63,26>;
// ------------------------------------------//

vector basicPoint;
integer sitflg = FALSE;
key sitavkey;

teleport( vector d ) {
    if ( d.z > 768 ) d.z = 768;
    integer s = (integer)(llVecMag(d-llGetPos())/10)+1;
    if ( s > 100 ) s = 100;
    integer e = (integer)( llLog( s ) / llLog( 2 ) );
    list rules = [ PRIM_POSITION, d ];
    integer i;
    for ( i = 0 ; i < e ; ++i ) rules += rules;
    integer r = s - (integer)llPow( 2, e );
    if ( r > 0 ) rules += llList2List( rules, 0, r * 2 + 1 );
    llSetPrimitiveParams( rules );
}


default {
    state_entry() {
        llSetText("right click for Teleport", <1,1,1>, 1.0);
        llSitTarget(<0.0,0.0,0.1>,ZERO_ROTATION);
        llSetSitText("Teleport");
        
    }
    
    on_rez(integer int) {
        llResetScript();
    }
    
    changed(integer change){
        if (change & CHANGED_LINK){
            sitavkey = llAvatarOnSitTarget();
            basicPoint = llGetPos();
            state move;                                  
        }
    }
}


state move {
    state_entry() {
        teleport(targetPoint);
        llUnSit(sitavkey);
        teleport(basicPoint);
        state default;
    }
}

「スクリプトの説明」
 スクリプトの基本動作は、「オブジェクトに座る→オブジェクトを移動する→オブジェクトから立たせる→
オブジェクトを元の位置に戻す」となります。

1. 一行目のvector targetPoint=<242,63,26>でテレポート先の座標を指定します。
2. オブジェクトにアバターが座ると(パイメニューのTeleportを選択)、changedイベントが発生します。
3. changedイベントの中では、llAvatarOnSitTargetで座ったアバターのUUIDを取得し、現在の座標を
  変数basicPoint に格納した後、state moveでmeveステートへ移行します。
4. meveステートでは、teleport関数を呼び出し、1で指定した座標へオブジェクトを移動します。
  *オブジェクトの移動には、teleport関数内のllSetPrimitiveParamsを使用します。
5. 目的地へ移動したら、llUnSitにてアバターをオブジェクトから立たせます。
6. 再びteleport関数を呼び出し、元の座標(basicPoint)へオブジェクトを戻します。
7. state defaultにてdefaultステートへ戻ります。


リンデンスクリプト Tips Intexへ






この記事へのトラックバックURL