Site search

Google
WWW を検索 backup-beta.blogspot.com を検索

2008年7月13日日曜日

高度300m以上に行けるテレポーターのスクリプト

Windowsが起動しなくなってからずっと予備に入れてたLinux使ってたんです。でも昨日、Linuxが入ってるとWindows XPがインストールできないことがわかったので仕方なくLinux消したんですよ。それでやっとWindows復活できてほっとしてたんですが、Linuxのブレンダーのデータをバックアップするの忘れてたおバカな千尋です orz

今回は前回に続きましてテレポーターのスクリプトです^^
座る位置を利用したテレポーターは高度300mくらいが限界なので、もっと高い場所にテレポートするにはオブジェクトに乗せてエレベーターとかみたいに移動させます。
オブジェクトの移動にはllSetPosを使いました。でもこの関数って最大10mしか動かないんですよ^^;
なので目的地に着くまでループさせますw


// 高度300m以上へ行くテレポーター
vector dest;
vector pos;
integer move=FALSE;

default
{
    state_entry()
    {
        dest=llGetPos();  // 現在の座標を目的地に設定
        llOwnerSay("Destination = "+(string)dest);
        llSitTarget(<0.0,0.0,1.2>, ZERO_ROTATION);  // テレポーターに乗る位置
    }

    changed(integer change)
    {
       if (change & CHANGED_LINK) {
            key agent=llAvatarOnSitTarget();
            if (agent) {
                if (move) llUnSit(agent);  // 移動中は搭乗拒否
                else llRequestPermissions(agent,PERMISSION_TRIGGER_ANIMATION);
            }
        }
    }

    run_time_permissions(integer perm)  
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION) {
            move=TRUE;
            llStopAnimation("sit");  // 座るアニメ停止
            llStartAnimation("stand");  // 立ちポーズ実行
            pos=llGetPos();  // 出発地の座標設定
            vector p=pos;  // 移動中の座標を定義
            if (dest) {
                while (p != dest) {  // 目的地の座標になるまでループ
                    llSetPos(dest);  // 目的地を指定しても最大10mしか移動しない
                    p=llGetPos();  // 移動中の座標
                }
            }
            key agent=llAvatarOnSitTarget();
            if (agent) llUnSit(agent);  // 到着後に立たせる
            while (p != pos) {  // テレポーターを出発地点へ帰す
                    llSetPos(pos);
                    p=llGetPos();
            }
            move=FALSE;
        }
    }
}

設定は目的地に置いてスクリプトをリセットするだけです^^ (スクリプト開いて右下のボタン)

0 件のコメント:

コメントを投稿