Site search
2009年1月23日金曜日
テレポート履歴を記録するスクリプト
昨日の記事は2ちゃんねるでも、まあまあウケたんじゃないかなって思ってる千尋です^^; これからもときどき 痛い 面白い記事書けるように頑張りますねwww
今回はテレポートの履歴を記録するスクリプトです。これはテレポートしたときチャット履歴に表示されるテレポート元じゃなくてテレポート先(目的地)を記録します。
changedイベントのCHANGED_TELEPORTがテレポートしたとき反応しますので、そのときにリージョン(SIM)、現在位置をリストに記録しといて、表示させるときにSLURLに整形したらいいですね^^
リージョン名はスペースが入ってるものもあるので、スペースはURLエンコード要るかなって思ったんですが、そのままでも問題なく開けたので大丈夫でしたw
オーナーが装着していないと記録されませんw タッチで最大20件表示するようにしてますので、HUDなどタッチしやすいものに組み込んだらいいですかね。
あと、テレポート先の重複を記録しないようにするときはllListFindListでチェックして処理したらいいかなって思います^^
2010年4月2日追記: ビューワー2.0.0からスペースの入ったSIM名のリンクがおかしくなるので結局URLエンコード追加しました。orz
今回はテレポートの履歴を記録するスクリプトです。これはテレポートしたときチャット履歴に表示されるテレポート元じゃなくてテレポート先(目的地)を記録します。
changedイベントのCHANGED_TELEPORTがテレポートしたとき反応しますので、そのときにリージョン(SIM)、現在位置をリストに記録しといて、表示させるときにSLURLに整形したらいいですね^^
オーナーが装着していないと記録されません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
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿