LlGetLinkKey/ja
From Second Life Wiki
Second Life Wiki > LlGetLinkKey/ja
警告
- link_number に LINK_* フラグが使えるのは、LINK_ROOT のみです。
- LINK_THIS は動作しません。 ~ SVC-600
- この関数は (単一の) キーを返すものでキーのリストを返すものではないことから、複数のプリム向けの LINK_* フラグ (LINK_SET 、LINK_ALL_OTHERS 、LINK_ALL_CHILDREN) はこの関数では使用できません。
サンプル
このスクリプトを、リンクされた・リンクされていないプリム、アバターが座っている・座っていないプリム、に入れ、llGetLinkKey が llGetKey 、llGetLinkNumber 、llGetNumberOfPrims 、LINK_ROOT などとどのように関連しているかを確認してください。
// リンク番号の名前を返します、なければ空文字列を返します。 string getLinkNumName(integer link) { if (LINK_THIS == link) return "LINK_THIS"; if (LINK_ALL_CHILDREN == link) return "LINK_ALL_CHILDREN"; if (LINK_ALL_OTHERS == link) return "LINK_ALL_OTHERS"; if (LINK_SET == link) return "LINK_SET"; if (LINK_ROOT == link) return "LINK_ROOT"; return ""; } // リンクされているプリムのそれぞれのキーを発言します。 default { state_entry() { integer theLink = llGetLinkNumber(); key theLinkKey = llGetKey(); key owner = llGetOwner(); key creator = llGetCreator(); // それぞれのリンク番号にアクセスします。 integer link; integer primmed = llGetNumberOfPrims(); for (link = -5; link <= (primmed + 5); ++link) { key linkKey = llGetLinkKey(link); // リンク番号のキーを詳細化します。 string line = (string) linkKey; // large constant width if (linkKey == owner) line += " llGetOwner"; if (linkKey == creator) line += " llGetCreator"; if (linkKey == theLinkKey) line += " llGetKey"; // リンク番号を詳細化します。 line += " @ " + (string) link; line += " " + getLinkNumName(link); if (link == theLink) line += " llGetLinkNumber"; if (link == primmed) line += " llGetNumberOfPrims"; // 興味があれば詳細を発言します。 if (linkKey != NULL_KEY) { llOwnerSay(line); } } // リンクされているプリムを常に数えます。 llOwnerSay((string) primmed + " llGetNumberOfPrims"); llOwnerSay("OK"); } }
注意点
リンク番号
オブジェクトを構成するそれぞれのプリムにはアドレスがあります。それがリンク番号です。オブジェクトの特定のプリムにアクセスするには、そのプリムのリンク番号を知らなければなりません。リンク番号はプリムに振られますが、オブジェクトに座っているアバターにも振られます。
- オブジェクトが単一のプリムで構成されていて、アバターが座っていないとき、(ルート)プリムのリンク番号は 0 です。
- しかし、オブジェクトが複数のプリムで構成されていたり、オブジェクトに座っているアバターがいたりすると、ルートプリムのリンク番号は 1 となります。
アバターがオブジェクトに座ると、リンクセットの末尾に追加され、いちばん大きなリンク番号が振られることになります。さらに、アバターがオブジェクトに座っている場合、アバターを立たせないと、プリムのリンク・リンク解除ができません。
プリムやアバターの数え方
オブジェクトのプリムや、プリムに座っているアバターの数を調べるのに、2つの関数があります。
-
llGetNumberOfPrims()- プリムと座っているアバターの数を返します。 -
llGetObjectPrimCount(llGetKey())- オブジェクトのプリムの数だけを返しますが、アタッチメントとなっている場合は 0 を返します。
integer GetPrimCount() { //常にプリムの数だけを返します。 if(llGetAttached())//装着されているか? return llGetNumberOfPrims();//アバターとプリムの数を返しますが、アタッチメントの上には座れないのでこれでいいです。 return llGetObjectPrimCount(llGetKey());//プリムの数だけを返しますが、アタッチメントの場合ここは通りません。 }
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。

