Firestorm専用のレーダースクリプト

uten

2013年12月20日 01:22


SecondlifeビューワのFirestormには謎の機能がいくつかあるのですが、
その一つに「レーダーに表示されるユーザのUUIDをsayする」という機能があります。
「レーダーに表示されるユーザ」といっているのは以下のウインドウに表示されるユーザ一覧のことです。


sayさせるコマンドは以下です。
llTriggerSound("76c78607-93f9-f55a-5238-e19b1a181389", 1.0);
これをLSLで実行するとレーダー上に表示されているアバターのUUIDをカンマで区切った文字列が、チャンネル「-777777777」にsayされます(Sayなので誰でもListenできるところは注意)

参考情報 http://wiki.phoenixviewer.com/scripting_the_radar
(これしか情報がなく、参考にならないのですが・・・)


ちなみに、上図のように7万m以上離れているユーザでも、
レーダーの一覧にさえ映っていればuuidを取得できます。



レーダーを15秒毎にチェックして、指定したUUID(サンプルはuten Resident)を見つけたら通知するスクリを科いてみました。
Firestormでしか動かないスクリプトです。


//
// レーダーに現れたら通知したいユーザのUUID
key target_uuid="988bd4ba-706b-495e-98d2-20da78705a3b";//uten
//
integer detected=0;
integer detected_bak=0;

default{
state_entry(){
llOwnerSay("レーダーチェック開始");
llListen(-777777777,"",NULL_KEY,"");
// 15秒ごとにレーダーチェック
llSetTimerEvent(15);
}
listen(integer channel, string name, key id, string message){
integer i;
string radar_uuid;

list my_list=llParseString2List(message,[","],[""]);
integer end = llGetListLength(my_list);
for (i=2; i<end; ++i){
// レーダーに映っているUUIDを抽出
radar_uuid=llList2String(my_list,i);

if(target_uuid==radar_uuid){
// ターゲットを発見
if(detected_bak==0){
llOwnerSay("ターゲットの人がレーダーにあらわれた");
}
detected=1;
detected_bak=1;
}
}

}
timer(){
if(detected_bak==1 && detected==0){
llOwnerSay("ターゲットの人がレーダーから消えた");
}
detected_bak=detected;
detected=0;
// レーダーをチェックしてUUIDを-777777777にsayさせる謎のコマンドw
llTriggerSound("76c78607-93f9-f55a-5238-e19b1a181389", 1.0);
}
}


※このスクリはあくまでサンプルです。sayはみんなに聞こえますので、セキュリティ的問題がありますw

しかし、ここまで書いておいてなんですが、
llSensorllGetAgentListllGetAgentSizeを使うよりもメリットがあるかどうかは不明!
有用な使い方を思いついた方は是非お知らせいただきたいです^0^


※この記事は セカンドライフ 技術系 Advent Calendar 2013 の記事です。
スクリプト