2017年12月12日火曜日

チップジャーに入れると分配できるスクリプト

えっと、今回は久しぶりに簡単なスクリプトです。まあ記事書くのも、すごく久しぶりでマジ放置状態になってたりするんですが。。。^^;

このスクリプトをチップジャーのコンテンツ内に入れると、チップが支払われる度に分配できます。基本的に支払いを行うオブジェクトなら何でも動作しますが、異なる金額で複数の商品を販売するベンダーなど返金機能がある装置には向いてません。

// チップジャー用分配スクリプト

key avatar="00000000-0000-0000-0000-000000000000";  // 分配を受けるアバターのキー
integer  percent=10; // 分配率(%)
integer debit=FALSE;  // 権限確認用変数

default
{
    state_entry()
    {
        // プリムにスクリプトを入れたときL$引き落とし権限をリクエスト
        llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
    }

    touch_start(integer total_number)
    {
        key id=llDetectedKey(0);  // タッチしたアバターのキー
        if (id == llGetOwner()) {  // オーナーだったら
            // 変数debitが偽(権限が未許可)のときは権限をリクエスト
            if (!debit) llRequestPermissions(id,PERMISSION_DEBIT);
        }
    }

    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_DEBIT) {  // 権限が許可されたら
            debit=TRUE;  // debitに真をセット
        }
    }

    money(key id, integer amount)
    {  // チップの支払いが発生したとき
        // 分配額を計算
        integer commission=llFloor((float)amount*(float)percent/100);
        // 分配額が1~チップ額以内の範囲なら
        if (commission >= 1 && commission <= amount) {
            llTransferLindenDollars(avatar,commission);  // 分配金を送金
        }
    }
}

分配を受け取るアバターのキーと分配率を記入して、スクリプトをチップジャーに入れたら、L$口座からお金を引き落としできる権限を要求するダイアログが出るので許可してください。拒否してしまったときは、タッチすると再びダイアログを出します。最初のダイアログで間違いなく許可するつもりだったら、タッチイベントの部分(touch_start以下8行分)は必要ないので省略してしまっても構いません。

送金する関数は今回llTransferLindenDollarsを使ってますが、戻り値は使用してないので、従来のllGiveMoneyを使ってもオッケーです。

ちなみにベータテストグリッド(プレビューグリッド、Aditi)で送金テストする場合、L$取引履歴はこのアドレスで見れます。