LlClearLinkMedia/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: integer llClearLinkMedia( integer link, integer face );

指定されたリンク番号 のメディアと全ての パラメタ をクリア (消去) します。
操作の成功失敗を表す STATUS_* フラグを integer で返します。

• integer link リンク 番号 (0: リンクなし, 1: ルートプリム, >1: 子プリム) または LINK_* フラグ
• integer face 番号

フラグ 説明
LINK_ROOT 1 リンクセットの中のルートプリムに送ります
フラグ 説明
LINK_THIS -4 スクリプトの入った自プリムに送ります

成功失敗フラグ 説明
LSL_STATUS_OK 0 関数呼び出しに成功しました
LSL_STATUS_MALFORMED_PARAMS 1000 不正な形式のパラメタ呼び出しです
LSL_STATUS_TYPE_MISMATCH 1001 引数の型が一致しません
LSL_STATUS_BOUNDS_ERROR 1002 引数の数が一致しません
LSL_STATUS_NOT_FOUND 1003 オブジェクトまたはアイテムが見つかりませんでした
LSL_STATUS_NOT_SUPPORTED 1004 この機能はサポートされていません
LSL_STATUS_INTERNAL_ERROR 1999 内部エラーが発生しました
LSL_STATUS_WHITELIST_FAILED 2001 ブロックされました

警告

サンプル

//  when dropping this script into an object
//  it will remove all set media-on-a-prim
//  on all sides of every prim and then
//  the script will delete itself




integer GetPrimCount()
{
    if(llGetAttached())
        return llGetNumberOfPrims();

    return llGetObjectPrimCount(llGetKey());
}

publish_returned_status_flag(integer inputLink, integer inputFace, integer inputStatus)
{
    /* if (inputInteger == 0) */ string outputStatus = "STATUS_OK";
    if (inputStatus == 1000) outputStatus = "STATUS_MALFORMED_PARAMS";
    else if (inputStatus == 1001) outputStatus = "STATUS_TYPE_MISMATCH";
    else if (inputStatus == 1002) outputStatus = "STATUS_BOUNDS_ERROR";
    else if (inputStatus == 1003) outputStatus = "STATUS_NOT_FOUND";
    else if (inputStatus == 1004) outputStatus = "STATUS_NOT_SUPPORTED";
    else if (inputStatus == 1999) outputStatus = "STATUS_INTERNAL_ERROR";
    else if (inputStatus == 2001) outputStatus = "STATUS_WHITELIST_FAILED";

    // PUBLIC_CHANNEL has the integer value 0
    llSay(PUBLIC_CHANNEL, "llClearLinkMedia(link " + (string)inputLink
        + ", face " + (string)inputFace + ") = " + outputStatus + ";");
}

default
{
    state_entry()
    {
        integer numOfPrims = GetPrimCount();
        integer numOfSides;

        integer link;
        integer face;

        if (1 < numOfPrims)
            link = 1;

        do
        {
            numOfSides = llGetLinkNumberOfSides(link);
            face = 0;
            do
            {
                integer clearLinkMediaSuccessFlag = llClearLinkMedia(link, face);
                publish_returned_status_flag(link, face, clearLinkMediaSuccessFlag);

                ++face;
            }
            while (face < numOfSides);

            if (numOfPrims == 1)
                jump continue;

            ++link;
        }
        while (link <= numOfPrims);

        @continue;

        string thisScript = llGetScriptName();
        llRemoveInventory(thisScript);
    }
}

注意点

リンク番号

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

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

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

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

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

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

関連項目

関数

•  llGetLinkNumber スクリプトが入っているプリムのリンク番号を取得します。
•  llSetPrimMediaParams
•  llGetPrimMediaParams
•  llClearPrimMedia

特記事項

経緯

  • Scheduled for RC Magnum channel, week of August 3, 2011.

All Issues

~ Search JIRA for related Issues
   ll*LinkMedia functions do not work with LINK_* flags

Signature

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