Difference between revisions of "LlRequestInventoryData/ja"

From Second Life Wiki
Jump to navigation Jump to search
m (Undo revision 849492 by Mako Nozaki (Talk))
Line 6: Line 6:
|p1_type=string|p1_name=name|p1_desc
|p1_type=string|p1_name=name|p1_desc
|func_footnote
|func_footnote
|func_desc=オブジェクトのインベントリ内オブジェクトから、データを要求します。データが[[dataserver/ja|dataserver]]イベントで取得される時に提供されます。
|func_desc=インベントリオブジェクトにあるオブジェクトのデータを要求します。データが取得可能であれば、 {{LSLG/ja|dataserver}} イベントが発生します。
|return_text=[[dataserver/ja|dataserver]]で提供される時に識別で用いられるため
|return_text={{LSLG/ja|dataserver}} イベントが発生したときに、それを識別するキー
|spec
|spec
|caveats
|caveats
Line 13: Line 13:
{{{!}} {{Prettytable}}
{{{!}} {{Prettytable}}
{{!}}-{{Hl2}}
{{!}}-{{Hl2}}
! colspan="2" title="インベントリタイプの名前name Inventory Type"{{!}}{{LSL Param|名前}} の型
! colspan="2" {{!}}{{LSL Param|インベントリのタイプ}}  
! title="タイプキャストをdataserverイベントのデータ本体を返すときにデコードで必要とされます。" {{!}} [[dataserver/ja|dataserver]]
! {{!}} {{LSLG/ja|dataserver}}
! {{!}} 解説
! {{!}} 説明
{{!}}-
{{!}}-
{{LSL Constants/llRequestInventoryData/ja}}
{{LSL Constants/llRequestInventoryData/ja}}
{{!}}}
{{!}}}
|examples=
|examples=
<lsl>//-- Open map for owner to 1st landmark in object inventory on touch
<lsl>//-- タッチで、オブジェクトのインベントリの最初のランドマークをオーナーの世界地図で開きます。
//-- *MUST* be in an attached object (llMapDestination Requirement for non-touch use)
//-- *必ず* アタッチメントの中になければなりません。 (touch イベント以外で使用する場合の llMapDestination 要件より)
key vgKeyOwner;
key vgKeyOwner;


Line 31: Line 31:
     {
     {
       integer vIntLMcount = llGetInventoryNumber( INVENTORY_LANDMARK );
       integer vIntLMcount = llGetInventoryNumber( INVENTORY_LANDMARK );
       //-- make sure we have a landmark in invetory
       //-- ランドマークがインベントリにあるか確認します
       if (vIntLMcount)
       if (vIntLMcount)
       {
       {
Line 41: Line 41:
   dataserver( key vKeyNull, string vStrData )
   dataserver( key vKeyNull, string vStrData )
   {
   {
     //-- because we don't know who touched us in this event, this
     //-- 誰がこのイベントでタッチしたのかわからないので、
     //-- only works for the owner when called from the dataserver
     //-- dataserver から呼ばれたときはオーナーに対してしか動作しません。
     llMapDestination( llGetRegionName(), (vector)vStrData, ZERO_VECTOR );
     llMapDestination( llGetRegionName(), (vector)vStrData, ZERO_VECTOR );
   }
   }


   on_rez( integer vIntNull )
   on_rez( integer vIntNull )
  {
    llResetScript();
  }
  state_entry()
   {
   {
     vgKeyOwner = llGetOwner();
     vgKeyOwner = llGetOwner();
   }
   }
}</lsl>
<lsl>//簡単に設定できるテレポータ。プリムのインベントリの中にあるランドマークから行き先を設定します。
//注意: このテレポーターは llSitTarget の制限により、距離は 300 m までです。
//by Ilse Mannonen
//ステートに入ると、インベントリデータを要求し、インベントリで最初に見つかったランドマークをテキストに設定します。
//なければ、文句を言います。
//データを取得すると、着座ポイントを設定します。
//インベントリが変更されると、スクリプトをリセットします。
//座ると、その人をテレポートして立たせます。
//Thanks to Pol Tabla, who wrote the simple sit-teleport script I have adapted here
key requestid;
default
{
    state_entry()
    {
        //ランドマークがなければ文句を言います
        if (llGetInventoryNumber(INVENTORY_LANDMARK) == 0)
        {
            llSay(0, "There are no landmarks in me.  You need to put a landmark in me for me to work.");
        }
        else
        {
            //ランドマークの名前から、フローティングテキストを設定します
            llSetText("Teleport to " + llGetInventoryName(INVENTORY_LANDMARK, 0), <1.0, 1.0, 1.0>, 1.0);
            //ランドマークのデータをリクエストします
            requestid = llRequestInventoryData(llGetInventoryName(INVENTORY_LANDMARK, 0));
        }
    }
   
    dataserver(key id, string data)
    {
        if (id == requestid)
        {
            //データはベクトルのフォーマットになります
            rotation rot = ZERO_ROTATION / llGetRot();
            vector dest = (vector)data;
            vector offset = (dest - llGetPos()) * rot;
            llSitTarget(offset, rot);
        }
    }
   
    changed(integer change)
    {
        if (change & CHANGED_LINK)
        { // リンクが変更されました
            llSleep(0.5); // llUnSit はこの遅延でよりよく動作します
            key user = llAvatarOnSitTarget();
            if (user) { // 誰かが座っています
                llUnSit(user); // その人を立たせます
            }
        }
        //ビット演算を "if" で行うときは、else..if でやるよりも別々にやったほうがいいです。
        //万に一つ、インベントリやリンクの変更が同じイベントで報告される場合もあるかもしれないからです。
        if (change & CHANGED_INVENTORY)
        {
            //インベントリの変更でスクリプトをリセットします。これで、新しいランドマークを追加したときに
            //みんなが手動でリセットしなくてよくなります。
            llResetScript();
        }
    }
   
    on_rez(integer param)
    {
        llResetScript();
    }
}</lsl>
}</lsl>
|helpers
|helpers
|also_functions=
|also_functions=
{{LSL DefineRow||[[llMapDestination/ja|llMapDestination]]|}}
{{LSL DefineRow||{{LSLG/ja|llMapDestination}}|}}
|also_tests
|also_tests
|also_events
|also_events=
{{LSL DefineRow||{{LSLG/ja|dataserver}}|}}
|also_articles
|also_articles
|notes
|notes

Revision as of 20:44, 7 May 2010

要約

関数: key llRequestInventoryData( string name );

インベントリオブジェクトにあるオブジェクトのデータを要求します。データが取得可能であれば、 dataserver イベントが発生します。
dataserver イベントが発生したときに、それを識別するキーを key で返します。

• string name プリムの インベントリ の中にあるアイテム

インベントリのタイプ dataserver 説明
ランドマーク (vector) global_position_of_landmark = llGetRegionCorner() + (vector)data;

警告

  • この関数は 1.0 秒間、スクリプトを停止します。
  • name がプリムの中で見つからない場合、エラーが DEBUG_CHANNEL 上で叫ばれます。

サンプル

<lsl>//-- タッチで、オブジェクトのインベントリの最初のランドマークをオーナーの世界地図で開きます。 //-- *必ず* アタッチメントの中になければなりません。 (touch イベント以外で使用する場合の llMapDestination 要件より) key vgKeyOwner;

default {

 touch_start( integer vIntNull )
 {
   if (llDetectedKey( 0 ) == vgKeyOwner)
   {
     integer vIntLMcount = llGetInventoryNumber( INVENTORY_LANDMARK );
      //-- ランドマークがインベントリにあるか確認します
     if (vIntLMcount)
     {
       llRequestInventoryData( llGetInventoryName( INVENTORY_LANDMARK, 0 ) );
     }
   }
 }
 dataserver( key vKeyNull, string vStrData )
 {
    //-- 誰がこのイベントでタッチしたのかわからないので、
    //-- dataserver から呼ばれたときはオーナーに対してしか動作しません。
   llMapDestination( llGetRegionName(), (vector)vStrData, ZERO_VECTOR );
 }
 on_rez( integer vIntNull )
 {
   llResetScript();
 }
 state_entry()
 {
   vgKeyOwner = llGetOwner();
 }

}</lsl> <lsl>//簡単に設定できるテレポータ。プリムのインベントリの中にあるランドマークから行き先を設定します。 //注意: このテレポーターは llSitTarget の制限により、距離は 300 m までです。 //by Ilse Mannonen

//ステートに入ると、インベントリデータを要求し、インベントリで最初に見つかったランドマークをテキストに設定します。 //なければ、文句を言います。 //データを取得すると、着座ポイントを設定します。 //インベントリが変更されると、スクリプトをリセットします。 //座ると、その人をテレポートして立たせます。

//Thanks to Pol Tabla, who wrote the simple sit-teleport script I have adapted here

key requestid;

default {

   state_entry()
   {
       //ランドマークがなければ文句を言います
       if (llGetInventoryNumber(INVENTORY_LANDMARK) == 0)
       {
           llSay(0, "There are no landmarks in me.  You need to put a landmark in me for me to work.");
       }
       else
       {
           //ランドマークの名前から、フローティングテキストを設定します
           llSetText("Teleport to " + llGetInventoryName(INVENTORY_LANDMARK, 0), <1.0, 1.0, 1.0>, 1.0);
           //ランドマークのデータをリクエストします
           requestid = llRequestInventoryData(llGetInventoryName(INVENTORY_LANDMARK, 0));
       }
   }
   
   dataserver(key id, string data)
   {
       if (id == requestid)
       {
           //データはベクトルのフォーマットになります
           rotation rot = ZERO_ROTATION / llGetRot();
           vector dest = (vector)data;
           vector offset = (dest - llGetPos()) * rot;
           llSitTarget(offset, rot);
       }
   }
   
   changed(integer change)
   {
       if (change & CHANGED_LINK) 
       { // リンクが変更されました
           llSleep(0.5); // llUnSit はこの遅延でよりよく動作します
           key user = llAvatarOnSitTarget();
           if (user) { // 誰かが座っています
               llUnSit(user); // その人を立たせます
           }
       }
       //ビット演算を "if" で行うときは、else..if でやるよりも別々にやったほうがいいです。
       //万に一つ、インベントリやリンクの変更が同じイベントで報告される場合もあるかもしれないからです。
       if (change & CHANGED_INVENTORY)
       {
           //インベントリの変更でスクリプトをリセットします。これで、新しいランドマークを追加したときに
           //みんなが手動でリセットしなくてよくなります。
           llResetScript();
       }
   }
   
   on_rez(integer param)
   {
       llResetScript();
   }
}</lsl>

関連項目

イベント

•  dataserver

関数

•  llMapDestination

特記事項

Search JIRA for related Issues

Signature

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