2009年12月8日火曜日

譲渡権限をチェックするスクリプト

llGiveInventoryでアイテムを渡したとき、アバターがそのアイテムを受け取るまでに配布に使った装置を削除しても、きちんと受け取れるってことに最近気付いてびっくりした千尋です。。。今まで削除してしまうと受け取れないものだと思い込んでましたので^^;

今回は権限(パーミッション)をチェックするスクリプトのサンプルです。権限のチェックはllGetInventoryPermMaskを使います。

サンプルでは、オーナーがアイテムの譲渡権限(トランスファー)を持ってるかを簡単にチェックしてます。。。まあ自作のアイテムしか扱う機会がない人は無用かなって思いますけどw
比べやすいようにオブジェクトのコンテンツを全部渡すスクリプトをベースにしてみました。今回注釈とかあまり入れてませんので、そちらのスクリプトも参考にしてくださいね^^

// 譲渡権限チェックのサンプル
// タッチでコンテンツ内のアイテムを全部渡す
list item;

listup()
{ // アイテムのリストアップ
    item=[];
    integer i;
    integer j=llGetInventoryNumber(INVENTORY_ALL);
    string str;
    for (i=0; i < j; i++) {
        str=llGetInventoryName(INVENTORY_ALL,i);
        if (str != llGetScriptName()) {  // このスクリプト以外
            if (!(llGetInventoryPermMask(str,MASK_OWNER) & PERM_TRANSFER)) {  // オーナーが譲渡できないアイテム
                llOwnerSay(str+" の譲渡権限がありません><");
            }
            else {  // それ以外はリストアップ
                item+=[str];
            }
        }
    }
}

default
{
    state_entry()
    {
        listup();
    }

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

    touch_start(integer total_number)
    {  // タッチイベント
        key id=llDetectedKey(0);
        if (item) {
            string folder=llGetObjectName();
            if (id) llGiveInventoryList(id,folder,item);  // フォルダで渡す
        }
        else {  // 渡すアイテムが無いとき
            llWhisper(0,"準備中です^^;");  // 準備中ってことでごまかすw
        }
    }
}

0 件のコメント:

コメントを投稿