LlMessageLinked/ja - Second Life Wiki

LlMessageLinked/ja

From Second Life Wiki

Jump to: navigation, search

関数: llMessageLinked( integer linknum, integer num, string str, key id );

グループ内のnumstrそしてidパラメータ、又はlinknumのリンクとlink_messageで作動します。

• integer linknum リンクナンバーあるいはLINK_* フラグ。
• integer num
• string str
• key id


idを2つ目のstringフィールドのように使うことができます(LSLでは、keyは慣用的演算子としてstringのように実行されます)。stringとkey間での型変更は、含まれているデータへの影響はありません。

フラグ 説明
LINK_ROOT 1 リンクされているプリム内の親タスクに送ります
LINK_SET -1 (訳注:自身を含む)全タスクに送ります
LINK_ALL_OTHERS -2 (訳注:自身を含まない)他の全タスクにおくります
フラグ 説明
LINK_ALL_CHILDREN -3 (訳注:リンクされているプリム内の)全ての子タスクに送ります
LINK_THIS -4 スクリプトのあるタスクに送ります

警告

  • スクリプトは、linknumLINK_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)

関連項目

イベント

•  link_message

関数

•  llGetLinkNumber スクリプトが入っているプリムのリンクナンバーを返します。