Difference between revisions of "LlGetLinkKey/ja"

From Second Life Wiki
Jump to navigation Jump to search
m
Line 1: Line 1:
{{LSL_Function/link/ja|linknum}}
{{Issues/SVC-600}}{{LSL_Function/link/ja|link_number|noconst=*}}
{{LSL_Function/ja
{{LSL_Function/ja
|func_id=144|func_sleep=0.0|func_energy=10.0
|func_id=144|func_sleep=0.0|func_energy=10.0
|func=llGetLinkKey
|func=llGetLinkKey
|return_type=key|p1_type=integer|p1_name=linknum
|return_type=key|p1_type=integer|p1_name=link_number
|func_footnote
|func_footnote
|func_desc
|func_desc
|return_text=現在のリンクセットの、リンクナンバー'''linknum'''のプリムのキー
|Return_text={{LSLG/ja|link}} されたプリムの '''link_number'''
|spec
|spec
|caveats=*非マイナス域の、0から[[llGetNumberOfPrims/ja|llGetNumberOfPrims]]を含む、[[LINK_ROOT/ja|LINK_ROOT]]のような'''linknum'''を準備しましょう。
|caveats=
* linknumに[[LINK_THIS/ja|LINK_THIS]]は用いず、'''[http://jira.secondlife.com/browse/SVC-600 SVC-600]'''のバグにつき、代わりに[[llGetKey/ja|llGetKey]]を呼び出します。申し訳ありません。
* '''link_number''' に LINK_* フラグが使えるのは、{{LSLG/ja|LINK_ROOT}} のみです。
* [[LINK_SET/ja|LINK_SET]][[LINK_ALL_OTHERS/ja|LINK_ALL_OTHERS]]、もしくは[[LINK_ALL_CHILDREN/ja|LINK_ALL_CHILDREN]]を、複数のプリムで参照するlinknumに無意味に用いないでください。
** {{LSLG/ja|LINK_THIS}} は動作しません。 ~ {{LSLG|#SVC-600|SVC-600}}
** この関数は (単一の) キーを返すものでキーのリストを返すものではないことから、複数のプリム向けの LINK_* フラグ ({{LSLG/ja|LINK_SET}} {{LSLG/ja|LINK_ALL_OTHERS}} 、{{LSLG/ja|LINK_ALL_CHILDREN}}) はこの関数では使用できません。
|constants
|constants
|examples=リンクされたプリムにこのスクリプトをドラッグして、プリムのリンクを解除し、アバタがすわっているかいないか、llGetLinkKeyを[[llGetKey/ja|llGetKey]], [[llGetLinkNumber/ja|llGetLinkNumber]], [[llGetNumberOfPrims/ja|llGetNumberOfPrims]], [[LINK_ROOT/ja|LINK_ROOT]]などを関連して参照します
|examples=このスクリプトを、リンクされた・リンクされていないプリム、アバターが座っている・座っていないプリム、に入れ、llGetLinkKey が {{LSLG/ja|llGetKey}} 、{{LSLG/ja|llGetLinkNumber}} 、{{LSLG/ja|llGetNumberOfPrims}} 、{{LSLG/ja|LINK_ROOT}} などとどのように関連しているかを確認してください。
<lsl>// Return the name of a link num else the empty string.
<lsl>// リンク番号の名前を返します、なければ空文字列を返します。
 
string getLinkNumName(integer link)
string getLinkNumName(integer link)
{
{
Line 25: Line 25:
}
}


// Say the key of each linked prim.
// リンクされているプリムのそれぞれのキーを発言します。
 
default
default
{
{
Line 37: Line 36:
         key creator = llGetCreator();
         key creator = llGetCreator();
          
          
         // Visit each link num.
         // それぞれのリンク番号にアクセスします。
          
          
         integer link;
         integer link;
Line 45: Line 44:
             key linkKey = llGetLinkKey(link);
             key linkKey = llGetLinkKey(link);
              
              
             // Detail the key at the link num.
             // リンク番号のキーを詳細化します。
              
              
             string line = (string) linkKey; // large constant width
             string line = (string) linkKey; // large constant width
Line 53: Line 52:
             if (linkKey == theLinkKey) line += " llGetKey";
             if (linkKey == theLinkKey) line += " llGetKey";
              
              
             // Detail the link num.
             // リンク番号を詳細化します。
              
              
             line += " @ " + (string) link;
             line += " @ " + (string) link;
Line 60: Line 59:
             if (link == primmed) line += " llGetNumberOfPrims";
             if (link == primmed) line += " llGetNumberOfPrims";
              
              
             // Say the detail if fun.
             // 興味があれば詳細を発言します。
              
              
             if (linkKey != NULL_KEY)
             if (linkKey != NULL_KEY)
Line 68: Line 67:
         }
         }
          
          
         // Always count the linked prims.
         // リンクされているプリムを常に数えます。
          
          
         llOwnerSay((string) primmed + " llGetNumberOfPrims");
         llOwnerSay((string) primmed + " llGetNumberOfPrims");
Line 75: Line 74:
}</lsl>
}</lsl>
|helpers
|helpers
|also_functions={{LSL DefineRow||[[llGetKey/ja|llGetKey]]|}}
|also_functions={{LSL DefineRow||{{LSLG/ja|llGetKey}}|}}
{{LSL DefineRow||[[llGetLinkName/ja|llGetLinkName]]|}}
{{LSL DefineRow||{{LSLG/ja|llGetLinkName}}|}}
|also_tests
|also_tests
|also_events
|also_events
|also_articles
|also_articles
|notes
|notes
|history=
|history
===Bugs===
|issues
{{{!}}
{{Bug|SVC-600|[[llGetLinkKey/ja|llGetLinkKey]] [[LINK_THIS/ja|LINK_THIS]]を通したとき、不適切な結果をかえします}}
{{!}}}
|cat1=Key
|cat1=Key
|cat2
|cat2=Link/Get
|cat3
|cat3
|cat4
|cat4
}}
}}

Revision as of 18:15, 3 May 2010

要約

関数: key llGetLinkKey( integer link_number );

link されたプリムの link_numberを 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 などとどのように関連しているかを確認してください。 <lsl>// リンク番号の名前を返します、なければ空文字列を返します。 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");
   }
}</lsl>

注意点

リンク番号

オブジェクトを構成するそれぞれのプリムにはアドレスがあります。それがリンク番号です。オブジェクトの特定のプリムにアクセスするには、そのプリムのリンク番号を知らなければなりません。リンク番号はプリムに振られますが、オブジェクトに座っているアバターにも振られます。

  • オブジェクトが単一のプリムで構成されていて、アバターが座っていないとき、(ルート)プリムのリンク番号は 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の関連した項目が参考になるかもしれません。