LlCreateLink/ja
Jump to navigation
Jump to search
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
要約
関数: llCreateLink( key target, integer parent );スクリプトの入っているオブジェクトと target のリンクを試みます。
• key | target | – | 同じ 地域 にある プリム の UUID | |
• integer | parent | – | FALSE の場合、target はルートプリムになります。 TRUE の場合、スクリプトが入っているオブジェクトがルートプリムになります。 |
実行するには、llRequestPermissions による PERMISSION_CHANGE_LINKS 権限がオーナーから与えられなければなりません。
target は編集可能で同一オーナーが所有するものでなければなりません。
このオブジェクトは編集可能でなければなりません。
仕様
警告
- この関数は 1.0 秒間、スクリプトを停止します。
- 権限の自動付与に頼らないようにしましょう。常に run_time_permissions イベントを使用しましょう。
- スクリプトに PERMISSION_CHANGE_LINKS の権限が不足していると、スクリプトはエラーを DEBUG_CHANNEL で叫び、操作に失敗します (しかしスクリプトは処理を続けます)。
- PERMISSION_CHANGE_LINKS がオーナー以外の人から許可され、関数が呼び出されると、 DEBUG_CHANNEL でエラーが叫ばれます。
- いったん PERMISSION_CHANGE_LINKS 権限が付与されると、スクリプトの中で (例えば、新しい llRequestPermissions 呼び出しなどにより) 権限をはく奪することができません。スクリプトはオブジェクトが derez (削除、取り外し、取り込み) されない限り権限が失われません。
- target が地域にない場合、プリムでない場合、アバターが装着している場合、エラーが DEBUG_CHANNEL で叫ばれます。
- オブジェクトと target のどちらかが編集可能でない場合や双方のオーナーが異なる場合、エラーが DEBUG_CHANNEL で叫ばれます。
- 親となるオブジェクトと target が離れすぎていると (物理的な大きさによって決まる) 、リンクに失敗します。
- 最大距離はここで説明されています: リンク規則
- アタッチメントの内にあるスクリプトからこの関数が呼び出された場合、エラーを出さずに失敗します。
サンプル
// 新しいオブジェクトを作成し、子プリムとしてリンクします。
string ObjectName = "Object Name Here";
// 注意: オブジェクトのインベントリにあるオブジェクトの名前でなければなりません。
default
{
touch_start(integer count)
{
// オブジェクトがタッチされると、できるかどうかを試す前に確認します。
llRequestPermissions(llGetOwner(), PERMISSION_CHANGE_LINKS);
}
run_time_permissions(integer perm)
{
// リンクできるのであれば、ひと手間かけてオブジェクトを rez します。
if (perm & PERMISSION_CHANGE_LINKS)
llRezObject(ObjectName, llGetPos() + <0,0,0.5>, ZERO_VECTOR, llGetRot(), 0);
else
llOwnerSay("Sorry, we can't link.");
}
object_rez(key id)
{
// 注意: 状況によっては動作しない場合があります。
// これは親オブジェクトです。新しく作った子とリンクします。
llCreateLink(id, TRUE);
}
}
便利なスニペット
// 子プリムのキー
key kChild = NULL_KEY;
integer bLink = TRUE; // このスクリプトはリンクされるオブジェクトにあることが前提です
default
{
state_entry()
{
// リンクを変更する許可を得ます
llRequestPermissions(llGetOwner(), PERMISSION_CHANGE_LINKS);
// 子プリムのキーを取得します
kChild = llGetLinkKey(2);
}
touch_start(integer nTotalCliquor)
{
if (bLink)
{
// 自分のリンクを全て解除し、1.5 秒待機します
llBreakAllLinks();
llSleep(1.5);
// リンクが解除されました
llSay(0, "Unlinked, click to link");
bLink = FALSE;
}
else
{
// リンクをやり直します
llCreateLink(kChild, TRUE);
llSleep(1.5);
// リンクしました
llSay(0, "Linked, click to unlink");
bLink = TRUE;
}
}
}
関連項目
イベント
• | run_time_permissions | – | 権限取得イベント | |
• | changed | – | CHANGED_LINK |
関数
• | llGetPermissions | – | 付与されている権限を取得します | |
• | llGetPermissionsKey | – | 権限を許可したエージェントを取得します | |
• | llRequestPermissions | – | 権限を要求します | |
• | llBreakLink | – | リンクを解除します | |
• | llBreakAllLinks | – | 全てのリンクを解除します |
記事
• | 権限/スクリプト | |||
• | リンク規則 |
特記事項
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。