2009年9月22日火曜日

複数登録できる1プリムテレポート看板

去年、1プリムで4ヶ所登録できるテレポート看板のスクリプトを作ったんですが、今回はそれをちょっと改良して、縦横好きな個数で分割設定できるようにしたテレポート看板のスクリプトです。

写真は横3分割、縦2分割にして、ショップの支店5ヶ所登録で使用してます^^

テクスチャは登録するテレポート先を1枚にまとめたものを作って使用します。縦横等間隔に分割したマス目に、各テレポート先の写真を左上から右に向かって順に配置していく感じで作成してくださいね。

// Multi TP-board

integer col=3;  // 横の分割数
integer row=2;  // 縦の分割数

list tp=[ // "テレポート先","SIM名",位置,
"Mansion Mall","Graybar",<228,179,30>,
"Market Beach Mall East","Triasm",<242,137,21>,
"SUNSET SHOPPING MALL","JapanSeychellesLand",<72,70,23>,
"SL-Shopping.net-Mall-Jiminy","Jiminy",<115,23,106>,
"+*+*BELLE ROSE*+*+","Artsebarsky",<236,184,22>,
NULL_KEY];  // データの最後のカンマ用
integer len;

string slurl(integer i)
{  // SLURL生成
    vector v=llList2Vector(tp,i+2);
    string str=llList2String(tp,i);
    // SIM名をブランクにしてるものは閉店表示
    if (llList2String(tp,i+1) == "") return str+"... closed\n";
    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);
    if (sim) 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*col)+(row-llCeil(v.y*row))*col;  // 座標を番号に変換
            map(i);  // mapへ
        }
        else { // SLビューワーが非対応だったらSLURLを全部表示
            string str="Open the chat histry and click the SLURL.\n";
            for (i=0; i < len; i+=3) str+=slurl(i);
            llWhisper(0,str);  // チャットでSLURL表示
        }
    }
}


結構移転とか閉店とかもありそうなので、SIM名を記入する部分のデータを空""にすると ○○モール ... closed って表示するようにしてみました。テクスチャを直すまでの応急処置的な表示って感じでw

2010年4月2日追記: ビューワー2.0.0からチャット履歴のスペースの入ったSIM名のリンクがおかしくなるのでURLエンコード追加しました。内蔵ブラウザがGeckoからWebkitに替わった影響かも知れません。。。て、元々省略してたのがいけなかったんですが orz

0 件のコメント:

コメントを投稿