2012年3月14日水曜日

新関数を使った長距離用高速テレポーターのスクリプト

昨日、何となく公式wikiのLSL関数一覧を見てたらllSetRegionPosっていう便利な関数が追加されてるってことに気がつきました。この新関数はllSetPosみたいな最大10mの移動制限がないので、SIM内長距離用のテレポーターとかを書くのが楽になりますね。。。ホント簡単にオブジェクトが一瞬で移動できます^^

昔書いた長距離用高速テレポーターのスクリプト にllSetRegionPosを使うよう書き換えてみたら、こんな感じでかなりシンプルになりました^^
// 長距離用高速テレポーター(新)
vector dest;  // 目的地の座標保存用
vector pos;  // 出発地の座標保存用

default
{
    state_entry()
    {
        llSitTarget(<0.2,0,0.55>, ZERO_ROTATION);  // 座る位置
        dest=llGetPos();  // 現在位置の座標を目的地に設定
        llOwnerSay("Destination = "+(string)dest);
    }

    changed(integer change)
    {
        if (change & CHANGED_LINK) {  // リンクが変わったとき
            key id=llAvatarOnSitTarget();  // 乗ってるアバターのキー
            if (id) {
                if (pos) return;  // 出発地座標が設定されてるとき(動作中)はリターン
                pos=llGetPos();  // 現在位置を出発地の座標に設定
                llSetRegionPos(dest);  // 目的地へテレポート
                llUnSit(id);  // 目的地でアバターを降ろす
                llSetRegionPos(pos);  // テレポーターを出発地に戻す
                pos=ZERO_VECTOR;  // 出発地の座標をクリア
            }
        }
    }
}

移動させる部分以外は変更してないので、使い方は古いのと全く同じです。目的地でスクリプトをリセットしてから出発地に置くだけで使えます。

0 件のコメント:

コメントを投稿