仕組みは http://world.secondlife.com/resident/アバターキー にアクセスして、ページのヘッダ部分にある <meta name="imageid" content="テクスチャUUID" /> の部分からテクスチャのキーを取得します。
今回は少し長くなりますが、タッチでダイアログを出して許可もらったときだけ表示するようにしてみました。本人に無断で表示しちゃうのは良くないと思うのでw
// プロフ写真展示
integer face=0; // 表示する面の番号
integer ch;
key http_req;
default
{
state_entry()
{
llSetTexture(TEXTURE_BLANK,face); // テクスチャをブランク
ch=llCeil(llFrand(2147483646)); // チャットチャンネル用乱数発生
llListen(ch,"",NULL_KEY,""); // リッスン開始
}
on_rez(integer start_param)
{ // 持ち物から出したら
llResetScript(); // リセット
}
touch_start(integer total_number)
{
key id=llDetectedKey(0); // タッチしたアバターのキー
if (id) {
llDialog(id,"May I display your photo?",["No problem","No thanks"],ch); // ダイアログで質問する
}
}
listen(integer channel, string name, key id, string msg)
{
if (channel == ch) {
if (msg == "No problem") { // いい返事もらったら
http_req=llHTTPRequest("http://world.secondlife.com/resident/"+(string)id,[],""); // プロフのウェブページをHTTPリクエスト
}
}
}
http_response(key request_id, integer status, list metadata, string body)
{
if (request_id == http_req)
{
if (status == 200) { // プロフが取得できたら
string str="<meta name=\"imageid\" content=\""; // この文字列を探す
integer i=llStringLength(str);
integer j=llSubStringIndex(body,str);
if (~j) { // 見つけたらUUIDをstrに代入
str=llGetSubString(body,j+i,-1);
j=llSubStringIndex(str,"\"");
str=llGetSubString(str,0,j-1);
if ((key)str) { // UUIDキーがOKだったら
llSetTexture(str,face); // 写真表示
string name=llGetSubString(body,llSubStringIndex(body,"<title>")+7,llSubStringIndex(body,"</title>")-1); // アバター名取得
if (name) llWhisper(0,"Displayed "+name+"'s photo."); // ○○の写真を表示しますた^^
}
else llWhisper(0,"No image."); // 写真が見つからない><
}
else llWhisper(0,"Error, hidden profile in search?"); // 検索で非表示になってる><
}
else {
llWhisper(0,"Error, status "+(string)status+". Can't get data."); // ウェブページ取得エラー
}
}
}
}
写真を貼ってないプロフはテクスチャのUUIDキーにヌルキーが入ります。また検索にチェック入れてないプロフは <meta name="imageid" content="テクスチャUUID" /> のタグがありません。
ウェブからデータ取得するのはグループ記章も同じ要領でできますね。グループのURLは http://world.secondlife.com/group/グループキー になります^^
4月22日追記: タッチってあまりしてもらえないと思うので、レーダーみたいにセンサーイベントを組み込んだり、ウェルカムマットとかと通信させて連動するようにしたほうがいいかもですね。
7月9日追記: また仕様変更があって、もう古い方法は使えなくなったみたいです。
0 件のコメント:
コメントを投稿