LlGetLinkKey/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: key llGetLinkKey( integer link_number );

link_number で指定されたプリムの UUID を key で返します。

• integer link_number リンク 番号 (0: リンクなし, 1: ルートプリム, >1: 子プリム) または LINK_* フラグ

警告

  • link_number に LINK_* フラグが使えるのは、LINK_ROOT のみです。
    • LINK_THIS は動作しません。 ~ SVC-600
    • この関数は (単一の) キーを返すものでキーのリストを返すものではないことから、複数のプリム向けの LINK_* フラグ (LINK_SETLINK_ALL_OTHERSLINK_ALL_CHILDREN) はこの関数では使用できません。

サンプル

このスクリプトを、リンクされた・リンクされていないプリム、アバターが座っている・座っていないプリム、に入れ、llGetLinkKey が llGetKeyllGetLinkNumberllGetNumberOfPrimsLINK_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());//プリムの数だけを返しますが、アタッチメントの場合ここは通りません。
}

関連項目

関数

•  llGetLinkNumber スクリプトが入っているプリムのリンク番号を取得します。
•  llGetKey
•  llGetLinkName

特記事項

All Issues

~ Search JIRA for related Issues
   llGetLinkKey returns the wrong result when passed LINK_THIS

Signature

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