LlTeleportAgentGlobalCoords/ja

From Second Life Wiki
< LlTeleportAgentGlobalCoords
Revision as of 18:10, 7 September 2012 by Mako Nozaki (talk | contribs) (Created page with "{{LSL_Function/ja |inject-2={{LSL Function/avatar/ja|agent|region=*}} |inject-3={{LSL_Function/permission/ja|PERMISSION_TELEPORT|grant={{LSLP|agent}}}} |func=llTeleportAgentGloba…")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

要約

関数: llTeleportAgentGlobalCoords( key agent, vector global_coordinates, vector region_coordinates, vector look_at );

指定した region_coordinates のリージョンの region_coordinatesagent の座標を設定し、テレポートさせます。アバターは到着すると look_at のローカル座標で指定される場所を見るように立ちます。リージョンのグローバル座標は llRequestSimulatorData(region_name, DATA_SIM_POS) を使うと取得できます。

• key agent 同一 地域 にいるアバターの UUID (テレポートするアバター)
• vector global_coordinates テレポート先のリージョンのグローバル座標。 llRequestSimulatorData(region_name, DATA_SIM_POS) で取得できます。
• vector region_coordinates テレポート先のリージョン内での着地場所。ローカル座標で指定します。
• vector look_at テレポートが完了したときにアバターが向く先。ローカル座標で指定します。

実行するには、llRequestPermissions による PERMISSION_TELEPORT 権限がagentから与えられなければなりません。 llRequestSimulatorDatallTeleportAgentGlobalCoords の組み合わせで、リージョンの名前を使ってアバターをテレポートさせることができるようになります。

警告

  • 権限の自動付与に頼らないようにしましょう。常に run_time_permissions イベントを使用しましょう。
  • スクリプトに PERMISSION_TELEPORT の権限が不足していると、スクリプトはエラーを DEBUG_CHANNEL で叫び、操作に失敗します (しかしスクリプトは処理を続けます)。
  • PERMISSION_TELEPORTagent以外の人から許可され、関数が呼び出されると、 DEBUG_CHANNEL でエラーが叫ばれます。
  • いったん PERMISSION_TELEPORT 権限が付与されると、スクリプトの中で (例えば、新しい llRequestPermissions 呼び出しなどにより) 権限をはく奪することができません。スクリプトはオブジェクトが derez (削除、取り外し、取り込み) されない限り権限が失われません。
  • llAttachToAvatarTemp で装着されたオブジェクトの中のスクリプトでは、この関数は動作しません。
  • この関数でテレポートさせることができるのは、オブジェクトのオーナーだけです。
  • 座っているアバターをこの関数を使ってテレポートさせることはできません。最初に llUnSit する必要があります。
All Issues ~ Search JIRA for related Bugs

サンプル

<lsl> string simName = "Help Island Public"; vector simGlobalCoords;

vector landingPoint = <128.0, 128.0, 24.0>;

key owner;


default {

   on_rez(integer start_param)
   {
       llResetScript();
   }
   changed(integer change)
   {
       if (change & CHANGED_OWNER)
           llResetScript();
   }
   state_entry()
   {
       owner = llGetOwner();
       llRequestPermissions(owner, PERMISSION_TELEPORT);
       llRequestSimulatorData(simName, DATA_SIM_POS);
   }
   touch_start(integer total_number)
   {
       key id = llDetectedKey(0);
       if (id == owner)
       {
           if (simGlobalCoords == ZERO_VECTOR)
           {
               llOwnerSay("設定エラー。TPのリクエストが却下されました。再度実行してください!");
               llResetScript();
           }
           else
           {
               llOwnerSay("テレポート先: http://maps.secondlife.com/secondlife/"
                   + llEscapeURL(simName) + "/" + (string)llRound(landingPoint.x)
                   + "/" + (string)llRound(landingPoint.y) + "/" + (string)llRound(landingPoint.z) + "/");
               llTeleportAgentGlobalCoords(owner, simGlobalCoords, landingPoint, ZERO_VECTOR);
           }
       }
       else
       {
           // llRegionSayTo は llInstantMessage よりも動作が軽快です。
           // また、アバターは同一 SIM に存在するとみなして大丈夫です。
           llRegionSayTo(id, PUBLIC_CHANNEL,
               "ごめんなさい。オブジェクトの所有者でない方をテレポートさせることはできません。");
       }
   }
   run_time_permissions(integer perm)
   {
       // パーミッションの申請が却下された場合 (! は NOT の意味)
       if (!(perm & PERMISSION_TELEPORT))
       {
           llOwnerSay("テレポートするには、承認してもらう必要があります。");
           llRequestPermissions(owner, PERMISSION_TELEPORT);
       }
   }

// dataserver イベントは、データが戻ってきた場合にのみ呼ばれます。 // つまり、このイベントが存在しない SIM にデータをリクエストした場合、 // このイベントが呼ばれることはありません。

   dataserver(key query_id, string data)
   {
       simGlobalCoords = (vector)data;
       // llOwnerSay("SIM のグローバル座標: " + (string)simGlobalCoords);
   }

}

</lsl>

関連項目

イベント

•  run_time_permissions 権限取得イベント

関数

•  llGetPermissions 付与されている権限を取得します
•  llGetPermissionsKey 権限を許可したエージェントを取得します
•  llRequestPermissions 権限を要求します
•  llRequestSimulatorData SIM の位置を取得するのに便利な関数
•  llTeleportAgent SIM内でのエージェントのテレポート

記事

•  権限/スクリプト

特記事項

Search JIRA for related Issues

Signature

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