イベント:dataserver


dataserver(key queryid, string data)

このイベントはリクエストされたデータがスクリプトに戻るときに発生します。
データはthe llGetNotecardLine, llGetNumberOfNotecardLines, llRequestAgentData, llRequestInventoryData,llRequestSimulatorDataといった関数を使ったときにリクエストされます。
queryidパラメーターはこれらの関数のすべてから返されるキーです。
dataパラメーターはリクエストされた情報です。
(それを解釈する方法についての情報は、関数呼び出しの記述を参照してください。)

dataserverイベントはプリム中の全てのスクリプトで発生します。
これはクエリーIDをチェックする必要を示します。
Dataserverは必ずしもリクエストした順番で答えが来るわけではありません。
したがって、保留しているリクエストが複数ある場合は、どの答えを受け取られているかを特定するために常にqueryidキーを使用してください。
一度に処理するリクエストが唯一のもので、dataserverイベントを使うスクリプトがプリムの中で一つだけだった場合はこの問題は起こりません。

【注意】:Dataserverリクエストは、リクエストがなされたプリムの中のすべてのスクリプトにdataserver()のイベントを発生させます。
dataserver() eventsは例え、同じオブジェクトにリンクされていたとしても、他のプリムに入っているスクリプトにはエベントを発生させません。
これは、問題となるプリムが親/ルート・プリム、または子プリムかどうかにかかわらず同じです。

【覚書】誤ったリクエストでは何もおきませんし、dataserver()イベントが発生する要因にもなりません。(例えば、notecard lineがリクエストされたが、ノートカードを示さないキーが与えられていた場合)
タイマーイベントは定義された時間の後にdataserver() イベントが発生したかどうかを調べることこれらの何もおきない失敗を捉えることが出来ます。

dataserver()イベントは相当遅いので、前述の関数を使用する場合はこのことを念頭においてください。



【関数】
関数の解説
llGetNotecardLine ノートカードの中の指定された行の内容をリクエストします。
llGetNumberOfNotecardLines ノートカードの全行数をリクエストします。
llRequestAgentData エージェントのオンラインステータス、名前、アカウントの生年月日、及びレーティング情報を陸得るsとします。
llRequestInventoryData 現在はランドマークの示す位置を取得するのみに制限されています。
llRequestSimulatorData SIMのステータス、位置、レーティング情報(PG/Mature)をリクエストします。

例:
key request;
default 
{
   [[state_entry]]() 
   {
       request = llRequestAgentData(llGetOwner(), DATA_BORN);
// request your SL creation date
   }
   
   dataserver(key queryid, string data) 
   {
       if( request == queryid )
           llSay(0, "You were born on " + data);
   }
}



Example of working with multiple requests: KriAyakashi
list avatars;
list requests;
key avatar;
default
{
  state_entry()
  {
      llSensor("", NULL_KEY, AGENT, 96.0, PI);
  }
  [[sensor]](integer num_detected)
  {
     integer i;
     avatars = [];
     requests = [];
     for(i=0; i<num_detected; ++i)
     {
        avatar = llDetectedKey( i );
        avatars  += [avatar];
// to use less memory use this hack: avatars = (avatars=[]) + avatars + [avatar];
        requests += [llRequestAgentData(avatar, DATA_BORN)];
// to use less memory use this hack: requests = (requests=[]) + requests + [llRequestAgentData(llDetectedKey(i), DATA_BORN)];    
     }
  }
  dataserver(key queryid, string data)
  {
      integer idx = llListFindList(requests, [queryid]);
      avatar = llList2Key(avatars, idx);
// as we added the requests in the same order as avatars
      llOwnerSay(llKey2Name(avatar)+" was born "+data);
  }
}
最終更新:2008年04月30日 13:15