Link message/ja

From Second Life Wiki
Jump to navigation Jump to search

説明

イベント: link_message( integer sender_num, integer num, string str, key id ){ ; }

スクリプトが llMessageLinked の呼び出しで発生したリンクメッセージを受け取ったときに発生します。 llMessageLinked はスクリプト間でメッセージを受け渡しするのに使用されます。

• integer sender_num llMessageLinked を呼び出したスクリプトが入っているプリムのリンク番号
• integer num llMessageLinked の呼び出しの 2 番目の引数
• string str llMessageLinked の呼び出しの 3 番目の引数
• key id llMessageLinked の呼び出しの 4 番目の引数

id を第二の string フィールドのように使うことができます (LSL では key 型がカスタム演算子つきの string として実装されています) 。 stringkey の間の 型変換 は中に入っているデータに何の影響も及ぼしません。strid のサイズはスクリプトのメモリが許す限り無制限です。

警告

  • 64 個までの link_message イベントをキューに格納され、それを超えると、警告なく失われます!大量に入ってきそうなときは、イベントの中であまりたくさんの処理を行わないようにしましょう。
  • sender_num はメッセージの送信方法を示すものではありません。メッセージが LINK_* フラグで送信されたものか リンク番号を指定して 送信されたものかを識別する方法はありません。
  • strid がスクリプトが link_message イベントの結果をキャッシュするのに使用可能なメモリ量を超えると、スクリプトは Stack-Heap Collision でクラッシュします。

サンプル

//これは単なるサンプルスクリプトです。1 つのスクリプトの中でこのようにタッチイベントを処理しないようにしましょう。

default
{
    touch_start(integer c)
    {
        llMessageLinked(LINK_THIS, 0, llDetectedName(0), llDetectedKey(0));
    }
    link_message(integer source, integer num, string str, key id)
    {
        llWhisper(0, str + " (" + (string)id + ") touched me!");
    }
}

便利なスニペット

// これは単なるサンプルスクリプトです。1 つのスクリプトの中でこのようにメッセージを処理しないようにしましょう。

default
{       // いつでも無限の数の引数を繁殖させるスクリプトです。
	// セパレータ文字列が元の文字列で使われていないことが前提です!
    state_entry() 
    {    
        list my_list = [1, 2.0, "a string", <1, 2, 3>, <1, 2, 3, 4>, llGetOwner()];  
        string list_parameter = llDumpList2String(my_list, "|");	// リストを文字列に変換
        llMessageLinked(LINK_THIS, 0, list_parameter, NULL_KEY)
    }

    link_message(integer sender_num, integer num, string list_argument, key id) 
    {
        list re_list = llParseString2List(list_argument, ["|"], [""]);	// 文字列をリストに逆変換
    }    
}

注意点

スクリプトはそれ自身の発したリンクメッセージを拾うことができます。

参考情報

関数

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