ビルやモール等に見られるテレポート用のスクリプトです。
テレポーターを右クリックし、パイメニューの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へ