LlMessageLinked/ja
< LlMessageLinked
Jump to navigation
Jump to search
Revision as of 00:16, 18 February 2008 by Asuka Neely (talk | contribs) (New page: {{multi-lang}}{{LSL Function/link/ja}}{{LSL_Function/ja |func_id=164|func_sleep=0.0|func_energy=10.0 |func=llMessageLinked|sort=MessageLinked |p1_type=integer|p1_name=linknum|p1_desc=リ...)
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
|
|
警告
- スクリプトは、linknumがLINK_SETもしくはLINK_THISで設定されている場合に自身にリンクされたメッセージを聞くことができます。これは無限ループの可能性をもちます(よくないことです)。どんなメッセージが平行してハンドル、通過するのかよく注意しましょう。
- 幾つかのユーザはメッセージを、LINK_SETとLINK_ALL_OTHERSとLINK_ALL_CHILDRENを使用している異なるプリム内で、大きなリンク番号を受け取っているスクリプトに送っているときに、リンクされたメッセージが失敗する原因を留意していました(例えば、全てのプリムがメッセージを受け取らない、など)。もしこの問題に遭遇している場合、回避方法は単一プリム内のスクリプトを全ての子プリムに置くことであり、プリム内に前もって存在していたスクリプトを編集して、llSetLinkPrimitiveParamsのような対象とされる関数を使用し、彼らのアドレスへ単一のリンクメッセージを使います。Void Singer
サンプル
<lsl>default{ // assumptions // object name: LSLWiki // script name: _lslwiki
state_entry() { llMessageLinked(LINK_THIS, 0, llGetScriptName(), ""); }
link_message(integer sender_num, integer num, string msg, key id) { llOwnerSay(msg); // the owner of object LSLWiki will hear // LSLWiki:_lslwiki }}</lsl>
便利なスニペット
<lsl>default { // Quick and dirty debugging link_messages
link_message(integer sender_num, integer num, string msg, key id) { llSay(DEBUG_CHANNEL, llList2CSV([sender_num, num, msg, id])); }
}</lsl> <lsl>// This is just an example script, you shouldn't handle link message within single script this way.
default{ // To propagate an unlimted number of arguments of any type. // Presumed, the separator string isn't used in any source string!
state_entry() { list my_list = [1, 2.0, "a string", <1, 2, 3>, <1, 2, 3, 4>, llGetOwner()]; string list_parameter = llDumpList2String(my_list, "
注意点
リンク番号
オブジェクトを構成するそれぞれのプリムにはアドレスがあります。それがリンク番号です。オブジェクトの特定のプリムにアクセスするには、そのプリムのリンク番号を知らなければなりません。リンク番号はプリムに振られますが、オブジェクトに座っているアバターにも振られます。
- オブジェクトが単一のプリムで構成されていて、アバターが座っていないとき、(ルート)プリムのリンク番号は 0 です。
- しかし、オブジェクトが複数のプリムで構成されていたり、オブジェクトに座っているアバターがいたりすると、ルートプリムのリンク番号は 1 となります。
アバターがオブジェクトに座ると、リンクセットの末尾に追加され、いちばん大きなリンク番号が振られることになります。さらに、アバターがオブジェクトに座っている場合、アバターを立たせないと、プリムのリンク・リンク解除ができません。
プリムやアバターの数え方
オブジェクトのプリムや、プリムに座っているアバターの数を調べるのに、2つの関数があります。
llGetNumberOfPrims()
- プリムと座っているアバターの数を返します。llGetObjectPrimCount(llGetKey())
- オブジェクトのプリムの数だけを返しますが、アタッチメントとなっている場合は 0 を返します。
integer GetPrimCount() { //常にプリムの数だけを返します。
if(llGetAttached())//装着されているか?
return llGetNumberOfPrims();//アバターとプリムの数を返しますが、アタッチメントの上には座れないのでこれでいいです。
return llGetObjectPrimCount(llGetKey());//プリムの数だけを返しますが、アタッチメントの場合ここは通りません。
}
- 単一プリムのオブジェクト内でllMessageLinkedを使うのは、スクリプトの協同と動作の同期の間で、機能性が分散するいくつかのLSLの限界を和らげる開発の支えになります。これを行なう時は、典型的な上記のような無限ループを作らないように十分に注意しましょう。
- strとidのサイズは有効なスクリプトのメモリ量を限界とする、と思います。--RJ Thibaud 13:27, 23 December 2007 (PST)
関連項目
特記事項
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。