Link message/ja
Jump to navigation
Jump to search
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
説明
イベント: link_message( integer sender_num, integer num, string str, key id ){ ; }29 | イベント ID |
スクリプトが llMessageLinked の呼び出しで発生したリンクメッセージを受け取ったときに発生します。 llMessageLinked はスクリプト間でメッセージを受け渡しするのに使用されます。
• integer | sender_num | – | llMessageLinked を呼び出したスクリプトが入っているプリムのリンク番号 | |
• integer | num | – | llMessageLinked の呼び出しの 2 番目の引数 | |
• string | str | – | llMessageLinked の呼び出しの 3 番目の引数 | |
• key | id | – | llMessageLinked の呼び出しの 4 番目の引数 |
id を第二の string フィールドのように使うことができます (LSL では key 型がカスタム演算子つきの string として実装されています) 。 string と key の間の 型変換 は中に入っているデータに何の影響も及ぼしません。str と id のサイズはスクリプトのメモリが許す限り無制限です。
警告
- 64 個までの link_message イベントをキューに格納され、それを超えると、警告なく失われます!大量に入ってきそうなときは、イベントの中であまりたくさんの処理を行わないようにしましょう。
- sender_num はメッセージの送信方法を示すものではありません。メッセージが LINK_* フラグで送信されたものか リンク番号を指定して 送信されたものかを識別する方法はありません。
- str と id がスクリプトが 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の関連した項目が参考になるかもしれません。