Dataserver/ja
Jump to navigation
Jump to search
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
説明
イベント: dataserver( key queryid, string data ){ ; }24 | イベント ID |
タスクが非同期でデータを取得したときに発生します。
• key | queryid | – | リクエストした関数の復帰値と一致します | |
• string | data | – | リクエストしたデータ (必要に応じて string に型変換) |
関数 | 入力 | Decode | 説明 | ||||
---|---|---|---|---|---|---|---|
llGetNotecardLine | string | リクエストされたノートカードの行数は、 255 バイト以内である必要があります。 EOF の場合、リクエストされた行は最終行を超えています。 | |||||
llGetNumberOfNotecardLines | (integer) | リクエストしたノートカードの行数。 | |||||
llRequestAgentData | DATA_ONLINE | 1 | (integer) boolean | 要求されたエージェントがオンラインの場合 | |||
DATA_NAME | 2 | string | 要求されたエージェント名 | ||||
DATA_BORN | 3 | string | YYYY-MM-DD の ISO 8601 フォーマットで文字列にした、アカウント作成 (誕生) 日 | ||||
DATA_RATING | 4 | llCSV2List() | 廃止: [0, 0, 0, 0, 0, 0]を返します。 [pos_behavior, neg_behavior, pos_appearance, neg_appearance, pos_building, neg_building] を返すために使用します。 | ||||
DATA_PAYINFO | 8 | (integer) mask | フラグ | 説明 | |||
PAYMENT_INFO_ON_FILE | 0x1 | 支払い情報登録済みの場合。 | |||||
PAYMENT_INFO_USED | 0x2 | 支払い情報使用済みの場合。 | |||||
llRequestDisplayName | (string) | エージェントの表示名 | |||||
llRequestUsername | (string) | エージェントのユーザ名 (レガシー形式: "first.last") | |||||
llRequestInventoryData | ランドマーク | (vector) | global_position_of_landmark = llGetRegionCorner() + (vector)data; | ||||
llRequestSimulatorData | DATA_SIM_POS | 5 | (vector) | 地域の グローバル位置. | |||
DATA_SIM_STATUS | 6 | string | 値 | 説明 | |||
"up" | 地域は現在稼働しています。 | ||||||
"down" | 地域は現在稼働していません。 | ||||||
"starting" | 地域は現在起動処理中です。 | ||||||
"stopping" | 地域は現在停止処理中です。 | ||||||
"crashed" | 地域はクラッシュしました。 | ||||||
"unknown" | 地域のステータスは不明か、不明な地域です。 | ||||||
DATA_SIM_RATING | 7 | string | 地域の区分 "PG"、 "MATURE"、 "UNKNOWN" |
警告
- dataserver は必ずしもリクエストした順番を守って現れるわけではありません。
- リクエストが複数たまることがある場合、常に queryid キーを使用して、どの回答を受け取ったかを判断するようにしましょう。
- dataserver をリクエストすると、リクエストのあったプリムと同じプリムの全てのスクリプトで dataserver イベントが発生します。
- 同じプリムで dataserver イベントを複数発生させることがある場合、常に queryid キーを使用して、どの回答を受け取ったかを判断するようにしましょう。
- dataserver イベントは同じリンクセットの中の違うプリムの中のスクリプトでは発生しません。
- dataserver イベントの前に同じ query_id で他のデータがリクエストされていると、結果データはめちゃくちゃになります。データの破壊を防ぐには、 if(query_key == query_id) というような問い合わせを行ってください。しかしこれには欠点があります (上の警告を見てください) 。
サンプル
key kQuery;
integer iLine = 0;
default {
state_entry() {
llSay(0, "Reading notecard...");
kQuery = llGetNotecardLine("My Notecard", iLine);
}
dataserver(key query_id, string data) {
if (query_id == kQuery) {
// ノートカードの行数
if (data == EOF) {
llSay(0, "No more lines in notecard, read " + (string)iLine + " lines.");
} else {
// 行数をインクリメント
llSay(0, "Line " + (string)iLine + ": " + data);
//次の行をリクエスト
++iLine;
kQuery = llGetNotecardLine("My Notecard", iLine);
}
}
}
}
注意点
- dataserver イベントでデータをリクエストしても全然いいのですが、イベントの中で無限ループが発生しないように気をつけてください。ループが終了するまでイベントは実行されっぱなしになり、そこで生成された全てのリクエストが最初の取得したときのデータで送りこまれることになります。
特記事項
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。