Site search

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

2009年1月23日金曜日

テレポート履歴を記録するスクリプト

昨日の記事は2ちゃんねるでも、まあまあウケたんじゃないかなって思ってる千尋です^^; これからもときどき 痛い 面白い記事書けるように頑張りますねwww

今回はテレポートの履歴を記録するスクリプトです。これはテレポートしたときチャット履歴に表示されるテレポート元じゃなくてテレポート先(目的地)を記録します。

changedイベントのCHANGED_TELEPORTがテレポートしたとき反応しますので、そのときにリージョン(SIM)、現在位置をリストに記録しといて、表示させるときにSLURLに整形したらいいですね^^

リージョン名はスペースが入ってるものもあるので、スペースはURLエンコード要るかなって思ったんですが、そのままでも問題なく開けたので大丈夫でしたw


オーナーが装着していないと記録されませんw タッチで最大20件表示するようにしてますので、HUDなどタッチしやすいものに組み込んだらいいですかね。
// テレポート履歴を記録
list tp;  // テレポート先記録用リスト
integer max=20;  // 最大記録数

default
{
    changed(integer change)
    {
        if (change & CHANGED_TELEPORT)
        {  // テレポートしたとき
            vector v=llGetPos();  // 現在位置取得
            // リージョン名を取得してテレポート先をRagion/x/y/zにする
            string str=llEscapeURL(llGetRegionName())+"/"+(string)((integer)v.x)+"/"+(string)((integer)v.y)+"/"+(string)((integer)v.z);
            integer i=llGetListLength(tp);  // リストの長さ
            if (i >= max) tp=llDeleteSubList(tp,0,i-max);  // リストの長さを調整
            tp+=[str];  // テレポート先をリストに加える
        }
    }

    touch_start(integer total_number)
    {
        if (llDetectedKey(0) == llGetOwner())
        {  // オーナーがタッチするとSLURLにしてリストを表示
            integer i;
            integer j=llGetListLength(tp);
            llOwnerSay("** TP history **");
            for (i=0; i < j; i++) llOwnerSay("http://slurl.com/secondlife/"+llList2String(tp,i));
        }
    }
}

あと、テレポート先の重複を記録しないようにするときはllListFindListでチェックして処理したらいいかなって思います^^

2010年4月2日追記: ビューワー2.0.0からスペースの入ったSIM名のリンクがおかしくなるので結局URLエンコード追加しました。orz

0 件のコメント:

コメントを投稿