Site search

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

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
    }
みたいな感じに変えると支払ったときにアイテム渡すようになります^^

2 件のコメント:

  1. コピー不可はだめなんですよね^^;
    当たり前のことなんですけど・・・

    返信削除
  2. ご覧頂きありがとうございます。
    はい、現所有者はコピー権限と、あと他の方に渡すためには譲渡権限も必要になります。完全に自作したアイテムは全権限がありますので、特に気にしなくていいんですが、他人が作ったものを配布などするときは注意が必要ですね。
    それで、次の所有者の権限についてはコピー不可、譲渡不可など自由に設定して頂けたらいいと思います。

    返信削除