Trenza SANDBOX

LMmapSANDBOX02.jpg

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

このWIKIを編集するにはパスワード入力が必要です

認証パスワード