2010年12月31日金曜日

FS Shopping Mall店 本日で閉店です

昨日ぐらいから Login failed. The system is logging you out right now. Your Account will not be available until 2010-12-30 23:15:10 Pacific Time. みたいなエラーが表示された時間まで待っても毎回出て、なかなかログインできない千尋です。その度に予定時間が3〜6分くらい伸びてて待たされるんですよね。何回かトライしたら何とかログインできるんですが、ホントもうどーなってるんでしょう? 別のアカウントで試したら全然こんなエラー出ないので、メインのアカウントだけ何か祟られてるんでしょうか?orz

出店させてもらってるFirst Step SIMのFS Shopping Mallが本日で閉鎖されますので、SHOP CHIHIRO FS Shopping Mall店も閉店になります。

サーキット以外の施設は全部閉鎖になるそうです。
http://firststep.slmame.com/e1026728.html

ご来店くださいました皆様、どうもありがとうございました。
それでは、どうぞ良いお年を〜♪

19時20分頃追記: んー、別のアカウントで千尋のプロフをチェックしたら、オフラインのはずなのにオンラインの表示になってました。それでIMを送っても User not online - message will be stored and delivered later. みたいなメッセージも出ません。メールには転送されてるみたいでしたが。。。ってことで常にオンライン状態になってると思いますがログインしてないかも知れません、ご容赦ください m(_ _)m

2011年1月6日追記: あけましておめでとうございます。今日ログインしてみたらログインエラーの問題は直ってて、オンラインステータスのほうも正常に表示されるようになってました^^

2010年12月28日火曜日

デジタルウォッチのスクリプト

うちはスクリプトの製作依頼は基本的に受付してないんですが、簡単なスクリプトの製作やご相談とか、商品の簡単な改造くらいだったら私の気分次第でやらせてもらったりします。それで、デジタル時計のスクリプトを売ってもらえないか?っていうお問い合わせ件数が結構多かったんですね。でもうちで販売してる時計のスクリプトそのものは売りたくないし、どんな時計に使うのか聞いたら何れも腕時計用だったので、お客様の製作する腕時計に合わせて書き直すのはちょっと大変かなって思ってお断りしてたんですよw

ってことで、今回は簡単なデジタルウォッチのスクリプトです。。。まあ液晶表示部分だけですけどねwww


まずプリムの製作です。ボックスを作ってサイズを0.01x0.01x0.01、テーパーX0.60,Y0.40、スライスB0.900くらいにしてください。


作ったものを5つコピーして並べ、左から順にオブジェクト名を h1 h2 colon m1 m2 に変更して全部リンクさせてください。親プリムはどれになっても構いませんが、X、Y方向を間違えないようにしてくださいね。

各プリムの側面や底面は目立たないよう透明にしてください。

液晶文字のテクスチャはこんな感じで作ります。作るのが面倒だったらスクリプトに書いてあるUUIDそのまま使うとこれと同じものが出ます。(背景は透明です)


そしてスクリプトです。このスクリプトはどのプリムに入れても動くと思うので、腕時計の親プリムに入れたらややこしくなくていいかもですね^^
// デジタルウォッチ
integer JST=TRUE;  // TRUEで日本時間、FALSEでSL時間
integer tmp;  // 一時記憶用
// リンク番号保存用変数
integer h1;  // 時の左プリム
integer h2;  // 時の右プリム
integer colon;  // :用のプリム
integer m1;  // 分の左プリム
integer m2;  // 分の右プリム
key texture="495abf2a-034c-9ff9-273e-3ce5d424b3e3";  // 表示用数字テクスチャのUUID
// テクスチャのオフセット位置データ
list ou=[-0.417,-0.25,-0.083,0.083,0.25,0.417,-0.417,-0.25,-0.083,0.083,0.25,0.417];
list ov=[0.25,0.25,0.25,0.25,0.25,0.25,-0.25,-0.25,-0.25,-0.25,-0.25,-0.25];

set_texture(integer num, integer i)
{  // 表示用
    if (num < 1) return; // リンクがない場合リターン
    llSetLinkPrimitiveParamsFast(num,[PRIM_TEXTURE,0,texture,<0.2,0.5,0>,<llList2Float(ou,i),llList2Float(ov,i),0>,0.0]);
}

init()
{
    integer i;
    integer j=llGetNumberOfPrims();  // リンクしてるプリムの数
    for (i=0; i <= j; i++) {
        string str=llGetLinkName(i);  // プリム名取得
        // colon,h1,h2,m1,m2の各リンク番号を保存
        if (str == "colon") colon=i;
        else if (str == "h1") h1=i;
        else if (str == "h2") h2=i;
        else if (str == "m1") m1=i;
        else if (str == "m2") m2=i;
    }
}

default
{
    state_entry()
    {
        init(); // initへ
        set_texture(colon,10); // 中央の:を表示
        llSetTimerEvent(0.1);  // 0.1秒毎のタイマー
    }

    changed(integer change)
    {
        if (change & CHANGED_LINK) init();  // リンクが変わったらinitへ
    }

    timer()
    {
        integer i;
        if (JST) i=(integer)llGetGMTclock();  // 日本時間のときはGMT時間を取得
        else i=(integer)llGetWallclock();  // そうでないときはSL時間(PST/PDT)
        if (i != tmp) {  // 時間が変わったら
            tmp=i;  // tmpに格納
            if (JST) {  // 日本時間だったら
                i+=32400; // 9時間(9*3600)加算
                if (i >= 86400) i-=86400;  // 86400(24*3600)以上は86400減算
            }
            integer h=i/3600;  // 時
            integer m=i%3600/60;  // 分
            string hh=(string)h;  // 時の表示用
            string mm=(string)m;  // 分の表示用
            // 10以下のとき0を付けて2桁にする
            if (h < 10) hh="0"+hh;
            if (m < 10) mm="0"+mm;
            i=(integer)llGetSubString(hh,0,0);  // 時の10の位
            if (i == 0) i=11;  // 0だったら空白(11)にする
            set_texture(h1,i);  // 時の左側を表示
            set_texture(h2,(integer)llGetSubString(hh,1,1));  // 時の右側を表示
            set_texture(m1,(integer)llGetSubString(mm,0,0));  // 分の左側を表示
            set_texture(m2,(integer)llGetSubString(mm,1,1));  // 分の右側を表示
        }
    }
}

2010年12月14日火曜日

Kiyomizu Mallのトレハン始まってます^^

うちがお世話になってるKiyomizu MallでKiyomizu Winter Treasure Huntingが開催されています。

期間は2010年12月12日0:00〜2011年1月7日22:00です。うちは今夜エントリーしました。。。ちょっと開催日勘違いしてて遅れたんですよ^^;

宝物は猫をモチーフにした掛け時計を作りました。シンプルなデザインなんですが、2プリムで実用性を重視。。。いや、都合であまり余裕がなかったので手抜きだとも言えますwww

それから、今回のトレハンはちょっと変わっててKiyomizuモール以外にある自分の店舗でやってもいいってことでした。各参加店の情報はモールに設置されてるインフォメーションボックスから調べてくださいね。うちは結局モール内の店舗にしたんですが。

SHOP CHIHIRO Kiyomizu店はモールの端のこの辺りです。
http://slurl.com/secondlife/Little%20Cat%20Japan/61/241/3301

トレハンの詳しい情報はATさんのブログをご覧ください。それでは皆様、是非お越しくださいね^^
http://atoropos.slmame.com/e1017082.html

2010年12月3日金曜日

SUNSET SHOPPING MALL店営業終了

JapanSeychellesLandが今月閉鎖になるので、SHOP CHIHIRO SUNSET SHOPPING MALL店の商品を撤去して閉店してきました。今までご来店くださいました皆様、ありがとうございました。

あと、JapanSeychellesLandでは住居用に土地も貸してもらってたし、ホントこのSIMは長い間いろいろとお世話になったんですよ。。。><
SIM閉鎖日は12月16日です。詳しくはSIMオーナーwildcatさんのブログをご覧ください。
http://wildcat.slmame.com/e1011106.html

千尋の自宅のほうはまだ現在オブジェクト撤去してないですけど、もうすぐお家も無くなるのでホームレスになります。土地が無くなるのって何となく寂しい気がしますね。。。自分名義の土地を持つまでは、土地なんか別に無くても全然オッケーって感じだったんですけどねw

12月17日追記: 12月16日AM7:20(PST) 最終日。自宅のほうもオブジェクト撤去してきました。。。(ToT)ノシ

2010年11月27日土曜日

危うくコピーボットの犯罪者にされそうでした

昨日、海外の規模の大きそうな靴屋の方からノートが届いてたんですね。そのお店の靴をコピーして履いてた人がいて、靴のクリエーター名が私の名前になってたらしいんですよ。Σ( ̄□ ̄ |||

でも靴屋の方は、私は名前を悪用された被害者だと理解してくれてたので助かりました。ホント容疑者にされなくて良かったです^^;

それで今日、コピーした靴を履いてた人のアカウントが停止になったって靴屋さんから連絡をもらったんですよ。。。ああ、良かった。一応解決ってことで、ひと安心です^^

リンデンさんはコピーボット使えないように対策してほしいですね。Viewer2やマーケットプレイスでの改悪やキャンプ規制で、だんだんやる気なくなってきたのに、こんなことがあったらもうホント冗談じゃないですよ。

2010年11月12日金曜日

Zone camp V1.2.1

ゾーンキャンプに付けてるアンチボット(キャンプボット避け)なんですが、お客様からご要望があったので改良いたしました^^

V1.1.0まではログインのときだけアンチボットのダイアログが出せたのを一定時間毎のチェックもできるように変更したんですよ。メニューからOFF、一度のみ(ログイン時)、10分、15分、30分、45分、60分、90分、120分間隔の切り替えが可能です。

旧バージョン(V1.1.0以上)をお持ちのお客様は、装置を持ち物から出したときにアップデート品が届くと思いますので宜しくお願いします^^

Zone campはL$400で発売中です♪

2010年10月16日土曜日

現在ピックギフト配布装置が動きません><

すっかり放置モードになってしまって1ヶ月ぶりの投稿ですね^^;;

お客様からProfile Picks gift giverが動作していないとのご報告を頂きまして、原因を調べてみたらレンタルしてる外部サーバーが落ちているらしくて接続できなくなっていました。

動かなくなったのは昨日ぐらいかららしくて、タッチしたらStatus 499のエラーを返します。(外部のネットワークに接続できないエラー)

外部サーバー(Hayasoftさん)が復旧する見込みとかは、今のところ全くわからないんですが、何か情報が入りましたらこの記事に追記する予定です。なのでピックギフト配布装置をご利用の皆様には、ご迷惑をお掛けしますが宜しくお願いいたします。m(_ _)m

10月19日追記: サーバーまだ復旧しません。何日も落ちたままなんて、もしかしたら辞めてしまわれたって事も考えられなくもないですね。。。?
Profile Picks gift giver dose not work since last Saturday or Sunday. That problem is the rented external server that was downed... sorry.

10月20日追記: 今日20時頃サーバーに接続してみたらやっとつながりました。ピックギフト配布装置も動作OKです。。。良かった^^
Our external server returned on Oct 20 and Profile Picks gift giver works again!

2010年9月16日木曜日

Second Life Marketplaceで問題が。。。

最近何となく物作りもサボりぎみになってきてる千尋です^^;

Xstreet SLから移行中のSecond Life Marketplaceなんですが、アイテム名にバージョンを入れてる商品が新しいバージョンのものに差し替えできないみたいです。

これってmetaLIFEなんかと同じような感じでしょうかね。アイテム名を固定されちゃうと使いにくくて不便なんですよね。。。どうしたらいいんでしょう?

2011年1月16日追記: アイテム名からバージョンを外して登録し直そうと思ったら、いつの間にか固定されてたアイテムが変更できるようになってました。。。もう修正したのに;;

2010年8月27日金曜日

First Step Shopping Mallリニューアル

8月28日、First Step Shopping Mallがリニューアルオープンします。日本時間の0時からだと思うので、もうあと数時間ですかね?

オープン当日の22〜23時にはBBOY-DANさんのダンスイベントも開催されます^^
http://firststep.slmame.com/e953642.html


http://slurl.com/secondlife/First%20Step/164/201/23
うちのブースはこの辺りになります。オープン当日まではTP制限で仮設モールのほうにテレポートされますのでオープンしてからお越しくださいね。宜しくお願いします^^

2010年8月17日火曜日

メインランドで孤立してしまったSIM

今日ログインしたら(メールで通知が来てた)届いてるはずのIMが来てなくて、持ち物の1階層下のフォルダはクリックしても読み込み中になったままで開かなかったんですね。

それで今いるSIMのサーバーが接続悪いのかなって思って、テレポートしようとしたんですがテレポートも全然できませんでした。でもまあ場所はメインランドにあるサンドボックスだったので、隣のSIMまで行ったらOKだと思ってSIMの端を目指して飛んで行ったんですよ。そしたらそこで切れてて隣のSIMが無くなってました@@;

マップを開くと東西南北ともSIMがあるんですが、ミニマップや実際周囲を見て回ったら周りのSIMが全く表示されないんですよ。。。何かこのSIMだけが切り離されて隔離されてしまってるみたいな感じですかね?

障害が起きてるっていう情報もないし、結局どう頑張ってもそのSIMから出られなかったので、一度ログアウトして、ログイン位置を自宅(ホーム)に切り替えてログインし直しました。そしたらその時に届いてなかったIMが届きました。。。んー、やっぱりあのSIMだけ調子悪くなってたんですね^^;

2010年8月14日土曜日

Animation vendor V2.2.0

アニメーションベンダーを少し改良しました。アニメーションのパーミッションを調べてフローティングテキストに表示できるようにしたのと、アニメーション試用中にキーボードの矢印キー↑↓を押すとカメラがズームイン/ズームアウトするようにしました。まあ、ちょっとした改造なんですが少し使い勝手良くなったかなって思います^^

お値段はL$130に値上げしました。旧バージョン購入者様は、ご連絡頂ければ最新版お渡しできますので宜しくお願いします^^

2010年8月11日水曜日

スクリプト禁止領域でも動くスクリプト

今回はスクリプトを禁止されてる場所でも動くスクリプトです。装着するものに使います^^

仕組みはスクリプトがllTakeControlsでコントロールを取得すると、スクリプト禁止場所でも動くようになるので、それを利用するって感じですね。(禁止してる場所に行く前に装着する必要があります)

今回のサンプルは現在位置の座標を表示するHUDのスクリプトをスクリプト禁止の場所でも動くように改造してみました。乗り物とかみたいなコントロールイベントは不要なのでありません。
// 現在位置の座標を表示(スクリプト禁止領域でも動作)

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で区切ってリターン
}

init()
{
    llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS);  // コントロールの権限をリクエスト
}

default
{
    state_entry()
    {
        if (llGetAttached()) init();  // 装着されてたらinit実行
        llSetTimerEvent(0.1);  // 最初は0.1後にタイマー開始
    }

    attach(key id)
    {
        if (id) init();  // 装着されたらinitへ
    }

    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_TAKE_CONTROLS)
        {
            llTakeControls(-1,FALSE,FALSE);  // スクリプト禁止領域でも動作させる
        }
    }

    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://slurl.com/secondlife/"+llEscapeURL(llGetRegionName())+"/"+get_pos("/"));
        }
    }
}

最近ビューワー2が何かイヤになってきたので、SLURLはビューワー1用のslurl.comに変えてます。これのほうが互換あっていいと思うしw

でもスクリプトを改造するんだったら、llTakeControlsの注意点に書かれてるように、同じプリムに入ってるスクリプトには効果があるので、下記のように「禁止領域でも動作する部分」だけ独立させて、他のスクリプトと同じプリムに入れたほうが簡単でいいかもですねw
// 同じプリム内のスクリプトをスクリプト禁止領域でも動作させる

init()
{
    llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS);  // コントロールの権限をリクエスト
}

default
{
    state_entry()
    {
        if (llGetAttached()) init();  // 装着されてたらinit実行
    }

    attach(key id)
    {
        if (id) init();  // 装着されたらinitへ
    }

    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_TAKE_CONTROLS)
        {
            llTakeControls(-1,FALSE,FALSE);  // スクリプト禁止領域でも動作させる
        }
    }
}

llTakeControlsのCONTROLフラグの値は、何となく使われてない値にしようと思ったんですが、0にしたらエラー出たので-1にしました。(別に使われてる値でも問題ないですけど)

2010年8月10日火曜日

Animation pack vendor新発売♪

商品パッケージの画像を作って何度も見直ししてですね、やっとできたーって思ってインワールドにアップロードしたら、アップ直後によくミス(プリム数書くの忘れてたとか)に気が付いて10L$損した気分になる千尋です^^;;

ポーズやアニメーションは何点かセットにしてまとめ売りっていうのもあると思うので、今回たぶんそれに適したベンダーを作ってみました^^

普通のアニメーションベンダーと違って、購入するとコンテンツ内のアニメーションを全部渡します。それからたくさん設置すると思うので、ベンダー本体は壁に設置できるようなタイプにして、各アニメーションはベンダーの再生ボタンをタッチで試用することができるようになってます。それでフローティングテキストは普段はありませんが、ボタンを操作したときだけ数秒間表示されるようにしました。また1つのパック商品しか売れないので、セールスリスト記録やIM通知機能は付けてません。

今回作ったベンダーは最初に作り始めたのが半年くらい前でしょうかね。。。結構放置してたんですよw お値段はL$100にしました。宜しくお願いします^^

2010年8月6日金曜日

ベルローズ改装中

先週かもう少し前くらいからでしょうか、お世話になってるベルローズ総合楽器店さんが改装してたんですね。

それで現在もまだ改装中だそうなんですが、一応うちの仮ブースの位置のSLURL載せときますね。たぶん最終的にまた移動するんじゃないかなって思うんですけど^^;
http://slurl.com/secondlife/Artsebarsky/170/233/22

11月10日追記: 現在の位置はこの辺です。
http://slurl.com/secondlife/Artsebarsky/173/203/22

2010年8月2日月曜日

メール通知オプションスクリプト発売

うちで発売のIM通知機能のある機種のみに対応ですが、メール通知用に SHOP CHIHIRO device option, E-mail notification script を作ってみました。

llEmailは色々うざい制限があるので、あまり使いたくない関数なんですけどねw なのでその対策で、すぐにはメールしないようにしてあります。初期状態でログが入ってから1時間~最大で20時間ぐらい(20時間はまずないと思うけど計算上)待機してからの通知になります。また、装置本体のIM通知機能とは別に動作します。

対応機種一覧です。
Vendor (全機種)
Prize camp (全機種) V1.1.9以上
Lucky letter/Lucky letter one/Lucky letter LE
Group gift giver
Profile picks gift giver
LM giver (無料品以外) V2.0.6以上
NC giver
Welcome mat
Greeter V1.1.3以上

装置のバージョンが古い場合は、新しいのを送りたいと思いますのでご連絡ください。

お値段は特価L$5にしました。パーミッションはコピー可、転送不可なので、1つ買えば複数の装置でご使用になれます^^
Mansion Mall店Market Beach Mall East店FS Shopping Mall店(仮設店舗)に置いてきました。オフライン中のIMが多くなってお困りの方などいかがでしょうか?^^

8月4日追記: Greeterはバージョンが抜けてたので書き加えました。V1.1.3以上が対応です^^;
メール以外の処理などを自分でやってみたい方用にデータの取り出し方を簡単に書いときますね。ログが記録されるときに llMessageLinked(LINK_THIS,0,"l:日付 時間 ... ",""); て感じのリンクメッセージが出てるのでそれを拾って処理してます。装置によってちょっと違いはありますが、最初の l: は全機種共通なのでそれを頼りにメッセージを選別したらオッケーです。あと一部の古い機種は勘違いしてメッセージの最後に改行(\n)を付けてるバージョンがあったような気がするので一応llStringTrimしてます。
l:2010-08-03(Tue) 22:00:05, Item Name, L$100, Buyer Name\n
CSV形式みたいなデータですけど、もしアイテム名にカンマが含まれてても""で括ったりとか丁寧な処理はしません^^;;

2010年7月29日木曜日

ラッキーレター、グループジョイナー、オンラインインジケータのアップデートサービス

オートアップデートが動かなくなったLucky letter V1.6.6、Lucky letter one V1.0.10までのバージョン購入者様と、アバタープロフィール、グループプロフィールのウェブページ仕様変更で正しくセットアップできなくなったGroup joiner V1.0.2、Online indicator V1.1.3までの購入者様用に、タッチで最新版を受け取れる看板をMansion Mall店Market Beach Mall East店に設置しました^^

以下の対象バージョンをお持ちの方、是非ご利用頂けたらと思います。
Lucky letter V1.6.6 以前、Lucky letter one V1.0.10 以前(2010年6月15日まで販売)
Group joiner (type1/type2) V1.0.2 以前(2010年7月10日まで販売)
Online indicator V1.1.3 以前(2010年7月10日まで販売)

転送可能版のオンラインインジケータ(Online indicator V1.1.3(MT)、Online status LCD monitor V1.0.4以前)は交換とさせて頂きますので、お手数ですがご連絡くださいね。宜しくお願いします。

2011年3月21日追記: 昨年12月にアップデートデリバリーサーバーを引越しさせた際にXML-RPCのチャンネル設定ミスで動かなくなったまま3ヶ月以上(?)も気がつきませんでした。現在は修正済です。。。申し訳ありません><;

2012年12月16日追記: アップデートボードによるアップデートサービス終了しました。ご利用ありがとうございました。

2010年7月27日火曜日

マルチパネルベンダーLMV6発売

旧マルチパネルベンダーシリーズの後継機種に当たる、Multi-panel vendor LMV6を発売しました^^

このベンダーはグループ限定割引機能などの主要な機能は旧マルチパネル4機種と大体同じなんですが、ボディとサブパネルのフレーム部分が一体になったスカルプで作って、旧機種で売上の良かった7パネルベンダーと同じパネル数のものだけにしました。プリム数は4プリムになります。他に大きな違いはアイテムの表示方式です。

6枚のサブパネルは周囲にフレームが付いてるので、ありがちなマルチパネル低プリムベンダーと違って、商品写真の区切り目っていうか境界がとてもわかりやすいんですね。それから旧マルチパネルベンダーはサブパネルで選択したアイテムはメインパネルのアイテムと場所が入れ替わるような表示にしてたんですが、この機種は普通によくあるタイプと同じようにサブパネルで選択したアイテムが単純にメインパネルに表示されるようにしました。なので各ページ(ページ数表示も廃止してアイテム数にしました)に6アイテムずつ表示って感じになります。

お値段はL$400にしました。Mansion Mall店Market Beach Mall East店KIYOMIZU店などでは実物を稼働させてますので一度ご覧くださいね。宜しくお願いします^^

2010年7月23日金曜日

ベンダー全機種バージョンアップとマルチパネル4機種販売終了

去年Xstreetに登録してから、すごく売れ出したマルチパネルベンダーシリーズ(4~9パネル)だったんですが、今年になってからだんだん売れ行きが落ちてきて、最近はホント全然売れてなかったので先週ぐらいに販売を終了しました。もう市場は低プリムベンダーに取って代わられてきたってことでしょうかね?

それで新しく低プリム化したマルチパネルベンダーを開発してテスト中なんですが、それに伴ってベンダー全機種も気がついた部分とかを修正しました。

グループキャッシュバック機能のある機種1プリムベンダースマートベンダー、マルチパネル4機種)で、キャッシュバックされたときIM通知やセールスリストにはキャッシュバックされた金額が反映されてなかったので修正しました^^;

フリーベンダー以外は、売れたときのIM通知を「L$0を除く」を初期値に変更しました。

以下修正後の各機種のバージョンです。
1prim vendor V2.4.0
Smart vendor V1.1.0
4panels vendor V1.5.0(販売終了)
5panels vendor V1.5.0(販売終了)
7panels vendor V1.5.0(販売終了)
9panels vendor V1.5.0(販売終了)
Nine vendor V1.5.2
Sixteen vendor V1.2.2(メタコマース限定販売)
Animation vendor V2.1.9

スマートベンダーV1.0.2以前とマルチパネル4機種V1.4.7以前の機種はオートアップデート搭載ですが先月から機能しなくなったので、近日中に修正版をお送りする予定にしてます^^;


写真はテスト中の新型マルチパネルベンダーです。4プリムで6枚のサブパネルがあります。(テスト中ですが現在KIYOMIZU店にも設置中)

7月24日追記: スマートベンダー、4,5,7,9パネルベンダーの発送完了しました。それから1プリムベンダーはグループキャッシュバック機能が付いたV2.3.0~2.3.4をお買い上げのお客様に修正版送らせて頂きました。IMが貯まってて受け取れなかったとかありましたら再送しますのでご連絡くださいね。
ちなみにマルチパネルベンダーは7パネルが一番人気でした。以下は4機種で比較した販売台数の割合です。
4panels vendor 12.2%
5panels vendor 9.1%
7panels vendor 57.4%
9panels vendor 21.3%

2010年7月22日木曜日

Viewer 2.1.0に失望

ビューワー2.1.0が出てたのでアップデートしたんですね。文字入力欄のあるウィンドウが非アクティブになったとき入ってた文字が消えるとかの不具合は修正されてるし、別のスキンみたいにサイドバーが視界の上に重なる感じで表示できるよう設定で選べたり、画面下に検索やミニマップなどのボタンも表示できるようにユーザーインターフェースも改善されてますね^^

でも、スクリプトを開くと暫くビューワー全体が固まるんですけど? スクリプトの大きさに比例して固まってる時間が長くなるみたいです。。。ううぅ、イライラして使えない;;

2010年7月20日火曜日

ピックギフトのスクリプト

今回はプロフィールのピックに土地を登録して頂いてる方にオブジェクトを渡す、簡単なピックギフト配布装置のスクリプトです^^ LSLだけでは無理なのでPHPなどが使える外部サーバーをご用意くださいね。

http://blogs.secondlife.com/community/technology/blog/2010/07/08/search-todays-release
ピック登録はもうサーチランクに影響しなくなったんですが、ピックを見て来てくれる人もいるし、沢山の方のピックに登録されてれば知名度とかは上がるんじゃないかなって思います。

今月、プロフのウェブページの仕様が変わってピックの部分だけ独立したページになりました。それでうちで販売してた装置も動作不能に陥ったんですが、購入者様は現在修正版をご入手可能です。

ピックの出てるアドレスはhttp://world.secondlife.com/resident/アバターUUID/picksなので、このページをチェックする部分を外部サーバーに置いたスクリプトで処理します。まずLSLスクリプトです。土地のUUIDはllGetParcelDetailsにサーバー1.36で追加されたPARCEL_DETAILS_IDで調べます。
// Profile picks gift
string url="http://○○○.××/picks.php";  // 外部サーバーに置いたスクリプトのアドレス

default
{
    touch_start(integer total_number)
    {
        key id=llDetectedKey(0);  // タッチしたアバターのキー
        if (id) {
            key place=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);  // 土地のUUID取得
            llHTTPRequest(url,[HTTP_METHOD,"POST", HTTP_MIMETYPE,"application/x-www-form-urlencoded"],"place="+(string)place+"&id="+(string)id);  // 外部サーバーにデータを送ってチェック
        }
    }

    http_response(key request_id, integer status, list metadata, string body)
    {  // HTTPレスポンス
        if (status != 200) llWhisper(0,"Error - status "+(string)status);  // ステータス200以外はエラー表示
        else {
            body=llStringTrim(body,STRING_TRIM);  // 改行コードを除去
            list l=llCSV2List(body);  // カンマで分割してリストに格納
            key id=llList2Key(l,0);  // アバターのキー
            string result=llList2String(l,1);  // 結果
            if (id) {
                if (result == "OK") {  // OKだったら
                    llGiveInventory(id,llGetInventoryName(INVENTORY_OBJECT,0));  // コンテンツ内の最初のオブジェクトを渡す
                    llInstantMessage(id,"Thank you for having our place in your picks.");
                }
                else {  // NGのとき
                    llInstantMessage(id,"Our place not found in your picks. ('Show in search' must be enabled) Please add this place in your picks and try again 1 or 2 days later.");
                }
            }
            else llOwnerSay("Data error!");
        }
    }
}

そして外部サーバーに設置するPHPスクリプトです。ピックに土地のキーが載ってれば「アバターUUID,OK」、載ってなかったら「アバターUUID,NG」を出力します。
<?php
// picks.php

// フォームデータ取得
$id=isset($_REQUEST['id'])? $_REQUEST['id']:"";  // アバターのキー
$place=isset($_REQUEST['place'])? $_REQUEST['place']:"";  // 土地のキー

if (!$id || !$place) exit;  // フォームデータがなかったら終了

// プロフィールのピックページからデータ取得
$data=implode("",file("http://world.secondlife.com/resident/".$id."/picks"));

// 土地のキーの有無を調べて結果を出力
if (strpos($data,'/place/'.$place.'">')) echo $id.",OK";
else echo $id.",NG";
?>

PHP対応してないサーバー用に一応Python版も書いてみました。うちで借りてるサーバーはPython対応じゃなかったので、きちんと動作テストできてないですけどw
#!/usr/bin/env python

# picks.py

import sys,urllib,cgi

form=cgi.FieldStorage()
id=form.getvalue("id")
place=form.getvalue("place")

print "Content-Type: text/plain; charset=UTF-8\n\n"

if id == None or place == None:
  sys.exit()

fp=urllib.urlopen("http://world.secondlife.com/resident/"+id+"/picks")

if fp.read().find('/place/'+place+'">') > -1:
  print id+",OK"
else:
  print id+",NG"


え? Perlですか? Perlはちょっと文法が嫌いなので。。。す、すみません>< 今度できたら載せたいと思います。;

2時10分頃追記: Pythonは500エラー出たので日本語のコメント行消しました。たぶんコメントでも日本語を入れるときは文字コード指定みたいなのがいるんですかね?

22時20分頃追記: Pythonの文字列検索部分に>が抜けてたので付け加えました。

7月21日追記: Perlも書けたので載せます^^
#!/usr/bin/perl

# picks.pl

use CGI;
use LWP::Simple;

# フォームデータ取得
$q=new CGI;
$id=$q->param('id');
$place=$q->param('place');

# サーバー用ヘッダ
print "Content-Type: text/plain; charset=UTF-8\n\n";

# フォームデータがなかったら終了
if ($id eq "" || $place eq "") {
  exit;
}

# プロフィールのピックページからデータ取得
$data=get("http://world.secondlife.com/resident/$id/picks");

# 土地のキーの有無を調べて結果を出力
if (index($data,'/place/'.$place.'">') > -1) {
  print "$id,OK";
}
else {
  print "$id,NG";
}



2012年1月5日追記: Pythonですが、Google App Engineを使用する場合はurllibが使えないので urllib.urlopen の代わりに urlfetch.fetch を使用します。

2010年7月18日日曜日

仔猫モールがリニューアル

お世話になってるショッピングモールKONEKOがネオ仔猫モール(暫定)になったので、うちも新店舗に引越しさせてもらいました^^

前とはガランと変わって、いい感じの和風のモールになってるんですよ。うちの借りた店舗はこんな感じの建物です。

新店舗のSLURLはこちらです。宜しくお願いします^^
http://slurl.com/secondlife/Little%20Cat%20Japan/61/241/3301

それから、まだテナントさんも募集してるみたいなので、興味ある方はSelphieさんのブログをご覧くださいね^^ モールの写真なども掲載されてます。
http://selphie.slmame.com/e928415.html

7月20日追記: ネオ仔猫モールはShop-mall KIYOMIZUっていう名前に決まったようです。いつの間にか五重の塔とか出来てるし@@
http://atoropos.slmame.com/e930493.html

2010年7月17日土曜日

FS Shopping Mall改装

First Step SIMのFS Shopping Mallが改装するので、FS Shopping Mall店は仮設店舗のほうに引越ししました。

http://slurl.com/secondlife/First%20Step/96/97/539
建物が大きくて写真が変な構図になってますねw こちらでの営業は8月いっぱいまでの予定です。宜しくお願いします^^

2010年7月13日火曜日

マネーキャンプに自動起動モード追加

キャンプ規制でマネーキャンプは特に厳しく取り締まられてるんじゃないかなって思うんですが、マネーキャンプ全機種に時間をノートで設定して日に一度だけ自動起動・停止ができるようにバージョンアップしました。

以下3機種はV1.3.0になります。Camping chairは1台も売れなかったので廃止しましたwww
Camping dance pad
Camping cross
Camping sit

また、ゾーンキャンプはランダムチャットマネー、ランダムマネーギバーと同じように時間と曜日で自動起動可能なようにして一応オートアップデートも取り付けました。
Zone camp V1.1.0
それでこの機種はついでにL$400に値上げしてますw

ゾーンキャンプは旧バージョン購入者様にお送りしましたが、その他のマネーキャンプ用品もご希望ありましたら対応いたしますので宜しくお願いします^^

2010年7月11日日曜日

オンラインインジケータ、グループジョイナーにも悪影響が;;

最近アバタープロフィールやグループのウェブページが仕様変更された影響で、Online indicator(2機種3商品)とGroup joinerにも不具合が出ていました。

オンラインインジケータはアバター名が取得できなくなって、呼び出し確認ダイアログがエラーで呼び出しできません。あとフローティングテキストも表示が異常になります。
これはプロフ画像のついでに何となくアバター名もウェブから取得してたので、プロフページの改訂でtitleのタグがある部分までLSLでデータを取得できなくなったのが原因です。

グループジョイナーも同様にグループ名が取得できなくなって、グループ名の表示がおかしくなったのと、セットアップ後タッチしてもしばらく(数分~数十分間?)反応がありません。

ただ、現在使用中の装置はセットし直さない場合に限りそのまま問題なくご使用頂けますが。。。^^;

修正版の各機種のバージョンです。
Online indicator V1.1.4
Online indicator V1.1.4 (MT)
Online status LCD monitor V1.0.5
Group joiner V1.0.3 (type1及びtype2)

グループジョイナーはグループ名が取得できなくなったので、フローティングテキストに表示するときは設定用ノートに直接グループ名を記入するようになります。

ウェブページがいつごろから改訂されたのか正確にわからないんですが、最近(1週間以内くらいに)お買い上げくださった方には修正版を発送する予定です。でもそれ以前の購入者様も最新版お渡しできますのでご希望ありましたらお問い合わせくださいね。m(_ _)m

19時40分頃追記: 一応7月1日以降(太平洋時間)にお買い上げの方全員にお送りしました。それ以前にご購入された方は、お手数ですがご連絡くださいますようお願いします。

2010年7月10日土曜日

Profile picks gift giver V1.3.0

現在は販売してない装置なんですが、アバターのプロフィールページが仕様変更されてピックギフト配布装置が動作しなくなったので、PipesをPHPに変更して動くように修正いたしました。

V1.2.1~1.2.2を持ち物から出すと、オートアップデートで修正版が届くと思いますので宜しくお願いします。

Profile picks gift giver customer,
Avatar profile web page has been changed by Linden lab and this device V1.2.2 and older version can not work now. Please use updated V1.3.0. (rez V1.2.1 or 1.2.2 to get)

2010年7月9日金曜日

ピックギフト配布装置が不動に><

アバタープロフィールのウェブページの仕様が変わって、プロフィールピックギフトギバーが動かなくなってました;;

何かピックの部分だけ独立したページになってて、JavaScriptでプロフに埋め込みするよう変わったみたいなんですよ。
http://world.secondlife.com/resident/アバターUUID/picks
それでこのピックだけのページはきちんとしたHTMLで書かれてないので、Pipesだとエラーになって取得できませんでした;;
んー、これってサーチランクのピックギフト対策なんでしょうか? でもPHPでは普通にアクセスできたので意図がよくわかりません。

それからプロフ写真も昔のimgタグ部分のURLから拾う方法はもうダメみたいですね。

まあとにかく、早急にPHPで対応したものに改造したいと思ってますので、ピックギフト配布装置をご利用のショップ様は申し訳ございませんが、暫くお待ちくださいますようお願いします。

7月14日追記: ピックギフト配布装置は一応PHPに修正していますが、もうピックはサーチランクに影響しなくなったみたいですね;
Search: Today's Release
Search: Upcoming Release

2010年7月6日火曜日

動作不良で賞品が渡されてなかった;;

先月ベルローズ店に設置してるラッキーレターの賞品にビューワー2用ビデオプレーヤーを入れたんですが、そのときラッキーレターのスクリプトも最新バージョンに入れ替えたつもりだったんですね。でも手違いで2本目のスクリプトが古いバージョンのままだったので、きちんと動作しなくて当選しても賞品が渡されてませんでした ><

それで、ログを頼りに当選者様には賞品を発送いたしましたが、6月1日~2日あたりはログが流れてしまってて確認できませんでした。申し訳ございません。

お問い合わせ頂いてやっと気がついたんですよ。。。orz

2010年7月3日土曜日

仔猫祭り 忍者猫を探せ!

本日午前10時から約2日間、Little Cat Resortで仔猫祭りが開催されます^^
 
それで屋台や盆踊りの他、ライブやトレハンなどもありまして、うちもKONEKOモールに出店させてもらってる関係でトレハンのほうに参加しています^^

宝物にはちょっと雑ですがネタっぽいAFKツールを作ってみました。これを装着したらAFKを大々的にアピールできるんじゃないかなって思いますw

参加店は40店くらいあって、たぶん宝物を順番に集めていくような感じだと思います。(詳しくはATさんのブログをご覧ください)
http://atoropos.slmame.com/e918733.html


期間は7月3日午前10時~7月5日午前0時です。皆様是非お越しくださいね^^
http://slurl.com/secondlife/Little%20Cat%20Japan/204/241/23

2010年7月1日木曜日

ドリンク用スクリプト

冷蔵庫に冷たい飲み物が欠かせない季節になってきましたね^^ ってことで今回は飲み物に使うスクリプトです。

フリービーでもよくあるスクリプトですが、装着したら銃を右手に持つ内蔵アニメーションが動いて、タイマーで数十秒毎にドリンクを飲む内蔵アニメーションを再生するような感じですね。

飲む間隔はランダムになるように書いてみました。20~30秒で飲みます。
// ドリンク用
float time_min=20;  // 飲む間隔の最小時間(秒)
float time_max=30;  // 飲む間隔の最大時間(秒)
string anim="hold_R_handgun";  // 右手に銃を持つ内蔵アニメ

req_anim()
{
    llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);  // アニメーション実行リクエスト
}

default
{
    state_entry()
    {
        if (llGetAttached()) req_anim();  // 装着されてたらreq_anim実行
    }

    changed(integer change)
    {
        if (change & CHANGED_TELEPORT)
        {  // テレポートしたら
            req_anim();  // req_animへ
        }
    }

    attach(key id)
    {  // アタッチイベント
        llSleep(0.1);  // スクリプト停止0.1秒
        if (id) req_anim();  // 装着されたらreq_animへ
        else if (llGetPermissionsKey()) llStopAnimation(anim);  // 一応外したらアニメ停止(不要かも?)
    }

    run_time_permissions(integer perm)  
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION)
        {  // アニメーション実行が許可されたら
            llStartAnimation(anim);  // 手に持つアニメ開始
            llSetTimerEvent(time_min);  // タイマーをセット
        }
    }

    timer()
    {
        if (llGetAttached()) {  // 装着されてるとき
            llSetTimerEvent(time_min+llFrand(time_max-time_min));  // 次回のタイマーの値をランダムに決める
            llStartAnimation("drink");  // 飲むアニメを実行
        }
        else llSetTimerEvent(0);  // 装着されてないときはタイマー停止
    }
}

基本は装着でアニメするスクリプトと同じで、タイマーイベントで飲む部分を付けただけだったりしますが^^;

2010年6月27日日曜日

ビューワー2のダメなところ

最近やっとビューワー2にも慣れてきたかなって思ってる千尋ですw

ビューワー2はノートやスクリプトを開いたとき、右クリックでメニューが出たりとか便利になってる部分も多いですけど、検索とサイドバーが何か使いにくいんですよね。

特に検索ウィンドウは表示が重いし、検索してテレポートしたらウィンドウが閉じちゃうので、検索結果の次の場所行くためにまた検索し直しって感じでホント使い勝手悪すぎます。
http://search.secondlife.com/viewer/search
ログ見たら検索のアドレスが出てました。なので外部ブラウザで検索するようにしようかなって思ってみたりw なぜかWebKitのブラウザで開かないとスクロールバーがきちんと出ないみたいですけど。

2010年6月21日月曜日

セカンドライフ関係のねとらじPHP版

Pipesで作ったセカンドライフ関係のねとらじなんですけど、フィードデータに問題(たぶん文字化け?)があって全然表示されないことがあるので、今度はPHPでhttp://yp.ladio.livedoor.jp/stats/list.v2.datのデータを使ってやってみました。

ねとらじのセカンドライフ番組一覧表(PHP版)
Pipesで作ったのと同じで、タイトル、放送内容に「セカンドライフ」や「Second Life」が記入されてるか、関連URLがソラマメブログになってるねとらじの番組を表示します^^

2012年3月8日追記: 昨年(だったかな?)気がついたときに修正済みなんですが、ねとらじ番組表データのドメイン変わっています。→ http://yp.ladio.net/stats/list.v2.dat

2010年6月16日水曜日

ランダムチャットマネー、ランダムマネーギバーに自動起動モード追加

ご要望がありましたので、Random chat moneyRandom money giverに起動時間、停止時間と曜日で設定することで、日に一度だけですが自動的に稼動できる機能を取り付けてみました。カフェやバーなど営業時間が決まってるお店なんかで便利じゃないでしょうかね?^^

バージョンはどちらもV1.1.0になります。それでついでに修正したオートアップデートも取り付けて値段も値上げしました^^;
Random chat money L$350
Random money giver L$300

旧バージョンをお買い上げのお客様には、近日中にアップデート品をお送りしたいと思ってますのでどうぞ宜しくお願いします。

他機種のオートアップデートも全て修正しました。でも数が多すぎるので暫く様子を見てみたいと思います。。。絶対動かないんじゃなくて、時々動く場合があるのでPipesの仕様が修正されて直らないか期待してたり^^;;

23時50分頃追記: 先ほどランダムチャットマネー、ランダムマネーギバー共にアップデート品の発送完了しました。受け取れなかった方おられましたら、再送しますのでご連絡くださいね。

2010年6月14日月曜日

ピックギフト配布装置、フィードリーダー販売終了

Pipesなんですが、近いうちにバージョンアップしてV2エンジンに置き換わるらしいんですね。この前のProfile picks gift giverの不具合もV2エンジンのベータ版が導入された影響だったんじゃないかなって思います。

それでPipesも仕様変更があったときとかの対応が大変だと思うので、Pipesを利用してるProfile picks gift giverFeed readerの販売を終了することにしました。

今まで作ってたパイプを何個かV2にアップグレードしてテストしてみたら、きちんと動かないものもあったんですよ^^; それから1つのパイプにアクセスが集中したりすると一時的にアクセスを弾くような制限が働くみたいなので、そういうのも頻発しないか心配です。

やっぱり外部のサービスって仕様変更があっても文句言えないので、あまり頼れないですね。ホントYouTubeとPipesでもうコリゴリって感じです。orz

6月21日追記: プロフィールピックギフトギバー現在販売してませんが、パイプを追加してアクセス集中が軽減されるよう修正しました。バージョンはV1.2.2になります。V1.2.1をお持ちのお客様はオートアップデートをご利用くださいね。

2010年6月12日土曜日

Profile picks gift giver, network error fix

Yahoo! Pipesの仕様がちょっと変わって、自分で設定したアドレスはリダイレクトされるようになってたんですね。その影響でうちの一部のスクリプト製品が正常に動かなくなってました;;

不具合の出たスクリプトはプロフィールピックギフトギバーとオートアップデートです。オートアップデートを採用してる全機種のアップデート機能は全滅で、プロフィールピックギフトギバーはError 302と表示されて、ピックの照合もギフトの手渡しもできません。何度もテストしてみたら、10回か20回に1回ぐらいは動作するみたいですけど、これじゃあ全然使えないですよね。

プロフィールピックギフトギバーは既に自動発送装置でお客様に修正品V1.2.1をお送りいたしましたが、万が一受け取れなかったお客様いらっしゃいましたら、お手数ですがご連絡くださいますようお願いします。

でもオートアップデートを使ってる残りの機種はどうしましょう?(悩;

17時40分頃追記:
The specification of Yahoo Pipes has changed and the auto update script in my products and Profile picks gift giver not work.
But Profile picks gift giver has fixed and fixed that V1.2.1 was already sent to the customer. If you are a customer of this device and if you have not received, please IM me.

セカンドライフ関係のねとらじ

セカンドライフ内で配信するインターネットラジオにねとらじを利用されてる方の放送一覧を表示するPipesを作ってみました♪

放送内容に「セカンドライフ」や「Second Life」って記入してない方もいらっしゃいましたので、関連URLがソラマメのブログアドレスになってるものも拾ってますw

Second Life ladio
一覧に表示されたリンクをWinampなどのMP3プレーヤーにドロップしたら聴けると思います。インワールド内で聴くときは土地の音楽URLに設定してくださいね^^

6月17日追記: タイトルや放送内容に文字化けのある放送が混じってたら、フィードデータの解析でエラー出て全然表示されないみたいです。;;

6月21日追記: PHP版も作ってみました。

2010年6月10日木曜日

食べ物や飲み物用のサーバーに使えるスクリプト

この前、あるショッピングモールの近くにあったバーカウンターで飲み物をもらったんですが、その場所はスクリプト禁止になってたので装着しても飲めませんでした^^;

さて今回はドリンクサーバーとかアイスクリームやスナック菓子とかのカート(ワゴンみたいなベンダー?)みたいに、タッチしたらメニューが出て選んだアイテムがもらえるスクリプトです^^

オブジェクトをコンテンツに入れたら自動的にメニューに追加されるようにしました。まあ選んだオブジェクトを渡すだけのスクリプトなので飲食物じゃなくてもいいんですが、是非おいしそうなアイテムを作って入れてくださいね♪
// オブジェクト選択メニュー (max 12)
list item;  // オブジェクト名リスト
list menu;  // メニューボタン用リスト
string text;  // メニューのテキスト用
integer CHANNEL;
integer listen_handle;

init()
{
    item=[];
    menu=[];
    string name;
    integer i;
    integer j=llGetInventoryNumber(INVENTORY_OBJECT);  // コンテンツ内のオブジェクト数
    if (j > 12) j=12;  // 12より多かったら12にする
    if (j > 0) text="Choose one";
    else text="Error! Object not found";  // オブジェクトが入ってないとき
    for (i=0; i < j; i++) {
        name=llGetInventoryName(INVENTORY_OBJECT,i);  // オブジェクト名取得
        item+=[name];  // リストアップ
        if (llStringLength(name) > 24) name=llGetSubString(name,0,23);  // 長いときはカットして
        menu+=[name];  // メニューボタンに追加
    }
}

default
{
    state_entry()
    {
        CHANNEL=llCeil(llFrand(2147483646));  // チャンネルをランダムに決める
        init();  // initへ
    }

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

    changed(integer change)
    {
        if (change & CHANGED_INVENTORY)
        {  // コンテンツ内が変わったら
            init();  // initへ
        }
    }

    touch_start(integer total_number)
    {
        key id=llDetectedKey(0);  // タッチしたアバターのキー
        if (id) {
            llListenRemove(listen_handle);
            listen_handle=llListen(CHANNEL,"",NULL_KEY,"");  // リッスン開始
            llSetTimerEvent(600);  // タイマー10分
            llDialog(id,text,menu,CHANNEL);  // ダイアログ
        }
    }

    timer()
    {
        llSetTimerEvent(0);  // タイマー停止
        llListenRemove(listen_handle);  // リッスン中止
    }

    listen(integer channel, string name, key id, string msg)
    {
        if (channel == CHANNEL)
        {
            integer i=llListFindList(menu,[msg]);  // 押されたボタンをチェックして
            if (~i) {  // オブジェクトを渡す
                llGiveInventory(id,llList2String(item,i));
            }
        }
    }
}

入れられるオブジェクトはメニューボタンの都合で12個までです。llDialogでエラーにならないようオブジェクト名が長いものは切り詰めるようにしましたが、ボタンのラベルが被ってしまうアイテムは見分けられないと思います。
それからバイト数じゃなく文字数でカットしてるだけなので、日本語とかのオブジェクト名には対応してません。(文字化けると思うしw)

2010年6月5日土曜日

OPEN 24 Hours

何となくネオンサインを作ってみたら、思ったよりもまあまあいい感じにできました^^

それで需要あるかもって気もするので、このまま商品にして近々こっそり販売してみようかなって思ってます。。。でもGIMPで文字が発光して見えるように加工しただけなので、本当のネオンサインみたいな出来じゃないと思いますけどね^^;

12
34
56
78
仕組みはパラパラ漫画のコマみたいな画像を8枚作って、横2枚、縦4枚で並べて1枚のテクスチャに合成して、llSetTextureAnimでテクスチャアニメーションさせてます。(下記のスクリプトで右図のような再生順になります)

default
{
    state_entry()
    {
        llSetTextureAnim(ANIM_ON|LOOP,ALL_SIDES,2,4,0,0,2.0);
    }
}

この関数って2回実行したら最初のぶんは無効になるので、表と裏、2つの面だけをアニメーションさせるようなことはできなくて不便なんですよね。

動画はLinuxで撮ってみたんですけど、結構ややこしかったので以下は自分用メモですw
1. gtk-recordMyDesktopで記録(ogv形式)
設定は「毎フレームで完全サイズ画面録音(フルショット)」にチェック入れておかないとコマ落ちする(3Dウィンドウ用かな?)
2. ffmpegでaviなどに変換
ffmpeg -i out.ogv out.avi
3. Avidemuxで編集してmp4で保存

2012年3月22日追記: アニメの再生順を把握しやすいように表を入れました。

2010年6月1日火曜日

ビューワー2用ビデオプレーヤー(ラッキーレター賞品)

Viewer2用YouTubeプレーヤーを元にして、数ヶ所の動画共有サイトに対応させたシンプルなテレビ型プレーヤーを作ってみました^^

YouTubeの他にDailymotionVeohMySpaceVimeoに対応してて、mpeg4やmov、普通のウェブページなどももちろん表示できます。
この製品はダイアログメニューは使わずに操作は全てチャットから入力するようにしました。それからノートにURLを書いて登録するような機能も付けてないんですが、入力したURLの履歴を10件記憶するようにしてます。

HUDとして装着してテストしてたままのサイズなので、大きさは小さいんですが、据え置きで使うときはテキトーに引き伸ばしてくださいねw

Mansion Mall店BELLE ROSE店のラッキーレターに入れてきました。BELLE ROSE店のラキボはフライパンも入ってるので交互に表示されます。宜しくお願いします^^

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

2010年4月26日月曜日

Viewer2にZHAO-II

AOは普段あまり使わないんですが、気が向いたときすぐ使えるようにいつもZHAO-IIをオフの状態で装着はしてるんですね。

位置は右上に装着してるんですが、ビューワー2だったらサイドバーのトグルボタンの下になってしまいます^^;

重ならないように位置を移動させても、ログインし直したりすると元の位置に戻ってしまうので、スクリプトで位置設定してるのかなって思って調べてみたらZHAO-II-interface 7/21.1っていうスクリプトに記述部分がありました。
// For the on/off (root) prim
list rootPrimOffsets = [
    <0.0,  0.025, -0.05>,    // Top right
    <0.0,  0.00, -0.05>,    // Top middle
    <0.0, -0.025, -0.05>,    // Top left
    <0.0,  0.025,  0.10>,    // Bottom right
    <0.0,  0.00,  0.10>,    // Bottom middle
    <0.0, -0.025,  0.10>    // Bottom left
];
それでTop rightの位置を <0.0,  0.025, -0.55>, に変えたらサイドバーのボタンのちょっと下でいいくらいの位置ずらすことができました。。。装着位置右上なのに下にきてるじゃん!って感じですがw

2010年4月25日日曜日

ナインベンダー&シックスティーンベンダー

1prim 9items vendor1prim 16items vendorなんですが、製品名がちょっと長すぎるかなって思ってたので、今回のバージョンアップで思い切って名前を変更しました。9アイテムがNine vendor、16アイテムはSixteen vendorになります。

お値段は9アイテムのほうをちょっとだけ値上げしました^^;
Nine vendor V1.5.0 - L$110
Sixteen vendor V1.2.0 - 48マメタ(メタコマース限定販売

「1プリム」だけ取って、9アイテムベンダーって名前にしてもいいかなって思ったんですが、9パネルベンダーと間違えそうなのでやめたんですよ(実際混同してしまった外人さんいましたw)

バージョンアップで改良した点は、この2機種もセールスリストとIM通知で0L$の商品を除いて表示する機能をつけたのと、あと隠し機能的なものなんですが「selector」っていう名前のオブジェクトを作ってベンダー本体に子プリムとしてリンクさせると、選んだ商品の枠になって動作するようにしました。。。まあ2プリムになっちゃいますけどねw この隠し機能は1プリム9アイテムV1.4.8もテスト的に実装してます。

旧1プリム9アイテム、1プリム16アイテムベンダー購入者様は、それぞれ機種名変わりましたが、ご希望でしたら最新版をお渡しできますのでお問い合わせくださいね^^

スマートベンダー新発売♪

ボディをスカルプテッドプリムで作った2プリムのSmart vendorを発売しました。機能は1プリムベンダーとあまり変わらないので1プリムベンダーの上位機種になりますw

主な機能は下記の通りです。
ノート編集不要の簡単セットアップ
一括割引セール、グループ限定キャッシュバック、グループ限定販売機能

セールスリスト30件記憶、IM通知可
前と次の商品テクスチャのキャッシング機能
オートアップデート

テクスチャのキャッシングとオートアップデートは1プリムベンダーには付いてません。また、セールスリストとIM通知はフリーアイテム(0L$のもの)を除いて表示することもできるようにしました。この0L$除外する機能は1プリムベンダーV2.3.3とマルチパネルパネルベンダー(V1.4.3~)にも取り付けてます。

操作ボタンはボディのテクスチャに描いてるんですが、このベンダーもボタンを押したとき「ボタンが押し下げられた感じ」に見えるようにしました。あと特にメリットはないですけど、何となくボディのパネルの部分凹ませてはめ込んであるんですよ(意味不w

お値段はL$160にしました。それでついでに1プリムベンダーもL$120に値上げしましたw
スマートベンダーは各店舗(一部置いてない店舗あり)で販売中です。また、現在FS Shopping Mall店SL-Shopping.net-Mall店KONEKO店では実物を稼動中なのでご覧くださいね。宜しくお願いします^^

4月28日追記: 一部の機種でスクリプトの変更ミスがあって0L$を除いたセールスが記録されてなかったので修正しました。スマートベンダーはV1.0.1、マルチパネルベンダー4機種はV1.4.6になります。オートアップデートをご利用くださいますようお願いします m(_ _)m

2010年4月22日木曜日

サーバー1.38がちょっと残念な件

現在セカンドライフサーバー1.38に更新されてる最中だと思いますが、私のお家があるSIMもいつの間にか1.38になってたので、新しく追加されたLSL関数をテストしてみたんですね。

新たに追加された関数でllGetLinkPrimitiveParamsllSetLinkPrimitiveParamsFastなんですが、これらは多分たくさんのリサイズスクリプトとかでスクリプトの負荷が上がるのを防ぐのが狙いだと思います。

でも実際テストしてみると何かちょっと中途半端って気がしました。スクリプトを子プリムに入れなくても結構高速でリサイズできるようにはなったんですが、ここまでできるんだったら何でllLinkTextureとかもノーウェイトのものを作ってくれなかったの?って感じしますよね。llSetLinkPrimitiveParamsFastだと何番まであるかわからない面ごとのリピートやオフセットはそのままでテクスチャだけを変更ってできないし、リンク先の面の数も取得する関数がないので、結局テクスチャチェンジの場合テクスチャ変更を適用しない子プリムにはスクリプトを入れるとかしないと高速動作させるのは難しいみたいです;;

6月12日追記: サーバー1.40でリンク先プリムの面の数を取得するllGetLinkNumberOfSidesが追加されるみたいですね。

2010年4月19日月曜日

Profile picks gift giver V1.2.0

サーバーのバージョン1.36から土地のUUIDキーをllGetParcelDetailsで取得可能になってるってことに気がついたので、それに合わせてプロフィールピックギフトギバーを改良しました。

今までは自分のピックに土地を登録して、それをもとに手動でUUIDを入力しなきゃいけなかったんですが、本バージョンからはそのような面倒なセットアップ作業は全く不要で、ギフトを入れて置くだけで動作するようになりました^^

ちょっとややこしいセットアップだったので結構お問い合わせがあったんですよ。でもこれでもうその心配もないですねw

この装置はオートアップデートを付けてるので、旧バージョンをお持ちの方は持ち物から出して頂いたらアップデート品を自動でお受け取りできます。宜しくお願いします^^

2010年4月17日土曜日

Lucky letter one updater bug

テストしてて何となく気がついたんですが、ラッキーレターone(1プリムのほう)のオートアップデートが作動しなくなる事があるみたいなんですね。オーナーが替わったときにスクリプトをリセットするようにしてあるので、たぶんスクリプト同士のタイミングでそうなることがあるんじゃないかなって思うんですけど、ラッキーレターや他の装置のオートアップデートは今のところ同じ不具合は確認してないんですよ。でも起きる可能性はあると思うので、一応オートアップデートを採用してる機種全部修正しました^^;

オートアップデートが動作しない状態になってしまったら、何度持ち物から出してもだめみたいです。なのでこれは購入して持ち物に入った時点で運命が決まってしまうんだと思います。ただちょっとしたキッカケで正常に動くようになるので、新バージョンが出てるのに何度rezしてもアップデートが届かなかった方は、次のような簡単な手順で直ると思いますので、お手数ですが宜しくお願いしますm(_ _)m

持ち物から出して1分ほどしてからテイクしてください。これで直ってるはずなので、テイクしたラッキーレターoneを持ち物から出したら今度はアップデートを受け取れると思います。


オートアップデートを修正したラッキーレターoneはV1.0.8になります。

Sometimes, an updater of Lucky letter one (1 prim Lucky letter board) has not worked. If your board can not receive a latest version, try this,
Rez your "Lucky letter one" and wait for 1 minute... and take that. And rerez that to will get an updated version.


Updater fixed Lucky letter one is V1.0.8.

4月21日追記: ついでにリセットかけたときスキンがデフォルトに戻らなかったのも直してたんですが、稼動状態でリセットしたらレターや時間表示に不具合が出てたのでまた修正しました。。。orz

5月4日追記: アップデートに不具合が出たものはサーバーにバージョン情報が届いてなかったんですが、バージョンが確認できなくてもアップデート品を送るようサーバーを修正しました。これでアップデートに不具合の出てしまったものでも最新版をお受け取りできるようになったと思います^^
Our update server fixed. Maybe, all version updater of Lucky letter one has no problem now.

2010年4月15日木曜日

商品設置のときに使うスクリプト

Zindraに出してた店舗はやっぱりモールが無くなってしまったので、今度はもうちょっと活気ありそうなモールを探そうかなって思ってる千尋です。

出店したとき、建物やブースの規模とかに合わせて商品の箱を並べるのって、結構面倒だったりしますよね? なので私は箱の大きさを変更する簡単なスクリプトを使ってますw

こんな感じでサイズ違いのものを何種類か作って持ち物のフォルダにまとめといて、お店に設置するとき商品の箱にスクリプトを直接ドロップしたらオッケーです^^
// size 1.8x0.01x1.8

float f=1.8;  // 縦横のサイズ

default
{
    state_entry()
    {  // スクリプト開始
        llSetScale(<f,0.01,f>);  // オブジェクトの大きさを設定
        llRemoveInventory(llGetScriptName());  // このスクリプトを削除
    }
}

このサンプルは、XとZの大きさが1.8、Yが0.01のボード状になります。また、サイズを変更した後スクリプトは自動的にオブジェクト内から消滅します。

設置する壁の向きが違うときは、更にZ方向の角度だけ変えるスクリプトを商品にドロップして向き変えてます。角度のほうは90度と0度のものを用意したら十分だと思います^^
// angle z 90

float z=90;  // 角度

default
{
    state_entry()
    {
        llSetRot(llEuler2Rot(<0,0,z>*DEG_TO_RAD));  // オブジェクトの角度を設定
        llRemoveInventory(llGetScriptName());  // このスクリプトを削除
    }
}

自分名義の土地とか建物で使うときは取り扱いに注意してくださいね。手がすべって建物にドロップしちゃうとお店が悲しいことになると思うのでwww

20時頃追記: このスクリプトはオブジェクトのコンテンツ内で作成して保存すると消えてしまうので、持ち物の適当なフォルダの中で作ってくださいね。

2010年4月8日木曜日

プロフ写真を展示するスクリプト

昨年12月くらいにアバタープロフィールのウェブページが仕様変更されたんですが、そのときの変更に対応したプロフィール写真を表示するスクリプトを書いてみました。

変更当時は古いスクリプトだとプロフによってはデータが取得できない不具合が出てたんですが、その後、古いスクリプトも問題出ないよう修正されたので、一昨年書いたプロフ写真を表示するスクリプトとかでも取得は可能なんですけどね^^;

仕組みは 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日追記: また仕様変更があって、もう古い方法は使えなくなったみたいです。