LlRequestPermissions/ja

From Second Life Wiki

メインページ > LlRequestPermissions > LlRequestPermissions/ja
Jump to: navigation, search

関数: llRequestPermissions( key agent, integer perm );

特定の関数の実行を許可するか、アバターに問い合わせます。

• key agent 同一リージョンに居るアバターの UUID
• integer perm パーミッションマスク(要求するパーミッションを含んでいるビットフィールド)。

アバターの回答を待たずに、スクリプトは処理を続行します。回答があった時点で、run_time_permissions イベントがイベント キューに追加されます。

定数 挙動 カテゴリ 付与対象 自動付与
PERMISSION_DEBIT 0x2 アバターの口座からお金を徴収します お金 オーナー
PERMISSION_TAKE_CONTROLS 0x4 アバターのコントロールを取得します コントロール 誰でも sit 時、装着時
PERMISSION_TRIGGER_ANIMATION 0x10 アバターのアニメーションを再生/停止します アニメーション 誰でも sit 時、装着時
PERMISSION_ATTACH 0x20 アバターにアタッチ/デタッチします 装備 オーナー 装着時
PERMISSION_CHANGE_LINKS 0x80 リンクを変更します リンク オーナー
PERMISSION_TRACK_CAMERA 0x400 アバターのカメラ位置回転を追跡します カメラ 誰でも sit 時、装着時
PERMISSION_CONTROL_CAMERA 0x800 アバターのカメラを制御します (sit か装備が必須) カメラ 誰でも sit 時、装着時

警告

  • パーミション (実行許可) を求めるダイアログがビューアに表示されますが、上表で示した例外の場合は自動的に許可されます。
  • パーミションは state 遷移後も維持されます。
  • パーミションが自動/手動いずれであろうと、常に run_time_permissions イベントでの処理が必要です。(ダイアログが表示される) 手動パーミションは (ユーザの反応に) 時間がかかりますので、その場合 "ユーザの反応があって初めて run_time_permissions イベントが発生する" という点に注意してください。
  • パーミションの付与は一度きりです。
    • 既に一度この関数を呼び出してパーミションが許可されているならば、それ以降は (わざわざ) パーミション要求は行われず、その要求内容も無視されます。
    • 複数のパーミションを同時に要求するには、次のように OR (|) 演算子でビット加算します:
      llRequestPermissions(AvatarID, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION)
  • 今のところ "パーミション無し" を要求することはできません。(訳注: 一度与えたパーミションを取り上げることはできない。) (以下のディープノートを参照してください。) 代わりに llResetScript を使ってください。
  • スクリプトは一度に一名分のアバターのパーミションしか保持できません。複数のアバターのパーミションを保持するには、複数のスクリプトを使う必要があります。
  • パーミションの許可結果は llGetPermissions 関数および llGetPermissionsKey 関数の戻り値に即座に反映されます。これは、たとえ run_time_permissions イベントがキューで待機状態であったり、オブジェクトのイベント キューが既に満杯で run_time_permissions イベントが受け付けられなかった場合も同様です。
  • パーミッション要求ダイアログはタイムアウトすることはありません。
    • 一つのスクリプトが二つのパーミション要求を出した場合、後から回答された方が承認されたパーミションとみなされます。
  • 一人のアバターから別のアバターへのパーミション要求ダイアログ表示は 10 秒間につき 5 回が上限です。これはビューアの制限です。

アバターにアニメーション適用の許可を求める

default
{
    touch_start(integer detected)
    {
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);
    }
    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION)
        {
            llStartAnimation("sit");
            llOwnerSay("アニメーションは 5 秒で終わります");
            llSetTimerEvent(5.0);
        }
    }
    timer()
    {
        llSetTimerEvent(0.0);
        llStopAnimation("sit");
    }
}

複数の異なったパーミションを同時に要求するには、OR (|) を使ったビット加算を行なうか、あらかじめその合計値を計算しておいてください。

llRequestPermissions(AvatarID, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);
 
integer perms = PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION;
llRequestPermissions(AvatarID, perms);

関連項目

イベント

•  run_time_permissions パーミッション受信イベント

関数

•  llGetPermissions 付与されたパーミッションを取得する
•  llGetPermissionsKey パーミッションが付与されたアバターを取得する

項目

•  スクリプトのパーミション

ディープノート

要因

Bug - A problem which impairs or prevents the functions of the product. Open - The issue is open and ready for the assignee to start work on it.    Unable to release script permissions
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。
Personal tools
In other languages