Difference between revisions of "Listen/ja"

From Second Life Wiki
Jump to navigation Jump to search
m
 
(One intermediate revision by one other user not shown)
Line 5: Line 5:
|p3_type=key|p3_name=id|p3_desc
|p3_type=key|p3_name=id|p3_desc
|p4_type=string|p4_name=message|p4_desc
|p4_type=string|p4_name=message|p4_desc
|event_desc=チャットで作動し{{LSLG/ja|llListen}}を有効にして使い、フィルタします。
|event_desc=チャットによって発生します。 {{LSLG/ja|llListen}} を使って開始と検索条件の設定を行います。
|constants={{LSL Constants/Chat/ja}}
|constants={{LSL Constants/Chat/ja}}
|spec
|spec
|caveats=*[[state/ja|ステート]]変更もしくは[[llResetScript/ja|スクリプトリセット]]時、全てのlistenは自動で[[llListenRemove|閉じられ]]ます。
|caveats=*{{LSLG/ja|state}} の変更または {{LSLG/ja|llResetScript|スクリプトがリセット}} されたときに、全てのリスナーは自動的に {{LSLG/ja|llListenRemove|終了}} します。
*オブジェクトのオーナが変わる時、幾つかの[[llGetOwner/ja|llGetOwner]]で登録されたlistenはスクリプトがリセットされるまで自身を自動で更新することはないでしょう。スクリプト製作者は以下の例を通してこの出来事を取得することができます。
*オブジェクトのオーナーが変更されても、 {{LSLG/ja|llGetOwner}} を使って登録したリスナーはスクリプトがリセットされるまで自動的に更新されません。スクリプターは下の例のような感じでこのようなケースを検出して対処するとよいでしょう。
*1つのメッセージをスクリプトで登録された複数の[[llListen/ja|llListen]]フィルタで指定している場合、一度だけイベントが動くでしょう。
*メッセージがスクリプトで登録された複数の {{LSLG/ja|llListen}} の条件を満たしていても、 1 つのイベントだけが発生します。
*プリムは、自身が生成したチャットを聞くことはできません。
*プリムは自分自身が生成したチャットを拾うことはできません。
*listenの場所は聞いているプリム群の場所ではなく、ルートプリムの場所になります。これは人々がパーセル境界を越えて盗聴するために子プリムを使う事を阻止するためです。その他の{{LSLGC/ja|Chat|チャットを生成する関数}}は子プリムの位置で呼び出している(ルートプリムの位置からではない)チャットを生成します。
*リスナーの位置はリスナーのあるプリムの位置と同じでなく、ルートプリムの位置になります。これは子プリムを使用して区画の境界線を越えて盗聴することを防ぐ目的でそうなっています。 {{LSLGC/ja|Chat|チャット生成系関数}} はこれとは逆に、 (ルートプリムの位置ではなく) 関数を呼び出したプリムの位置となります。
|examples=
|examples=
オブジェクトオーナからの何らかのチャットを聞き、一度だけ返答する、ちょっとしたサンプルです。ラグの削減と周囲のユーザのスパムを回避するため、0以外の広範囲チャンネルから選んでlistenすることと、'/5 hello'のような、選択チャンネル上でのチャットによるlistenイベントで作動することです。
オブジェクトのオーナーのチャットを拾って 1 回返答するという、平凡な例です。ラグを減らし、周囲のユーザにスパムとならないよう、 0 以外のチャネルで Listen して、 listen イベントを他のチャネルでチャットされたときに、例えば '/5 hello' などで発生させるようにするともっと良いです。
<lsl>// says beep to owner the first time owner says something in main chat;
<source lang="lsl2">// オーナーがメインチャットで何か発言したら、オーナーに beep と発言します。
integer listen_handle;
integer listen_handle;


Line 21: Line 21:
{
{
     state_entry()
     state_entry()
     {  //Registers the listen to the owner of the object at the moment of the call. This does not automatically update when the owner changes.
     {  // 呼び出した時点でのオブジェクトのオーナーをリスナーに登録します。
         // Change 0 to another positive number to listen for '/5 hello' style of chat.
        // オーナーが変更されても自動的に更新されません。
         // 0 を他の正の数字に変えて '/5 hello' のような形式のチャットを拾えるようにしましょう。
         listen_handle = llListen(0, "", llGetOwner(), "");
         listen_handle = llListen(0, "", llGetOwner(), "");
     }
     }
Line 28: Line 29:
     {
     {
         llOwnerSay("beep");
         llOwnerSay("beep");
         // Stop listening until script is reset
         // スクリプトがリセットされるまでリスナーを停止します。
         llListenRemove(listen_handle);
         llListenRemove(listen_handle);
     }
     }
     on_rez(integer param)
     on_rez(integer param)
     {  //Triggered when the object is rezed, like after the object had been sold from a vendor
     {  // オブジェクトが rez されたときに発生します。オブジェクトがベンダーで売れた後などです。
         llResetScript();//By resetting the script on rez it forces the listen to re-register.
         llResetScript();//rez でスクリプトをリセットして、リスナーを再登録させます。
     }
     }
     changed(integer mask)
     changed(integer mask)
     {  //Triggered when the object containing this script changes owner.
     {  // スクリプトの入っているオブジェクトのオーナーが変更されたときに発生します。
         if(mask & CHANGED_OWNER)
         if(mask & CHANGED_OWNER)
         {
         {
Line 42: Line 43:
         }
         }
     }
     }
}</lsl>
}</source>
|helpers
|helpers
|also_header
|also_header
|also_events
|also_events
|also_functions=
|also_functions=
{{LSL DefineRow||[[llListen/ja|llListen]]|}}
{{LSL DefineRow||{{LSLG/ja|llListen}}|}}
{{LSL DefineRow||[[llListenControl/ja|llListenControl]]|}}
{{LSL DefineRow||{{LSLG/ja|llListenControl}}|}}
{{LSL DefineRow||[[llListenRemove/ja|llListenRemove]]|}}
{{LSL DefineRow||{{LSLG/ja|llListenRemove}}|}}
{{LSL DefineRow||[[llDialog/ja|llDialog]]|}}
{{LSL DefineRow||{{LSLG/ja|llDialog}}|}}
{{LSL DefineRow||[[llOwnerSay/ja|llOwnerSay]]|[[PUBLIC_CHANNEL/ja|PUBLIC_CHANNEL]]でのスパムを避けるためオーナのみにチャットを送信します}}
{{LSL DefineRow||{{LSLG/ja|llOwnerSay}}|{{LSLG/ja|PUBLIC_CHANNEL}} でスパムとならないように、オーナーにだけチャットを送ります}}
{{LSL DefineRow||[[llWhisper/ja|llWhisper]]|10メートルを限度としてチャットを送信します}}
{{LSL DefineRow||{{LSLG/ja|llWhisper}}|10 メートルに限定したチャットを送ります}}
{{LSL DefineRow||[[llSay/ja|llSay]]|20メートルを限度としてチャットを送信します}}
{{LSL DefineRow||{{LSLG/ja|llSay}}|20 メートルに限定したチャットを送ります}}
{{LSL DefineRow||[[llShout/ja|llShout]]|100メートルを限度としてチャットを送信します}}
{{LSL DefineRow||{{LSLG/ja|llShout}}|100 メートルに限定したチャットを送ります}}
{{LSL DefineRow||[[llRegionSay/ja|llRegionSay]]|現在のSimを限度としてチャットを送信します}}
{{LSL DefineRow||{{LSLG/ja|llRegionSay}}|地域全体にチャットを送ります}}
|also_articles
|also_articles
|also_footer
|also_footer

Latest revision as of 10:08, 21 February 2016

説明

イベント: listen( integer channel, string name, key id, string message ){ ; }

チャットによって発生します。 llListen を使って開始と検索条件の設定を行います。

• integer channel
• string name
• key id
• string message
チャネル定数 説明
DEBUG_CHANNEL 0x7FFFFFFF スクリプトのデバッグメッセージとエラーメッセージを受け取るチャットチャネル
PUBLIC_CHANNEL 0x0 近くのユーザ全員にブロードキャストされるチャットチャネル

警告

  • state の変更または スクリプトがリセット されたときに、全てのリスナーは自動的に 終了 します。
  • オブジェクトのオーナーが変更されても、 llGetOwner を使って登録したリスナーはスクリプトがリセットされるまで自動的に更新されません。スクリプターは下の例のような感じでこのようなケースを検出して対処するとよいでしょう。
  • メッセージがスクリプトで登録された複数の llListen の条件を満たしていても、 1 つのイベントだけが発生します。
  • プリムは自分自身が生成したチャットを拾うことはできません。
  • リスナーの位置はリスナーのあるプリムの位置と同じでなく、ルートプリムの位置になります。これは子プリムを使用して区画の境界線を越えて盗聴することを防ぐ目的でそうなっています。 チャット生成系関数 はこれとは逆に、 (ルートプリムの位置ではなく) 関数を呼び出したプリムの位置となります。

サンプル

オブジェクトのオーナーのチャットを拾って 1 回返答するという、平凡な例です。ラグを減らし、周囲のユーザにスパムとならないよう、 0 以外のチャネルで Listen して、 listen イベントを他のチャネルでチャットされたときに、例えば '/5 hello' などで発生させるようにするともっと良いです。

// オーナーがメインチャットで何か発言したら、オーナーに beep と発言します。
integer listen_handle;

default
{
    state_entry()
    {   // 呼び出した時点でのオブジェクトのオーナーをリスナーに登録します。
        // オーナーが変更されても自動的に更新されません。
        // 0 を他の正の数字に変えて '/5 hello' のような形式のチャットを拾えるようにしましょう。
        listen_handle = llListen(0, "", llGetOwner(), "");
    }
    listen( integer channel, string name, key id, string message )
    {
        llOwnerSay("beep");
        // スクリプトがリセットされるまでリスナーを停止します。
        llListenRemove(listen_handle);
    }
    on_rez(integer param)
    {   // オブジェクトが rez されたときに発生します。オブジェクトがベンダーで売れた後などです。
        llResetScript();//rez でスクリプトをリセットして、リスナーを再登録させます。
    }
    changed(integer mask)
    {   // スクリプトの入っているオブジェクトのオーナーが変更されたときに発生します。
        if(mask & CHANGED_OWNER)
        {
            llResetScript();
        }
    }
}

参考情報

関数

•  llListen
•  llListenControl
•  llListenRemove
•  llDialog
•  llOwnerSay PUBLIC_CHANNEL でスパムとならないように、オーナーにだけチャットを送ります
•  llWhisper 10 メートルに限定したチャットを送ります
•  llSay 20 メートルに限定したチャットを送ります
•  llShout 100 メートルに限定したチャットを送ります
•  llRegionSay 地域全体にチャットを送ります
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。