LlDialog/ja

From Second Life Wiki
< LlDialog
Revision as of 18:03, 14 February 2008 by Asuka Neely (talk | contribs) (New page: {{multi-lang}}{{LSL_Function/avatar/ja|avatar}}{{LSL_Function/ja |sort=Dialog |func_id=247 |func_sleep=1.0 |func_energy=10.0 |func=llDialog |p1_type=key|p1_name=avatar|p1_desc |p2_type=str...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

要約

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

avatarのスクリーンにmessagebuttonsを加えたダイアログボックスを表示します。

• key avatar アバターの UUID
• string message
• list buttons
• integer chat_channel

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

ボタンの配列
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より多い場合

サンプル

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

注意点

大きなマイナス域のチャンネルを使うのはよい手段です。(最大マイナス域での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>

マイナスチャンネル上でアバタがチャットをするのは不可能で、幾つかの他のオブジェクトが、なんらかのそのようなチャンネル上で発言してしまう事故は極めてありえないでしょう。(もちろん、故意にメッセージ対象のチャンネル上での'listen'を設定可能です)

特記事項

Search JIRA for related Issues

Signature

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