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);  // 装着されてないときはタイマー停止
    }
}

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