Dataserver/ja

From Second Life Wiki
Jump to: navigation, search

説明

イベント: dataserver( key queryid, string data ){ ; }

タスクが非同期でデータを取得したときに発生します。

• 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 イベントでデータをリクエストしても全然いいのですが、イベントの中で無限ループが発生しないように気をつけてください。ループが終了するまでイベントは実行されっぱなしになり、そこで生成された全てのリクエストが最初の取得したときのデータで送りこまれることになります。

特記事項

議論

   Script dataserver events become permanently blocked until sim restart
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。