この記事は セカンドライフ 技術系 Advent Calendar 2015 の参加記事です。

LSLでの開発にちょっと慣れてきた方向けに、少し高度な内容をご紹介します。
と、言いつつ今回は簡単めです。

メインランドなど他のセカンドライフ住人と接する機会の多いSIMにお住まいの場合、普段居住するSkyboxにちょっとマナーの悪い方が勝手に立ち入ったりして不快な思いをしたことのある方も多いかとおもいます。そういったケースの対策用として、Skybox用の防犯策としてSecurity Orb, ●● Security Systemといった名称で多くのスクリプト製品がMarcketPlaceなどで販売されており、利用されているからも多いかと思います。
市販のものも様々な方式がありますが、今回はこのSkybox用のセキュリティをシンプルな発想で実装したスクリプトを2つ紹介します。

1.落っこちるやつ

//*************************
//collision phantom
//2015-12-22 MasterPoppy
//*************************

default
{
    state_entry()
    {
        llSetStatus(STATUS_PHANTOM, FALSE);
    }

    collision_start(integer index)
    {
        key av = llDetectedKey(0);
        if(!llSameGroup(av)
        && av !=llGetOwner()
        ) {
            llSetStatus(STATUS_PHANTOM, TRUE);
            state gotru;
        }
    }
}

state gothru
{
    state_entry()
    {
        llSleep(5.0);
        state default;
    }
}

スクリプトのコードはこれだけです。使い方はスクリプトをスカイボックスの床に入れるだけ。
動作原理は簡単で、床の上に立った時、対象のアバターがオーナーでもグループメンバーでもなければ床が抜けて(ファントムになって)落っこちます。当然、同じプリムの上に立っていると自分や招待している友だちも一緒に落ちてしまうので、

  • 招待する友だちは全員自分のグループに招待して、遊びに来るときはグループタグをアクティブにしてもらう。
  • 家にいる時は極力椅子に座る
  • 床は10m✕10mないし5m✕5m程度に区切る

など運用上の制約が出てしまいますが、機能としてはこれで十分満たしています。
このスクリプトを試してもらった友人によると、招かれざる客人が入ってくるや否やスットンと落ちていく様はこの上なく滑稽だそうです。
ちょっとしつこい人でも床に立てなければ大抵は諦めるだろうという考えがこのスクリプトの肝であります。
なお、このスクリプトには土地の所有権など運用上の制約はありません。

2.吹っ飛ぶやつ

//*************************
//Collision Ejecter
//2015-12-22 MasterPoppy
//*************************

default
{
    collision_start(integer index)
    {
        key av = llDetectedKey(0);
        if(!llSameGroup(av)
        && av !=llGetOwner()
        ) {
            llEjectFromLand(av);
        }
    }
}

使い方はスクリプトをスカイボックスの外壁または屋根に入れるのが効果的かと思います。
メンバーのチェック方式はさきほどの1.同じで、オーナーまたはグループメンバーであること。
こちらはシンプルに土地(parcel)の外へと放り出します。下に落とすだけの1.よりは強気な方法です。試すと分かりますが結構ぶっとびます。
なお、対応が強力なことのトレードオフではないですが、注意点として自分の土地でないと動作しないので注意して下さい。グループ譲渡(deeded to a group)された土地の場合はスクリプトを入れたObjectもグループに譲渡する必要があります。つまり、グループ譲渡ではない大家さん名義の土地でREZ権限だけをもらうタイプのレンタルスカイボックスなどでは利用できません。
http://wiki.secondlife.com/wiki/LlEjectFromLand#Ownership_Limitations

今回紹介したスクリプトは2つともSkyboxに対象のアバターが接触したときに作動するものです。TimerやSensor Repeatで常時スキャンするスクリプトのように普段設置しているときの負荷は基本的にないし、アクセス許可のノートカードを都度管理する煩わしさはありません。ただし、セキュリティとしてそれなり実用的ではありますが、土地への侵入そのものは(少なくとも1回めは)を防ぐことはできません。立てなく・入れなくすることで 諦めさせる という思想のセキュリティですので、特性と用途を十分にご理解頂いてご参考いただければと思います。

【備考と免責】

  • 今回のサンプルスクリプトは例によってPublic Licenseです。ご自由にお使いください。
  • セキュリティ用として紹介していますが、本スクリプトを使用したことによって発生したトラブルへの責任は負いません。
    特にグループタグが必要である旨のお友だちへのご説明はお忘れなきよう。

質問・バグ報告などはお気軽にIMください https://my.secondlife.com/ja/masterpoppy.amat#about_tab

(本スクリプトのアイデアを提供し、公開の許可を頂いたA氏にこの場を借りてお礼申し上げます。)

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Looking for something?

Use the form below to search the site:


Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...

Archives

All entries, chronologically...

ツールバーへスキップ