LlDialog/ja

From Second Life Wiki

Jump to: navigation, search

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

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

• key avatar 同一リージョンに居るアバターの UUID
• string message 表示されるメッセージ
• list buttons ボタンのラベル
• integer chat_channel 出力チャンネル、いずれかのinteget値

ボタンが押されたとき、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より多い場合

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);
    }
}

部分的な利用

//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);
    }
}

ノート

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

Tips

大きなマイナス域のチャンネルを使うのはよい手段です。(最大マイナス域での32bit integerで、これ以上はありえないマイナス域とすれば、-2,147,483,64です)

// 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);

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

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

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()

表示

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

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

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

関連項目

イベント

•  listen

関数

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

項目

•  ダイアログメニュー: ステップバイステップガイド 全てのダイアログメニュープロセスの手引きです(初学者対象)。
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。
Personal tools
In other languages