Difference between revisions of "LlGiveInventoryList/ja"

From Second Life Wiki
Jump to navigation Jump to search
m (カテゴリ変更)
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{LSL_Function/inventory/ja|inventory|uuid=false|insert=アイテムリスト}}{{LSL_Function/ja
{{Issues/SVC-868}}{{LSL_Function/give/ja|target|inventory|sim=*|uuid=false|insert=アイテムリスト}}{{LSL_Function/ja
|func_id=231|func_sleep=3.0|func_energy=10.0
|func_id=231|func_sleep=3.0|func_energy=10.0
|func=llGiveInventoryList
|func=llGiveInventoryList
|p1_type=key|p1_name=avatar
|p1_type=key|p1_name=target|p1_desc
|p2_type=string|p2_name=folder
|p2_type=string|p2_name=folder|p2_desc=使用するフォルダ名
|p3_type=list|p3_name=inventory
|p3_type=list|p3_name=inventory
|func_footnote
|func_footnote
|return_text
|return_text
|func_desc='''avator'''の'''folder'''内に'''inventory'''アイテムを渡します。
|func_desc='''avator''' の '''folder''' 内に '''inventory''' アイテムを渡します。
|spec
|spec=
|caveats=*'''avator'''がプリムの[[UUID/ja|UUID]]の時、フォルダは作られません。
===target のタイプ===
**プリムは同じリージョンになければなりません。
'''target''' のタイプによって、この関数は異なる動作をします。
|examples=<lsl>// When a user clicks this object, this script will give a folder containing everything in the objects inventory
* アバター
// This can serve as a unpacker script for boxed objects
** オブジェクトを送信する時点で、同じ地域にいるか、つい最近までいた必要があります。 [[#SVC-868|SVC-868]]
 
** アバターの持ち物の中にフォルダが新規作成され、インベントリアイテムがそこに置かれます (同じ名前のフォルダがあっても、新しいものが作成されます) 。
default {
* プリム / オブジェクト
 
** プリムは同じ地域に''必ず'' なければなりません。
    touch_start(integer total_number) {
** フォルダは作成され''ません'' 。
|caveats=
|examples=<source lang="lsl2">// ユーザがオブジェクトをクリックすると、スクリプトはオブジェクトのインベントリの中にある全てをフォルダで送信します
// 複数のフリービーを一度に送るのに使用することもできます


default
{
    touch_start(integer total_number)
    {
         list        inventory;
         list        inventory;
        string      name;
         integer    num = llGetInventoryNumber(INVENTORY_ALL);
         integer    num = llGetInventoryNumber(INVENTORY_ALL);
         integer    i;
        string      script = llGetScriptName();
       
         integer    i = 0;
         for (i = 0; i < num; ++i) {
             name = llGetInventoryName(INVENTORY_ALL, i);
         for (; i < num; ++i) {
             if(llGetInventoryPermMask(name, MASK_NEXT) & PERM_COPY)
             string name = llGetInventoryName(INVENTORY_ALL, i);
                 inventory += name;
             //販売スクリプトをあげないように
            else
            if(name != script)
                 llSay(0, "Don't have permissions to give you \""+name+"\".");
            {
                if(llGetInventoryPermMask(name, MASK_OWNER) & PERM_COPY)
                 {
                    inventory += name;
                }
                else
                 {
                    llSay(0, "Don't have permissions to give you \""+name+"\".");
                }
            }
         }
         }
       
       
         if (llGetListLength(inventory) < 1)
        //we don't want to give them this script
        {
        i = llListFindList(inventory, [llGetScriptName()]);
        inventory = llDeleteSubList(inventory, i, i);
       
         if (llGetListLength(inventory) < 1) {
             llSay(0, "No items to offer.");  
             llSay(0, "No items to offer.");  
         } else {
         }
             // give folder to agent, use name of object as name of folder we are giving
        else
        {
             // エージェントにフォルダをあげます。オブジェクトの名前をあげるフォルダの名前に使います
             llGiveInventoryList(llDetectedKey(0), llGetObjectName(), inventory);
             llGiveInventoryList(llDetectedKey(0), llGetObjectName(), inventory);
         }
         }
     
     }
     }
 
}</source>
}</lsl>
このスクリプトは llGiveInventoryList や llGiveInventory を一緒に使って箱からコピー不可のアイテムを解凍して取り出すやり方を説明したものです。コピー可能なアイテムはフォルダに入ります。コピー不可のアイテムは別々に送信されます。
<source lang="lsl2">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);
          }
    }
}
</source>
|helpers
|helpers
|also_functions=*{{LSLG/ja|llGiveInventory}}
|also_functions=*{{LSLG/ja|llGiveInventory}}
Line 51: Line 90:
|also_tests
|also_tests
|also_articles
|also_articles
|notes
|notes|cat1=Inventory
|cat1=Inventory/ja
|cat2
|cat2
|cat3
|cat3
|cat4
|cat4
}}
}}

Latest revision as of 05:54, 25 February 2016

要約

関数: 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の関連した項目が参考になるかもしれません。