Difference between revisions of "Link message/ja"

From Second Life Wiki
Jump to navigation Jump to search
(New page: {{LSL_Event/ja|event_id=29|event_delay|event=link_message |p1_type=integer|p1_name=sender_num|p1_desc |p2_type=integer|p2_name=num|p2_desc |p3_type=string|p3_name=str|p3_desc |p4_type=key|...)
 
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{LSL_Event/ja|event_id=29|event_delay|event=link_message
{{LSL_Event/ja|event_id=29|event_delay|event=link_message
|p1_type=integer|p1_name=sender_num|p1_desc
|p1_type=integer|p1_name=sender_num|p1_desc={{LSLG/ja|llMessageLinked}} を呼び出したスクリプトが入っているプリムのリンク番号
|p2_type=integer|p2_name=num|p2_desc
|p2_type=integer|p2_name=num|p2_desc=llMessageLinked の呼び出しの 2 番目の引数
|p3_type=string|p3_name=str|p3_desc
|p3_type=string|p3_name=str|p3_desc=llMessageLinked の呼び出しの 3 番目の引数
|p4_type=key|p4_name=id|p4_desc
|p4_type=key|p4_name=id|p4_desc=llMessageLinked の呼び出しの 4 番目の引数
|event_desc=タスクが{{LSLG/ja|llMessageLinked}}ライブラリ関数の呼び出しを元にリンクメッセージを受信するときに作動します。
|event_desc=スクリプトが {{LSLG/ja|llMessageLinked}} の呼び出しで発生したリンクメッセージを受け取ったときに発生します。 llMessageLinked はスクリプト間でメッセージを受け渡しするのに使用されます。
|event_footnote='''id''' を第二の string フィールドのように使うことができます (LSL では {{LSLG/ja|key}} 型がカスタム演算子つきの {{LSLG/ja|string}} として実装されています) 。 {{LSLG/ja|string}} と {{LSLG/ja|key}} の間の {{LSLG/ja|typecast|型変換}} は中に入っているデータに何の影響も及ぼしません。'''str''' と '''id''' のサイズはスクリプトのメモリが許す限り無制限です。
|constants
|constants
|spec
|spec
|caveats=*64link_messageイベントをためることができ、超えた場合は通知なく溢してしまいます!早く行なおうとして、イベントを過多実行しないでください。
|caveats=*64 個までの link_message イベントをキューに格納され、それを超えると、警告なく失われます!大量に入ってきそうなときは、イベントの中であまりたくさんの処理を行わないようにしましょう。
*'''sender_num''' はメッセージの送信方法を示すものではありません。メッセージが LINK_* フラグで送信されたものか {{LSLG/ja|llGetLinkNumber|リンク番号を指定して}} 送信されたものかを識別する方法はありません。
*'''str''' と '''id''' がスクリプトが link_message イベントの結果をキャッシュするのに使用可能なメモリ量を超えると、スクリプトは Stack-Heap Collision でクラッシュします。
|examples=
|examples=
<pre>
<source lang="lsl2">
//This is just an example script, you shouldn't handle touches within single script this way.
//これは単なるサンプルスクリプトです。1 つのスクリプトの中でこのようにタッチイベントを処理しないようにしましょう。


default
default
Line 23: Line 26:
     }
     }
}
}
</pre>
</source>
|helpers=<pre>
|helpers=
// This is just an example script, you shouldn't handle link message within single script this way.
<source lang="lsl2">
// これは単なるサンプルスクリプトです。1 つのスクリプトの中でこのようにメッセージを処理しないようにしましょう。


default{ // To propagate an unlimited number of arguments of any type.
default
// Presumed, the separator string isn't used in any source string!
{       // いつでも無限の数の引数を繁殖させるスクリプトです。
     state_entry() {     
// セパレータ文字列が元の文字列で使われていないことが前提です!
     state_entry()  
    {     
         list my_list = [1, 2.0, "a string", <1, 2, 3>, <1, 2, 3, 4>, llGetOwner()];   
         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
         string list_parameter = llDumpList2String(my_list, "|"); // リストを文字列に変換
         llMessageLinked(LINK_THIS, 0, list_parameter, NULL_KEY)
         llMessageLinked(LINK_THIS, 0, list_parameter, NULL_KEY)
     }
     }


     link_message(integer sender_num, integer num, string list_argument, key id) {
     link_message(integer sender_num, integer num, string list_argument, key id)  
         list re_list = llParseString2List(list_argument, ["|"], [""]); // Typecast string back to a list
    {
         list re_list = llParseString2List(list_argument, ["|"], [""]); // 文字列をリストに逆変換
     }     
     }     
}
}
</pre>
</source>
|also_header
|also_header
|also_events
|also_events
|also_functions={{LSL DefineRow||[[llMessageLinked/ja|llMessageLinked]]}}
|also_functions={{LSL DefineRow||{{LSLG/ja|llMessageLinked}}}}
|also_articles
|also_articles
|also_footer
|also_footer
|notes=スクリプトは自身のリンクメッセージを聞くことができます。
|notes=スクリプトはそれ自身の発したリンクメッセージを拾うことができます。
|mode
|mode
|cat1=Link/ja
|cat1=Link
|cat2=Communications/ja
|cat2=Communications
|cat3=Link Message/ja
|cat3=Link Message
|cat4
|cat4
}}
}}

Latest revision as of 10:06, 21 February 2016

説明

イベント: 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の関連した項目が参考になるかもしれません。