2014年12月26日金曜日

[ゲーム:セカンドライフ]簡易スクリプトチェッカー(20141226)

イベント時に入り口等で来場者のスクリプト数をチェックする為のスクリプトを書きました。

このスクリプトはスクリプト数とアバターレンダリングコストが一定以上の人にメッセージを送り、負荷軽減の協力お願いする装置です。特に強制力はありません。



・機能
 一定スクリプト数以上のアバターに対し、メッセージを送ります。
 一定のアバターレンダリングコスト以上のアバターに対してメッセ-ジを送ります。


・使い方
 以下に記述のスクリプトを入れたオブジェを用意してください。
 そのオブジェはファントムになるので、ランディングポイントであったり、会場の入り口だったりと、来場者が通過する位置に設置してください。その際オブジェは透明にするなどアバターの通過を阻害しないものにしておくと良いと思います。


・改造の仕方
 integer MaxScriptCount_ints = 50;
 こちらはスクリプト数の上限設定値となります。50となっています。
 ここを書き換える事で、その数値以上のスクリプト数のアバターにメッセージが行く事になります。

 integer MaxARCCount_ints = 100000;
 こちらはアバターレンダリングコストの上限設定値となります。100000となっています。
 ここを書き換える事で、その数値以上のアバターレンダリングコストのアバターにメッセージが行く事になります。

 メッセージ内容を変えたい場合、スクリプトの判る人が変更してください。その他の改造も。こちらで対応はしません。


・起きるだろう問題
 数値以上だったアバターが装着物を外し、再度通過して確認する場合、アバターレンダリングコストの更新に時間がかかる為、装着物を少なくしても同じ数字にされてしまい再度メッセージが来る場合があります。時間を置いて通過してもらうか、外したら再度チェックはしないで入場させる等の対応が必要だと思います。

 この簡易チェッカーをブロック(無視)してしまう人が居る。これにより再度通過してもメッセージが来ない様にさせてしまう人が現れる可能性があります。マナーが明らかに無い人は、素直にejectかBANで対応してください。


~~~~

key avatarKey_keys;
integer loopCount_ints;

list result_list;

integer NowScriptCount_ints;
integer MaxScriptCount_ints = 50;

integer NowARCCount_ints;
integer MaxARCCount_ints = 100000;

string Info1_strs = "貴方の";
    string Script_strs = "スクリプト数は";
    string ARC_strs = "アバターレンダリングコストは";
string Info2_strs = "です。";
string Info3_strs = "以下になる様ご協力ください。";

default{
    state_entry(){
        llVolumeDetect(TRUE);
    }

    collision_start(integer _i){//llOwnerSay("collision");
        for(loopCount_ints=0;loopCount_ints<_i;loopCount_ints=-(~loopCount_ints)){
            if( llDetectedType(0) && AGENT){
                avatarKey_keys = llDetectedKey(loopCount_ints);
                result_list = llGetObjectDetails(avatarKey_keys,[OBJECT_TOTAL_SCRIPT_COUNT,OBJECT_RENDER_WEIGHT]);
             
                NowScriptCount_ints = llList2Integer(result_list,0);
                if(NowScriptCount_ints > MaxScriptCount_ints){
                    llRegionSayTo(avatarKey_keys,0,Info1_strs + Script_strs + (string)NowScriptCount_ints + Info2_strs + (string)MaxScriptCount_ints + Info3_strs);
                }
             
                NowARCCount_ints = llList2Integer(result_list,1);
                if(NowARCCount_ints > MaxARCCount_ints){
                    llRegionSayTo(avatarKey_keys,0,Info1_strs + ARC_strs + (string)NowARCCount_ints + Info2_strs + (string)MaxARCCount_ints + Info3_strs);
                }
            }
        }
    }
}


//written by Maaya Yohkoh 20141226
~~~~

0 件のコメント:

コメントを投稿