LlGetLinkKey/ja
< LlGetLinkKey
Jump to navigation
Jump to search
Revision as of 22:26, 18 April 2008 by Asuka Neely (talk | contribs)
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
要約
関数: key llGetLinkKey( integer linknum );
|
|
警告
- 非マイナス域の、0からllGetNumberOfPrimsを含む、LINK_ROOTのようなlinknumを準備しましょう。
- linknumにLINK_THISは用いず、SVC-600のバグにつき、代わりにllGetKeyを呼び出します。申し訳ありません。
- LINK_SET、LINK_ALL_OTHERS、もしくはLINK_ALL_CHILDRENを、複数のプリムで参照するlinknumに無意味に用いないでください。
サンプル
リンクされたプリムにこのスクリプトをドラッグして、プリムのリンクを解除し、アバタがすわっているかいないか、llGetLinkKeyをllGetKey, llGetLinkNumber, llGetNumberOfPrims, LINK_ROOTなどを関連して参照します <lsl>// Return the name of a link num else the empty string.
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 "";
}
// Say the key of each linked prim.
default {
state_entry() { integer theLink = llGetLinkNumber(); key theLinkKey = llGetKey(); key owner = llGetOwner(); key creator = llGetCreator(); // Visit each link num. integer link; integer primmed = llGetNumberOfPrims(); for (link = -5; link <= (primmed + 5); ++link) { key linkKey = llGetLinkKey(link); // Detail the key at the link num. string line = (string) linkKey; // large constant width if (linkKey == owner) line += " llGetOwner"; if (linkKey == creator) line += " llGetCreator"; if (linkKey == theLinkKey) line += " llGetKey"; // Detail the link num. line += " @ " + (string) link; line += " " + getLinkNumName(link); if (link == theLink) line += " llGetLinkNumber"; if (link == primmed) line += " llGetNumberOfPrims"; // Say the detail if fun. if (linkKey != NULL_KEY) { llOwnerSay(line); } } // Always count the linked prims. llOwnerSay((string) primmed + " llGetNumberOfPrims"); llOwnerSay("OK"); }}</lsl>
注意点
リンク番号
オブジェクトを構成するそれぞれのプリムにはアドレスがあります。それがリンク番号です。オブジェクトの特定のプリムにアクセスするには、そのプリムのリンク番号を知らなければなりません。リンク番号はプリムに振られますが、オブジェクトに座っているアバターにも振られます。
- オブジェクトが単一のプリムで構成されていて、アバターが座っていないとき、(ルート)プリムのリンク番号は 0 です。
- しかし、オブジェクトが複数のプリムで構成されていたり、オブジェクトに座っているアバターがいたりすると、ルートプリムのリンク番号は 1 となります。
アバターがオブジェクトに座ると、リンクセットの末尾に追加され、いちばん大きなリンク番号が振られることになります。さらに、アバターがオブジェクトに座っている場合、アバターを立たせないと、プリムのリンク・リンク解除ができません。
プリムやアバターの数え方
オブジェクトのプリムや、プリムに座っているアバターの数を調べるのに、2つの関数があります。
llGetNumberOfPrims()
- プリムと座っているアバターの数を返します。llGetObjectPrimCount(llGetKey())
- オブジェクトのプリムの数だけを返しますが、アタッチメントとなっている場合は 0 を返します。
integer GetPrimCount() { //常にプリムの数だけを返します。
if(llGetAttached())//装着されているか?
return llGetNumberOfPrims();//アバターとプリムの数を返しますが、アタッチメントの上には座れないのでこれでいいです。
return llGetObjectPrimCount(llGetKey());//プリムの数だけを返しますが、アタッチメントの場合ここは通りません。
}
関連項目
関数
• | llGetLinkNumber | – | スクリプトが入っているプリムのリンク番号を取得します。 | |
• | llGetKey | |||
• | llGetLinkName |
特記事項
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。