Difference between revisions of "LlDialog/ja"

From Second Life Wiki
Jump to navigation Jump to search
m
Line 1: Line 1:
{{LSL_Function/avatar/ja|avatar}}{{LSL_Function/ja
{{LSL_Function/avatar/ja|avatar|sim=*}}{{LSL_Function/chat/ja|chat_channel}}
|sort=Dialog
{{LSL_Function/ja|sort=Dialog|func_id=247|func_sleep=1.0|func_energy=10.0|func=llDialog
|func_id=247
|func_sleep=1.0
|func_energy=10.0
|func=llDialog
|p1_type=key|p1_name=avatar|p1_desc
|p1_type=key|p1_name=avatar|p1_desc
|p2_type=string|p2_name=message|p2_desc
|p2_type=string|p2_name=message|p2_desc=表示されるメッセージ
|p3_type=list|p3_name=buttons|p3_desc
|p3_type=list|p3_name=buttons|p3_desc=ボタンのラベル
|p4_type=integer|p4_name=chat_channel|p4_desc
|p4_type=integer|p4_name=chat_channel|p4_desc
|func_desc='''avatar'''のスクリーンに'''message''''''buttons'''を加えたダイアログボックスを表示します。
|func_desc='''avatar'''のスクリーンに'''message'''と選択する'''buttons'''、同様に無効ボタンを加えて、右上隅にダイアログボックスを表示します。これは単一なメッセージ配信から複合的なメニューシステムまで多数用いているレンダリングです。
|func_footnote=ボタンが押されたとき、'''avatar'''は'''chat_channel'''上でボタンのテキストを叫びます。<br/>チャットの位置はダイアログボックスが作られたときのプリムの場所です。
|func_footnote=ボタンが押されたとき、'''avatar'''は'''chat_channel'''上でボタンのテキストを叫びます。<br/>チャットの位置はダイアログボックスが作られたときのプリムの場所です。
|spec
|spec
Line 108: Line 104:
{{LSL Constants/Chat/ja}}
{{LSL Constants/Chat/ja}}
{{!}}}
{{!}}}
|helpers|related|notes
|helpers
|related
|notes=
|notes=
メニューシステム作成でダイアログボックスを用いるには、[[Dialog Menus|ダイアログメニュー: ステップバイステップガイド]] (初学者対象)を参照しましょう。
===Tips===
大きなマイナス域のチャンネルを使うのはよい手段です。(最大マイナス域での32bit integerで、これ以上はありえないマイナス域とすれば、-2,147,483,64です)
大きなマイナス域のチャンネルを使うのはよい手段です。(最大マイナス域での32bit integerで、これ以上はありえないマイナス域とすれば、-2,147,483,64です)
''例''
''例''
Line 117: Line 117:
llDialog(llDetectedKey(0), "Please choose one of the below options:",
llDialog(llDetectedKey(0), "Please choose one of the below options:",
     ["Yes", "No", "0", "1"], channel);</lsl>
     ["Yes", "No", "0", "1"], channel);</lsl>
マイナスチャンネル上で'''アバタ'''がチャットをするのは不可能で、幾つかの他のオブジェクトが、なんらかのそのようなチャンネル上で発言してしまう事故は極めてありえないでしょう。(もちろん、故意にメッセージ対象のチャンネル上での'listen'を設定可能です)
マイナスチャンネルは、クライアントがこれらのチャンネル上で直接的にチャットは不可能なので、スクリプトのコミュニケーション用としてよく知られています。("/-xxxx message" は"-xxxx"チャンネル上での"messeage"チャットにはなりませんので、チャンネルゼロ上での"/-xxxx message"チャットとなるでしょう。)[[llTextBox/ja|llTextBox]]に先立ってすることは、24バイトに制限した[[llDialog/ja|llDialog]]を用いることです。
 
あなたは、全てのあなたのスクリプトされたオブジェクトがこの小さな関数とユニークチャットチャンネルを持つことで、確実に安心することができます。
 
<lsl>integer dialog_channel; // top of script in variables
 
integer channel() { // top of script in functions
    return (integer)("0x"+llGetSubString((string)llGetKey(),-8,-1));
}
 
dialog_channel = channel(); // somewhere in actual script execution, such as state_entry()</lsl>
 
===表示===
 
'''message'''が8行以上を要求する場合、縦スクロールバーがダイアログに表示されるでしょう。
 
メッセージテキストは"\n"(改行)と"\t"(タブ)を用いて整形が可能です。あなたはフォントとサイズあるいは大きさには影響を及ぼすことはないでしょう。
 
ダイアログの実サイズも色も変更する方法はありません。
 
|also_events=
{{LSL DefineRow||[[listen/ja|listen]]|}}
|also_functions=
{{LSL DefineRow||[[llListen/ja|llListen]]|}}
{{LSL DefineRow||[[llTextBox/ja|llTextBox]]|}}
{{LSL DefineRow||[[llRegionSay/ja|llRegionSay]]|}}
{{LSL DefineRow||[[llWhisper/ja|llWhisper]]|10メートル制限でチャットを送信します}}
{{LSL DefineRow||[[llSay/ja|llSay]]|20メートル制限でチャットを送信します}}
{{LSL DefineRow||[[llShout/ja|llShout]]|100メートル制限でチャットを送信します}}
{{LSL DefineRow||[[llInstantMessage/ja|llInstantMessage]]|指定されたユーザにチャットを送信します}}
{{LSL DefineRow||[[llOwnerSay/ja|llOwnerSay]]|オーナのみにチャットを送信します}}
|also_tests
|also_articles=
{{LSL DefineRow||[[Dialog Menus|ダイアログメニュー: ステップバイステップガイド]]|全てのダイアログメニュープロセスの手引きです(初学者対象)。}}
|cat1=Chat
|cat1=Chat
|cat2=Communications
|cat2=Communications
|cat3=Dialog
|cat3=Dialog
|cat4}}
|cat4}}

Revision as of 06:50, 25 October 2008

要約

関数: llDialog( key avatar, string message, list buttons, integer chat_channel );

avatarのスクリーンにmessageと選択するbuttons、同様に無効ボタンを加えて、右上隅にダイアログボックスを表示します。これは単一なメッセージ配信から複合的なメニューシステムまで多数用いているレンダリングです。

• key avatar 同一 地域 にいるアバターの UUID
• string message 表示されるメッセージ
• list buttons ボタンのラベル
• integer chat_channel 出力チャネル、任意の整数

ボタンが押されたとき、avatarchat_channel上でボタンのテキストを叫びます。
チャットの位置はダイアログボックスが作られたときのプリムの場所です。

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

ボタンの配列
9   10 11
6 7 8  
3 4 5
0 1 2
チャネル定数 説明
DEBUG_CHANNEL 0x7FFFFFFF スクリプトのデバッグメッセージとエラーメッセージを受け取るチャットチャネル
PUBLIC_CHANNEL 0x0 近くのユーザ全員にブロードキャストされるチャットチャネル

警告

  • この関数は 1.0 秒間、スクリプトを停止します。
  • スクリプトでダイアログボックスを消す方法はありません。
  • スクリプトでユーザが小さな"ignore"ボタンを押した場合に探知する方法はありません。(このボタンを押した結果でチャットは生成されません)
  • ダイアログボックスからの入力と、同じユーザによる通常チャットを識別する方法はありません。
    • 応答がボタンの一つによるものではないことを想定することは重要です。
  • プリムがダイアログの作られた場所でのシャウトの範囲から外れた場合、応答は聞こえなくなるでしょう。
    • この制限は、装着物がダイアログボックスが作られた場所でのシャウト範囲を超えた場合でも作用します。

メッセージの制限

  • 8行を超えた場合、スクロールバーが現れます。
  • メッセージは512byteより少なく、かつ空にでは無いようにすべきです。それらの場合は デバッグチャンネルにてエラーがシャウトされるでしょう。

ボタンの限界

  • ボタンが空のリストの場合、"OK"のみのようなリストが初期値となるでしょう。
  • エラーはデバッグチャンネルにてシャウトされるでしょう。
    • 12ボタンよりもおおい場合
    • いくつかのリスト項目がstringでは無い場合
    • いくつかのリスト項目で、stringの長さ(byte計算)が0もしくは24より多い場合
All Issues ~ Search JIRA for related Bugs

サンプル

<lsl>integer channel = 1000; list pairs = [];

default {

   state_entry()
   {
       llListen(channel,"", "","");
   }
   touch_start(integer count)
   {
       llDialog(llDetectedKey(0), "This is a test dialog.\n\nPlease choose one of the below options.",
                ["Yes", "No", "0", "1"], channel);
   }
   
   listen(integer chan, string name, key id, string mes)
   {
       if(id == llGetOwnerKey(id))//won't listen to objects unless they aren't in the region.
           llSay(0,name + " (" + (string)llGetObjectDetails(id, (list)OBJECT_POS) + ") chose option " + mes);
   }
}</lsl>

便利なスニペット

<lsl>//Compact function to put buttons in "correct" human-readable order integer channel;

list order_buttons(list buttons) {

   return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4)
       + llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);

}

default {

   state_entry()
   {   // Create random channel within range [-1000000000,-2000000000]

channel = (integer)(llFrand(-1000000000.0) - 1000000000.0);

llListen(channel,"", "","");

   }
   touch_start(integer total_number)
   {
       llDialog(llDetectedKey(0),"\nPlease choose an option:\n",

order_buttons(["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]),channel);

   }
   listen(integer _chan, string _name, key _id, string _option)
   {
       llSay(0, _name + " chose option " + _option);
   }

}</lsl>

注意点

メニューシステム作成でダイアログボックスを用いるには、ダイアログメニュー: ステップバイステップガイド (初学者対象)を参照しましょう。

Tips

大きなマイナス域のチャンネルを使うのはよい手段です。(最大マイナス域での32bit integerで、これ以上はありえないマイナス域とすれば、-2,147,483,64です) <lsl>// Create random channel within range [-1000000000,-2000000000] integer channel = (integer)(llFrand(-1000000000.0) - 1000000000.0);

llDialog(llDetectedKey(0), "Please choose one of the below options:",

   ["Yes", "No", "0", "1"], channel);</lsl>

マイナスチャンネルは、クライアントがこれらのチャンネル上で直接的にチャットは不可能なので、スクリプトのコミュニケーション用としてよく知られています。("/-xxxx message" は"-xxxx"チャンネル上での"messeage"チャットにはなりませんので、チャンネルゼロ上での"/-xxxx message"チャットとなるでしょう。)llTextBoxに先立ってすることは、24バイトに制限したllDialogを用いることです。

あなたは、全てのあなたのスクリプトされたオブジェクトがこの小さな関数とユニークチャットチャンネルを持つことで、確実に安心することができます。

<lsl>integer dialog_channel; // top of script in variables

integer channel() { // top of script in functions

   return (integer)("0x"+llGetSubString((string)llGetKey(),-8,-1));

}

dialog_channel = channel(); // somewhere in actual script execution, such as state_entry()</lsl>

表示

messageが8行以上を要求する場合、縦スクロールバーがダイアログに表示されるでしょう。

メッセージテキストは"\n"(改行)と"\t"(タブ)を用いて整形が可能です。あなたはフォントとサイズあるいは大きさには影響を及ぼすことはないでしょう。

ダイアログの実サイズも色も変更する方法はありません。

関連項目

イベント

•  listen

関数

•  llListen
•  llTextBox
•  llRegionSay
•  llWhisper 10メートル制限でチャットを送信します
•  llSay 20メートル制限でチャットを送信します
•  llShout 100メートル制限でチャットを送信します
•  llInstantMessage 指定されたユーザにチャットを送信します
•  llOwnerSay オーナのみにチャットを送信します

記事

•  ダイアログメニュー: ステップバイステップガイド 全てのダイアログメニュープロセスの手引きです(初学者対象)。

特記事項

Search JIRA for related Issues

Signature

function void llDialog( key avatar, string message, list buttons, integer chat_channel );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。