Site search

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

2008年11月30日日曜日

4ヶ所登録できるテレポート看板のスクリプト

今回は1プリムで4ヶ所テレポートできる看板のスクリプトです^^
ショップの支店とかをまとめたら便利なんじゃないですかねw

普通のテレポート看板はllMapDestinationで簡単にできますので、これにllDetectedTouchSTでタッチしたプリム表面の座標を取得して判別するようにして複数のテレポート先を登録してます。



看板のテクスチャは4ヶ所のテレポート先を1枚にまとめて、左上、右上、左下、右下の順番になるように作ってくださいね。テクスチャはプリムのどの面に貼ってもオッケーです。
あと、メニューを通すとマップが開けなかったので、対応してないビューワーはテレポート先全部のSLURLをチャットするようにしました^^;
// 4ヶ所用テレポート看板
list tp=[ // "テレポート先の名前","SIM名",位置,
"Teasers Shopping District","Graybar",<195,231,29>,
"CSL Mall","Royier",<47,165,90>,
"SL-Shopping.net-Mall-Jiminy","Jiminy",<115,23,106>,
"+*+*BELLE ROSE*+*+","Artsebarsky",<22,222,1222>,
NULL_KEY];  // データの最後のカンマ用
integer len;

string slurl(integer i)
{  // SLURL生成
    vector v=llList2Vector(tp,i+2);
    string str=llList2String(tp,i);
    str+=" http://slurl.com/secondlife/";
    str+=llEscapeURL(llList2String(tp,i+1));
    str+="/"+(string)((integer)v.x);
    str+="/"+(string)((integer)v.y);
    str+="/"+(string)((integer)v.z)+" \n";
    return str;
}

map(integer num)
{  // マップ表示用
    integer i=num*3;
    if (i >= len) {  // テレポートの登録数が少ないとき
        llWhisper(0,"This area is a blank.");
        return;  // リターン
    }
    string sim=llList2String(tp,i+1);
    vector pos=llList2Vector(tp,i+2);
    llMapDestination(sim,pos,ZERO_VECTOR);  // マップ表示
    llWhisper(0,slurl(i));  // SLURL表示
}

default
{
    state_entry()
    {
        len=llGetListLength(tp)-1;  // ヌルキー除いたリストの長さ
    }

    touch_start(integer total_number)
    {
        integer i=llDetectedTouchFace(0);  // タッチした面の番号を取得
        if (i != -1) { // SLビューワーが対応のとき
            vector v=llDetectedTouchST(0);  // タッチした表面の座標
            i=llFloor(v.x*2)+(1-llFloor(v.y*2))*2;  // 座標を番号に変換
            map(i);  // mapへ
        }
        else { // SLビューワーが非対応だったらSLURLを全部表示
            string str="Open the chat histry and click SLURL\n";
            for (i=0; i < len; i+=3) str+=slurl(i);
            llWhisper(0,str);  // チャットでSLURL表示
        }
    }
}

座標から番号に変換してるところを変更したらテレポート先を増やせます。
i=llFloor(v.x*3)+(2-llFloor(v.y*3))*3;
9ヶ所用だったらこんな感じになりますね。計算得意じゃないので説明はできないですけど^^;

2010年4月2日追記: ビューワー2.0.0からチャット履歴のスペースの入ったSIM名のリンクがおかしくなるので、SIM名をURLエンコードするよう変更しました。このスクリプトを改良した4ヶ所以上登録可能な看板もありますのでこちらの記事(新ブログ)をご覧ください。

0 件のコメント:

コメントを投稿