LlGetInventoryKey/ja
From Second Life Wiki
Second Life Wiki > LlGetInventoryKey/ja
要約
関数: 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", これがデフォルトとして保証されているわけではありません) を指します。
- 他のインベントリ項目は作成段階で一意のアセットキーを与えられますが、これはクライアントの作りに依存するもので、保証されるものではありません。
- アセットが「編集」されると、新しいアセットキーが編集したものに割り当てられます。アセットを編集のために開くのに使用したインベントリアイテムは新しいアセットキーに更新されます。
- 元々のアセットを一緒に指していた他のインベントリアイテムで、新しいアセットキーに更新されるものはありません。
重要事項
~ JIRA で関連バグを検索| | | SVC-4050 | [A, C] | llGetInventoryKey() returns NULL_KEY when referencing a notecard that is empty |
サンプル
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[c]
先頭のバージョン番号は推測です。
記事
~ JIRA で関連記事を検索| | | SVC-3670 | [A, C] | llGetInventoryKey() returns NULL_KEY when it shouldn't | |
| | | SVC-4050 | [A, C] | llGetInventoryKey() returns NULL_KEY when referencing a notecard that is empty |
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。

