Difference between revisions of "LlCreateLink/ja"

From Second Life Wiki
Jump to navigation Jump to search
Line 1: Line 1:
{{LSL_Function/permission/ja|PERMISSION_CHANGE_LINKS|grant=the owner}}
{{LSL_Function/permission/ja|PERMISSION_CHANGE_LINKS|grant=オーナー}}{{LSL_Function/prim/ja|target|sim=*}}{{LSL_Function/ja
{{LSL_Function/ja
|func_id=141|func_sleep=1.0|func_energy=10.0
|func_id=141|func_sleep=1.0|func_energy=10.0
|func=llCreateLink|sort=CreateLink
|func=llCreateLink|sort=CreateLink
|p1_type=key|p1_name=target|p1_desc=同一リージョン内のプリム。
|p1_type=key|p1_name=target
|p2_type=integer|p2_name=parent|p2_desc=[[FALSE/ja|FALSE]]の場合、'''target'''はルートになります。
|p2_type=integer|p2_name=parent|p2_desc={{LSLG/ja|FALSE}} の場合、'''target''' はルートプリムになります。 {{LSLG/ja|TRUE}} の場合、スクリプトが入っているオブジェクトがルートプリムになります。
|func_footnote='''target'''は同じオーナが編集可能でかつ所有しなくはいけません。<br/>このオブジェクトもまた編集可能でなければなりません。
|func_footnote='''target''' は編集可能で同一オーナーが所有するものでなければなりません。<br/>
|func_desc=スクリプトのあるオブジェクトと'''target'''をリンクすることを試みます。
このオブジェクトは編集可能でなければなりません。
|spec
|func_desc=スクリプトの入っているオブジェクトと '''target''' のリンクを試みます。
|caveats=*'''target'''がリージョン内、もしくはオブジェクト内にない場合は、[[DEBUG_CHANNEL/ja|DEBUG_CHANNEL]]にてエラーが叫ばれます。
|spec=子プリムになるオブジェクト ('''parent''' が {{LSLG/ja|TRUE}} の場合は '''target'''、'''parent''' が {{LSLG/ja|FALSE}} の場合はスクリプトが入っているオブジェクト) は親となるオブジェクトのリンクセットに 2 から始まるリンク番号で挿入されます。例えば、親となるオブジェクトのリンク順が A1, A2, A3 で、子となるオブジェクトのリンク順が B1, B2, B3 である場合、できあがったオブジェクトのリンク順は A1, B1, B2, B3, A2, A3 となります。
*オブジェクトか'''target'''が、編集不可能かオーナが異なるかのいずれかの場合、[[DEBUG_CHANNEL/ja|DEBUG_CHANNEL]]上でエラーが叫ばれます。
|caveats=*'''target''' が地域にない場合、プリムでない場合、アバターが装着している場合、エラーが {{LSLG/ja|DEBUG_CHANNEL}} で叫ばれます。
*オブジェクト同士のリンク可能な最大距離は、この[http://forums.secondlife.com/showthread.php?t=11883 投稿]のAndrew Lindenによって説明されているとおり、オブジェクトの大きさによって決まります。
*オブジェクトと '''target''' のどちらかが編集可能でない場合や双方のオーナーが異なる場合、エラーが {{LSLG/ja|DEBUG_CHANNEL}} で叫ばれます。
*親となるオブジェクトと '''target''' が離れすぎていると (物理的な大きさによって決まる) 、リンクに失敗します。
**最大距離はここで説明されています: {{LSLG/ja|Linkability Rules|リンク規則}}
*アタッチメントの内にあるスクリプトからこの関数が呼び出された場合、エラーを出さずに失敗します。
|constants
|constants
|examples
|examples=<lsl>// 新しいオブジェクトを作成し、子プリムとしてリンクします。
|helpers
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);
    }
}</lsl>
 
|helpers=
<lsl>
// 子プリムのキー
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;
        }
    }
}             
</lsl>
|also_functions={{LSL DefineRow||{{LSLG/ja|llBreakLink}}|リンクを解除します}}
{{LSL DefineRow||{{LSLG/ja|llBreakAllLinks}}|全てのリンクを解除します}}
|also_tests
|also_tests
|also_events
|also_events={{LSL DefineRow||{{LSLG/ja|changed}}|{{LSLG/ja|CHANGED_LINK}}}}
|also_articles
|also_articles=
{{LSL DefineRow||{{LSLG/ja|Linkability Rules|リンク規則}}|}}
|notes
|notes
|cat1=Link
|cat1=Link
|cat2
|cat2=Link/Management
|cat3
|cat3
|cat4
|cat4
}}
}}

Revision as of 17:01, 2 May 2010

要約

関数: llCreateLink( key target, integer parent );

スクリプトの入っているオブジェクトと target のリンクを試みます。

• key target 同じ 地域 にある プリムUUID
• integer parent FALSE の場合、target はルートプリムになります。 TRUE の場合、スクリプトが入っているオブジェクトがルートプリムになります。

実行するには、llRequestPermissions による PERMISSION_CHANGE_LINKS 権限がオーナーから与えられなければなりません。 target は編集可能で同一オーナーが所有するものでなければなりません。
このオブジェクトは編集可能でなければなりません。

仕様

子プリムになるオブジェクト (parentTRUE の場合は targetparentFALSE の場合はスクリプトが入っているオブジェクト) は親となるオブジェクトのリンクセットに 2 から始まるリンク番号で挿入されます。例えば、親となるオブジェクトのリンク順が A1, A2, A3 で、子となるオブジェクトのリンク順が B1, B2, B3 である場合、できあがったオブジェクトのリンク順は A1, B1, B2, B3, A2, A3 となります。

警告

  • この関数は 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 が離れすぎていると (物理的な大きさによって決まる) 、リンクに失敗します。
  • アタッチメントの内にあるスクリプトからこの関数が呼び出された場合、エラーを出さずに失敗します。

サンプル

<lsl>// 新しいオブジェクトを作成し、子プリムとしてリンクします。 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);
   }
}</lsl>

便利なスニペット

<lsl> // 子プリムのキー 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;
       }
   }

} </lsl>

関連項目

イベント

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

関数

•  llGetPermissions 付与されている権限を取得します
•  llGetPermissionsKey 権限を許可したエージェントを取得します
•  llRequestPermissions 権限を要求します
•  llBreakLink リンクを解除します
•  llBreakAllLinks 全てのリンクを解除します

記事

•  権限/スクリプト
•  リンク規則

特記事項

Search JIRA for related Issues

Signature

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