2009年9月30日水曜日

Help Island

アバターが生まれたとき最初にスタートするヘルプアイランドっていう場所ありますよね。。。一応検索してみたらオリエンテーションアイランドになってる情報があったので、昔はそう呼ばれてたんでしょうか? 私は最初始めたとき気にしてなかったし、結構すぐテレポートして出ちゃったので覚えてないんですがw

1年ほど前、登録時の初期アバターが新しくなってからですかね、予備のアバターを登録したときにSIM名を見たらHelp Island 210になってたんですよ。この数字が異なるSIMが複数あるみたいで、また次登録したときは違う番号になってたと思います。

このヘルプアイランドはテレポートして出てしまうと、もう戻って来られないんですよねw
メインランドにHelp Island Publicっていう似た場所がありますけど、そことは全く別です。


でも、ある日マップを開いて何となく見てたら、最初のヘルプアイランドらしいSIM郡があったんですよ@@


SIM郡の全体です。SIM名の数字は全て200番台になってて40個くらいあるみたいでした。

場所はTorleyさんのHereからしばらく北に上がったところにあります。やっぱりテレポートはブロックされてて入れないのでマップで見ることしかできないですけどw
http://slurl.com/secondlife/Help%20Island%20201

2009年9月26日土曜日

プライズキャンプとマネーキャンプ、全機種グループ限定機能追加

プライズキャンプ4機種とゾーンキャンプ以外のマネーキャンプ5機種にもグループ限定機能を実装して、機種によりますが他にも何ヶ所か改良しました^^

ついでにプライズキャンプ4機種は、ちょっと値上げしたんですよ^^;
Prize camping chair L$50 → L$70
Prize camping cross L$50 → L$80
Prize camping dance pad L$50 → L$60
Prize camping beach chair L$90 → L$100

プライズキャンピングチェアはプライズキャンピングビーチチェアと同じポーズを入れました。
でもマネーキャンピングチェアのほうは気分的にポーズ入れてません。。。これ発売以来1台も売れてないんですよwww

十字架はプライズキャンプ、マネーキャンプともアバターの身長をチェックして、磔の位置が大体いいくらいの位置に自動調整されるようにしました。これで子供とか小さいアバターもきちんと磔できますw

プライズキャンプは4機種ともバージョンはV1.1.7になります。マネーキャンプ5機種は価格変更なしで、バージョンはチェアがV2.1.1、その他はV1.2.1になります。

旧バージョンの購入者様でアップデートご希望の方は、お手数ですがご連絡くださいね^^

2009年9月25日金曜日

ラッキーオブジェクトのスクリプト

今回は名前の最初の文字が一致したら賞品がもらえるラッキーボックス(ただの箱なのでw)ラッキーオブジェクトのスクリプトです。うちで販売してるLucky letterっていう製品(ラッキーボード)がありますが、それの必要最低限の機能だけのスクリプトって感じですね^^

レターや残り時間は箱の上にフローティングテキストで表示しますが、テクスチャで表示するように改造してボード型にするとLucky boardのようになります。更にタッチを調べる部分をsitに変えて椅子を付けたらLucky chairのような装置になります。更に更に、椅子をトイレに変えたら。。。って、もういいですかねwww

// Lucky object
integer interval=5;  // レターチェンジ間隔(分)
integer time;  // 残り時間用
string letter="-?ABCDEFGHIJKLMNOPQRSTUVWXYZ";  // ラッキーレターに使う文字
string ll;  // ラッキーレター用
string tmp;  // 前回のレター記憶用
string prize;

win(key id, string name)
{  // 当たったときの処理
    llSay(0,name+", you win!!");  // 当たりー♪
    llGiveInventory(id,prize);  // アイテムを渡す
    init();  // initへ
}

init()
{
    llSetText("OFF",<1,1,1>,1.0);
    prize=llGetInventoryName(INVENTORY_OBJECT,0);  // コンテンツ内の1つ目のオブジェクト名
    ll="";  // レターをクリア
    time=0;  // 残り時間を0に設定
    if (prize) llSetTimerEvent(0.1);  // 賞品が入ってたら0.1秒後にタイマー
    else llSetTimerEvent(0);  // 入ってなかったらタイマー停止
}

default
{
    state_entry()
    {
        init();  // initへ
    }

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

    touch_start(integer total_number)
    {
        if (ll == "") return;  // レターが設定されてないときはリターン
        key id=llDetectedKey(0);  // タッチしたアバターのキー
        if (id == "" || id == NULL_KEY) return;  // キーが取得できなかったらリターン
        string name=llDetectedName(0);  // タッチしたアバターの名前
        if (ll == "?") win(id,name);  // ラッキーレターが?だったら当たり
        else {
            string s=llGetSubString(name,0,0);  // アバター名の最初の1文字
            integer num=FALSE;
            if (s == "0" || (integer)s > 0) num=TRUE;  // 文字が数字かをチェック
            if (ll == llToUpper(s)) win(id,name);  // 文字を大文字に変換してラッキーレターと一致したら当たり
            else if (ll == "0-9" && num) win(id,name);  // 文字が数字でラッキーレターが0-9だったら当たり
            else llSay(0,"Sorry, your name begins with "+s+".");  // それ以外はハズレ;;
        }
    }

    timer()
    {
        llSetTimerEvent(60);  // タイマーを60秒にセット
        if (time < 1) {  // 残り時間が1以下になったらレター変更
            time=interval;  // 残り時間を再設定
            if (ll == "") ll=tmp;
            while (tmp == ll) {  // 前回出たレターと被らないように
                integer i=llFloor(llFrand(llStringLength(letter)));  // 乱数
                ll=llGetSubString(letter,i,i);  // 乱数からラッキーレターを決定
                if (ll == "-") ll="0-9";  // レターが-だったら 0-9にする
            }
            tmp=ll;  // 今回出たラッキーレターを記憶
            llSay(0,"The lucky letter is "+ll+".");  // チャット表示
        }
        // フローティング表示
        llSetText("If your name begins with "+ll+",\ntouch to get a prize!\n"+(string)time+" minute(s) left.",<1,1,1>,1.0);
        time--;  // 残り時間を減算
    }
}

賞品のオブジェクト(オブジェクト以外は箱詰めして)をコンテンツに入れて、レターチェンジの数値を変えて使ってくださいね^^

10月10日追記: あ、箱型プリムのまま使うとは限らないですよね。。。てことで、タイトルもラッキーオブジェクトに変えましたw

10月14日追記: 一応タッチしたアバターのキーが取得できないときリターンさせるようにしました。

YouTube TV screen V1.0.9

変換に利用してるサーバーが重いときは見れないっていう問題があるんですが、一応注意書きのノートを添付して販売を再開しました。いつもTVを使用される時間帯が重くて使えないって方は、うちでレンタルしてるサーバーに置いたスクリプトをwww.youtubemp4.comの代わりに設定することもできます。

それから、本バージョンでは権限のない土地でrezしたときグレー画面になってしまう不具合を直しときました^^;

宜しくお願いします^^

2010年5月21日追記: 2010年3月のユーチューブの仕様変更で、この装置はユーチューブが再生できなくなりました m(_ _)m

2009年9月24日木曜日

ランダムチャットマネー他3機種、グループ限定機能実装

ランダムチャットマネー、ランダムマネーギバー、ゾーンキャンプの3機種もグループ限定機能を追加しました^^

それぞれバージョンは
Random chat money V1.0.7
Random money giver V1.0.2
Zone camp V1.0.1
になります。

あと、ランダムチャットマネー、ランダムマネーギバーは、ゾーンキャンプと同様にフローティングテキストの色が11色から選べるようにしました。。。それから、ゾーンキャンプはメッセージに英単語の綴り間違えてるところがあったのでついでに直したんですよ^^;

アップデートご希望の購入者様は無料で対応いたしますのでご連絡くださいね^^

2009年9月23日水曜日

Lucky letter V1.5.3 - グループ限定実装

キャンプ、ラッキーチェア/ボードなどの規制があるので、何か集客用品の改良に気が進まなくなってきたんですが、とりあえずラッキーレターに今回のバージョンアップでグループメンバー限定機能を付けました。

あと、一応ダブルクリックでもメニュー出せるように変更したのと、レター部分の色を変えても不具合の無いように直しました。。。文字色を変えてる方とか見たことあるんですが、スクリプトで色を打ち決めしてる部分があったので「0~9」が出たとき数字が黒になったんじゃないかなって思います。

通常版またはグループ限定改造版をお持ちのお客様は、Mansion Mall店などに設置してるアップデートサービスをご利用くださいね^^

9月26日追記: Group onの状態でRezしたとき、装置にグループがセットされてなかったら、一応Group offの状態になるように修正しました。バージョンはV1.5.3aになります。

2009年9月22日火曜日

複数登録できる1プリムテレポート看板

去年、1プリムで4ヶ所登録できるテレポート看板のスクリプトを作ったんですが、今回はそれをちょっと改良して、縦横好きな個数で分割設定できるようにしたテレポート看板のスクリプトです。

写真は横3分割、縦2分割にして、ショップの支店5ヶ所登録で使用してます^^

テクスチャは登録するテレポート先を1枚にまとめたものを作って使用します。縦横等間隔に分割したマス目に、各テレポート先の写真を左上から右に向かって順に配置していく感じで作成してくださいね。

// Multi TP-board

integer col=3;  // 横の分割数
integer row=2;  // 縦の分割数

list tp=[ // "テレポート先","SIM名",位置,
"Mansion Mall","Graybar",<228,179,30>,
"Market Beach Mall East","Triasm",<242,137,21>,
"SUNSET SHOPPING MALL","JapanSeychellesLand",<72,70,23>,
"SL-Shopping.net-Mall-Jiminy","Jiminy",<115,23,106>,
"+*+*BELLE ROSE*+*+","Artsebarsky",<236,184,22>,
NULL_KEY];  // データの最後のカンマ用
integer len;

string slurl(integer i)
{  // SLURL生成
    vector v=llList2Vector(tp,i+2);
    string str=llList2String(tp,i);
    // SIM名をブランクにしてるものは閉店表示
    if (llList2String(tp,i+1) == "") return str+"... closed\n";
    str+=" http://slurl.com/secondlife/";
    str+=llEscapeURL(llList2String(tp,i+1));
    str+="/"+(string)((integer)v.x);
    str+="/"+(string)((integer)v.y);
    str+="/"+(string)((integer)v.z)+" \n";
    return str;
}

map(integer num)
{  // マップ表示用
    integer i=num*3;
    if (i >= len) {  // テレポートの登録数が少ないとき
        llWhisper(0,"This area is a blank.");
        return;  // リターン
    }
    string sim=llList2String(tp,i+1);
    vector pos=llList2Vector(tp,i+2);
    if (sim) llMapDestination(sim,pos,ZERO_VECTOR);  // マップ表示
    llWhisper(0,slurl(i));  // SLURL表示
}

default
{
    state_entry()
    {
        len=llGetListLength(tp)-1;  // ヌルキーを除いたリストの長さ
    }

    touch_start(integer total_number)
    {
        integer i=llDetectedTouchFace(0);  // タッチした面の番号を取得
        if (i != -1) { // SLビューワーが対応のとき
            vector v=llDetectedTouchST(0);  // タッチした表面の座標
            i=llFloor(v.x*col)+(row-llCeil(v.y*row))*col;  // 座標を番号に変換
            map(i);  // mapへ
        }
        else { // SLビューワーが非対応だったらSLURLを全部表示
            string str="Open the chat histry and click the SLURL.\n";
            for (i=0; i < len; i+=3) str+=slurl(i);
            llWhisper(0,str);  // チャットでSLURL表示
        }
    }
}


結構移転とか閉店とかもありそうなので、SIM名を記入する部分のデータを空""にすると ○○モール ... closed って表示するようにしてみました。テクスチャを直すまでの応急処置的な表示って感じでw

2010年4月2日追記: ビューワー2.0.0からチャット履歴のスペースの入ったSIM名のリンクがおかしくなるのでURLエンコード追加しました。内蔵ブラウザがGeckoからWebkitに替わった影響かも知れません。。。て、元々省略してたのがいけなかったんですが orz