Site search

Google
WWW を検索 backup-beta.blogspot.com を検索

2008年7月31日木曜日

レンタルしてきました

昨日から探してた海外のモールですが、もう探し疲れたのでテキトーなところを一ヶ所レンタルしてみましたw
格安なところは大抵キャンプ設置してないのでトラフィックがねぇ^^; なので、ちょっと予算オーバーしちゃったんですけどトラフィック高めのモールにしました^^ でも利益上がらなかったらこっそり撤退しときますねwww
あと、CSL MALLは客足少ないので、トラフィック低めでももっと格安のところに引っ越したほうがいいかもなんて思ってますw


激安ショップレンタル 週L$100で100プリム

昨夜も引き続き探してたら、何とL$100で100プリムっていうレンタル見つけたんですよ@@; でもここもTPが店舗から離れちゃうんですねw 空きがあった店舗も奥から2番目だし。やっぱりテナント側としては自分のショップのすぐ近くにテレポートできないと都合よくないですからねぇ。。。て、悩んでたんですが、今朝見に行ったらもう埋まっちゃってましたwww
http://slurl.com/secondlife/Graybar/224/149/27

こんなに安いモールってまず無さそうなので、悩んでないで即決しないとだめですねぇ^^;;


2008年7月30日水曜日

海外のお得なモールはないかなw

この前SL-Shopping.net-Mallにレンタル費を支払いに行ったとき、モールの片隅に見覚えのない通路のようなものを発見したんですね。あれっ?て思ってよく見たら、モールが今度は西側にずどーんと拡張されてたわけなんですが、状況が飲み込めず固まってしまった千尋ですw

今日は、海外のモールでもうちょっとトラフィックあるところを借りたいなって思って探しまわってます^^ 予算は週L$100で20プリム以上希望ですw
CSL MALLはメインランドで海外の方の経営なんですが、ここを借りた当時はSIM内にモップ掃除のキャンプがいっぱい設置されてたんですね。ところが、ある日それが全部撤去されてしまってwww
あ、話を戻しますw さっき、トラフィックも結構高いみたいなのに格安なモールを見つけたんですよ。でもTPがモールの外(入り口のところ)になるのでちょっと迷ってます。店舗の近くだったらいいんですけど、ちょっと離れすぎはねぇw


2008年7月29日火曜日

テクスチャの位置を設定するスクリプト

プリムの任意の面だけテクスチャの位置をずらしたいってことありますよね。
default
{
    state_entry()
    {
        llOffsetTexture(0.2,0,4);  // 面4のテクスチャを左に20%ずらす
    }
}

ずらした後はスクリプトを消してもプリムにテクスチャの位置は記憶されてます。

サイズなんかも同時に調整することが多いと思いますので、llScaleTexturellOffsetTexture、あと角度はllRotateTextureで、まとめて処理するときはllSetPrimitiveParamsのPRIM_TEXTUREですね。

テクスチャのサイズや位置をスクリプトで制御すると色んな製品に応用できますよ♪
うちの製品では、デジタル時計カレンダーラッキーレターボード1プリム9アイテムベンダーなどで使ってます。あとメッセージを何文字か表示できるボードやタイニーアバターの表情の切り替えとか他にも色々使えるんじゃないかなって思います^^



今回はタッチの度にテクスチャの位置が切り替わるスクリプトを書いてみました。木目のままじゃわかりにくいと思うので、面0に何かわかりやすいテクスチャを貼ってから試してくださいねw
// タッチでテクスチャの表示位置を切り替え 左上→右上→左下→右下
list offset=[  // テクスチャのオフセット横と縦
-0.25,0.25,  // 左上表示
0.25,0.25,  // 右上表示
-0.25,-0.25,  // 左下表示
0.25,-0.25];  // 右下表示
integer i=0;  // リスト読み出しに使うポインタ
integer len;

offset_texture()
{
    float u=llList2Float(offset,i);  // 横のオフセット
    float v=llList2Float(offset,i+1);  // 縦のオフセット
    llOffsetTexture(u,v,0);  // 面0のテクスチャの位置設定
}

default
{
    state_entry()
    {
        len=llGetListLength(offset);  // リストの長さ
        llScaleTexture(0.5,0.5,0);  // 面0のテクスチャを縦横2倍で表示
        offset_texture(); // offset_textureで最初はテクスチャの左上を表示
    }

    touch_start(integer total_number)
    {
        i+=2;  // ポインタに2ずつ加算してリストを読む位置を変更
        if (i >= len) i=0;  // ポインタがリストの長さを超えたら0にする
        offset_texture(); // offset_texture実行
    }
}

2008年7月28日月曜日

JapaTownのFree Shop

JapaTownにあるフリーと10L$の商品を無料で置けるスペースに置かせてもらってきました^^

置いてきたのはモバイルファクトリーのフリービーコンテストに出品してたアイテムで、フリーアイテムのほうにフェイスライト?と観音開きドア、10L$のほうはアンティークミニランプです。ミニランプはスクリプトをちょっとだけ改良してスイッチをオーナーやグループメンバー限定で操作できる機能をつけてみました。
この無料スペースは、それぞれ4個まで置けるので、また何か追加するかも知れません^^
て http://japatown.slmame.com/e305610.html をも一回みたらマス目にきっちり置かないとだめみたいですね。置いたときはそこまで注意してなかったのでずれてたかも知れません。。。返却されるかもwww


7月29日9時15分頃追記: 見に行ったら思いっきりずれてたので直してきましたw ついでにLM giverを追加しました^^

1プリム浮世絵カレンダー発売です^^

製作中だったカレンダーが完成して販売を開始しました^^
カレンダーの柄は歌川広重の東海道五十三次の浮世絵から千尋がテキトーに12枚選んだ絵が表示されるようになってますw

1月2月3月4月5月6月7月8月9月10月11月12月
蒲原岡崎日本橋御油掛川川崎小田原庄野三島鞠子吉原

1プリムにしたかったので年号は省いたんですが、マウスが乗ったとき説明のところに今日の日付と一緒に出るようにしました。日付の切り替わりを日本時間にあわせる場合はタイムゾーンをGMT+9:00に合わせてくださいね。
あと、オーナーはダイアログから先月や来月のカレンダーを一時的に表示できます。

今のところCSL MALL店に置いてます。お値段はL$100にしました。 L$80に値下げしました。宜しくお願いします^^

8月5日追記: フリマなどにも出品中です。

2009年2月26日追記: パーミッションをコピー不可、譲渡可に変更して価格はL$70に変更しました。



2008年7月27日日曜日

LSLをブログで見やすく変換

前からちょっと気になってはいたんですが、うちのブログでLSLは<pre></pre>に入れて書いてるので自動改行が付いて一行飛びになっちゃってるんですね^^;
LSLのテキストこぴぺで、ぶろぐに表示するテスト(しんいちさん)の記事を見て、やっぱりうちもキチッと見やすく書いたほうがいいかなって気になってきましたw

そこで今回スクリプトはLSLじゃなくてJavaScript+HTMLなんですが、ブログに載せるLSLを見やすく変換するフォーム作ってみました^^
半角スペースの連続を1個おきに&nbsp;に置き換えます。あと、ブラウザがベクトルの<と>をHTMLタグと間違えることもあるみたいなのでこれも変換します。
これで次回からは見やすく書くようにしますね。。。あ、いや、古い記事のも修正しますw 修正完了しましたb あとタイトルが何か変だったので直しましたw




LSLをソラマメ掲載用に変換するフォーム^^


2008年7月26日土曜日

上位じゃないとわからないのねw

モバイルファクトリーさんで開催されてたフリービーコンテストなんですが、10位以内でないと何個出たかは発表されなかったんでしょうかね? SIMでの発表は見に行ったのが遅かったので、もう既に片付けられてて見れませんでした^^;;
フリービーコンテスト結果発表


コンテストに出したアイテムは3点とも新作だったのでやっぱりいくら出たのか気になりますw 特にこの変なライトはホントに需要あったのかなってwww


8月4日10時15分頃追記: 他でも出品してみたら、フェイスライト?は結構人気みたいでしたw こういうネタ系のものって案外需要あるものなんですねwww

2008年7月25日金曜日

価格の違う4商品を販売するベンダーのスクリプト

1プリムで9商品販売できるベンダーでちょっと書きました、私が初期に開発して使ってた値段の異なるアイテムを4つまで販売できる簡単なベンダーのスクリプトを公開します^^

右クリックPayで出てくるボタンが4個なので4つまでなんですw 支払った値段によって渡すアイテムを判断してるので、仕組みも複数商品を扱える他のベンダーより簡単なんですねw


// 価格違いのアイテムを4つまで販売
list item=[  // アイテムリスト 各行は "アイテム名",価格
"Apple", 5,
"Banana", 4,
"Orange", 3,
"Fruit set",10,
NULL_KEY];  // リストの最後にもカンマを付けたいからw
integer len;

default
{
    state_entry()
    {
        list price=[PAY_HIDE,PAY_HIDE,PAY_HIDE,PAY_HIDE];  // 価格リスト
        integer i;
        len=llGetListLength(item)-1;  // アイテムリストの長さ(ヌルキーを減算してます)
        for (i=0; i < len; i+=2) {
            if (llGetInventoryType(llList2String(item,i)) == INVENTORY_NONE)
            {  // アイテムがコンテンツ内にないとき
                llOwnerSay(llList2String(item,i)+" is none.");  // ないよって表示
            }
            else {  // そうでないときは価格リストに値段を登録
                price=llListReplaceList(price,[llList2Integer(item,i+1)],i/2,i/2);
            }
        }
        llSetPayPrice(PAY_HIDE,price);  // 支払いボタンに値段を設定
    }

    changed(integer change)
    {
        if (change & CHANGED_INVENTORY) {  // コンテンツ内が変わったら
            llResetScript();  // スクリプトリセット
        }
    }

    money(key id, integer amount)
    {  // 支払いがあったら
        integer i;
        integer j=-1;  // エラーチェック用に-1をセット
        for (i=1; i < len; i+=2) {  // アイテムリストの価格と比較
            if (amount == llList2Integer(item,i)) j=i-1;
        }

        if (~j) llGiveInventory(id,llList2String(item,j));  // エラーがなかったらアイテム渡す
        else llWhisper(0,"Error - illegal amount");  // 支払い金額が一致しないときはエラー
    }
}


ベンダーのテクスチャはいくら支払うとどのアイテムが買えるかをわかりやすく作ってくださいね^^


2011年5月19日追記: 支払い金額が一致しないときの処理を追加しました。

2008年7月24日木曜日

SUNSET SHOPPING MALL店 閉店になります

ランキング表示について
きれいさっぱり消したらいいのにw

SUNSET SHOPPING MALL店は都合により7月いっぱいで閉店します。
今度どこか海外のモールをもうひとつ借りようかな。。。SL-Shopping.net-Mallは海外市場での販売を伸ばそうと借りたはずだったんですが、売り上げから判断すると外国のお客さんの割合は他の日本で借りてるモールやフリマと特別変わらないんですよねw
日本のモールってメインランドで海外向けって宣伝してるところはよくありますけど、モール内では日本語がかなり目につくので外人から見たらちょっと近寄りがたいってこともあるんじゃないかなって思いますw
でもSL-Shopping.net-Mallは日本での人気が高いみたいだから仕方ないかなwww
あと、安いからずっと借りてるYa ZHou estateのマーケットはいつの間にか建物壊れかけてるみたいなんですけどw ここはもうやばそうだから撤退かも?^^;

7月25日3時半頃追記: 意味がちょっとわかりにくかったみたいだったので少し修正しました


2008年7月23日水曜日

1プリムで9商品販売できるベンダー

元々製品の販売促進が目的でブログ始めたはずだったんですが、うちのブログではタイトルにフリーアイテムとかスカルプやブレンダーって入れるとアクセス数が飛躍的に上がるので、ついそんな記事ばかりに傾倒しちゃうんですねw だから他のブログと被っても有名ショップのフリーアイテムを競って紹介してるブログの気持ちもわからないではないですwww それからスクリプトの記事は後からアクセス数が伸びてきます。。。結局、私もアクセス数増やすことに執着してしまってたのかななんて思ってちょっと自己嫌悪になってきました。ブログをすぐに始めなかった理由のひとつもこれだったんですけどね。

気を取り直して、今回は真面目に製品の紹介をしますw
SHOP CHIHIROで一番人気のベンダー、1prim 9items vendorです。このベンダーは1プリムで9つまでアイテムを販売できます^^



これ元は1プリムで値段の異なる4つのアイテムを販売できる簡単なベンダーのアイデアが発展したものなんです。当時まだ開発したベンダーは自分用としてのみ使ってたんですが、4アイテムベンダーで売ってた商品は一度も売れたことがなかったんですね^^;; だから1プリムという利点はあっても、お客様から見ると扱いにくいのかなって思って、これを値段制限をなくして選択式にする改良は企画倒れになってたんですよ。ところが時々ソラマメを見るようになって、企画倒れになったのと同じようなタイプのベンダーを販売してて売れてるような感じの記事を見かけたんです。それで需要あるのかなって思って9アイテムまで扱えるように改良したものを販売するようになりました。。。ってことはベンダーで売ってたアイテムがよくなかったのかな orz
仕組みは案外簡単なんです。ベンダー左側のテクスチャは一枚もので、ダイアログからアイテムの番号を選ぶと、左のテクスチャの選んだアイテム部分が右側に拡大されて表示されます。ですから欠点としてアイテムの順を入れ変えるだけでもテクスチャは作り直しになりますw それから、お客様からみるとタッチでダイアログを出してから商品を選択ですから、マルチパネルのベンダーに比べて少し手間が増えます^^;
システム的には3プリムのベンダー(フリー)やアニメーションベンダーに次いで簡単だったので、お値段L$100で販売してます。いかがでしょうか^^

2008年7月22日火曜日

カラーチェンジの工夫

今回は普通にカラーチェンジのスクリプトです^^
llSetLinkColorでリンクしてる子プリムも全部色を変えますので、変えたくないプリムは

// 色変更しない子プリム

vector color=<0,0,0>;  // 変えたくない色

default
{
    changed(integer change)
    {
        if (change & CHANGED_COLOR) {  // 色が変わったら
            if (llGetColor(0) != color) {  // 違う色に変わったら
                llSetColor(color,ALL_SIDES);  // 元の色に戻す
            }
        }
    }
}

こんなスクリプトを入れておくと一瞬色が変わりますが元に戻りますw
if (llGetColor(0) != color)は元の色への更新がループするのを防止します。


親プリムのスクリプトは色の名と値をそれぞれリストにして処理するようにしてみました^^
リストの色の名前はそのままダイアログのボタンとして表示されます。

// カラーチェンジ
integer listen_handle;
integer CHANNEL;
list color_name=["Red","Green","Blue","White"];  // 色の名前
list color_value=[<1,0,0>,<0,1,0>,<0,0,1>,<1,1,1>];  // 色の値

default
{
    touch_start(integer total_number)
    {
        key agent=llDetectedKey(0);  // タッチしたアバターのキー
        if (agent != llGetOwner()) return;  // オーナーでないときは中断
        llListenRemove(listen_handle);  // listen解除
        CHANNEL=llCeil(llFrand(2147483646));  // listenチャンネルのランダム化
        listen_handle=llListen(CHANNEL, "", agent, "");  // listen開始
        llDialog(agent, "Color change", color_name, CHANNEL);  // ダイアログ表示
    }

    listen(integer channel, string name, key id, string msg)
    {
        llListenRemove(listen_handle);  // listen解除
        if (channel == CHANNEL && id == llGetOwner()) {
            integer i=llListFindList(color_name,[msg]);  // 押されたボタンをリストから検索
            if (i < 0) return;  // 一致しなかったら終了
            vector color=llList2Vector(color_value,i);  // 色の値リストの一致した色
            llSetLinkColor(LINK_SET,color,ALL_SIDES);  // 全プリムの色を変更
        }
    }
}

今回のダイアログ用のリッスンチャンネルは乱数でプラス側(1~2147483646)を発生するようにしてます^^
7月22日18時頃追記: llSetLinkColorのリンク番号が抜けてたのを訂正しました^^;;

2008年7月21日月曜日

グループ加入のリンクを表示するスクリプト

今回はタッチするとチャット履歴にグループ加入のリンクを出すスクリプトです。
LSL Examplesとかにもあるんですけどね^^
http://wiki.secondlife.com/wiki/Open_Group_Join


それでも自分なりに書いてみたんですが。。。

// グループ加入

group_link(key agent)
{  // オブジェクトのグループを調べて
    key group=llList2Key(llGetObjectDetails(llGetKey(),[OBJECT_GROUP]),0);
    if (group) {  // グループがセットされていればIMでリンクを表示
        string str="チャット履歴 (Ctrl+Hキー)に表示されたリンクをクリックすると";
        str+=" グループインフォメーションが出ますのでJoinボタンで加入してください";
        str+=" secondlife:///app/group/"+(string)group+"/about";
        llInstantMessage(agent,str);
    }
    else llWhisper(0,"オブジェクトにグループがセットされてません");
}

default
{
    touch_start(integer total_number)
    {
        key agent=llDetectedKey(0);
        group_link(agent);  // タッチでgroup_linkへ
    }
}

まあ、簡単なスクリプトだから同じような感じになっちゃってますねw
スクリプトの日本語は1.19系のビューワーだと入力できないので1.20以上のRC版を使ってください。

カレンダー製作中

前々から作ってみたいと思ってたカレンダーの製作に取り掛かってます^^
万年カレンダーで1プリムにしたいので年号は入れないでおこうと思ってますw まあ、使用期限を十年後とかまでに限定すれば年号も入れられますけど、それじゃあ万年カレンダーじゃないですよねw

今までに作ったことないような製品なので、タイマーはどんだけおきにセットするかとか色々悩みますw でも日付や曜日の計算なんかは時計用に作ったスクリプトが一部使えるぶん楽できてるんですよ。それに、このスクリプトはUNIXタイム使って計算してないので2038年問題(詳しくは知りませんがw)も大丈夫なんじゃないかなって思います^^ って、まだまだ30年も先じゃないwww


2008年7月20日日曜日

特定のアバターにだけアイテムを渡すスクリプト

今回はタッチするとリストに書かれたアバターにだけアイテムを渡す簡単なスクリプトです^^
リストをllListFindListでサーチして一致するとllGiveInventoryで渡します。
渡すアイテムはINVENTORY_OBJECTでオブジェクトにしてますが必要に応じて変更してくださいね。
http://wiki.secondlife.com/wiki/LlGetInventoryName/ja


アイテムを渡すアバターが1名だけのときでもリストには [ ] つけてください。
list allow_av=["Chihiro Owatatsumi"];
渡すアイテムとしてコンテンツ内にオブジェクトを1コ入れておいてください。でないとチェックまではしないのでエラー出ますw

// 特定のアバターにオブジェクトを渡す
list allow_av=["アバター名","アバター名","アバター名"];  // アバターのリスト

default
{
    touch_start(integer total_number)
    {
        string name=llDetectedName(0);  // タッチしたアバターの名前
        integer i=llListFindList(allow_av,[name]);  // リストと照合
        if (i < 0) return;  // リストに載ってなければリターン(実行終了)
        key agent=llDetectedKey(0);  // アバターのキー取得
        string item=llGetInventoryName(INVENTORY_OBJECT,0);  // 渡すアイテム
        llGiveInventory(agent,item);  // 渡す
    }
}

2008年7月19日土曜日

スカルプトテクスチャのUUIDを表示するスクリプト

スカルプもかなり普及してきたようですので、今回はスカルプトテクスチャ(UVマップ)のUUIDをぱくる 表示するスクリプトですwww (注意を促すのが目的です^^)

スカルプテッドプリムをぱくられないように、UVマップを透明化したら安心だと思ってる方いますよね? 私も少しは有効かなって思って一応透明化はしてるんですが、簡単なスクリプトを入れるだけでテクスチャのUUIDを取り出せるので、絶対に盗られたくないスカルプは必ず『モディファイ不可』にしてくださいねwモディファイかコピーかトランスファのどれかを『不可』にしてくださいねw

// スカルプはスカルプトテクスチャのUUID表示
default
{
    state_entry()
    {
        string str=llList2String(llGetPrimitiveParams([PRIM_TYPE]),1);
        llOwnerSay(str);
    }
}

はい、めっちゃ簡単ですねw スカルプ以外のプリムに入れると中空部分の形状の整数値の表示になります。
http://wiki.secondlife.com/wiki/LlGetPrimitiveParams/ja

うちの商品もお客さまの利便性を優先したためスカルプでモディファイ可のもあるんですけど、まあコピー可でお値段も安いですから問題ないかな^^;トランスファは不可なので表示はできないようです。

7月21日1時45分頃追記: 試しに使ったスカルプがフルパーミッションだったので気がつかなっかったんですが、他人が作ったものでフルパーミッションのもの以外はNULL_KEYが帰ってきました^^; でもセキュリティの関係でそうなってるのか、それともバグなのかはわかりません。バグだったら将来修正される可能性もあるので用心しといたほうが良いかも知れませんね。。。


取り出したUUIDはllSetPrimitiveParamsで普通のプリムをスカルプにできます^^
// スカルプテッドプリム化
default
{
    state_entry()
    {
        string str="561c90b0-69a8-e76d-76c6-0902c1ae25a9";  // スカルプトテクスチャのUUID
        llSetPrimitiveParams([PRIM_TYPE,PRIM_TYPE_SCULPT,str,PRIM_SCULPT_TYPE_SPHERE]);
    }
}

自動ドア バージョンアップ

フリーで配布してますAuto doorなんですが、これってこのままの状態で遊べるようにしか作ってなかったので、建物にリンクさせると使えなかったんですねw

なので、リンクさせても何となく使えるように修正してみました。


2008年7月18日金曜日

1プリムのチェア 無料

今回はスカルプでこんな椅子を作ってみたんですが、何かちょっとカクカクしすぎたのとブレンダーでの面の取り方がまた不均等だし、テクスチャとの相性もイマイチなのでフリー配布にしますね^^;

2個ありますが左側を売る設定にしてます(テーブルは2プリムですw)
http://slurl.com/secondlife/JapanSeychellesLand/142/247/22
このビーチにお借りしてる店舗は今月一杯までです。


7月18日21時頃追記: やっぱし誰も欲しがらないような。。。 orz
椅子の背もたれの下の部分をちょっと滑らかに修正しました。それからテーブルも1プリムのものを作って入れ替えたんですけど、これはもっとだめっぽいですね^^;

プリム数が減ったので横にピンクのゴミ箱を置きましたw

2008年7月17日木曜日

フリービーコンテスト

モバイルファクトリーさんのSIMで開催されてるフリービーコンテストに新作を2個追加して頂きました^^

観音開きするドアともう一個はフェイスライトなんですが、フェイスライトは通常のものとは違っててですね。。。いや、たぶん外してそうなので詳しくは言いません^^;;

これで先日のランプと合わせて3点エントリーさせて頂きました^^
期間は7/7~7/22です。今頃になって参加って遅いよなw
http://slurl.com/secondlife/MobileFactory/175/141/26


2008年7月16日水曜日

普通にドアのスクリプト

今回は開き戸のスクリプトです。角度だけ操作できればいいので引き戸より簡単なんですが、最初rotation型変数の概念がさっぱりわかりませんでしたw あ、いや今もよくはわかってないんですが^^;

オブジェクトを編集するとき角度は3つの値、X、Y、Zのベクトルで扱いますが、スクリプトではrotation型変数のクォータニオン(四元数)っていう4つの値で処理しないといけないんですよ。だから角度はラジアンに変換して、クォータニオンに変換して。。。うわぁあああwという過程が入るのでその分ややこしいんですよねwww


オブジェクトは中心の座標を軸に回転するのでパスカットして作ってください。サイズ<0.100, 4.000, 3.000>みたいにXをドアの厚みにしたときパス・カットは始点0.375終点0.875ですね^^
// 開き戸
rotation closed;
rotation open;

default
{
    state_entry()
    {
        closed=llGetRot();  // 閉じたときのクォータニオン
        open=closed*llEuler2Rot(<0,0,-90>*DEG_TO_RAD);  // 開いたときのクォータニオン
    }

    touch_start(integer total_number)
    {
        if (llGetRot() == closed) {  // 閉じてたら
            llSetRot(open);  // 開く
            llSetTimerEvent(10);  // タイマーセット10秒
        }
        else {  // そうでないときは
            llSetTimerEvent(0);  // タイマーをクリアして
            llSetRot(closed);  // 閉じる
        }
    }

    timer()
    {
        llSetTimerEvent(0);  // タイマークリア
        llSetRot(closed);  // 閉じる
    }
}

ドアをタッチで-90度の方向に開きます。もう一度タッチか10秒で閉まります。
設定はスクリプトをリセットでドアの角度が記憶されます。

何かスカルプテッドで簡単なものを…

この前ブレンダーのデータを全部消しちゃったのが痛いんですがw めげずにスカルプ練習してます。使い方がまださっぱりなんで簡単なものから数こなしていくとそのうち何となく慣れてくるかななんて甘い期待をしながら頑張ってます^^;;

これ首がちょっと細くなりすぎたような気がするんですけどベッドの脇に置くようなランプ(のつもり)ですw
このBlenderで作ったランプ(らしきもの)をモバイルファクトリーで開催中のフリービーコンテストに応募してみよかなって思ったんですが、このコンテストって応募した作品の権利とかどうなるんでしょうね?他で配布してるフリーアイテムなんかも可なんでしょうか?こうゆうの応募したことないのでよくわかりません。。。問い合わせ中です;;


7月16日17時頃追記: shabeさんに回答頂きまして、このコンテストではアイテムの権利は全て作者にあって、他で配布してるものでも良くて、結局のところ配布数をカウントするために委託みたいな感じでした。
なので一応ランプを応募しておきました^^ あと作成中のネタっぽいのもできたら応募しよかなって思ってます。でも外してるかも知れないですがwww

2008年7月15日火曜日

掛け時計


Simple wall clockの新発売に伴い、http://beta.slmame.com/e300460.html の掛け時計(製品名Wall clock)も一応完成ということにして旧機種Fancy wall clockはマーケットから撤去しましたw でも、この新製品Wall clockはまだどの店舗にも置いてなくて値段もいくらにすれば妥当なのかわかんない状態ですw やっぱやる気ないなあwww



2008年7月14日月曜日

新しいスカルプの階段

販売中の階段を新しく作り直した階段に入れ替えました。

新しい階段は上下の端の部分をこんな感じで何個かつなげるのに適した形にしました^^

更にJapanSeychellesLandのビーチにお借りしてます期間限定ブースの階段の下にはアップデート用のスクリプトを無料配布中です。旧製品をお買い上げのお客様はこのスクリプトを階段に入れると新しい階段にバージョンアップされます。なお、モバイルファクトリーのフリマで配布してた階段(Object stairs)もアップデート対象ですので、この階段を入手された方も是非ご利用ください^^
このスクリプトはパーミッションの関係で動作しないことがわかって撤去しました。お手数ですがバージョンアップ希望される方は旧バージョンをお送りくださいましたら交換いたしますので宜しくお願いします。譲渡不可なので送れませんね^^;;

但し、バージョンアップで階段の長さや段数も変更になりまして、長さと厚みの比率が変わりましたのでそれは調整してくださいねw


スカルプの階段また作り直しますw

何となく気になってたんですが、階段の上の端を拡大して見るとスカルプの芯がバリみたいに出てるんですよ^^;;
ブレンダーのデータ上はこんなに出てなくて、拡大しても全然目立たないほどで上下とも同じなんです。


わかりにくいですが、赤い方はスカルプの芯を無理に押し込んでみた階段です。なぜか押し込むとオブジェクトの中心より上にある面(ブレンダーのデータ上の面)が交互に伸び縮みしちゃってるんですw(意味不


現在はこれらの階段のデーターも間違えてリナックスもろとも消してしまったんですが。。。。ううぅ、Linux入ってるとインストールできないWindowsっていったい何なのwww

階段はBlender Sculptie Import & Export Scriptsを使ってたんですが、conv2sculptを使って作り直してみたら今度は大丈夫そうだったので階段のバージョンアップを計画中です。
階段を2個とか連ねて使うケースも結構あるみたいだったので新しい階段はつなげても違和感ないような形にしますね^^


2008年7月13日日曜日

2プリムの掛け時計

僅か2プリムですがアナログで針の動く時計を作りました^^
まあ低プリムなので針といってもテクスチャなんですが^^;

日本時間で使用の場合タイムゾーンはGMT+9:00に設定してください。
サイズもダイアログで12段階に変えられます。(ダイアログはタッチ長押しで出ます)
今のところCSL MALL店とJapanSeychellesLandのビーチに借りてる期間限定ブースに置いてます。、あとSL-Shopping.net-Mall店にも置いてきました。
お値段はL$40にしました。宜しくお願いします^^


高度300m以上に行けるテレポーターのスクリプト

Windowsが起動しなくなってからずっと予備に入れてたLinux使ってたんです。でも昨日、Linuxが入ってるとWindows XPがインストールできないことがわかったので仕方なくLinux消したんですよ。それでやっとWindows復活できてほっとしてたんですが、Linuxのブレンダーのデータをバックアップするの忘れてたおバカな千尋です orz

今回は前回に続きましてテレポーターのスクリプトです^^
座る位置を利用したテレポーターは高度300mくらいが限界なので、もっと高い場所にテレポートするにはオブジェクトに乗せてエレベーターとかみたいに移動させます。
オブジェクトの移動にはllSetPosを使いました。でもこの関数って最大10mしか動かないんですよ^^;
なので目的地に着くまでループさせますw


// 高度300m以上へ行くテレポーター
vector dest;
vector pos;
integer move=FALSE;

default
{
    state_entry()
    {
        dest=llGetPos();  // 現在の座標を目的地に設定
        llOwnerSay("Destination = "+(string)dest);
        llSitTarget(<0.0,0.0,1.2>, ZERO_ROTATION);  // テレポーターに乗る位置
    }

    changed(integer change)
    {
       if (change & CHANGED_LINK) {
            key agent=llAvatarOnSitTarget();
            if (agent) {
                if (move) llUnSit(agent);  // 移動中は搭乗拒否
                else llRequestPermissions(agent,PERMISSION_TRIGGER_ANIMATION);
            }
        }
    }

    run_time_permissions(integer perm)  
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION) {
            move=TRUE;
            llStopAnimation("sit");  // 座るアニメ停止
            llStartAnimation("stand");  // 立ちポーズ実行
            pos=llGetPos();  // 出発地の座標設定
            vector p=pos;  // 移動中の座標を定義
            if (dest) {
                while (p != dest) {  // 目的地の座標になるまでループ
                    llSetPos(dest);  // 目的地を指定しても最大10mしか移動しない
                    p=llGetPos();  // 移動中の座標
                }
            }
            key agent=llAvatarOnSitTarget();
            if (agent) llUnSit(agent);  // 到着後に立たせる
            while (p != pos) {  // テレポーターを出発地点へ帰す
                    llSetPos(pos);
                    p=llGetPos();
            }
            move=FALSE;
        }
    }
}

設定は目的地に置いてスクリプトをリセットするだけです^^ (スクリプト開いて右下のボタン)

2008年7月12日土曜日

テレポーターのスクリプト

テレポーターにはいくつかタイプがありますね^^

まずはタッチでマップを開くタイプのテレポーターです。主に他のSIMへテレポートするのに使われます。

// マップテレポート
default
{
    touch_start(integer total_number)
    {
        llMapDestination("JapanSeychellesLand", <128,128,2>, ZERO_VECTOR);
    }
}

このテレポートの行き先は http://slurl.com/secondlife/JapanSeychellesLand/128/128/2 になります。はい、簡単ですねー^^

9月4日追記: llMapDestinationで出るマップは高度1000mが限界みたいです。

2009年9月13日追記: llMapDestinationの高度1000mの限界はビューワー1.22で修正されてます。


そして、お次は座ると一瞬で移動するタイプのテレポーターです。SIM内でのみ使用できます。それから高さに制限があって、詳しいことは知らないんですが高度300m以下までぐらいにしか座れませんw

// 座るテレポート
default
{
    state_entry()
    {
        llSetSitText("Teleport");  // パイメニューのSit Hereを変更
        llSitTarget(<0,10,20>, ZERO_ROTATION);  // 座る位置
    }

    changed(integer change)
    {
        if (change & CHANGED_LINK) {
            key agent=llAvatarOnSitTarget();
            if (agent) llUnSit(agent);  // アバターが座ったらすぐに立たせる
        }
    }
}

これだとテレポーターからY方向へ10m、Z方向へ20mテレポートします。
はい、座る位置決めて、座ったら立たせてるだけなんですw だから座る位置がテレポート先になるように、テレポーターと目的地の座標の差として計算します。
でも計算がめんどいので簡単にセットアップできるようなスクリプトにしてみましょうねー^^


// 座るテレポート簡単セットアップ♪
vector pos;
vector dest;

default
{
    state_entry()
    {
        dest=llGetPos();  // 現在の座標を目的地用の変数に設定
        llSetSitText("Teleport");
    }

    touch_start(integer total_number)
    {
        if (llDetectedKey(0) == llGetOwner()) {  // オーナーがタッチ開始すると
            llSetTimerEvent(0.5);  // 0.5秒後にタイマーイベント
        }
    }

    touch_end(integer total_number)
    {  // タイマーイベントまでにタッチを離すとタイマーキャンセル
        llSetTimerEvent(0);
    }

    timer()
    {  // タイマーイベント
        llSetTimerEvent(0);  // タイマーストップ
        pos=dest-llGetPos();  // 目的地と現在地の座標差
        llSitTarget(pos, ZERO_ROTATION);  // 座る位置設定
        if (pos != <0,0,0>) llOwnerSay("Setup done.");  // 差があれば設定OKですw
    }

    changed(integer change)
    {
        if (change & CHANGED_LINK) {
            key agent=llAvatarOnSitTarget();
            if (agent) llUnSit(agent);
        }
    }
}

使い方は、目的地にテレポーターを置いてスクリプトをリセットしてですね、次にテレポーターを設置する出発地に置いてタッチ長押しでセットアップ完了です^^
あと、もうひとつ高度300m以上へ行けるタイプのテレポーターは乗ったらオブジェクトごと移動するんですがそれは次回書きますねw

アニメーションベンダー価格改正

新発売のとき特価L$50で販売していましたアニメーションベンダーを先月末ぐらいからL$70に値上げしてたんですが記事に書くのを忘れてましたw

それから、7/7にバージョンアップしまして、ノートやランドマークをベンダーに入れておきますとアニメ購入時に一緒に渡すようにしてます。宜しくお願いします^^



2008年7月11日金曜日

アバターレーダーのスクリプト

今回はタッチで周囲のアバターをキャッチして表示する簡単なレーダーのスクリプトです。HUDに組み込んで使ってくださいねー^^


センサーは50mにしてますが、多分100mぐらいが限度じゃないかなと思います。あと、SIMの境界を越えたらキャッチできません。
それから、HUDとして装着すると自分自身はキャッチしません^^

// アバターレーダー
float range=50;  // センサーの半径

default
{
    touch_start(integer total_number)
    {  // オーナーがタッチするとスキャン実行
        if (llDetectedKey(0) == llGetOwner())
            llSensor("", NULL_KEY, AGENT, range, PI);
    }

    sensor(integer numberDetected)
    {  // センサーに反応があったとき
        vector pos;
        vector v;
        float f;
        string name;
        integer i;
        integer j=numberDetected;  // キャッチしたアバターの数
        llOwnerSay("Detected "+(string)j+" avatar(s) in "+(string)((integer)range)+"m.");
        for (i=0; i < j; i++) {  // アバターの数だけ実行
            pos=llDetectedPos(i);  // アバターの位置
            v=llGetPos()-pos;  // 自分の位置との差
            f=llSqrt(llPow(llSqrt(llPow(v.x,2)+llPow(v.y,2)),2)+llPow(v.z,2));  // 距離
            name=llDetectedName(i);  // アバターの名前
            llOwnerSay(name+" "+(string)pos+" "+(string)f+"m away.");
        }
    }

    no_sensor()
    {  // センサーに反応がなかったとき
        llOwnerSay( "No detected avatar in "+(string)((integer)range)+"m." );
    }
}

10月25日追記: センサーの範囲は最大96mでした。それから、2点間の距離を求めるのにややこしい計算してるんですけど、最近llVecDistっていう関数のあるのに気がつきました^^;

面の番号を調べるスクリプト

オブジェクトの面の番号って調べるのが面倒ですよね。形を中空にすると途中から番号が変わったりするしw
http://wiki.secondlife.com/wiki/Category:LSL_Face/ja

今回は面ごとに色分けしてフェイス番号を知るためのスクリプトです^^


色のリストはベクター値と名前を別々に定義しました。
色の順番はテキトーに10種類くらいあるものを検索して出たのと同じに決めましたが、見にくかったら変更してくださいね。。。抵抗器という電気用の部品のカラーコードらしいです^^
// 面ごとに色分け
integer face;
list color_list=[<0,0,0>,<0.5,0,0>,<1,0,0>,<1,0.5,0>,<1,1,0>,
    <0,1,0>,<0,0,1>,<0.5,0,1>,<0.5,0.5,0.5>,<1,1,1>];
list color_name=["Black","Brown","Red","Orange","Yellow",
    "Green","Blue","Violet","Gray","White"];

color_face()
{  // 面に色を塗る
    integer i;
    face=llGetNumberOfSides();  // 面の数を調べる
    vector color;
    for (i=0; i < face; i++) {  // 面の数ぶん処理
        color=llList2Vector(color_list,i);  // リストから順に色の値を取り出して
        llSetColor(color,i);  // 面に順番に塗る
    }
    llSay(0,(string)face+" faces");  // 面の数を喋る
}

default
{
    state_entry()
    {
        color_face();  // 面に色を塗るへ
    }

    changed(integer change)
    {
        if (change & CHANGED_SHAPE) {  // 形が変わったら
            color_face();  // 面に色を塗るへ
        }
    }

    touch_start(integer total_number)
    {  // タッチで面番号と色の対応を表示
        llSay(0,"Face No. - Color");
        string name;
        integer i;
        for (i=0; i < face; i++) {
            name=llList2String(color_name,i);  // 色の名前をリストから取り出す
            llSay(0,(string)i+" - "+name);
        }
    }
}

2009年4月1日追記: ビューワー1.21からllDetectedTouchFaceという関数が実装されましたので、現在は簡単に調べることができるようになっています^^
// タッチした面の番号を表示
default
{
    touch_start(integer total_number)
    {
        llOwnerSay((string)llDetectedTouchFace(0));
    }
}

2008年7月10日木曜日

走らなかった車

これ最初に作った車なんです^^

ドアの辺りなんかフェラーリ・テスタロッサみたいなダクト?スリット?をドーンとつけてですねw もうバリバリかっこいい車作るんだーって張り切ってたんですよーw

でも走らせられないことが分かってボツになっちゃいました;;
これ作ってたとき、乗り物はアバター含めて32プリム以内にしないとSTATUS_PHYSICSにならないなんて知らなかったんですwww
このとき90プリムほどあったんですが、せっかくだから車をひとつ完成させたいなと思って、プリムをどんどん削減して大幅に作り直して。。。何とか完成したのがChihiro Roadstarになりました。 http://beta.slmame.com/e267044.html ぜんっぜん似てもいないですねーw

でもボツで削除しちゃうのはやっぱりもったいないので時々装着してAFKしてることがあります。装着型の車ですか?って聞かれたこともあるんですが、そんなスクリプト入れてないんで移動するとアバターの足が出て歩いちゃいますwww

ブレンダーをもっと使いこなせるようになったら今度はスカルプを上手く使って車を作ってみたいなー^^


2008年7月9日水曜日

ヤル気のない製品

もう何ヶ月も前から掛け時計を制作中なんですが、ぜーんぜん進んでませんw

現在はフリマ等一部で販売中のFancy wall clockというのがあるんですが、それを実用的にした時計にする予定だったんです。職場や学校なんかに掛けてあるような見やすい時計ね^^;
ところが、そのFancy wall clockが全く売れなかったのでL$10に値下げしたんですが、それでも2個ほどしか売れてませんw 今度の時計も売れないんじゃないか。。。なんて思うと怖いんですよwww
SL時間はビューワーに出るし、日本時間はPCに出るから、針の動くアナログのクロックなんかプリムをムダに消費するだけなのかなーなんて思ったりw あ、Fancy wall clockは7プリムもあります^^;

それで今製作中の時計は当初の予定を変更して、文字盤の背景に好きなテクスチャを貼れたり、ダイアログから簡単にサイズを変えたりできるような時計になってきました。プリム数は5に減らしてます。完成したらFancy wall clockの後継機種になる予定。。。だけど進まないなぁw


2008年7月8日火曜日

スカルプの階段で落ちる件

フリー配布から有料販売に切り替えて、こんなんで売れるのかなって思ってたんですが何となく売れてます^^ ご購入くださいましたお客様、ホントに有難うございますー><

スカルプ1プリム階段トラバ頂いた方の記事でも取り上げられてたんですが、やっぱりスカルプの階段って気をつけて通らないと落ちますw

結局スカルプテッドプリムって球の形をしたプリムをビューワーがスカルプトテクスチャ(UVマップ)のデータを元に違った形に見せかけてるんじゃないかなって思います。
だから写真の階段の左に同じサイズにべったり伸ばして並べた球のプリムみたいに、上下の左右両端辺りは落とし穴になっちゃうんでしょうね^^;

落下を防ぐには、階段の右に並べてるような同サイズで厚みを薄くしたプリムを作って、これを透明にしてですね、階段の中にうまく埋め込んで頂くしか良い方法ってなさそうです。。。あ、最初からこれで2プリムにしとけば良かったのかもwww


2008年7月7日月曜日

オブジェクトのコンテンツを全部渡すスクリプト

今回はオブジェクト内に入れたアイテムをフォルダに入れて全部渡すスクリプトです。
タッチで渡すようにしますが、これをmoneyイベントで渡すように変えると商品を1つ販売できる簡単なベンダーにもなりますね。フォルダを設定してアイテムを渡すにはllGiveInventoryListを使います^^


アイテムのリストアップは何か出し入れしたとかコンテンツ内に変化があったときに実行されるようにしてます。
フォルダ名はこのスクリプトやアイテムを入れる箱のオブジェクト名になるようにしました。タッチでこのスクリプト以外を全て渡します。
// タッチで中身全部渡す
list item;  // アイテムのリスト用に変数を定義

listup()
{  // アイテムのリストアップ
    string str;
    item=[];  // リストをクリア
    integer i;
    integer j=llGetInventoryNumber(INVENTORY_ALL);  // アイテムの数を調べて
    for (i=0; i < j; i++) {
        str=llGetInventoryName(INVENTORY_ALL,i);  // 番号順にアイテム名に変換
        if (str != llGetScriptName()) item+=str;  // このスクリプト以外をリストに加える
    }
}

default
{
    state_entry()
    {  // スクリプトが起動したら
        listup();  // リストアップへ
    }

    changed(integer change)
    {
        if (change & CHANGED_INVENTORY) {  // コンテンツが変化したら
            listup();  // リストアップへ
        }
    }

    touch_start(integer total_number)
    {
        key id=llDetectedKey(0);  // タッチしたアバターのキー
        string folder=llGetObjectName();  // 箱のオブジェクト名をゲット
        llGiveInventoryList(id,folder,item);  // フォルダを作ってアイテム渡す
    }
}


state_entryに
llSetClickAction(CLICK_ACTION_PAY); // クリックで支払い
llSetPayPrice(PAY_HIDE,[10,PAY_HIDE,PAY_HIDE,PAY_HIDE]); // 値段L$10
を入れて支払い額を設定してですねtouch_startイベントのとこを
    money(key id, integer amount)
    {
        string folder=llGetObjectName();
        llGiveInventoryList(id,folder,item);
        llInstantMessage(id,"Thank you for your purchase."); // あざーすw
    }
みたいな感じに変えると支払ったときにアイテム渡すようになります^^

2008年7月6日日曜日

テクスチャストッカー

これテクスチャの保管や整理にいいかなーと思って作ったんですが、SHOP CHIHIROの製品の中では珍しく宣伝しなくても何となく売れてるアイテムですw

でも、rezしないと中のテクスチャを取り出すこともできなかったんで、HUDとしても使えるようにパワーアップしました^^
今回の改良は結構大変だったんですけどTexture stockerのお値段はL$50据え置きですw
ただ装着すると全体のサイズがググッと変わるので環境によってはちょっと重いかも知れません^^;

既に購入者様には、この最新バージョンを送付済みですが、万が一受け取ってない方などは、旧バージョンを送ってくだされば交換いたしますので宜しくお願いします。ご連絡ください。

10月31日20時40分頃追記: 右クリックでコンテンツを開いて、そこにテクスチャを入れると動作します。そして、右のパネルに表示されたテクスチャはクリックで受け取ることができます。


2008年7月5日土曜日

シートがかっこ悪いよなw


どこが一番できが悪いかって考えると、やっぱりシートですよね。球をくり抜いてカットして作ったぺらんぺらんの板ですからね。ボディから外すと車のシートどころか椅子にも見えないんじゃないでしょうかw

なので、シートらしく見えるようにブレンダーで頑張って作ってみました。

シートを変えただけでも全体の印象が結構良い感じになったかなーと思います^^
よぉし、この調子でボディの部品も徐々にスカルプで作ってですね。。。て、思うんだけど根気がないから無理かもwww


2008年7月4日金曜日

スカルプ1プリム階段

モバイルファクトリーのフリマでフリー配布してた階段をL$20にして販売を開始しました。
フリーのと全く同じじゃつまんないかなと思って、自作テクスチャじゃないんですが何枚かタイルみたいなテクスチャを入れて、テクスチャ変更メニューを付けてます^^

現在のところ、JapanSeychellesLandのビーチにお借りしてます期間限定ブースに置いてますが、他の店舗も調整して何ヶ所か置けたらいいなと思ってます。
CSL MALL店にも置いてきました^^

にはブログを見た人しかわからない隠しアイテムもありますよw


このビーチのイベント会場東側にはタイニーカーニバルが今日から開催されてます。
でもタイニーアバター関係を作る人ってまだまだ少ないのかなー?まだ5人くらいしか出店されてなかったみたいです。タイニー作ってる方は是非参加して活気付けてくださいねー^^
タイニーカーニバル7/4~7/31まで開催


2008年7月3日木曜日

アイテムキャンプチェア発売

十字架のアイテムキャンプは思ったより人気なかったので、普通に椅子に座るタイプのアイテムキャンプを発売しました。
チェアの部分をスカルプにしたのでパネルと合わせて2プリムになります^^
キャンプ時間は60分までを5分間隔に区切って十字架よりも選択肢を増やしました。

でもスカルプはまだまだ初心者なのでお値段はL$50にしましたw
SUNSET SHOPPING MALL店SL-Shopping.net-Mall店に置いてます。宜しくお願いします^^


モバイルファクトリーのフリマ最終日です

フリーマーケット今日で最終日ですね。お買い得な商品がたくさん出てますので、まだの方は是非一度見にいらしてくださいねー^^


SHOP CHIHIROはフリービーコーナーに参加させて頂いてます。
ピンクのハートピアス
スカルプ1プリムの階段
ハートのスカルプテッド・オブジェクト(UVマップ付き再販可)
MAP HUD(rezのときはLM giver)
チェーンネックレス(ダイアログでサイズ可変)
クラゲのピアス
フリーのベンダー(旧バージョンのバグ修正済み)
ポーズアニメーションスタンド
以上のフリーアイテムを出品してます。宜しくお願いします^^

期間6月26日〜7月3日
http://slurl.com/secondlife/MobileFactory/125/159/26


2008年7月1日火曜日

時計にバグ 2008-06-31(Tue)

時計にバグが見つかりました。タイムゾーンをGMT+の地域時刻に合わせたときに、月が変わってからGMTで0時になるまで時計にタッチすると
2008-06-31(Tue) 01:21:56
のようにチャットで表示してしまいます^^;;
日本時間だと0時〜9時まで、こんなアホな表示になりますw (特定の月のみ)

このバグはSHOP CHIHIROの時計全機種(デジタル、アナログ、クロック、ウォッチ全て)にあります orz
こちらで把握してるご購入者様には修正版を送付済みですが、イベントの景品で当選された方などは、腕時計をお送りくだされば修正版と交換いたしますので、どうぞ宜しくお願いいたします m(_ _)m