LlBreakLink/ja

From Second Life Wiki
Jump to: navigation, search

要約

関数: llBreakLink( integer linknum );

オブジェクトのリンクセットにて、指定されたリンク番号のプリムのリンクを解除します。

• integer linknum リンク 番号 (0: リンクなし, 1: ルートプリム, >1: 子プリム)

実行するには、llRequestPermissions による PERMISSION_CHANGE_LINKS 権限がオーナーから与えられなければなりません。

警告

  • 権限の自動付与に頼らないようにしましょう。常に run_time_permissions イベントを使用しましょう。
  • スクリプトに PERMISSION_CHANGE_LINKS の権限が不足していると、スクリプトはエラーを DEBUG_CHANNEL で叫び、操作に失敗します (しかしスクリプトは処理を続けます)。
  • PERMISSION_CHANGE_LINKS がオーナー以外の人から許可され、関数が呼び出されると、 DEBUG_CHANNEL でエラーが叫ばれます。
  • いったん PERMISSION_CHANGE_LINKS 権限が付与されると、スクリプトの中で (例えば、新しい llRequestPermissions 呼び出しなどにより) 権限をはく奪することができません。スクリプトはオブジェクトが derez (削除、取り外し、取り込み) されない限り権限が失われません。
  • この関数は、リンク解除の対象となっているプリムに座っていなくても、座っているアバターをオブジェクトから外します。
  • この関数は、アタッチメントの内から呼び出された場合はエラーを出さずに失敗します。
  • この関数は、オーナーがスクリプトの入っているオブジェクトの編集権限を持っていない場合は失敗します。システムメッセージ "Delink failed because you do not have edit permission" がオーナーに通知されます。
  • A prim with PERMISSION_CHANGE_LINKS 権限をもつプリムは、リンクセットからどのプリムのリンクも解除することができます。当該プリムでもルートプリムでもです。
  • linknum が現在サポートする LINK_* フラグは LINK_ROOT のみです。SVC-3510

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   LINK_* flags do not work with llBreakLink

サンプル

//-- リンクを変更する許可を求め、タッチすると当該プリムと他のオブジェクトの間のリンクを解除します。
default{
  state_entry(){
    llRequestPermissions( llGetOwner(), PERMISSION_CHANGE_LINKS );
  }
 
  touch_start( integer vIntTouched ){
    llBreakLink( llGetLinkNumber() );
  }
}

注意点

リンク番号

オブジェクトを構成するそれぞれのプリムにはアドレスがあります。それがリンク番号です。オブジェクトの特定のプリムにアクセスするには、そのプリムのリンク番号を知らなければなりません。リンク番号はプリムに振られますが、オブジェクトに座っているアバターにも振られます。

  • オブジェクトが単一のプリムで構成されていて、アバターが座っていないとき、(ルート)プリムのリンク番号は 0 です。
  • しかし、オブジェクトが複数のプリムで構成されていたり、オブジェクトに座っているアバターがいたりすると、ルートプリムのリンク番号は 1 となります。

アバターがオブジェクトに座ると、リンクセットの末尾に追加され、いちばん大きなリンク番号が振られることになります。さらに、アバターがオブジェクトに座っている場合、アバターを立たせないと、プリムのリンク・リンク解除ができません。

プリムやアバターの数え方

オブジェクトのプリムや、プリムに座っているアバターの数を調べるのに、2つの関数があります。

  • llGetNumberOfPrims() - プリムと座っているアバターの数を返します。
  • llGetObjectPrimCount(llGetKey()) - オブジェクトのプリムの数だけを返しますが、アタッチメントとなっている場合は 0 を返します。
integer GetPrimCount() { //常にプリムの数だけを返します。
    if(llGetAttached())//装着されているか?
        return llGetNumberOfPrims();//アバターとプリムの数を返しますが、アタッチメントの上には座れないのでこれでいいです。
    return llGetObjectPrimCount(llGetKey());//プリムの数だけを返しますが、アタッチメントの場合ここは通りません。
}

関連項目

イベント

•  run_time_permissions 権限取得イベント
•  changed CHANGED_LINK

関数

•  llGetLinkNumber スクリプトが入っているプリムのリンク番号を取得します。
•  llGetPermissions 付与されている権限を取得します
•  llGetPermissionsKey 権限を許可したエージェントを取得します
•  llRequestPermissions 権限を要求します
•  llBreakAllLinks 全てのリンクを解除します
•  llCreateLink 他のオブジェクトにリンクします

記事

•  権限/スクリプト

特記事項

All Issues

~ Search JIRA for related Issues
   LINK_* flags do not work with llBreakLink

Signature

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