LlMessageLinked/ja
From Second Life Wiki
|
| |||||||||||||||||||||
警告
- スクリプトは、linknumがLINK_SETもしくはLINK_THISで設定されている場合に自身にリンクされたメッセージを聞くことができます。これは無限ループの可能性をもちます(よくないことです)。どんなメッセージが平行してハンドル、通過するのかよく注意しましょう。
- 幾つかのユーザはメッセージを、LINK_SETとLINK_ALL_OTHERSとLINK_ALL_CHILDRENを使用している異なるプリム内で、大きなリンク番号を受け取っているスクリプトに送っているときに、リンクされたメッセージが失敗する原因を留意していました(例えば、全てのプリムがメッセージを受け取らない、など)。もしこの問題に遭遇している場合、回避方法は単一プリム内のスクリプトを全ての子プリムに置くことであり、プリム内に前もって存在していたスクリプトを編集して、llSetLinkPrimitiveParamsのような対象とされる関数を使用し、彼らのアドレスへ単一のリンクメッセージを使います。Void Singer
例
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 } }
部分的な利用
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])); } }
// 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, "|"); // Typecast list to a string llMessageLinked(LINK_THIS, 0, list_parameter, "") } link_message(integer sender_num, integer num, string list_argument, key id) { list re_list = llParseString2List(list_argument, ["|"], []); // Typecast string back to a list } }
ノート
- 単一プリムのオブジェクト内でllMessageLinkedを使うのは、スクリプトの協同と動作の同期の間で、機能性が分散するいくつかのLSLの限界を和らげる開発の支えになります。これを行なう時は、典型的な上記のような無限ループを作らないように十分に注意しましょう。
- strとidのサイズは有効なスクリプトのメモリ量を限界とする、と思います。--RJ Thibaud 13:27, 23 December 2007 (PST)

