LlDialog/ja

From Second Life Wiki
< LlDialog
Revision as of 03:51, 12 April 2010 by Mako Nozaki (talk | contribs) (勘違い。元に戻す。)
Jump to navigation Jump to search

要約

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