FANDOM


Scripters_cafeログ


08/05/31 編集

アニメーションを販売している方からの問い合わせでアニメーションベンダーのスクリプトが上手く動作していない件を調査したところ、スクリプトエラーなどが表示されることなく、パーミッションの取得に失敗しているケースが分かりました。

【前提知識】

  • 1つのスクリプトでは同時に複数のアバターのパーミッションを保持することはできません。
    • パーミッションの種類が異なっても、それら複数のパーミッションにすべてに対して1人のアバターのみが有効になります。
  • 返金機能のあるアニメーションベンダーの場合、ベンダー所有者に対して DEBIT パーミッション、購入者に対して TRIGGER_ANIM パーミッションと、2人のアバターのパーミッションを同時に扱う必要があるため、1つのスクリプトで処理することは不可能です。


【検証内容】

  • スクリプトでオーナーに対して特定のパーミッションを取得した後、他人からパーミッションを取得しようとした時の挙動を調べる

以下のようなスクリプトにて、OWNER_PERM/OTHER_PERM の値を 0~6 の範囲で変更しながら状況を調べました。


list    PERMISSIONS_LIST    = [
    PERMISSION_DEBIT,
    PERMISSION_TAKE_CONTROLS,
    PERMISSION_TRIGGER_ANIMATION,
    PERMISSION_ATTACH,
    PERMISSION_CHANGE_LINKS,
    PERMISSION_TRACK_CAMERA,
    PERMISSION_CONTROL_CAMERA
];

integer OWNER_PERM  = 0;
integer OTHER_PERM  = 2;


default {
    state_entry() {
        llRequestPermissions( llGetOwner(),
          llList2Integer( PERMISSIONS_LIST, OWNER_PERM ) );
    }
    
    touch_start(integer total_number) {
        llRequestPermissions( llDetectedKey( 0 ),
          llList2Integer( PERMISSIONS_LIST, OTHER_PERM ) );
    }
    
    run_time_permissions(integer permissions) {
        llSay( 0, llKey2Name( llGetPermissionsKey() ) + ":"
          + (string)permissions );
    }
}

結果としては、OWNER_PERM = 0 の場合、つまり、オーナーから DEBIT パーミッションを取得している場合は、他人へのパーミッション要求はエラー表示も何も無く失敗します。

※他人への llRequestPermissions の実行時点でパーミッション要求ダイアログが表示されますが、何を選択しても run_time_permissions イベントが発生しませんでした。


オーナーから取得しているパーミッションが DEBIT 以外の場合は、(他人から取得可能なパーミッションであれば)パーミッションの取得が正しく行われます。


オーナーから DEBIT パーミッションを取得しているスクリプトで、他人からのパーミッションに書き換えたいという状況はあり得ないと思われますが、パーミッションの仕組みを正しく理解していない場合には気づきづらい部分かもしれません。

広告ブロッカーが検出されました。


広告収入で運営されている無料サイトWikiaでは、このたび広告ブロッカーをご利用の方向けの変更が加わりました。

広告ブロッカーが改変されている場合、Wikiaにアクセスしていただくことができなくなっています。カスタム広告ブロッカーを解除してご利用ください。