LlGiveInventoryList/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: llGiveInventoryList( key target, string folder, list inventory );

avatorfolder 内に inventory アイテムを渡します。

• key target 同じ 地域 にある アバター または プリムUUID
• string folder 使用するフォルダ名
• list inventory プリムの インベントリ の中にあるアイテムリスト

仕様

target のタイプ

target のタイプによって、この関数は異なる動作をします。

  • アバター
    • オブジェクトを送信する時点で、同じ地域にいるか、つい最近までいた必要があります。 SVC-868
    • アバターの持ち物の中にフォルダが新規作成され、インベントリアイテムがそこに置かれます (同じ名前のフォルダがあっても、新しいものが作成されます) 。
  • プリム / オブジェクト
    • プリムは同じ地域に必ず なければなりません。
    • フォルダは作成されません

警告

  • この関数は 3.0 秒間、スクリプトを停止します。
  • target が オーナーでなく、オーナーと共有もしておらず, かつ inventory が謙譲不可能の場合、 DEBUG_CHANNEL でエラーが叫ばれます。
  • inventory がコピー可能でない場合、 エラーがDEBUG_CHANNEL 上で叫ばれます。
  • target がプリムで同じ地域でない場合、 DEBUG_CHANNEL でエラーが叫ばれます。
  • スクリプトが持ち物間でコピーまたは移動された場合、これらの State は引き継がれません。メモリやイベントキューや実行位置は全て破棄されます。
  • inventory がプリムの中で見つからない場合、エラーが DEBUG_CHANNEL 上で叫ばれます。

サンプル

// ユーザがオブジェクトをクリックすると、スクリプトはオブジェクトのインベントリの中にある全てをフォルダで送信します
// 複数のフリービーを一度に送るのに使用することもできます

default
{
    touch_start(integer total_number)
    {
        list        inventory;
        integer     num = llGetInventoryNumber(INVENTORY_ALL);
        string      script = llGetScriptName();
        integer     i = 0;
 
        for (; i < num; ++i) {
            string name = llGetInventoryName(INVENTORY_ALL, i);
            //販売スクリプトをあげないように
            if(name != script)
            {
                if(llGetInventoryPermMask(name, MASK_OWNER) & PERM_COPY)
                {
                    inventory += name;
                }
                else
                {
                    llSay(0, "Don't have permissions to give you \""+name+"\".");
                }
            }
        }
 
        if (llGetListLength(inventory) < 1)
        {
            llSay(0, "No items to offer."); 
        }
        else
        {
            // エージェントにフォルダをあげます。オブジェクトの名前をあげるフォルダの名前に使います
            llGiveInventoryList(llDetectedKey(0), llGetObjectName(), inventory);
        }
    }
}

このスクリプトは llGiveInventoryList や llGiveInventory を一緒に使って箱からコピー不可のアイテムを解凍して取り出すやり方を説明したものです。コピー可能なアイテムはフォルダに入ります。コピー不可のアイテムは別々に送信されます。

default
{
     touch_start(integer total_number)
     {
          if(llDetectedKey(0) == llGetOwner())
          {
               string InvenName;
               list InvenList = [];
               integer y;
               for(y = 0; y < llGetInventoryNumber(INVENTORY_ALL); y++)
               {
                    InvenName = llGetInventoryName(INVENTORY_ALL, y);
                    if(!(llGetInventoryPermMask(InvenName, MASK_OWNER) & PERM_COPY))
                    {
                         llGiveInventory(llGetOwner(),InvenName);
                         y--;
                    }
                    else
                    {
                         InvenList += [InvenName];
                    }
               }
               llGiveInventoryList(llGetOwner(), llGetObjectName(), InvenList);
          }
     }
}

関連項目

イベント

関数

特記事項

All Issues

~ Search JIRA for related Issues
   llGiveInventoryList should be able to work gridwide

Signature

function void llGiveInventoryList( key target, string folder, list inventory );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。