Site search

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

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日追記: 支払い金額が一致しないときの処理を追加しました。

0 件のコメント:

コメントを投稿