2010年5月31日月曜日

リナックスを更新したら。。。'A`

今日Fedoraを久しぶりに立ち上げてソフトウェアを自動更新したんですが、その後SLビューワー2を起動させたら、起動画面の画像が出なくてシェアードメディアが動かなくなってました><

Snowglobe 1.3.2も試してみたら同じ症状になってたんですね。それでまたオーディオドライバで何か問題が起きてるのかなって思って、試行錯誤しながら起動スクリプトの export LL_BAD_FMOD_DRIVER=x を有効にしてみたら、とりあえずViewer 2.0.1もSnowglobe 1.3.2も直りました^^;

まあLinuxのSnowglobe 1.3.2は、Windows版みたいにパーセルメディアでウェブページに埋め込まれたフラッシュとかは動かないみたいですけどw

6月13日追記: 今日また自動更新したらシェアードメディア(内蔵ブラウザ)がまた動かなくなってて、今回は起動スクリプトをいじくっても直せませんでした。。。何か最近更新の度に調子悪くなってるような。。。;;
2010-06-13T01:50:12Z INFO: LLViewerMedia::getCurrentUserAgent: SecondLife/2.0.1.203797 (Second Life Release; default skin)
2010-06-13T01:50:12Z INFO: LLViewerMediaImpl::loadURI: Asking media source to load URI: http://secondlife.com/app/login/?lang=en-us&channel=Second%20Life%20Release&version=2%2E0%2E1%20%28203797%29&grid=Agni
2010-06-13T01:50:17Z INFO: LLPluginProcessParent::receiveMessage: plugin version string: Webkit media plugin, Webkit version 2.02.33363 (QtWebKit version 4.6.0)
2010-06-13T01:50:17Z INFO: LLPluginProcessParent::receiveMessage: message class: base -> version: 1.0
2010-06-13T01:50:17Z INFO: LLPluginProcessParent::receiveMessage: message class: media -> version: 1.0
2010-06-13T01:50:17Z INFO: LLPluginProcessParent::receiveMessage: message class: media_browser -> version: 1.0
2010-06-13T01:50:37Z WARNING: ll_apr_warn_status: APR: End of file found
2010-06-13T01:50:37Z INFO: LLPluginMessagePipe::pump: Error from socket, cleaning up.

6月20日追記: 先週更新したときフラッシュがバージョン10.1.53.64にアップデートされてたので気になってたんですが、試しにフラッシュを /usr/lib/mozilla/plugins から除けてみたら、やっぱりフラッシュのバージョンアップが原因だったようで、内蔵ブラウザが動くようになって起動画面の絵が出ました。それで、http://kb2.adobe.com/jp/cps/228/228683.htmlからバージョン10のアーカイブを入手して、ひとつ前のバージョン10.0.45.2を入れたら、元通りフラッシュも内蔵ブラウザで動いたんですね。でもそれだとセキュリティホールがちょっと心配だったりします。。。んー、どうしましょう?
情報処理推進機構:情報セキュリティ: Adobe Flash Player の脆弱性について

7月4日追記: 思い切ってOSをFedora 13にアップデートしたんですが、Fedora 12のときと同じでFlash 10.1.53.64だとダメみたいです。。。;;

7月12日追記: ベータ版のビューワー2.1.0.206543を試してみたら、検索ウィンドウ出しても内蔵ブラウザが落ちなくなってシェアードメディアもやっと動きました。起動スクリプトはデフォルトの状態です。アーカイブがやたら大きくなってるのが気になりますが。

2010年5月27日木曜日

サイズ変更スクリプト

今回はサーバー1.38から追加された関数を使った簡単なサイズチェンジスクリプトです。。。まあいわゆるリサイズスクリプトと同じようなスクリプトですねw

古いタイプのリサイズスクリプトは子プリムにも全てスクリプトが入ってて、親プリムからllMessageLinkedで子プリムのスクリプトに信号を送ってリサイズするようになってると思いますが、1.38の新関数を使えば子プリムのスクリプト無しで動作するものが作れるので、スクリプトの負荷を特に心配しなくてもよくなります^^

このスクリプトはllGetLinkPrimitiveParamsで最初に全プリムの位置とサイズを取得してリストに記録しておいて、ダイアログで選んだサイズに合わせて全プリムの倍率(位置、サイズ)をllSetLinkPrimitiveParamsFastで変えるようにしました。
// サイズチェンジ
integer listen_handle;
integer CHANNEL;
list prims;  // 位置、サイズ記録用リスト
list menu=["Size S","Size M","Size L","Cancel"];  // メニュー用

set_size(float f)
{  // プリムの位置とサイズを変える
    llSetLinkPrimitiveParamsFast(LINK_ROOT,[PRIM_SIZE,llList2Vector(prims,3)*f]);  // 親プリム
    integer i;
    integer j=llGetListLength(prims);
    for (i=4; i < j; i+=2) {  // 子プリム
        llSetLinkPrimitiveParamsFast(i/2,[PRIM_POSITION,llList2Vector(prims,i)*f,PRIM_SIZE,llList2Vector(prims,i+1)*f]);
    }
}

default
{
    state_entry()
    {
        integer i;
        integer j=llGetNumberOfPrims();  // リンクしてるプリムの数
        vector v=llGetRootPosition();  // 親プリムの位置
        rotation r=llGetRootRotation();  // 親プリムのローテーション
        list l;
        for (i=0; i <= j; i++) {
            l=llGetLinkPrimitiveParams(i,[PRIM_POSITION,PRIM_SIZE]);  // プリムの位置、サイズを取得して
            prims+=[(llList2Vector(l,0)-v)/r,llList2Vector(l,1)];  // ローカル位置とサイズをリストに記録
        }
        llOwnerSay("Size saved.");
    }

    touch_start(integer total_number)
    {
        key id=llDetectedKey(0);  // タッチしたアバターのキー
        if (id == llGetOwner()) {  // オーナーだったら
            llListenRemove(listen_handle);
            CHANNEL=llCeil(llFrand(2147483646));  // ランダムにチャンネルを決める
            listen_handle=llListen(CHANNEL,"",id,"");  // リッスン
            llSetTimerEvent(600);  // タイムアウト600秒
            llDialog(id,"Size change",menu,CHANNEL);  // ダイアログ
        }
    }

    timer()
    {
        llSetTimerEvent(0);
        llListenRemove(listen_handle);  // リッスン中止
    }

    listen(integer channel, string name, key id, string msg)
    {
        llSetTimerEvent(0);
        llListenRemove(listen_handle);
        if (channel == CHANNEL && id == llGetOwner())
        {  // ダイアログの選んだボタンに応じてサイズ変更
            if (msg == "Size S") set_size(0.8);
            else if (msg == "Size M") set_size(1.0);
            else if (msg == "Size L") set_size(1.2);
        }
    }
}

常に最初に記録した値を基準にしてサイズを変えるようにしてるので、プリムやスクリプトを修正するときは、サイズが狂ってこないように倍率1.0(サイズM)に戻してから行ってくださいね。

2プリム以上あるオブジェクトで使ってください。1プリムのものは親プリムのリンク番号が0になるのでこのままでは動きません^^;

2010年5月25日火曜日

成長する木のスクリプト

IM通知のメールが来てるのにログインしたら表示されなくて、次回のログインで表示されたり、お客様からミュートされてるように見えるって言われたり、ログインしたらL$残高が表示されてなくてお買い物もできなかったり。。。何か最近不安定だなって思う今日この頃です。

今回は持ち物から出したら一定時間毎に成長していく(プリムが大きくなる)スクリプトを考えてみました。成長のたびにテクスチャも指定できるようにしたので植木やお花みたいなオブジェクトに良いんじゃないかなって思います。但しリンクしてるプリムは全部同じサイズで成長するようにしたので、鉢がくっついてるようなものには使えません^^;

サイズ変更、位置移動はllSetPrimitiveParamsllSetLinkPrimitiveParamsでも良かったんですけど、嬉しそうにllSetLinkPrimitiveParamsFast使いましたw

各プリムのY方法のサイズを0.01にして、2~4枚組み合わせて作ってください。側面はスクリプトで透明にしています。
それから、最初のサイズの厚みを直さないといけないですけど、一応1プリムのスカルプにも対応してます。
// 成長する樹木
vector size=<0.5,0.01,0.5>;  // 最初のサイズ
integer interval=86400;  // 間隔(秒)
list grow_list=[  // 倍率,"テクスチャUUID"
1,"テクスチャのUUID1",
2,"テクスチャのUUID2",
4,"テクスチャのUUID3",
7,"テクスチャのUUID4",
10,"テクスチャのUUID5",
NULL_KEY];
integer len;
integer count;  // カウンタ用

grow()
{
    vector p=llGetPos();  // 位置取得
    vector s1=llGetScale();  // 現在のサイズ取得
    vector s2;  // 次のサイズ計算用
    float f=llList2Float(grow_list,count*2);  // 倍率
    key id=llList2Key(grow_list,count*2+1);  // テクスチャのキー
    if (llGetNumberOfSides() > 1) s2=<size.x*f,size.y,size.z*f>;  // スカルプでないときのサイズ計算
    else s2=size*f;  // スカルプのとき
    llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_SIZE,s2, PRIM_POSITION,<p.x,p.y,p.z+(s2.z-s1.z)/2>]);  // 親プリムのサイズと位置変更
    llSetLinkPrimitiveParamsFast(LINK_ALL_CHILDREN,[PRIM_SIZE,s2]);  // 子プリムのサイズ変更
    if (id) llSetLinkTexture(LINK_SET,id,ALL_SIDES);  // テクスチャ変更
}

default
{
    state_entry()
    {
        len=llGetListLength(grow_list)-1;  // ヌルキーを除いたリストの長さ
        if (llGetNumberOfSides() > 1) {  // 親プリムに面が2つ以上あったら(スカルプじゃない)
            llSetLinkAlpha(LINK_SET,0,ALL_SIDES);  // 一度プリム全面を透明にして
            llSetLinkPrimitiveParams(LINK_SET,[PRIM_COLOR,1,<1,1,1>,1.0,PRIM_COLOR,3,<1,1,1>,1.0]);  // 面番号1と3だけ不透明にする
        }
        grow();  // growへ
    }

    on_rez(integer start_param)
    {
        grow();  // growへ
        llSetTimerEvent(interval);  // タイマースタート
    }

    timer()
    {
        count++;  // カウンタ加算
        grow();  // growへ
        if (len <= (count+1)*2) {  // 成長が終わったら
            llSetTimerEvent(0);  // タイマーストップ
            llOwnerSay("The end of growing.");
        }
    }
}

サンプルは1日(86400秒)で1段階成長します。成長しきった状態は5m(0.5*10=5)です。倍率や最初のサイズを大きな値にしてもプリムの大きさの制限で10mが最大になります。

テクスチャのUUIDは、持ち物内のテクスチャを右クリックして「資産UUIDをコピー」でコピーできますので、それを貼り付けしてくださいね。

2010年5月22日土曜日

ベンダー全機種ビューワー2に合わせて修正

ナインベンダーに入れて販売してるナインベンダーとフリーベンダーの順番が逆になってました。。。申し訳ございません>< んー、何か最近全然売れてないと思ってました。 orz

ビューワー2の改悪で、オブジェクトの説明がマウスカーソルを乗せただけでは表示されなくて、iマークをクリックしないと見れなくなりましたよね。

うちのベンダーはフローティングテキストを非表示にしたときでも、マウスカーソルを乗せたら商品名や価格が説明として表示されるようにしてたので、ビューワー2でそれが見えなくなってしまったんですよ。。。なので、非表示にしたときはチャットで商品名や価格を表示するように変更しました。

現在の各機種のバージョンです。
4, 5, 7, 9panels vendor V1.4.7 (マルチパネルベンダー4機種)
Smart vendor V1.0.2
1prim vendor V2.3.4
Vendor V1.4.6 (フリーベンダー)
Nine vendor V1.5.1 (旧1プリム9アイテムベンダー)
Sixteen vendor V1.2.1 (旧1プリム16アイテムベンダー)
Animation vendor V2.1.8

マルチパネルベンダー、スマートベンダーをお持ちのお客様はオートアップデートをご利用くださいね。他の機種をお持ちのお客様は、お問い合わせくださいましたら最新バージョンをお送りいたします。宜しくお願いします^^

1prim sculpted plant kit 2nd edition

1プリムスカルプテッドプラントキット・セカンドエディションを発売しました。去年の1プリムスカルプテッドプラントキットは短時間で出来上がったんですが、今回作ったセカンドエディションは一般によく市販されてるようなプレーン同士のつなぎ目が出ないようにしたもので、テクスチャの上下位置の微調整や余白などがいらないタイプなんですね。でもそうすると崩れやすくなるので、崩れが目立ちにくくなるよう結構時間かけて調整しました。

セカンドエディションでは、スカルプトマップのテクスチャ4枚とスクリプトがセットになってて、オブジェクトやサンプルの木は入ってません。自分で製作したオブジェクトに付属のスクリプトをドロップすると、スカルプになって、テクスチャのサイズとオフセットも調整されるようになってます^^

もちろんこのキットを使って製作したお花や植木などは販売・配布可能です。でもこの商品のスカルプトマップの販売・配布はご遠慮くださいねw

お値段はL$50で、Mansion Mall店SUNSET SHOPPING MALL店Market Beach Mall East店FS Shopping Mall店に置いてきました。宜しくお願いします^^

2010年5月20日木曜日

お店のATM

何となくお店らしくなっていいかなって思って、Mansion Mall店にタバコ自販機とかATM置いてるんですが、Exchange24のATMは意外と利用者がいたのでちょっとびっくりしてる千尋ですw

でも海外のお客様向けにって思って置いてたTeleLindenは、使える国が限られてるみたいなのと使い方が特殊だからでしょうかね?全然利用者がいなかったんですよ。。。なので、DX Exchangeに変えてみました。このATMは係の方に連絡を取らないともらえないので設置がお気軽じゃなかったんですけど、結構海外のモールで見た覚えがあったのとプリム数が少なかったのでこれにしようって思ったんですね。

L$ Marketplaceにリンデンラボで公式にリストされてるリンデンドル両替事業者の一覧があります。売れたときの報酬が5%貰えるところもあってちょっと迷ったんですが、ATMが10プリム以上(少なめのタイプで6プリム)だったので今回はやめときました^^;

2010年5月16日日曜日

Viewer2用YouTubeプレーヤーのスクリプト

今回はビューワー2シェアードメディアを使った簡単なTV型ユーチューブプレーヤーを作ってみました^^
LSL プリムメディア

仕組みはユーチューブ動画のアドレスを変換して、シェアードメディアのURLにYouTube埋め込みプレーヤーを表示するようにしただけなんですけどね^^;

普通のウェブブラウザだったら、埋め込みプレーヤーのアドレス(http://www.youtube.com/v/ビデオID)を直接開いても見れるのに、なぜかSLビューワー2では表示されなかったので、dataスキームを使ってHTMLコードを埋め込むようにしました。(かなり雑なHTMLですが^^;

本体(テレビ画面)の大きさは <0.1, 2, 1.2> ぐらいの比率にしてください。動画が16:9ぐらいのサイズで表示されるようにスクリプトで調整しました。プリムメディアの幅、高さはよくわからなかったんですが、値を1024にしたら100%になるみたいです。
// YouTube player for viewer2
integer ch=1;  // チャット入力用チャンネル
integer face=4;  // 面番号

set_media(integer num, string url)
{  // メディア設定
    llSetPrimMediaParams(num,[
    PRIM_MEDIA_CONTROLS,PRIM_MEDIA_CONTROLS_MINI,
    PRIM_MEDIA_HOME_URL,url,
    PRIM_MEDIA_CURRENT_URL,url,
    PRIM_MEDIA_WIDTH_PIXELS,1024,
    PRIM_MEDIA_HEIGHT_PIXELS,600,
    PRIM_MEDIA_AUTO_PLAY,TRUE
    ]);
}

set_youtube(string url)
{
    integer i=llSubStringIndex(url,"youtube.com/watch?");
    if (i > 6) {  // YouTubeだったら
        i=llSubStringIndex(url,"v=");
        if (i > 24) {
            string videoid=llGetSubString(url,i+2,-1);
            i=llSubStringIndex(videoid,"&");
            if (~i) videoid=llGetSubString(videoid,0,i-1);
            // 埋め込みプレーヤーを表示
            set_media(face,"data:text/html,<style type='text/css'>body{margin:0;padding:0;}object{width:100%;height:100%;}</style><object data='http://www.youtube.com/v/"+videoid+"&autoplay=1'  type='application/x-shockwave-flash'></object>");
        }
        else llWhisper(0,"Illegal URL");
    }
    else {  // YouTube以外はそのままウェブページとして表示
        set_media(face,url);
    }
}

default
{
    state_entry()
    {
        llScaleTexture(1,0.586,face);  // テクスチャのスケール設定
        llOffsetTexture(0,-0.207,face);  // テクスチャのオフセット設定
        llListen(ch,"",NULL_KEY,"");  // リッスン開始
    }

    on_rez(integer start_param)
    {  // 持ち物から出したとき
        llResetScript();  // スクリプトリセット
    }

    listen(integer channel, string name, key id, string msg)
    {
        if (channel == ch) {  // チャンネル1でアドレスが入力されたら
            string str=llGetSubString(msg,0,6);
            if (str == "http://") {
                llWhisper(0,"URL = "+msg);
                set_youtube(msg);  // set_youtubeへ
            }
        }
    }
}

YouTubeモバイルプレーヤーのスクリプトをベースに改造したので、アドレスのチャット入力やアドレス変換してる部分は大体同じですw 視聴はビューワー2でフラッシュが再生される状態に設定して、チャットのチャンネル1番でユーチューブ動画のアドレスを入力してくださいね。
/1 http://www.youtube.com/watch?v=nCgQDjiotG0

22時30分頃追記: 画像をアップしました。埋め込みプレーヤーそのものですけどw

2010年5月14日金曜日

オンラインチップボード発売

オンラインステータスボードにチップジャーの機能を付けたOnline tip boardを発売しました^^

他はあまり変わった機能は付いてないですけどね^^;

フローティングテキストに最高額と最終寄付者、または最高額上位3件かラスト3件が表示可能です。あとオーナー名表示の部分、 千尋's Tip board みたいにニックネームも入力できます。

うちのオンラインインジケータと同じように、持ち物から出したときにプロフ写真を自動取得できますが、この機種は一応オンラインステータスを非表示にもできるようにしました。それからオンラインステータスパネルのテクスチャは簡単なものですけど3種類チェンジできます。

パーミッションは修正可、コピー不可、転送可のみでお値段はL$70L$60です。全店には置いてないですけど大きめの店舗には大体置いてます。宜しくお願いします^^

5月21日追記: 少し値下げしました。

2010年5月12日水曜日

値上げしすぎて失敗;;

この前Xstreet SL1プリムベンダーのページを編集して、表示してみたら評価が全て消えてしまってるのに気がついたんですね@@;

レビューは3件入ってるのに、★マークやVOTE数、グラフとも全て無くなってしまった状態なので、これってシステムの異常かなって思ってサポートに問い合わせてみたんですよ。それで本日やっとご回答を頂きました。それによると、評価は価格と一緒に記録されてて、価格を変更した場合は50%以内の価格変更でないと表示されないようでした。。。翻訳機通したような日本語で回答されてたんですが、50%ってのは変更前と変更後の比率ですかね。

つまり元々50L$だったのを先々月100L$に値上げして、更にこの前120L$に値上げしたのがいけなかったんですね。評価はほとんど50L$のときに入ったものだったので、これらは100L$までが表示される上限ってことになります。(試しに100L$に下げてみたら評価が見えました)

んー、この機種はうちのベンダーの中で一番評価高かったので悲しいですけど、今更100L$に値下げする気も起きないので諦めます;;

2010年5月9日日曜日

現在位置の座標を表示するHUDのスクリプト

ビューワー2は上のアドレスバーみたいな部分を右クリックで座標を表示させることができますが、土地に設定されてる名前が長すぎたら座標部分が隠れて見えないことがありますよね^^;

そういう場所で高度の高い上空を飛んでると、どのくらいまで上昇したか把握できなくて不便なんですよw それで今回は現在位置を表示させる簡単なHUDを作ってみました。

仕組みも単純なので特に難しい部分はないと思います。タッチしたとき新しくなったSLURL(ビューワー2用?)を表示するようにしました。
// 現在位置の座標を表示

string get_pos(string s)
{
    vector pos=llGetPos();  // 現在位置取得
    // 値を整数にして文字列に変換
    string x=(string)((integer)pos.x);
    string y=(string)((integer)pos.y);
    string z=(string)((integer)pos.z);
    return x+s+y+s+z;  // 引数sで区切ってリターン
}

default
{
    state_entry()
    {
        llSetTimerEvent(0.1);  // 最初は0.1後にタイマー開始
    }

    timer()
    {
        llSetTimerEvent(1);  // 1秒おきにタイマーをセット
        string str=llGetRegionName()+"\n("+get_pos(", ")+")";  // SIM名と座標を表示用に整形
        llSetText(str,<1,1,1>,1.0);  // フローティングテキストに表示
    }

    touch_start(integer total_number)
    {
        if (llDetectedKey(0) == llGetOwner()) {  // オーナーがタッチしたらSLURLをチャット
            llOwnerSay("http://maps.secondlife.com/secondlife/"+llEscapeURL(llGetRegionName())+"/"+get_pos("/"));
        }
    }
}

2010年5月6日木曜日

XstreetのRSSフィード

Xstreet SLのRSSフィードの取り方が公式wikiに出てたんですが、フィードもHTTPS接続になっちゃうので、Pipesなど一部のサービスで利用できませんでした><

Xstreet RSS feeds
自分が出品してる商品のフィードは新規アイテム順しか使えないみたいですが、こんな感じになりますね。
https://www.xstreetsl.com/rss/new_items.php?merchant=マーチャントID&maxItems=10

マーチャントIDは自分のアイテム一覧を表示したときのMerchantIDパラメータの値のことで数桁の数字になります。
https://www.xstreetsl.com/modules.php?name=Marketplace&MerchantID=マーチャントID

httpで接続してもhttpsに転送されてしまうのでPipesでは使えないんですが、BloggerのフィードガジェットではhttpにしたURLを入力したら何とか使えました^^;

2010年5月1日土曜日

ビューワー2のスキンを変えてみました

Viewer2は設定メニューにスキン変更の項目がなかったので、変えられないのかなって思ってたんですが、よく調べたら変更可能だったので試してみました^^;

http://wiki.secondlife.com/wiki/Category:Viewer_Skins
ここにビュワー2用スキンは現在2つありますね。私はStarlightのほうを使ってみました。それで立ち上げてログインしたら、ビューワー1みたいに下にMap,Mini-Map,Inventoryを開くボタンが追加されました。それからサイドバーを開いても画面が縮まずに画面上に重なって出るみたいなので使いやすそうです^^

インストールは手作業でC:\Program Files\SecondLifeViewer2\skinsにあるdefaultフォルダをバックアップして、スキンに付属のフォルダをdefaultにリネームして差し替えって感じなのでちょっと面倒ですけどw