分配機能付きベンダー(リンデンスクリプト Tips)

Zero2000 Kidd

2008年05月24日 00:46


 ベンダーの売上を分配する方法としては、オブジェクトを譲渡する方法とスクリプトを利用する2種類の
方法があります。オブジェクトを譲渡する方法は、以下の手順で行います。
(1)ベンダー右クリック->「一般」を開きます。
(2)「グループ分担」にチェックを入れます。
(3)「譲渡」ボタンをクリックします。

この設定によりこのベンダーの売上は、ベンダーのグループに属するアバターに平等に分配されます。
この方法では、分配比率をアバター毎に設定することはできません。
 アバターによって分配比率に差をつけたい場合はスクリプトを利用することになります。今回ご紹介
するスクリプトを利用すれば自由に分配比率を設定することが可能です。スクリプトは、前回ご紹介し
たメール送信機能付きベンダーを改造したものをご紹介します。


        
「スクリプト内容」

「ベンダー本体スクリプト」
//
//    SHOP ZERO Tips28 DistributeVendor v1.0
//
//                   Created by Zero2000 Kid     2008/05/23
// 

integer price=100;
string packname="**SHOP ZERO**";
string emailaddress="xxxxx@hotmail.co.jp";
string subject="Now on Sale !!";
list distribute_rate=["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",0.2,
                         "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",0.2];

integer ItemType=INVENTORY_ALL;
list Itemlist;

getItemlist() {
    Itemlist=[];
    integer i;
    integer Itemct = llGetInventoryNumber(ItemType);
    for (i = 0; i < Itemct; i++) {
        string ItemName=llGetInventoryName(ItemType,i);
        if (ItemName!=llGetScriptName()) { 
            Itemlist+=ItemName;
        }
    }
}

default
{
    state_entry()
    {
        getItemlist();
        // llRequestPermissions
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
        llSetPayPrice(PAY_HIDE, [price, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
    }

    on_rez(integer int) {
        llResetScript(); 
    }
    
    
    changed(integer change){
        if (change & CHANGED_INVENTORY){
            getItemlist();
        }
    }
    
    money(key id, integer amount)
    {
        llGiveInventoryList(id,packname,Itemlist);
        string message="Buyer : " + llKey2Name(id);
        // Distribute money
        integer dcount=llGetListLength(distribute_rate)/2;
        integer i;
        for (i = 0; i < dcount; i++) {
            key avkey=llList2Key(distribute_rate,2*i);
            float ratio=llList2Float(distribute_rate,2*i+1);
            integer distribute_amount=(integer)(amount*ratio);
            llGiveMoney(avkey,distribute_amount);
        }
        // send email
        llEmail(emailaddress, subject, message);
    }
    
    
}

「UUID取得スクリプト」
default
{
    touch_start(integer total_number)
    {
        llWhisper(0,(string)llDetectedKey(0));
    }
}

「使用方法」
1.  分配したいアバターのUUIDを調べます。
 (1)適当なオブジェクトを作成します。(球でもボックスでも何でも構いません。)
 (2)オブジェクトに"UUID取得スクリプト"をドラッグします。
 (3)オブジェクトをタッチします。
 (4)チャット画面上に以下のフォーマットの文字列が出力されます。
   xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      これがアバターのUUIDになります。UUIDとは、すべてのアバターが持つ固有の
   識別番号で、リンデンドルを分配するとき必要となる情報です。
 (5)UUIDは、次のベンダー作成時に必要となりますので、分配を行うアバター全員の
   情報メモしておきます。

2. ベンダーの作成
 (1)ベンダーとなるオブジェクトを1つ作成します。(球でもボックスでも何でも構いません。)
 (2)オブジェクトに"ベンダー本体スクリプト"をドラッグします。
 (3)ドラッグしたスクリプトを開きます。
 (4)1行目のpriceに価格、2行目のemailaddressに電子メールアドレス、3行目のpacknameに
   商品のフォルダ名、4行目のsubjectに電子メールの件名を設定します。
 (5)分配比率を設定します。5行目の以下の部分を修正します。

      list distribute_rate=["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",0.2,
                                      "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",0.2];

        xxxx・・・の部分に1で調べたアバターのUUIDを書き込み、カンマ(,)の次に分配
   比率を設定します。

   (例)以下の例では、アバター1が10%,アバター2が20%,アバター3が30%、残りを
      ベンダーオブジェクトのオーナーが受け取ります。
   list distribute_rate=["アバター1のUUID",0.1,
                                    "アバター2のUUID",0.2,
                                    "アバター3のUUID",0.3]

   * 注意:比率は、合計が1を超えないようにしましょう。1を超えてしまうとオブジェクト
            のオーナーが販売売り上げ以上のリンデンドルを支払ってしまうことになります(^^;
 (6)スクリプトを保存します。
 (7)以下の画像のようなリンデンドル支払いの許可を求める黄色いダイアログが出てくるの
   で"許可"をクリックします。
      
 (8)オブジェクトに商品をドラッグします。(商品の種類、数に制限はありません)
 
以上で完了です。
オブジェクトを右クリックして、パイメニューから"支払い"をクリックすると商品を購入可能です。
右クリックだけで購入させたい場合は、オブジェクトを右クリック->編集->一般->左をクリックすると
を"オブジェクトの支払"に設定しましょう~♪

「スクリプトの説明」
 リンデンドル分配の流れとしては、

  (1)お客さんがベンダーから商品を購入
  (2)ベンダーのオーナーに入金
  (3)分配比率に応じて、UUIDを登録したアバターに対してオーナーからリンデンドルの支払い
 
となります。リンデンドルの支払いには、llGiveMoneyという関数を利用しています。
llGiveMoneyを利用するには、PERMISSION_DEBITパーミションの許可が必要に
なります。スクリプト保存時に黄色いダイアログが出現したのは、このパーミションの許可を要求
するためです。あのダイアログは、ベンダーオブジェクトのオーナーの所持するリンデンドルを他の
アバターに支払っても良いですか?という意味があります。金銭の授受という重要な処理の可否
になりますので、他のパーミション要求とは違い黄色い大きなダイアログで警告度を上げています。
見ず知らずのアバターからもらったオブジェクトで、あのようなダイアログが出現した場合は、絶対
に許可しないように注意しましょうw自分のリンデンドルを簡単に盗まれてしまいます。
 他のスクリプトの説明に関しては、メール送信機能付きベンダーを参考にして下さい。


リンデンスクリプト Tips Indexへ




_uacct = "UA-3027217-1";
urchinTracker();






                
        
リンデンスクリプトTips