ソラマメブログ
QRコード
QRCODE
プロフィール
mountainbook.tokyo

2008年05月11日

プロフィールの写真を取得しパネルに表示するスクリプト

CFT Visitors' Photobook

Hazukiさんのブログ「Hazuki's Script」の記事
プロフィールの写真」に触発され、
来場者が自分のプロフィール写真を表示させられるフォトブックといいますか、
パネルを作成しました。

アバターがパネルにタッチすると、プロフィール写真のUUIDを取得し、
それを子プリムに送信、タッチした日付とアバター名がパネルに表示されます。
日付とアバター名を子プリムに送信するため、
親プリムと子プリムにそれぞれスクリプトを入れる必要があります。
下記の2つがそれです。

  スクリプトには、ひとつ解決していない問題があります。
  それはプロフィールに写真を設定していない人がタッチしたときにエラーがでること。
  まだ、それを回避する命令は思いついておらず、入れていません。

ところでこのスクリプトは
SLmameで得た情報から作成したものですので、
この場に還元したいと思います。
みなさんも、いろいろ試してみてください。

なお、すぐに現物が見たい、現物で遊んでみたいという方は、
Club Fabulous Tokyoのダンスホールにパネルを設置してあります。
また、あわせて現物の無料配布も行っていますので、
クラブにお越しください。お待ちしています。

===================================================
親プリム用スクリプト
===================================================

key requestid;
string resident;
integer index;
integer number = 2;//親プリムの番号が1なので、2からスタート。
list names = [];
integer name;

default
{
state_entry()
{
llSetText("Visitors' Profile Photos\nTouch the panel and add your photo!", <1,1,1>, 1);//パネル上部に表示されるテキスト、文は適宜変更。
llSetLinkTexture(LINK_ALL_CHILDREN, "woodpaneling", ALL_SIDES);//"woodpaneling"はデフォルト時の子プリムのテクスチャー名。コピー可のテクスチャーを親プリムに入れ、名称をここに挿入。
llMessageLinked(LINK_ALL_CHILDREN, 0, " ", NULL_KEY);
}

touch_start(integer num_detected)
{
resident = llKey2Name(llDetectedKey(0));
name = llListFindList(names, [resident]);//タッチした人の名前をリストに探す。

if(name == -1)//写真が表示されている人を除く。
{
index = llFloor(llFrand(num_detected));
requestid = llHTTPRequest("http://world.secondlife.com/resident/"+(string)llDetectedKey(index),[HTTP_METHOD,"GET"],"");//プロフィール写真の取得。
names = names + [resident];//写真を表示した人をリストに追加。
}
}

http_response(key request_id, integer status, list metadata, string body)
{
if (request_id == requestid)
{
integer i = llSubStringIndex(body,"http://secondlife.com/app/image/");
llSetLinkTexture(number,(string)llGetSubString(body,i+32,i+67),1); //プロフィール写真の子プリムへの送信。
llMessageLinked(number, 0, (string)(llGetDate() + " " + resident), NULL_KEY);//タッチした日付、アバター名の子プリムへの送信。
number++;

if(number == 18)//クラブでは写真を表示させるプリムを16個に設定。17番目のプリムまで写真表示(つまり16枚)。適宜変更。
{
number = 2;//番号が18になったら、最初に戻る。
       names = [];//リストをブランクに。一度写真を表示した人も表示できるように。
}
}
}
}

===================================================
子プリム用スクリプト
===================================================

default
{
link_message(integer sender_num, integer num, string str, key id)//親プリムのllMessageLinked待ち。
{
llSetText(str, <1,1,1>, 1);//親プリムから送られてきたテキストを表示。
}
}

===================================================

Free Photobook

この記事へのトラックバックURL

この記事へのコメント
こんにちは。たまたま見たので、、、。
プロファイルに写真がないときは、"blank.jpg" がイメージ名として入ってくるので、if 文で blank.jpg ならば、プロフィールに写真がないから表示しません、みたいなメッセージをタッチした人に返せばよいです。

元ネタはこちら。ソースそのまままです。
http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryDisplayProfilePic
Posted by Whitfield-In-WorldWhitfield-In-World at 2008年05月12日 15:55
Whitfield-In-Worldさん

アドバイス、ありがとうございました。
お教えいただいた記事によると、プロフィールを勝手に利用するのはダメ、といったことも書いてありますね。とすると、センサーで勝手に取るのはまずいのでしょうかね。In worldでオープンになっている情報だからかまわない、とい解釈もできますし、私もそのつもりでしたが。
Posted by mountainbook.tokyo at 2008年05月12日 16:05
lslwiki の記事をそのまま理解すると、Avatar(Creator) の許可なしに、その Avatar のプロフィールにある写真を使うことが、 Linden から TOS (Terms Of Service) 違反と言われたので、許可を求めるダイアログを加えた、とあります。

Vistor's PhotoBook を使用して写真を表示するには自分がタッチしない限り表示されない仕様みたいですから、それをどう解釈するかでしょう。

個人的には「知らない間に写真が表示される」ということではないのでいいのかなぁ。と思いますけどね。
Posted by Whitfield-In-WorldWhitfield-In-World at 2008年05月12日 17:42
さらにアドバイスをくださり、ありがとうございます。最初にご紹介いただいたサイトを見ていたら、途中からBANされて入れなくなってしまい……。詳細が把握できないままになっていました。安全策というか、個人の意思を尊重するなら、写真を表示する前にワンクッション(ダイアログなど)を挿入するといいかもしれませんね。改良してみます。
Posted by mountainbook.tokyomountainbook.tokyo at 2008年05月12日 18:24
認証文字を入力してください