LlTeleportAgentGlobalCoords/ja
Jump to navigation
Jump to search
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
要約
関数: llTeleportAgentGlobalCoords( key agent, vector global_coordinates, vector region_coordinates, vector look_at );
指定した region_coordinates のリージョンの region_coordinates に agent の座標を設定し、テレポートさせます。アバターは到着すると 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から与えられなければなりません。 llRequestSimulatorData と llTeleportAgentGlobalCoords の組み合わせで、リージョンの名前を使ってアバターをテレポートさせることができるようになります。
警告
- 権限の自動付与に頼らないようにしましょう。常に run_time_permissions イベントを使用しましょう。
- スクリプトに PERMISSION_TELEPORT の権限が不足していると、スクリプトはエラーを DEBUG_CHANNEL で叫び、操作に失敗します (しかしスクリプトは処理を続けます)。
- PERMISSION_TELEPORT がagent以外の人から許可され、関数が呼び出されると、 DEBUG_CHANNEL でエラーが叫ばれます。
- いったん PERMISSION_TELEPORT 権限が付与されると、スクリプトの中で (例えば、新しい llRequestPermissions 呼び出しなどにより) 権限をはく奪することができません。スクリプトはオブジェクトが derez (削除、取り外し、取り込み) されない限り権限が失われません。
- llAttachToAvatarTemp で装着されたオブジェクトの中のスクリプトでは、この関数は動作しません。
- この関数でテレポートすることができるのは、オブジェクトのオーナーだけです。
- 座っているアバターをこの関数を使ってテレポートさせることはできません。最初に llUnSit する必要があります。
サンプル
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);
}
}
関連項目
イベント
• | run_time_permissions | – | 権限取得イベント |
関数
• | llGetPermissions | – | 付与されている権限を取得します | |
• | llGetPermissionsKey | – | 権限を許可したエージェントを取得します | |
• | llRequestPermissions | – | 権限を要求します | |
• | llRequestSimulatorData | – | SIM の位置を取得するのに便利な関数 | |
• | llTeleportAgent | – | SIM内でのエージェントのテレポート |
記事
• | 権限/スクリプト |
特記事項
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。