LlGetInventoryKey/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: key llGetInventoryKey( string name );

name インベントリの UUIDを key で返します。

• string name プリムの インベントリ の中にあるアイテム

itemコピー, 編集, 謙譲 可能でない場合は NULL_KEY が返ります。
この関数の代わりに llGetInventoryType を使って、インベントリに存在するか確認してください。

警告

  • name がプリムの中で見つからない場合、エラーが DEBUG_CHANNEL 上で叫ばれます。
  • インベントリアイテムは通常はアセットを 指し示す レコードですが、実際のアセットではありません。
    • 複数のインベントリアイテムが同じアセットを指すこともあり、その場合は同じキーを返します。
    • 新規作成されたインベントリ項目の中には、編集されて保存されるまでデフォルトのキーをもつこともあります。
      • 新規作成されたノートカード項目は、編集されて保存されるまで暫定的に NULL_KEY を使用します。
      • 新規作成されたスクリプト項目は、編集されて保存されるまで、"Hello Avatar" スクリプト (これを書いた当時では "d0d40b7c-e32b-3bcb-3346-2be8470093c0", これがデフォルトとして保証されているわけではありません) を指します。
      • 他のインベントリ項目は作成段階で一意のアセットキーを与えられますが、これはクライアントの作りに依存するもので、保証されるものではありません。
    • アセットが「編集」されると、新しいアセットキーが編集したものに割り当てられます。アセットを編集のために開くのに使用したインベントリアイテムは新しいアセットキーに更新されます。
      • 元々のアセットを一緒に指していた他のインベントリアイテムで、新しいアセットキーに更新されるものはありません。

サンプル

string item = "Default";

default
{
    state_entry()
    {
        llOwnerSay("Touch to get information about \"" + item + "\".");
    }

    touch_start(integer total_number)
    {
        integer type = llGetInventoryType(item);
        integer index = llListFindList([ INVENTORY_NONE, 
            INVENTORY_TEXTURE, INVENTORY_SOUND, INVENTORY_LANDMARK, INVENTORY_CLOTHING, 
            INVENTORY_OBJECT, INVENTORY_NOTECARD, INVENTORY_SCRIPT, INVENTORY_BODYPART, 
            INVENTORY_ANIMATION, INVENTORY_GESTURE], [type]);
        string name = llList2String(["does not exist", 
            "texture", "sound", "landmark", "clothing",
            "object", "notecard", "script", "body part",
            "animation", "gesture"], index);

        llOwnerSay("Type: " + name);
        
        if(type == INVENTORY_NONE)
            return;
        
        integer owner_perms = llGetInventoryPermMask(item, MASK_OWNER);
        list perms;
        if(owner_perms & PERM_COPY)
            perms += "Copy";
        
        if(owner_perms & PERM_MODIFY)
            perms += "Modify";
        
        if(owner_perms & PERM_TRANSFER)
            perms += "Transfer";

        if(owner_perms & PERM_MOVE)
            perms += "Move";
        
        llOwnerSay("Perms: " + llList2CSV(perms));
        
        integer temp = PERM_COPY | PERM_MODIFY | PERM_TRANSFER;
        if((owner_perms & temp) != temp)
            return;

        llOwnerSay("Key: " + (string)llGetInventoryKey(item));
    }
}

注意点

返却された UUID はインベントリアイテムを指すアセットのもので、インベントリアイテムそのものの UUID ではありません。アセット自体は不変です (絶対に変更されることがなく、作成と削除だけができます) 。この仕組みで複数のインベントリが同じアセットを複写することなく処理することができます。アセットが編集されたように見えるときは、それは新しいアセットとして保存されています。この結果、インベントリの中の複数のアイテムのコピーが同じアセット UUID を共有することになります。

関連項目

関数

•  llGetInventoryName インベントリアイテムの名前を返します
•  llGetInventoryType インベントリアイテムが存在するか検査し、あればそのタイプを返します
•  llGetInventoryNumber インベントリの中の特定のタイプのアイテムの数を返します
•  llGetInventoryPermMask インベントリアイテムの権限を返します
•  llGetInventoryCreator インベントリアイテムのクリエーターを返します

特記事項

経緯

  • 0.2 - 非公開のベータテストの間に導入
  • 1.2 - フルパーミッションのインベントリアイテムだけに制限
  • 1.24 - オブジェクトとスクリプトは実際の UUID を返さず、代わりにハッシュを返すようになる (例: オブジェクト・スクリプトと一致する見せかけの UUID) -- SVC-3670

先頭のバージョン番号は推測です。

All Issues

~ Search JIRA for related Issues
   llGetInventoryKey() returns NULL_KEY when it shouldn't
   llGetInventoryKey() returns NULL_KEY when referencing a notecard that is empty

Signature

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