Trenza SANDBOX
LSL script
integer col=2; // 横の分割数
integer row=2; // 縦の分割数
list tp=[ // "テレポート先","SIM名",位置,
"Trenza SANDBOX","Trenza SANDBOX",<128,128,22>,
"Trenza SANDBOX","Trenza SANDBOX",<128,128,22>,
"Trenza SANDBOX","Trenza SANDBOX",<128,128,22>,
"Trenza SANDBOX","Trenza SANDBOX",<128,128,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表示 } }
}
- 最終更新:2012-03-22 11:11:24