2014年12月29日月曜日

SL用に自作でPCアップデートするお話 2014冬ボ版


んじゃ次に”自作”とか"貧乏アップデート"の話

まずOSをチェック
XPなら窓から投げ捨てて全部新調すべし

7proがいいけどまぁ今からなら8.1の方がコスパいいからなぁw


最低限マザーとCPUとメモリを新調する前提で話を進めていきます


キーボードとマウスがUSBならとりあえず大丈夫

どちらかがPS/2ってんならオンボでPS/2ついてるマザーを選べばおk
両方PS/2の方はこの機にゲーミングマウス辺りの導入を検討されては?


モニターはHDMI付いてればとりあえず大丈夫
21.5インチ以上のフルHDでデュアルモニターとかするとすげー捗る
やるならモニタアームの導入もおすすめする


ケースもまぁマザーサイズに合わせてちょっと気にする程度でいい


電源がもし新しいマザーに対応してないものの場合
80Plus GOLD 以上の電源に入れ替えませう



CPU
とりあえずi3かi5かi7の最新のやつ
AMDはやめとけ ビューワーとの相性がある

GPU
とりあえず750以上にしとけ Nvidiaなら問題ない
Radeonはビューワとの相性があるからやめとけ

TITANとかあのへんはまぁむしろ電源が問題なのでショップで相談した方がいい

マザーボード
PCIex16ポートがあるかどうかを確認すること
該当者はPS/2ポートついてるかどうかをチェック

個人的にはGIGABYTEのマザーを推奨

メモリ
とりあえず8Gを二枚刺し
これが最低ライン

ハードディスク

とりあえずsteamかoriginの利用者なら
Crucialの512GのSSD+1.5TB以上のHDD
ぶちこんどいて損はない

てかSSD入れるだけでも劇的に改善する

光学ドライブ
外付けでおk だたしブルーレイ必須
理由はまぁ 特に無いけど どうせOSのディスクがそのうちブルーレイになるだろ的な

NIC
必要ならINTELのギガビットにしとけ
まぁなくてもいけるだろうけどロードの快適性に響く
有線接続は必須



大体この辺かな

多分BTOマシンより結構割高になるだろうけど
ほとんどが"部品の信頼性"の部分なのでまぁ諦めろ的な

以上

2014年12月28日日曜日

これからSL用にBTOでPC更新する場合の最低ライン 2014冬ボ版

さてまぁ円安でPCパーツがクソ高いこの時期にあえてPCを更新する勇者たちへのお話

まずこの三箇条を送りましょう

・SLにINするためだけにハイエンドPCは完全に無駄です

・最低ラインとして今のPCの"パーツ"は全部使えないと覚悟せよ

・自分で組めないなら予算は"最低"10万です 慈悲はない


さてこの三箇条を最低65536回音読してから次のお話



BTOでコスパ重視ならどれになるか


まず断言しちゃうと

最低ラインは"最新"のi3でwindows7の64biでメモリ16Gぶっこんであればなんでもおk

この仕様ならとりあえず影offである程度パフォーマンス重視の設定なら確実に30fps出る



ドスパラだとマグネイトのこいつ
http://www.dospara.co.jp/5shopping/detail_prime.php?tg=2&tc=50&ft=&mc=4361&sn=0

にメモリ16GとSSDぶっこめばそれなりに動く
最低でもメモリの方は16Gぶっこむこと SSDは余裕があればでいい

SSDとメモリ追加だけで10万いくって? そんなもんだw


将来的にグラボぶっこむならこの仕様だと無理なので




最初から750がついてるこいつのwindows7モデル SSD付きでちょーお得?
http://www.dospara.co.jp/5goods_pc/pc_bto.php?h=d&f=d&m=pc&mc=4639&sn=2356&vn=1&lf=0

にメモリ16Gを追加でぶっこむ

大体13万円


ゲーミングPCじゃないと嫌だってんなら最低ラインは

http://www.dospara.co.jp/5goods_pc/pc_bto.php?h=d&f=d&m=pc&mc=4643&sn=2153&vn=1&lf=0

これにメモリ16Gぶっこんで大体12万円





ドスパラだと大体こんなもんだけど


"安いゲーミングPCのBTO"
だとマウスコンピュータって選択肢があります

たとえばこいつ
http://www2.mouse-jp.co.jp/tune/scripts_cart/spec.asp?prod=1412NG-im550BA11-SP-W7&_ga=1.142109424.398800487.1418491214

メモリ16Gぶっこんで10万ちょい



で、
安いからってRadeonとAthlonは全部地雷
もうドライバが問題外ってレベルでバグバグで話にならん


BTOだと大体この辺やね

以上

2014年12月10日水曜日

オフセット回転スクリプトのお話

現物はここから(タダじゃないよw)


面倒なのでソース全文 適当なオブジェクトにコピペで入れても多分動かん

//とりあえず相対座標での回転演算をかなり簡略化して記述したやつ
//変な角度のヒンジでスムーズに回さないといけないってだけならこいつだけでいける

rotation axis;
vector offset_pos;
offset_rot(vector offset,rotation rot){
    // プリムナンバー,基準からの相対位置,プリムのベース回転 と記述する
    //グローバル変数でもいいんだけどプリムナンバーに変数使いたいかもしれないので関数内に記述
    list parts=[2,<0.025,0.00,-0.25>,llEuler2Rot(<0,0,0>),//黄色い円柱 
                3,<0.525,0.00,-0.25>,llEuler2Rot(<0,0,0>)];//青い板
    integer list_length=llGetListLength(parts)/3;
    list params;
    integer i;
    vector parts_pos;
    rotation parts_rot;
    for(i=0;i<list_length;++i){
        parts_pos=llList2Vector(parts,i*3+1);
        parts_rot=llList2Rot(parts,i*3+2);
        //一括で回転させるためにリストにぶっこむ 記述的には
        //プリムナンバー 回転軸基準座標+(基準からの相対位置*指定回転)  プリムのベース回転*指定回転
        params+=[PRIM_LINK_TARGET,llList2Integer(parts,i*3),PRIM_POSITION,offset+(parts_pos*rot),PRIM_ROT_LOCAL,parts_rot*rot];
    }
    llSetLinkPrimitiveParamsFast(0,params);
    
}

default
{
    state_entry()
    {
        offset_pos=<0,0,1.0>;//回転軸基準座標 必要なら関数内にぶっこんでもおk
        axis=llEuler2Rot(<PI/4,PI_BY_TWO/4,0>);//ベースの回転軸rot axisangle2rotで使うだけならvectorで指定しても変わらないんだけど実験ならこっちのほうが調整しやすいので
        llSetLinkPrimitiveParams(4,[PRIM_POSITION,offset_pos,PRIM_ROT_LOCAL,axis]);//視覚的に見せるために赤いプリムを仮想回転軸として配置
        
        
//offset_rot命令でコメントアウトしてある方は 座標系をルートプリムでなく回転軸の座標系にするやつ 多分実際に見たほうが速い

//        offset_rot(offset_pos,axis*llAxisAngle2Rot(<0,0,1>*axis,0.0));//デバッグのために一応ゼロ回転へ全部戻す
        offset_rot(offset_pos,llAxisAngle2Rot(<0,0,1>*axis,0.0));//デバッグのために一応ゼロ回転へ全部戻す
    }

    touch_start(integer total_number)
    {
        integer j;
        //開閉処理 フレーム数とかを変数にしてもいいけどサンプルなのでベタ書き 
        //15fpsで21フレーム 可動域90度
        for(j=0;j<=20;++j){//オープン
//            offset_rot(offset_pos,axis*llAxisAngle2Rot(<0,0,1>*axis,j*PI_BY_TWO/20));
            offset_rot(offset_pos,llAxisAngle2Rot(<0,0,1>*axis,j*PI_BY_TWO/20));
            llSleep(0.066);//ウェイト
        }
        for(j=0;j<=20;++j){//クローズ
//            offset_rot(offset_pos,axis*llAxisAngle2Rot(<0,0,1>*axis,PI_BY_TWO-(j*PI_BY_TWO/20)) );
            offset_rot(offset_pos,llAxisAngle2Rot(<0,0,1>*axis,PI_BY_TWO-(j*PI_BY_TWO/20)) );
            llSleep(0.066);//ウェイト
        }
    }
}

大体この辺かね
以上

2014年11月6日木曜日

rotationからオイラー角(ピッチ ロール ヨー)を取り出す方法

基本的な考え方として

大抵のエディターの場合 回転が DEG値で<x,y,z>となっている場合

これをオイラー角とか呼称します
んでなんでこれが3dプログラミングだとまずいかってーと
"ジンバルロック"
っチュー現象がどうやったっておきます

大雑把に説明すると基準平面に対して自分の現在の向きから
行える方向転換が限定される現象のことです


んでまぁ タイトルにあるような演算が必要な用途として

例えば飛行機ゲーム あとはFPS

ここ最近の航空機のグラスコックピットの場合
このオイラー角を直感的にわかるようにした計器がついてます

んで X軸を正面 Y軸を側面 Z軸を上面とした場合に

x軸:ロール
y軸:ピッチ
z軸:ヨー

って感じで記述することが可能

ゲームでの航法や射撃ならピッチとヨーだけわかってりゃ
とりあえず自分が向きたい方向を表現できる
けど基準平面が無い空間だったり姿勢まで見るならロールも欲しい ッて感じだな


んで大抵の3Dプログラミングだと
回転値はクオータニオンっちゅー4値あるデータを使います
理由は
"ジンバルロック"の対策ね

んでまぁ大抵のSDKの場合 クオータニオンとオイラー角は
相互変換のライブラリーが揃ってます

ただこの相互変換関数
望む結果が出ることはほぼありません

何故か

変換時にZYXの順番で処理するから

(直感的に回しやすいのは大抵XYZの順番なので)
じゃぁ使い物にならねーじゃねーかってなるわけですが

そこはライブラリーというか使い方があります

オイラー角のXYZを個別のクオータニオンとして生成して合成すればいい


逆もしかり

具体的な計算式は

オイラー角からクオータニオンへの変換

目的の回転rot=(X回転のeuler2rot)*(Y回転のeuler2rot)*(Z回転のeuler2rot)

クオータニオンからオイラー角への変換は
回転z=クオータニオンのローカルX軸のvectorのyとxでAtan2
回転y=クオータニオンのローカルX軸のvectorのzとxy合成した長さでAtan2

回転y=クオータニオンからzy回転を引いたローカルy軸のvectorのzとyでAtan2


面倒なのでLSL表記すると
vector rot2angle(rotation rot){

    vector vec=<1,0,0>*rot;
    vector angle;

    angle.z=llAtan2(vec.y,vec.x);
    angle.y=-llAtan2(vec.z,llVecMag(<vec.x,vec.y,0>));//yだけatan2と逆回りになる
    rot= rot /llEuler2Rot(<0,0,angle.z>)/llEuler2Rot(<0,angle.y,0>);

    vec=<0,1,0>*rot;
    angle.x=llAtan2(vec.z,vec.y);

    return angle;
}
rotation angle2rot(vector angle){
    rotation rot=llEuler2Rot(<angle.x,0,0>)*llEuler2Rot(<0,angle.y,0>)*llEuler2Rot(<0,0,angle.z>);
    return rot;
}
default
{
    touch_start(integer total_number)
    {
        llSay(0, (string)(rot2angle(llGetRot())*RAD_TO_DEG));
        llSay(0, (string)(angle2rot(rot2angle(llGetRot())))+","+(string)llGetRot());
    }
}
大体こんな感じ
出力(サンプル)

[11:36] Object: <44.99883, -45.00175, -44.99999>
[11:36] Object: <0.19133, -0.46195, -0.19134, 0.84462>,<0.19133, -0.46195, -0.19134, 0.84462>


ってなところかね

以上

2014年11月5日水曜日

チャットが聞こえる範囲と邪魔なメッセージをスマートに絞る方法

ヴィークルとかで乗ってるアバターにだけ聞こえる状態にしたいけど
○○のささやき とか出るのはダサいとか
ラップタイマーとかでログを整理したいときに
○○の叫び とか出るのはちょいと面倒だとか

その辺をスマートに解決する方法

やりかた自体はちょー簡単で
Stringの先頭に "/me :"
これを追加するだけ

以下がサンプル

default
{
    touch_start(integer total_number)
    {
        llSay(0, "/me :Say.");
        llWhisper(0, "/me :Whisper.");
        llShout(0, "/me :Shout.");
    }
}

ってなところかね

以上

2014年10月22日水曜日

SLの課金システム周りがちょい変更されたっぽいお話

ちょいと面倒なので適当に箇条書き


・L$買うだけならデビッドカードでもいけるようになったようです

 前はダメだったVプリカが使えるようになったのをサブ垢で確認
 
 支払情報の登録で1$請求して認証するプロセスが省略された?
 もしくはシステム変更で不要になった?
 相変わらずL$を売っぱらうのにはまずL$購入の実績が要る

・アカウントのUS$をpaypalへ送金する場合
 初回は必ず保留されるものと思っといて問題ない

 paypalでUS$受け取るのに郵便認証が必須になりましたが

 それとは別で SLアカウントからpaypalへのUS$引き出しの初回は必ず保留されて
 アカウントのメールアドレスに"書類提出しろ"ってメールがきますので

 運転免許証もしくはパスポートのスキャンと
 指定の書類に記入して提出する必要があります
 (書類記入はオンラインでペーパーレスなので深夜だったりFAX無かったりしてもおk)
 アカウント登録時に他人の書類とか偽名とか使ってたら長引くので覚悟すること

 あとこのメール見落としてて何もせずに30日経ったらアカウントホールドです 例外はない

 正常なLLからpaypalへの送金でも最低一週間前後かかるので
 いつものリンデンクオリティーと思ってほっぽってるとアカウントホールドされちゃいます

 ホールド中でもLLの営業時間内なら割と短時間でレスポンスが来て
 数時間でホールドが解除されます
 (このときに本人認証で他人や嘘のデータ入力してると長引きます)

・年齢認証が"アカウント作成時に入力した誕生日"で行われる仕様になってる
 土地設定アダルトだけだと年齢認証してなくても入れますが
 入場制限に年齢認証必須にしてるところは入れません

 非認証アカウントでジンドラ入れるかどうかはテスト環境無いので不明


大体この辺かな

以上

2014年10月12日日曜日

連続した超多関節駆動用スクリプト(負荷テスト用)

//連続した超多関節の駆動用スクリプト(負荷テスト用)
//スクリプトタイム平均が0.1前後なのを確認 十二分に重いので常設禁止
//17プリムのデフォルト球体をリンクしてやりゃ動く

//負荷テスト用でオン・オフとか入れてないからこれそのまま流用とか考えないようにw

integer count=0;
integer j;
vector base_pos;
rotation base_rot;
integer i;
list params;

integer dir;
default
{
    state_entry()
    {
        llSetTimerEvent(10.0);
    }
    timer(){
        j=20;
        do{
            base_pos=ZERO_VECTOR;
            base_rot=ZERO_ROTATION;
            params=[];
            if(dir){
                ++count;
                if(count>3)dir=0;
            }else{
                --count;
                if(count<-3)dir=1;
            }
            for(i=2;i<18;++i){
                base_rot=llEuler2Rot(<0,count*PI/200,count*PI/200>)*base_rot;
                base_pos+=<0.25,0,0>*base_rot;
                params+=[PRIM_LINK_TARGET,i,PRIM_POSITION,base_pos,PRIM_ROT_LOCAL,base_rot];
            }
            llSetLinkPrimitiveParamsFast(0,params);
            --j;
            llSleep(0.01);
        }while(j>0);
    }
}

2014年9月17日水曜日

LindenX周りのお話

今更誰がそんなことすんだよ的なお話ではありますがメモ程度に



ポイントになる部分を箇条書きにしておきます


想定はプレ垢の支払いにinworldの売上を使いたい人用
(大体25000L$あればプレ垢の年額支払いに出来ます)

・現状LindenX以外は使えないと思っておいたほうがいい

・有効なクレジットカードが必須
 (Vプリカ不可楽天(旧イーバンク)のVISASデビッドは可 AUウォレットはどうなんだろうなー)

・L$を売るためにはまずLindenXで10ドル分ほどL$を買わないとあかんです

・ここ最近の米国の法改正で 一定額以上を売る場合には
 運転免許証かパスポートのスキャンを提出する必要が出る可能性があります
 (昔よりマネロンとかそっち系の対策が厳しくなった)

ってなところかね

以上



おまけ

US$をpaypal送金する方法について(paypal関係)


・paypal経由で可能ですが

最近の法改正(資金決済法だったかな?)で本人確認の認証が必要になりました

(最長一週間かかります)

本人確認書類の送付が必要なのでスキャナーかデジカメを用意しませう

認証ではパスワードを郵送で送ってきますので現住所も一応確認しませう


・クレジットカード認証は必須です(別に楽天VISAデビッドでも可能ですが)


・念のためアカウントはプレミアムかビジネスにしませう


・ちなみに上記手順をきちんと踏まずにLLからpaypalへUS$を移動しようとすると

謎のエラーが出て最長三ヶ月ほどUS$が宙ぶらりんになりますので注意


・paypalからの引き出しにネット銀行を指定する場合

ネット系銀行以外の口座情報が必要になる場合もあるので

(これも資金決済法関係です)一応準備しておきませう

2014年8月9日土曜日

SLのキャッシュについて

SLの低パフォーマンスの原因って

(スペックが足りていると思われる)一般ユーザーの場合9割ほどが
実はキャッシュ周りなんだよね

だからといってキャッシュをこまめに消すのは逆効果になりやすい
何故か

"キャッシュするときが一番重い"から

回線が超絶に速くてPCスペックがカッツカツってなら
キャッシュクリアしてやったほうがはやい場合もあるけど
(キャッシュのフラグメンテーションの解決ってこっちゃね)

SLのキャッシュはサーバーから全部ダウンロードしてくるので
PC内部の処理速度はあんまり関係なくて
全体の転送レートが一番影響する


んでまぁUSBメモリをキャッシュにするって話がたまーに出るじゃん

今回やってみてわかったんだけど
無意味どころか逆効果だった
何故か
キャッシュする段階で
PCが数秒のフリーズを繰り返す
(キャッシュ終了後のフレームレートはあんまり変わらないんだけど
 キャッシュされるまでのフリーズがとにかく不快でお話にならん)

これだったらHDDの方がまだマシやってなもんですよ

しゃーないのでテストに使ったUSBメモリはとりあえずReadyToBoost用にしますた

個人的に推奨するSLのキャッシュはRAMDISKっす
容量はまぁ2Gくらいでおk 64bitOSなら最善策の一つ

次がキャッシュ専用のSSD導入
デスクトップでしか使えない手ですが
これは別のソフトでも使えるので結構な効果が期待できるですよ
(なんで専用で買うかってーとSSDで書き込み繰り返すと寿命がストレスでマッハなので)

ReadyToBoostの導入
windows7以降の機能でランダムアクセスのキャッシュとしてUSBメモリを使用する方法
(HDDのシークタイム分の圧縮がメインの用途らしい)
メモリがマジでカッツカツでスワップしまくりのマシンとかだと劇的な効果がある"らしい"です
まだ導入してあんまり時間たってないので効果の程は?て感じ



ってなところかねぇ
以上

2014年7月5日土曜日

今更ながらllTeleportAgent命令について

軽くメモ程度に

http://wiki.secondlife.com/wiki/LlTeleportAgent/ja


この命令一見便利そうに見えて微妙に使いにくいのが

テレハブが指定されていてダイレクトTPが許可されてないSIMだと
任意座標へのTPが機能せずにテレハブ(もしくは最寄りのスポーンポイント)に飛ばされる

かといってTPさせたい先を全部スポーンポイント指定すると

こんどはマップ等でTPしてきたアバターを適切なランディングポイントに確実に誘導出来なくなる


つまり
ランディングポイントを固定しつつTPで移動をさせたい場合に大変都合が悪い(※1)


これの対策として有効そうなのは

・全部のスポーンポイントで正規のランディングポイントへの誘導を行う

・正規のランディングポイント以外ではHUD等で認証プロセスを通し 通らなかったらTPHOME

だいたいこの辺

HUD装着した状態での勝手TPは正規ルートにTPで戻せばおk


ってなところかねぇ

この命令
テレハブ使いつつ任意座標へのTPもさせられればかなり便利なんだけど

現状だと微妙に使いにくいのよねぇ


以上

(※1)なんで都合が悪いかというと
Sit型のテレポーターって他のプラットホームには無いので
 なにげにものすげー説明がめんどくさいのよ

 あとコンバットシステム的な運用をさせる場合
 死んだら即強制TPみたいな単純でわかりやすいオペレーションでないと
 不正対策とかソンビ行為とかの対策としてはすげー難しい
 (数SIM使うようなVICE系だとダイレクトTP許可してなおかつ
   死亡時にマップ表示させてTPする的なアイテムの装着を義務付けてる)

2014年6月26日木曜日

C#について(個人メモ)

そいやmono実装時にC#使えるようになるって話があったなーと
当時は結局実装されなかったけど

最近はSLでもMeshが主流になりそうな感じだし
OculusRift対応ビューワーがRC版だけど出たし

同じデバイスが使えるUnity関係だとC#がホットなのでちょい調べた


・どういうもんか

とりあえずオブジェクト指向ってものらしい
Cの発展型っぽい見た目してるけど所謂 プログラミングの考え方的にはCと完全に別物っぽい
 (そういう意味だとLSLもCっぽい見た目で完全に別物の言語だしね)




・LSLと何が違うのか

配列変数 構造体 クラス が利用可能
define に関しては使うなってルールになってるらしいので
メモリ関係で圧縮出来る等の効果は無い




・クラスって何さ?

 要はユーザー関数の化け物みたいなもんなんだけど
 引数ダラダラ書かなくてもいいので必要なパラメーターだけ変更して演算ができる
 演算周りを関数よりかなり簡略化記述出来るっぽいのでそこはまぁ利点のような
 (わかんないところはわかんないままとりあえずアンタッチャブルでいける)



・ぶっちゃけSL民が修得する必要性は?

 ここであえて 無い とか書いちゃったほうがブログのネタ的には美味しいのだけど

 というかLSLですらカッツカツでどうしようもない人だと習得するのムリダロこれッて感じ
 所謂"プログラムが出来ない人"が既存ライブラリーを利用するだけの部分を
 必死こいて覚えればなんとかなるんじゃね?ッて感じの雰囲気



・なぜこのタイミングでこんなものを書いたのか
 まぁSL11B関係のお話とかもあるけど メインの理由は冒頭の通り

 OculusのDK2入手する予定があるなら
 UnityとC#も扱えるようになってたほうが多分より"遊べる"んじゃねーの?的な部分っす


ってなところかね

以上




SLで作る側の人間がこの先生きのこるには

未だにcore2以下のXPマシン使ってんなら

最低でもハスウェルのi3と650Ti以上積んででメモリ16GB以上のwin7マシンを確保すれ
(8はまだ業務向けアプリの安定性に難がありすぎる)
別にSSDである必要は無いがHDDなら1TB以上推奨

あとはとりあえずmesh習得しとけ
可能ならマテリアルも使えるようになっとけ

どうしてもスカルプってならせめてblenderで全部出来るようになっとけ

以上

2014年6月19日木曜日

アニメヘッド系アバターでSLで標準的なライフルを持つために必要なシェイプってどんなもんよ的な

まぁこれでも服でかなり肩幅絞ってるんだけど
結果的にヨルムンガンドのバルメみたいな
かなーりガッチリした体型になりますた



身長はアダルトのラインクリアのために1.73m

シェイプ的には横幅をかなり広げて
腕とかボディーの太さを確保しつつ

肩幅と腕の長さで最終調整的な




銃はTitanのLeviathan ACR


ひととおり光学機器やらが乗っけられて
ストックとバーティカルグリップの調整がついてます
リアルカウントで初速調整やリロードもあるので
LLCS系フィールドならほぼ問題なく使えるかと

ACRが欲しいってならとりあえずこれにしとけ的な










アニメとかでよくあるような
華奢な体つきでフルサイズのライフルを
フルオートでぶっ放す的なやつは

そのサイズのシェイプに合わせた
アニメが入ってる銃じゃないと厳しいです






んでまー別の選択肢としましては
ブルーギャラクシー系のシェイプのやつ

これを普段バイク動画とかのテストで使ってます

こいつは元々かなりでかいヘッドを使う関係で
肩幅がかなり広いので
あんまり違和感が無いレベルで銃を持たせられます



この銃はISAのMk.16
東京マルイとかからSCAR-Lて名前で出てる奴っす

Mesh製でテクスチャとかもちゃんとしてます
光学機器載せ替えとか
グレネードランチャー(M320)つけられます

エフェクトがちょい弱いですが
低負荷でライフルとしては実際安いので
ゲーム派の方だとISAの銃は割とおすすめっす








ってなところかね

以上

2014年5月24日土曜日

2014年4月26日土曜日

SLコンバットにおけるタマのお話

具体的な数値とかコードは一応漏れるといろいろとまずいので
やるとダウトなもんだけを適当に挙げていく感じに


・弾丸内部のスクリプトをmonoコンパイルしない

 monoはVM初期化時のメモリ確保量がLSO(LSL2時代のスクリプト形式)より多いです
 その分がちょいとディレイの原因になります

 んでまぁこれついさっき知ったのですが
 monoコンパイルのスクリプトはバイナリロード時点で
 シグネチャ(注1)のチェック処理があるのでrezが遅くなるとのこと

 なのでまーrezされるタマにmonoコンパイルを使うのをやめませう
 体感で3倍くらいSIMFPS低下量が違います


・発射レートが高いタマを他プリムにしたり大量のスクリプトを突っ込まない

 最悪エフェクト再生処理コケて消えるくらいの方がスマートです
 7年以上前のタマにdieとエフェクト再生を別スクリプトにしてるのがありますが
 あの時代と全体的なスクリプトの動作速度が10倍くらい違うので
 あーいうのは今使っても重いだけです やめませう


・着弾後にエフェクト再生するタマは最優先で物理off+ファントム化してしまいませう

 フルオートのタマだと着弾後に物理のままだと
 後からくるタマのせいで多重コリジョンイベントが発生します

 それを解決するためにフィルター弾を作る場合も有りますが
 あれはコリジョンイベントが発生しないだけで物理エンジンのコリジョンは発生するので
 ファントムにしてしまうのが一番安全です

 一部コンバットフィールドで"タマが残る"とか"pushされる"とかの理由で
 使用禁止になる銃は大抵ここの処理サボってます



・所謂"RLの実弾の寸法や形状"にこだわるのはやめませう 不毛です

  というか物理エンジン的に全長が短いタマは不具合ばっかり出て碌なことはありません

  同じ理由で射出されるタマにスカルプを使わないこと 重いです


・prim_temp_on_rezは万能ではありません 必ずtimerでのdie処理を併用しませう

 一時プリムは進入禁止の土地に引っかかると解除されることが稀に良く有ります

 あまりに長距離は描画距離でターゲットが見えなくなるってのもありますので
 3SIM以上飛翔しない程度のタイマーを設定しませう
 DIE_AT_EDGEも併用するとかなりタマが残りづらくなります

・タマでllDie();使うときはreturn;も併用

 return;してないと発生してるイベント内の別処理が動作してしまうことがよくある


・独自CS用のタマ作るならダメージ処理はコリジョン名でやるのが軽い

 say使う方法もまぁあるのですが
 発射レート高いと確実にディレイかかるしイベントスタックします
 最悪検出コケますので 可能な限りコリジョン名使う方向にしませう


・同時rezで自爆コリジョンが出るなら基本はタマ形状とrez位置で解決

 フィルター弾はあくまで最終手段


ってなところかね


以上

注1:当時のリンデンの発言がシグネチャになってたんだけど
       仕組み的にUUIDかMD5チェックサムだと思う

たまーにまぁコンバットsandbox等で"強い銃"的な論争になりますが
そういうのって大抵の場合
その銃自体の負荷でSIMFPSを極端に下げて他の銃を動作不良にして
その状況下でも自分の銃だけきちんと撃てるから勝てる
とかそんなのばっかりなのでとりあえず無視しませう

ちなみにまぁこれを全部クリアするのは
パブリック系のフィールドでは”最低限”なので
これをクリアしてないのに売上が伸びないとか
重いとかBANされたとか言ってるうちは甘いです

2014年4月1日火曜日

L$の"相対的な"価値について

なんでこんなタイトルにしてるかっちゅーと


まぁ昔話も含むからなのですよ

2007年辺りに言われていた
"日本人が造るものは低価格すぎて市場を破壊している"的な言い方とか
その辺も含めたお話




まぁL$を"現金で購入"している人間にとっては
1US$≒250L$

大体こんくらいのレートやね このレートがかれこれ7年前後続いてる



んでまぁ
2007年あたりの"SL日本人プレイヤー"コミュニティーでは

1000L$の馬が買えることが割とステータスシンボルでした
2000L$のスキンが買える人間なんぞ大金持ち扱いでした

なぜならほとんどの"日本人プレイヤー"が
L$を現金購入することなんぞ最初から考慮外だったからです



んじゃ彼らにとってのL$の入手経路はどこだったのかというと

・自作物の販売による収入
・マネーキャンプ
・L$が報酬になっているイベント

大体この辺で
大抵のプレイヤーが平等にL$を入手出来るのはマネーキャンプでした
んじゃマネーキャンプのレートがどの程度だったかというと

1Hour≒60~100L$

うちが知ってる限りだと10分5L$程度のマネーキャンプがメジャーでした
んでまぁこれをRLのバイトの時給とほぼ等価と見た場合

1L$≒6~10円相当

つまり

250L$≒2500円相当

現金購入の約25倍です
当時のプレイヤーにとっては1000L$ってのはものすごい価値になるわけです


ってなところかな
以上













蛇足解説

・なんでそんなレートのマネーキャンプが乱立していたのか

 当時SLではギャンブルが合法でした
 ギャンブルで利益を出すためには人を集めなければなりません
 当時検索上位に乗るためには"トラフィック"っちゅーもんが重要で
 それを向上させるためにはアバターが長時間滞在する必要がありました

 つまり
 マネーキャンプで人を集めて長時間滞在させる
 ↓
 トラフィック向上で検索上位になる
 ↓
 人が集まる (゚д゚)ウマー

 実際のところそういうレートのいいキャンプは常に人で埋まってるので争奪戦です
 1000l$稼ぐのに半年とか一年かかるようなプレイヤーも割と居ました

 その後ギャンブルが非合法になりマネーキャンプはすげー勢いで廃れました
 現在はメインランドでのキャンプが禁止されているためほぼ絶滅してます


・日本人コミュで売ってるものが価格破壊だって言われてた理由

 当時スカート一個が一番安いのでも50L$前後します
 ただそういうスカートは大抵フレキのシリンダーを組み合わせて
 テクスチャ一枚はっつけただけで す
 テクスチャさえどうにかなれば自作出来そうでしょう?

 だったら自分で作ればいいって(当時は)なってたわけです
 (自分のために作るなら自分の工賃はタダだってのが創作系でよく言われますしね)
 んでまぁ売るかーってなるわけですが
 "大手が配布してるギフト"より見劣りするものを
 値段つけて売っても相手にされないんじゃないか?ってなるわけです

 そうやって量産されたのが"日本人プレイヤーコミュニティー"の
 レンタル料無料のモールにあるような激安品やフリービーの山なわけですよ


・当時L$購入があんまり行われなかった理由

 リンデンラボへの信用があんまりなかったのと
 物理的に存在しないデジタルデータにカネを払う文化ってのがあんまりなかたのです

 当時L$を"購入"する手段はもちろんありましたが
 公式からの購入はクレジットカードが必須でした
 しかもサイトに日本語なんてありません 全部英語です
 オープンソース的な初心者支援をする方ってのは大抵カネ持ってないので
 購入方法を解説するサイトすらありません そりゃ諦めるわな

 ビットキャッシュとかでL$売ってるサイトとかがアリましたが
 レートがまぁ 1000円で2000L$前後が多い
 あとそういう系のサービスでL$の現金化は出来ませんでした

 楽天スーパーポイントとかに変換できてる場合もありましたが
 3000l$で1000ポイントとかです

 さて1000L$分の差額はどこにいくでしょう?
 当時"L$両替業者"が乱立してたのはそういう事情なわけですw



・L$持ってないプレイヤーはアバターカスタム等をどうしてたのか

"フリービー,グループギフト,ラッキーチェア,ラッキーボードorイベントの景品"
そういったL$が無くても入手可能なものを探すわけです

そして当時は空前の仮想世界ブーム

そこら中に企業が作ったSIMや土地がありましたし
服飾関係も客を増やすために必死でした

んでそいうところではギフトを配布してるわけです
服だったり髪だったり靴だったり車だったりします

しかしそういうものは大抵色が選べなかったり市販品よりしょぼかったりします
しかしL$を入手する方法が存在しない以上
そういうものでもとにかく集めて吟味して使ってたわけです

SLの昔話について

さてまーどの辺からするかな

とりま内容としては2007夏から2010年くらいまでの話かなぁ

・純正ビューワーが日本語対応した話

・L$を買わなくてもどうにかなってた時代の話

・windlight対応ビューワーの話

・havok4によるヴィークル業界の崩壊 と 自動車メーカー戦国時代の話

・MAGSLが沈んだ話と所謂電通云々の話

・所謂最高の○○のリストが晒スレにあった時代の話

・乳揺れ対応ビューワ周りのゴタゴタの話

・コンバットsandboxの話

大体この辺を適当にやることにするかな




・純正ビューワーが日本語対応した話

まぁこれいまいちぴんとこないよねぇ
2008くらいまではまともにIME対応してるビューワがほとんどなくてね
インライン入力すらちゃんと動くか怪しかった時代なのよ

んでまぁその時代の神の話をする場合
アラレカフェ
これの存在を抜いては語れないわけです
まぁ所謂"ガチのオープンソース系開発者"のたまり場だったわけよ
この当時はまだビューワもソースがなんとかなる時代で
いろんなビューワがありましたな
PS3対応ビューワーとか
i-mode対応ビューワーとか

そういうのがまじめに研究されてたりしました
んでまぁそのうちのテーマの一つとして日本語のインライン入力が語られていました
んでまぁ日本語入力が出来るようになったのは
大体
アリッサ・サブレ氏(スペル忘れたw)のおかげです 崇めましょう

この当時の話としては
完全装着型でAO入の馬が売っててね 1000l$だったかな
それを持ってるのが一種のステータスシンボルだったな

アニメとかの版権ものアバターがこの時期大量にあったし
所謂"オリキャラ"系のアバターも大量に出てた わっきゃんことか




・L$を買わなくてもどうにかなってた時代の話

所謂マネーキャンプの話ね
まぁまだあの当時はネットでクレカ使うってのがかなりハイリスクな時代だった
んでまぁ当時は"ギャンブル合法"の時代だったので
金回り自体は異様によかったわけですよ

んでまぁそういうところが人を集めるために色々とやってたわけですが
そのうちの一つが場所検索で上位ランカーに入ること
場所の検索でリストの上位に居るためには

クラシファイド広告で広告代を大量にぶっこむか
トラフィック ってもんが重要だったのですわ
んでまぁトラフィックを稼ぐためには
とにかくアバターが長時間滞在していることが必要でした
なので"とにかく座ってるだけでL$あげる"って仕組みが発生

ソレの名前をマネーキャンプと言いました
んでまぁ無為に過ごすのも不毛なので 座ってる人間同士で会話したり

当時の貧乏なクリエイターやプログラマーが
裏作業に徹するときは大体マネーキャンプに座ってましたなー

所謂"自動キャンプbot"のビューワーで専有するアホも居たなぁ

(当時から2chとかだと電気代云々は散々言われてたね)

あとは所謂賞金付きのイベントとかがあったり
当時のSL専門誌(そういうのがあった)の付録にL$配布用のパスコードがついてたりしてたね
(ソッコーで解析されて群がったフリーライダーどもが結構な額を横取りしてたなw)

んでまぁしばらくして
GINKOの破綻カジノが法的に禁止トラフィックの計算式変更

所謂トラフィック目当てのマネーキャンプはどんどん無くなっていったわけです
日本人界隈だと所謂初心者支援の目的でマネーキャンプがあったりしたので
しばらくは残ってたけど 今じゃ全く見なくなりましたな

ちなみにマネーキャンプは確か当時のレートで最大だと一時間に数百L$
少額だと5分で1L$とかそんなのだったかなぁ

ちなみにカフェ店員の時給が当時で一時間50~150L$程度だったかなぁ

アップロード代が1ファイル10L$
まともなスキンや自動車が2500L$
装着タイプの馬が1000L$

なのでまーそれなりに結構なレートっすな
(日本国内のフリーライダー系プレイヤーだと
 自動車とかの値段を基準に労働対価としてのL$の価値が決まってた感じ)

ちなみに当時のレートで

販売が      1000円=2000L$
買い取りが 2500L$=1000円

とかだったかなぁ
まだ国内業者が現金での払い出しに対応してたね

まぁL$周りの黒い話とかしだすと面倒なのでまたの機会にでも




・windlight対応ビューワーの話

まぁ簡単に解説すると
当時としての"それなりに最新のマシン"ならパフォーマンスが劇的に改善するビューワーです
水面とかのビジュアルがかなり改善されます

グラフィック設定としては基本シェーダーONが 当時のWL対応ビューワーの設定です
グローとかが使えるようになったのもこのビューワーからだね

だたこのビューワの登場で最初の足切りが起きたとも言えるねぇ

・havok4によるヴィークル業界の崩壊 と
    自動車メーカー戦国時代の話

これに関しては枝葉が多すぎてあんまり細かい解説は出来ないかな

まぁ まずhavok1ってのがありました 所謂2007年初期の物理エンジン
こいつの利点としましては

なにしろコリジョンの形状追従性がいい
ただソレ以外はさっぱりといっていいほど利点がなくてなー

ちょっと異常コリジョンがあるとすぐにSIMがクラッシュするような状態だった
んでまぁそういう異常コリジョンを潰していくのがレース業界のテーマの一つでした

あとヴィークルの所謂"速度リミッター"ってのがすげー低いところに設定されてて
確か時速30キロくらいだったかな? それを突破する技術が所謂
"まともに売れる走りの車"の最低条件だった

んでまぁ当時はDTCARってスクリプトが有りまして
そいつは当時の限界である時速900キロまで出せました

ただこれを購入するのは当時の一般プレイヤーの経済状況ではとても辛い
ただ当時はかなりしょっぱい見た目の車でもサーキットタイムやら加速性がよければ
一台2500L$でも問題なく売れる状況だったので   まぁ所謂ドル箱状態だな
一回車を作るノウハウを手に入れればSIM持ちも夢じゃないとか言われてましたな

んでまぁ当時最強だった国内の車メーカー
バトルモータース
かなり早い段階で自動車作成技術をモノにして
1SIMの売り場持っていろんな車売ってたねぇ

海外だと

EMH ProStreet Need4Speed

大体この辺だなー
んでまぁこの辺が DTCar を正規で買って持ってた

んでDTCARが普及する最初の転機が あるメーカーのミス
なんと車をフルパーで売りに出しちゃった
まぁすぐに停止されたらしいが時既に遅し
そっからDTCARが爆発的に普及
"自動車の写真をアルファで切り抜いてはっつけただけの車"
当時の通称でいうところのテクスチャカーってのがものすげー氾濫した

んで所謂"速度リミットを突破するためのハック"も同時に流出しちゃったので
速度が出ることを全く売りにすることが出来なくなったわけよ

そこからしばらく粗製乱造と
サーキットタイムをどれだけ出せるかの勝負にプライベータが参加できるようになった

そしてHAVOK4の登場

まぁ当時はかなり試行錯誤された状況だったんだけど結論としては

・ヴィークルの速度リミットが撤廃された ただし最高速度の大幅な低下
・コリジョン特性が軽量化の名のもとにかなり変化 バンプしまくってまともに走れなくなる
・リミットが解除されたが故に非常識な設定値の車両の加速特性が崩壊 まともに走れなくなる

大体この辺がおきた
んでまぁDTCARも使い物にならなくなってたわけよ

その時点でアップデートが行われてれば って思うじゃん?
流出事件のせいでDTCARの開発終了してた

その結果として
DTCARポン入れで使ってたメーカーの車両が全部ごみになった
まぁ当時乱発してた車メーカーの9割がこれで死んだ

ただこの辺からスクリプトを真面目にやってるところが生き残ったわけよ
今残ってる車屋は大体この類っす

んでまぁhavok4の辺りでスカルプが使いものになるか?って感じになってきて
ぼちぼちある程度マシな見た目のスポーツカーとかが出てくるようになった

その間にSLGPとかSLGTとか佐世保モーターショーとかあったけど
当時のアーカイブが残ってないので適当に割愛

まぁ最近の流れとしては
結局生き残った所以外は
買い入れのスクリプトやら
なんとか整備したフリービースクリプトでどうにかしてる

んでまぁKCPってスクリプトがものすげー普及してるんだけど
適当に拾ってきたmeshのガワにぶちこむだけで動くので
アレも多分なんかの拍子にゴミになったらえらいこっちゃなんだろうねぇ


・MAGSLが沈んだ話と所謂電通云々の話
まぁこれもあんまり詳しく書けないんだよなぁ 実際はあんまり良く知らないので

まぁ 1SIM1000万円 の話とかする?
あの数字の根拠ってか理由ってかそういうのは

まずSIMの年間維持費が大体40万円くらいかかる
あとは全部参入支援企業の取り分な
SIM造成はまじめにやってるところならかなり頑張ってたんだけど
大抵SL専業クリエイターに丸投げ
NDAとかの関係で詳しい名前とかはわかんないけど
店を出してない一部の有名クリエイターが専用アバ作らせて造成してたとかなんとか

当時としてはまぁそれなりに美味しい話だったっぽい

んでまぁみなさん大好き
土地転がしで億万長者の話
まぁそこが運営してたSIM群まだ残ってんじゃないかなぁ

あれ案外勘違いしてるけど 実際にやってたのは不動産運用で
"環境づくり込での土地レンタル"なので
所謂"更地に道路引けばあとは勝手に借りたのが作ってくれて流行る"的な
不動産への投機や不労所得云々みたいなおいしい話では全くないんだよ

んでまぁ

・所謂最高の○○のリストが晒スレにあった時代の話

これの話につながるわけです
クソな運営するSIMオーナーがそれなりにいたわけよ
ジジババ騙してSIM確保させて
監査にこないことをいいことにハーレム作ったりとか まぁそういう話もありました

あとはほんと名前出すとアレなのがそれなりに居た

うちもまー一時期リストに載ってたけどそれなりに面白いリストだったので放置してたねー
あれ結局20スレくらいずーっとテンプレになってたんじゃない?
最終的に100項目くらいになってた

・乳揺れ対応ビューワ周りのゴタゴタの話
 エメラルドてビューワが出ました WLが出て半年くらいだったかな?
 なぜかしらんけど当時は純正より遥かに軽量で落ちないビューワーだった

 んでまぁ当時としてはかなり画期的な
おっぱいぷるーんぷるーん
ものすげー普及しました そりゃもう普及したさ アホみたいに普及したさ

あと"テンポラリテクスチャ"
一時作業用のテクスチャデータにアップロード代がかからない
しかも他の人から見える ちょー画期的
スカルプのトライアンドエラーがすげー捗ったわけさ
このビューワのおかげでスカルプの技術水準がアホみたいに向上した

んでまぁなんでそんな便利ビューワが問題になったかってーとな
メンバーの一部が裏で所謂ハッキングビューワーの開発してた
そりゃもーすげー問題になったさ

今のサードパーティービューワの開発形態になった直接原因だよ
(今サードパーティービューワーの開発者になるにはNDAと個人情報提出が必須)


・コンバットsandboxの話
これも書こうと思ってたけど大体伝聞の話になっちゃうからいいや


以上

VICEのお話 ちょっとした昔話

4/1シリーズ 20150227

まぁまともにアーカイブしてるサイトとかも軒並死んでるから
昔話程度に記録


時は2007年頃

当時のヴィークル対応CSは実質TCSのみですた

んでまぁこのCS 当時としては歩兵とヴィークル両対応で
API制御がOSSでロイヤリティーフリーだったので
それなりに流行りました
(この当時の主流はあくまでLLCSなので それと比較してそれなりという意味)

んでまぁ野っ原で 歩兵と 機銃積んだ初期の軍用機や戦車が居る程度の戦場
(具体的にはまぁ紅の豚だ あのへんまで)
くらいまでならそれなりに使えてました

けどまーWW1末期からWW2の
入り組んだ塹壕戦とか 市街地戦とか そういう戦場だと
TCSがセンサー式だったが故に普通に壁抜けするんで使い物にならず

いまいちいいんだか悪いんだかわからない状況だったっぽいです
(飛行機だけはかなり初期にOSSで実用レベルのが登場して
 今でもそのスクリプトベースで飛んでる希有な例)



んでまぁそんな中 VICEが登場しました
こいつもAPI制御部分はOSSでロイヤリティーフリーです

極初期は TCSとVICEと後一個なんか積んでて
マルチフィールド対応を謳ってた気もしますが

壁抜けがしなくてそれなりに軽くて
クラス分けとかがちゃんとしてるVICEに
フィールドがどんどん入れ替わりますた

この時代までのフィールドは
大体第一次世界大戦までを舞台にしたものが多かったですが
VICEの普及段階でWW2フィールドが多くなった感じ

(この辺の黎明期の年代が不明だけど多分2008末期くらいまで)

んでまぁぼちぼちVICE専用のヴィークルが出始めた頃に
モダンウォー想定のヴィークルが出てきました

最初に作ってたのは主に日本人だったらしいです

(当時の話を聞くとyumixの名前がぼちぼち出てきますけど
 yumix自体は徹頭徹尾WW2フィールドしかやってないので実質的には無関係)



んで一気に話は飛んで OLDSの登場
本格的なVICEのモダンウォーフィールドってことだと
ここの名前は外せません
(ってか実質ここ以外は大規模モダンウォーあんまりやってなかったし)

質と量共にヴィークルメーカー的にはA-TとAmokの二強状態がしばらく続きます


この辺になると所謂hackedとかの情報がぼちぼち出てきますが
(VICEが1.2になる前の無人兵器とかが大量に居た暗黒時代)
1.2へのアップデートでその辺は大体使えなくなりました

んでまぁその後

業界全体で大規模な禁止武器指定がおきたり
一部のモダンウォー対応化技術がロストテクノロジーになったり

スカルプで完全非装着タイプの第三世代戦車が出たり

あるバカがあからさまにぶっ壊れ性能の無反動砲をいきなり出して即ハブられたり

OldsがVICEフィールドじゃなくなったり

モダンウォー系フィールドで通称LLCSedと呼ばれる歩兵武器がメジャーになったり
VICEの標準API銃のみを明記したフィールドが出てきたり


とまぁ色々とあるけど歴史の話はここまで

以上

【愚痴】 (双方が)BANされたいならいいんじゃね?

まぁ愚痴っすよ

・完全な装着物系でガワの出来はまぁ平均以上にいいんだが
 スクリプトの実装とかが致命的に悪くて※1
 それが複数同じSIMに集まると確実にSIMがクリティカルなローパフォーマンスになる
 (rezものの場合は事情が微妙に違うというかトラブル絶対数が少ない)


・だからといってレビューでそれが書かれることはない
    or 書かれていたとしても信者からの"こいつはわかってない"の絨毯爆撃をうけて引っ込める
    or ある程度スタックした時点で新商品扱いで出品しなおされる

・ヘタにそれを作者や使用者に指摘してたり
  "わかってる人間なら理解出来る"くらいのアドバイスをしても
   無視する もしくはミュートして店からBANされるのは指摘した方

・イベント会場やSIM等で"重いことを理由に"外すことを要求すると
 延々愚痴られるかキレてテロリストになるか
 "寛容ではない"とふれ回られてそのイベントなりSIMなりはあぼーん



・んでそういうのの”解決策”は実質一つしかなくて
 そのオブジェクトで使われているのと同じ機能を全部実装した上で
 イージーセットアップ化もしくは"セットアップ"してあげる約束をした上で
 作者に"無料で提供する"以外の選択肢はない

・もしくは全面戦争に突入して潰すって手もあるけど
 正直これが出来るのはそこと同規模
 もしくはソレ以上の政治力を持ったコミュニティーのみなので実質不可能


・ってな感じの内容をここ3年くらいずーっとinworldで繰り返してる気がするよ


以上

※1 致命的に悪い実装

SetLink系やFast系の命令を一切使わない実装
んじゃどうやってるかってーと

Messagelinkedで再生トリガーを受ける方式で
テクスチャアニメ パーティクル 色変更 等を

全部1関数1スクリプトでやってるような実装
例えばスイッチをタッチで赤と緑に交互点灯させたい場合
"赤くするスクリプト"と"緑にするスクリプト"を別のスクリプトにする(しかもmonoコンパイル)
んでもってスイッチ自体もtouchstartでllMessageLinkedを送信するだけのスクリプトが別で入ってる
(嘘だと思うんだったらそういう製品の子プリムを見るといい 乾いた笑いしか出ない)

最近(リンデンが非推奨してるんだけどガン無視されてる)流行りの
"meshで全部の動作モーションを形状で作ってアルファ切り替えでアニメーション"
みたいなオブジェクトで1フレームに1オブジェクト 1スクリプトを割り当てて
再生トリガーがきたらフレーム数分だけsleepして実行するようなやつ
(10フレーム動かす場合だと同時に10個のスクリプトがフル回転状態になる)

んでそういうトリガーを適切なインターバルを開ける仕組みを入れずに
ひたすら連打させるようなやつ
(sleepでイベントスタックして検出漏れが出るのをリミッターにしてるような設計)


こういうのがまぁ割と普通に生き残って
新作も出してるるまともなとこなら3年前くらいに対策が完了してんだけどさ
(スマートではない実装だとしても完全シングルスクリプト化自体は完了してる)

問題はここ3年くらいの新規さんと
2008年代くらいまでに大規模投資したのをもったいないからって更新できずに
今までダラダラと残っちゃってる系のところ
その辺だとそういう負荷コントロール周りの情報が完全にミッシングリンクになっててさ
(ボランティアにまともな技術者が居た時代 で公開情報が完全に停止してる)

新規さんだと検索してひっかかるすげー旧い解説サイトとか
そういう"全く更新されていない初心者支援コミュニティー"に頼らざるを得なくて

というか(実用的な)サンプルコードや市販システムがない
(マケプレ上位になってたような奴はレガシーになりすぎちゃってる上にクッソ高くて話にならん)

んじゃどうするかってーと
2007年以前の状況と似たような
"自分の足でレベルの高いコミュニティーに到達する"か
"wiki片手に独学でどうにかする"しかない

んでそういうコミュニティーに到達するにしても基礎は独学でやるしかないというか
基礎知識のぶち込み部分はひたすら反復しか無いからね

うちがまぁ初心者さん向けに
"○○が出来るようになるにはどうすればいいですか?"的な回答として
"RLの生活を二週間分完全にSLにぶっこめ"って
inworldでは半分冗談で言ってるけど 実際問題としてそれをやらなくてもクリアできる人間は
なんらかの積み上げがあるんだよな PGじゃなくてSEレベルの


SLにおけるグリーフィング(通称テロ)と武器のお話

まず前提条件として武器について

随分前のエントリにも書いたとおり

・武器の形をしているものは攻撃能力が無くても全部武器

・攻撃能力があればどんだけしょぼい見た目でも全部武器

んでこれの後者の方

"攻撃能力"

SLではこれに対するボーダーってのが文化的側面
(11年も同じサービスやってりゃ文化的なタブーもあるさ)もあり
実害的な部分もある

で、どういうものが攻撃能力として見なされるかというと

・爆発物 ミサイル 核兵器 銃弾 砲弾 レーザー ビーム類
 (人やものに向かって発射する場合は空砲やエフェクトのみのダミーをも含む)

・花火等のでかい音とパーティクルが出るものを人に向かって発射

・なにかを射出してアバターや他人のオブジェクトに当てる仕組み全般
 (スイカ砲とかpopgunとか鰤とかも含む)

・push(llPushObjectだけではなくオブジェクトのめり込みを使用するものも含む)



直接的な攻撃能力が無くても文化的な側面で攻撃とみなされる行為
迷惑行為 嫌がらせ とか言われるようなやつ

・アバターや他人のオブジェクトに不用意に銃口を向ける行為
 (これは銃口管理っちゅーてコンバットやる人間なら必須の概念)

・非許可エリアで他人に危害を与えるようなものを正当な理由無くむき出しで所持する行為
  (警棒 スタンガン 銃 手錠 でかいタイラップ 刃物類)

・画面が埋まるレベルのパーティクルを出すオブジェクト
 (GTX TITANですらFPS低下が起きる場合がある)

・無限増殖系のオブジェクト(一般的にテロと言われてるものはこれがメジャー)
 これの定義が結構曖昧というか面倒な部分で
 たとえば タマが確実に消える処理が入ってない銃弾とかでも含まれます
 (メインランドで土地境界に大量に刺さってるグローオブジェクトとかがそれ)

・存在し動作するだけでSIMのパフォーマンスを著しく下げるオブジェクト
 これも完全に私有でパブリック・アクセスではないのSIM以外では
 (たとえそのSIMのオーナーが許可したとしても)嫌がらせと見なされます
 (完全封鎖SIMでも同じマシン上にあるSIMに迷惑がかかるが)



んで

このへんの行為に対する明確で確実な対処法

"無言でAR書いてTPHOMEしてオブジェクト全リターンかけてエステートBAN"
ヘタに武器つかって反撃したり交渉で抑えこもうとしないこと
というかそういうのするのは大抵かまってちゃんなので
こっちが会話しようとした時点でこちらの負けだ


メインランドじゃ無力じゃねーかってツッコミが入るだろうけど
メインランドはリンデン管轄で土地オーナー権限がかなり強いので
ARちゃんと書くだけでも効果あります 的な


以上

サーキットやコンバット(所謂rezモノ)でのお話

まぁ7年前から状況は全く変わってないのですが
最低限のマナーみたいなもんについて

実際んところこれを読める人間にはあんまり関係ない話でもある

・身長は最低170cm以上に

 これはどっちかというとアダルト禁止系のルールクリアのための条項です


・直接的な関係のない音声やAA付きジェスチャとかを"連打"しない

 ものすげー単純に実際重いです


・とりあえずスクリプト総数は最低でも50以下に 可能なら10以下に

 スクリプトタイム的にはそれでもまだ重い場合が結構ありますけど
 簡易的な指標としてその程度を目安にしませう


・ARC(アバターレンダリングコスト)はルールに書かれていてもあんまりアテにしない

 数値指定してるところはほぼ”わかってない”人間なのであんまりアテにしない
 どっちかというと無法者を排除するときに理由にするくらいの意味しかありません


・描画設定は距離を最低200m以上で最低10fps出る設定に

 これはどっちかというと事故防止目的ですな


・搭乗許可されていないvehicleに勝手に座ろうとしない

 これ本来は最低限のマナーのはずなんだけど
 話の通じないバカは”座れないようにしている方が悪い”って逆ギレするのでw



・サーキットやコンバットエリアだからといってどこでも撃ったり車rezしていいわけではない

 実際んところこれを守れる人間はこういう記事読まなくても守るし
 守らない人間はそういう注意書きも全く読まない
 "出来るようにしている方が悪い"ってのはその手のバカの定型文ですが
 それを言った瞬間にBANされます



・テロや迷惑行為に対しては武器で反撃しようとしないこと

 よっぽど頭悪いのでも無い限り嫌がらせ目的で
 "撃たれたってのを理由にARする"ために攻撃するので
 安全を確保してからAdmin通報かARしませう



基本的には大体この辺で十分なのですが
それだけでは通じない話を適当に




・フリービーは基本的に使用禁止で物乞い行為はBAN対象です

 他にも名指しで禁止指定されているメーカーは結構有りますな



・自作です は基本的にそれが許可されるSIM以外では禁止

 試合では使用禁止だがフリーランやシューティングレンジ等で使うのはOKってところもアリ



・パトカーや警察装備の人間はかなり警戒されるので注意

 警察系はRP押し付けバカが歴史的に多すぎたので警戒される
 警察装備でもおおっぴらに警棒 手錠 拳銃 を武器やアダルトの非許可エリアで
 装備するのは完全にアウトです
 (実際昔はカフェとかで警察RPなので銃を外せませんって
  押し問答になってBANって案件それなりにあったらしいw)



・copybot品やripped-off品はrezしたり装着するだけでBANされるものと覚悟せよ

 一回目は知らなかったで済まされる可能性はあるが
 基本的にそういうのを使う連中はそれ以前に迷惑行為もやってんので
 大抵の場合一発BANです
 逆にそういうのをフリービーで配布してるところはダメなSIMなのでいかないこと



・オーナーやスタッフがや常連が(他で禁止されているような)極端な厨武器や
 フリービーしか使ってないSIMには近寄るな

 なんでもアリ系のコンバットSIMは極端な話すると
 "常連が訪問者をサンドバッグにしてヒャッハーしたいだけ"のSIMですので
 そういうところにリボルバーグレネードとかAA12とかサイコガンとかもっていって無双すると
 なんだかんだ理由つけてBANされますw



ってなところかね

以上

SL銃の傾向と対策

SL銃にはコンセプトごとに大きく分けて

・実戦系

・コスプレ系

・総合系

・CS系標準銃

・フリービーその他

・割とどうしようもないもの

とありまして

それぞれのキャラクター付け的に

・実戦系(予算500~1000L$)

 アニメは最低限(リンデン標準の場合すらあるが軽いのでおk)
 最低限のエフェクト(ついてても排莢とスモーク程度)

 動作負荷になり得るファクターを極限まで削りつつ
 コンバットSIMのレギュレーションはきっちりクリアしてるので

 これを一挺もっとけば色々と便利って感じのジャンル

・コスプレ系(予算300~5000L$)
 発射エフェクトや動作演出に凝ってるのもあれば
 超絶造形だったり そのメーカーのアパレル品とのマッチング重視のがあったりと
 割と見た目重視でやってる系の銃

 ただその分すげー重かったりコンバットSIMで必要な機能が無かったり
 そもそも発砲可能な構造してないのがあったりしますので
 軽いSIMで撮影や身内での撃ち合いに使うくらいの用途を推奨


・総合系(予算1000~3000L$)

 銃専業メーカー系でそれなりにお高い銃は大抵これに該当します
 アニメ エフェクト 発射性能が高次元でバランスが取れており
 コンバットSIMとかに持ち込んでそのまま戦えます
 外装オプションの付け替えや体型に合わせた各種調整機能とかもひと通りついてるので
 ある程度の予算(2000L$位上)があるならこれ系のを買っとけばほぼライフタイムで使えます

・CS系標準銃(予算0~200L$)
 所謂フリービー銃とは業界の扱い的には完全に別です
 そのCSで必要な機能は最低限全部揃ってますがぶっちゃけ弱いってことが多い
 外装もまぁ適当な無料素材拾ってきた感じのが結構ありますので

 とりあえずどんなもんか体験だけしたいって時にはありがたい存在ですが
 長く続けるならそのCS対応の大手メーカー銃買う感じに


・フリービーその他(予算0~500l$)

 あえて書くのもアレなのですが
 通常のコンバットSIMでは大抵使用禁止になってる上に
 見た目もあんまりよろしくない系が多い
 あとフルパーのは大抵5年以上前のスクリプトがノーメンテなので動作も色々とアレ
 持ってうろついてるとほぼ100%テロリストの疑いをかけられます

 (あと結構copybotとかripped-off品が混ざってるので危険)

 サンデーガンスミス的なことして遊ぶなら
 これ系かCS標準銃のフルパーのをベースで色々やって勉強するの推奨

・割とどうしようもないもの(0~2000l$)
 外装がcopybotやripped-offやフリービー流用で
 スクリプトも大抵フリービーを更に劣化させた感じだったりする
 更に大したアニメやエフェクトがついてるわけでもないのに結構な値段がついてる系

 コマーシャルモデルの実銃名称や実銃メーカー名そのまま名前に使ってたりするのも特徴

 自作ですよーアピール(もちろん自作なわけない)をするために
 必死こいてパッケージ作ってみたり
 銃のサイドにでかでかと自分所のロゴがついてたりするんだけど
 明らかにどっかからパクってきた系の怪しい見た目や値段なので見向きもされない

 ぶっちゃけ買うだけ無駄な上に持ってるだけで残念な目で見られる



まー銃として買うなら実戦系か総合系かなぁ
フリービーやCS系標準銃は買うとかそういう話でもないし


ってなところかね
以上

所謂売ったり配布するとアウトなものの話

まぁ所謂例外とか個別で許可してたり知ってて無視してたり
公式で過去にグッズ出してたりするものとかがあったり

広報に問い合わせたら
”聞かれたらアウトとしか言えないから問い合わせないでくれ”的な回答を得たケースとか
そういのを除外しての話(そこで具体名いくつか出すと面倒なので書かない)


アウトなもの
・所謂COPYBOT品(inworldの作品を複製して転売)

・ripped-off品(他ゲームやmodから持ち込んだデータ)

・商標やメーカーロゴ 具体的な商品名をそのまま使ったレプリカの配布や販売

・特定メーカーや組織の場合そのメーカーの製品のレプリカすらアウト
 (問答無用で削除+アカウントホールド までやられるガチのアンタッチャブル領域)
 過去に三例ほど出てるんできになる人は詳しい人に聞いてください



・銃器や装備で制式ナンバーではなくコマーシャルモデルの名称の使用や刻印
 ものすげークリティカルで具体的な例だと M4カービンとかM24とかあのへん

・映画やアニメやゲームのキャラクターの
 名称を使ったコンプリートアバターや無許可での公式絵の展示
 劇中に登場したガジェット等のレプリカ
 (〇〇っぽいコスプレアイテムだと言い張ればグレーという主張もある)

まぁ大体この辺かな

商標権はまぁ別として

著作権関係は米国だとフェアユースってもんがあるので
ソレ関係もちょっと調べたほうがいいかもしれないね


ってなところかね
以上

SLとロールプレイングとUnityとSandbox型って仕組みの話

・ロールプレイ

ロールプレイが好きな人は
SLとかminecraftの素のマルチは結構向いてる気がするけどね
チュートリアルを最低限クリアしないといけないのはどのプラットホームでも一緒だし



ただ所謂ネトゲとして見た場合
両方共ある意味究極のクソゲーな気がする

よくまぁ外のプラットホームを知ってしまえば
SLには戻ってこなくなる的な話はあるんだけど
(そこで例に出されるのがいつもゲームエンジンなのはなんかの冗談だとは思ってる)

手段と目的の違いというか
努力を努力として努力してしまう人間は生き残れない感じは
洋ゲーのFPSとかにも共通する部分があるよね的な

そういう
"報われることがわかっている努力"だけしたい人は
所謂"ロールプレイングゲーム"とかがええんじゃないのかね

完全にカネだけが目的でストイックにやるなら
Unityでの製作はかなり面白いんじゃないかな
(逆に何かを作るのが目的なアマチュアにはある意味究極の地獄な気がする)


・ネットの"世界"の話

うちはまーツイッターとかで
ネットという世界って言い回しをよく多用するんだけど
特に悪意とかも無いというか

同人含むアマチュア活動とかの"建前"の部分
(販売ではなく頒布 値段は媒体化するための実費)
を極限まで突き詰めた場合

オープンソース・ソフトウェアの世界とつながっちゃうんだよな




定量的な価値は存在しないが商取引のようなものは存在する世界

"知ってるがお前の態度が気に入らない"

このフレーズ割と好きなのよね



ネットの世界には振り込めない詐欺 みたいな単語もあるんだけど

ネット上で情報をなんらかの対価を払ったり払わなかったりして入手する場合に
それがたとえ具体的な金銭ではなくても"提供者責任"みたいなもんが発生するって考えが
所謂"お客様は神様です"とかと混ざって存在している気がする

それを全部ぶん投げる的な側面もあるのが”オープンソース”なんだけど
(オープンソースで無料なのはあくまで成果物のみ
 保守や改造や講習で金を取るのはOKってのは明記されている)

ソフトウェアって
物理的な損失が生じているように見えないので
あと"楽しいからやってんでしょ ならタダでいいよね?"的な話も昔は見たね


----このへんで飽きた-----


まぁなんというかこの話自体に結論みたいなもんは無いんだけど

無理やりオチとするなら因果応報というか等価交換というかそういう話なのかねぇと

以上

2014年3月7日金曜日

キャストレイのお話

・キャストレイとはなんぞや?
 速い 軽い 使えると楽しい めんどくさい

・使うことによるメリット、デメリット

-メリット
 rez出来なくても当たり判定や距離が計測出来る
 物理弾と比較して命中判定がほぼ即時といっていい
 法線ベクトルを検出できるので着弾エフェクト等が精密に出せる

-デメリット?
 ちょっと凝った事しようとすると座標演算が面倒
 確実性を上げようとするとループ処理が要る
 ものすげー重いSIMだとコケる可能性が高い
 銃系だと互換性の関係で結局rezしないとなんも出来ん

・センサーやコリジョンとの違い
 仕様上Detected系が全く機能しないため
 (何にぶつかったか)を単独では検出できない

・キャストレイの”弾速”は?
 理論上は一応無限大ですが
 SIMサイズからくる制約的には
 大体秒速200キロって辺り
 動作確実性をほぼ完全にするなら第二宇宙速度くらい

・物理弾と比較してのメリットは?
 結局Rez要るからぶっちゃけほとんど無い(笑)
 とまーそんなこと書いてもブログ的には意味ねーので

 -なにしろ弾速が速い rezから着弾のラグほぼゼロ 移動とrezのラグはある
 -なにしろ大きさが無い 1cmでも隙間があれば軽々とすり抜ける
 -着弾エフェクトが精密に出せる 壁に弾痕沢山とか素敵やん?
 -ゼロ距離CQBが出来る ナイフで懐に入れば無敵なんてのが幻想になる
 -近接戦闘で刃の軌跡で当たり判定が取れる
 -キルボックス式の爆発物で遮蔽物の概念が出来る
 -近接専用弾みたいな”射程距離”の概念が精密に作れる



この辺まで前置き

実際にキャストレイ使う場合のお話

maxhitをn,法線アリにした場合
UUID1,座標1,法線1,UUID2,座標2,法線2,・・・,UUIDn,座標n,法線n,検出合計(n)
こんなかんじのデータが戻ってきます
RootKey指定した場合はUUIDがRootPrimのものになります

なんも検出されなかった場合(検出コケた場合も含む)
長さ1で0以下のintegerが入ったリストになります

んでリストの末尾は常に検出数が出ますので
 if(llList2Integer(list raycast,-1)>0){}
これで検出したかどうかがわかります

0未満は全てエラーコード扱いとなっており
基本0未満の数値が出ることはほぼありません
(検出コケて0になることは割とよくある)

検出がコケる例
・やたら長いベクトルを指定
・やたら短いベクトルを指定
・開始地点が何かにめり込んでる場合
・地面に向けた場合(NULL_KEYが戻ってきますがたまーにコケる)
・なんも無い空間指定してその先がSIM外だった場合

なおアウトSIM置いててファントム検出しようとすると多分エラー出まくるかと

具体的なエラーレート改善方法は
・距離を変えて数回のリトライ(やり方によるがそこまで高負荷でもない)
・開始地点がなんかにめり込んでないかのチェック
 (検出が”面コリジョン”なのでめり込んでる中で実行するとすり抜ける)

検出したもんが何かを調べるのに一番確実なのは
UUID指定してのセンサーです

地面だったらNULL_KEY返ってきてるのでセンサー打たなくてもおk


ちょい処理増やすと壁の厚さとかも調べられるので
薄い壁程度なら貫通するタマとかも作れるっちゃ作れる


ってなところかねぇ



エフェクト再生用tips
ベクトルを方角仰角のrotationに変更する式

vector normal=<hoge>;
rotation rot_normal=llEuler2Rot(<0,-llAtan2(normal.z,llVecMag(<normal.x,normal.y,0>)),0>)
                                                                      *llEuler2Rot(<0,0,-llAtan2(normal.y,normal.x)>);

やってることはまぁ簡単です
アークタンジェントで角度計算して仰角>方角の順番で回してるだけ

まぁプリムによっては90度とかずれるだろうけどそこは各自どうにかしてくだちい


以上

2014年2月25日火曜日

銃関係のお話

SLでの銃に関して
まず禁止事項としましてはこんなもんがあります

・許可されていない一般エリアでの(ホルスター状態も含む)装着および発砲の禁止
・人に向かって撃つことの禁止
・ケージガン、push弾及び核兵器の全面禁止

よくお馬鹿なnoob君がBANされる原因としまして

そのフィールドなりSIMのルールも碌に読まずに
セイフティーエリアでもお構いなく
適当に入手した無料の銃で人を撃って
しかもスタッフやオーナーの警告も”英語わかりません”って無視して

それで数回TPHOMEにあったり返り討ちにあったりして
勝てないからってぶちきれて
無限増殖系のテロアイテムや核兵器を使う

とまーここまでテンプレ

んでまぁこういうお馬鹿なnoob君が凸してる時に
たまたま善良なnoob君が居合わせてケージガン食らったり爆発物の巻き添え食らって
わけも分からずホームに戻って二度と行かなくなる 的なことも
割とよくあります

ちゅわけでSLで銃を持ったり
銃を扱う場所へ行くときの心構えというかそんな感じのもの

・マニュアルをちゃんと読む
 米国内の実銃には大抵”マニュアルを読め”の刻印が有ります
 そのくらいマニュアルは大切なモノです ちゃんと読みませう

・Homeは銃を持ってても大丈夫な場所にする
 SLで死ぬとホームに戻されます
 戻された先が銃禁止のエリアだった場合
 BANされる可能性が大変高いので
 そういう危険の無い場所をホームにしませう

・自分に銃口を向けられない限りは銃が好きな人にあんまり悪い人は居ません
 基本的な使い方とかおすすめの銃とか教えてくれたりします

・銃は基本的に買うものです
 出処不明な無料の銃はトラップ入りだったりまともに撃てなかったりと
 大抵の場合ろくな事になりません
 しょぼい見た目の銃はテロリストと疑われるリスクもありますので気をつけませう

 価格帯としては
 ライフルだと1000L$~2500L$
 ハンドガンでは500L$~1200L$
 くらいのが一番ハズレが少ないです

 同じメーカーの銃で見た目で安い銃があって VICEとかMCEとか書いてあるやつは
 専用CS(勝敗判定装置)のフィールドでしか使えない銃です

・おもちゃの銃 なんてもんはこの世界にはありません
 銃の形をしていればとりあえず全て銃です
 逆にどう見ても銃の形をしていなくてもタマが出るなら銃です
 ガンアレルギーの人口はむしろSLの方が多いくらいかもしれませぬ

・違法な銃に気をつける
 具体的な実在メーカー名や市販銃をそのままの名前で売ってる奴は全部アウト
 第二次大戦以前のものや
 軍用銃を軍の制式名で出してる奴は大体大丈夫ですが
 極端な安値や高値がついてる場合アウト品の場合があります
 よくわかんない時は銃が好きな人に聞きましょう


てなところかねぇ
以上

新型リサイズ命令関係のお話

実装されたものの時代はmeshに移行してる上に


リサイズの所謂"強制執行"が出来ないっチューことで
いまいち不人気の新型リサイズ命令ですが

平面マップも対応してないっちゅーやる気の無さっぷりなわけですよ


まぁそれだけ書くのもアレなので
誰得なソースを適当に置いときます

//どのプリムが縮小出来ない原因なのかを教えてくれるだけのスクリプト
default
{
    state_entry()
    {
        llSetLinkPrimitiveParamsFast(LINK_SET,[PRIM_TEXT,"",<1,1,1>,1.0]);
        integer nop=llGetNumberOfPrims();
        vector scale;
        do{
            scale=llList2Vector(llGetLinkPrimitiveParams(nop,[PRIM_SIZE]),0);
            if(scale.x<0.015||scale.y<0.015||scale.z<0.015){
                llOwnerSay((string)nop+","+(string)scale+","+llGetLinkName(nop));
                llSetLinkPrimitiveParamsFast(nop,[PRIM_TEXT,"FOUND\n",<1,1,1>,1>]);
//                llSetLinkPrimitiveParamsFast(nop,[PRIM_TEXT,"FOUND\n",<1,1,1>,1.0,PRIM_SIZE,<0.015,0.015,0.015>]);
            }
            --nop;
        }while(nop>0);
        llRemoveInventory(llGetScriptName());
    }
}
//[EOF}

コメントアウトしてる行を入れ替えると
縮小限界をちょい上げる程度にリサイズします






あとは各命令に関する適当な解説

Functioninteger llScaleByFactorfloat scaling_factor );
こいつがメインとなるリサイズ命令

記述の仕方が現在のスケールからの相対なので
従来型の基準スケールから〇〇%プラスて感じのを
そのまま入れ替えるとかはちょい無理っすな



Functionfloat llGetMinScaleFactor( );
Functionfloat llGetMaxScaleFactor( );

この2つがリサイズの限界を見るための命令
こいつの戻り値も現在スケールからの相対値なので
一気に限界までリサイズかけたいって場合を除き
あんまり使い道がありませぬ

llScaleByFactor(llGetMinScaleFactor( ));

petitteさんとかだと割とこいつ多用する感じになるんじゃないかのぉ
ただこれ使ってもサイズ合わないなら
従来型の強制執行が可能なリサイザーになりますな


ってなところかねー
以上

2014年2月20日木曜日

タイピングAOのスクリプト

//適当にコメント付きソースを貼っつけとく
//まぁやってることは単純明快です
//コピペすりゃ動くようにしてあるけどインデントとかは各自なんとかしてください

//タイピングアニメーションスクリプト mod v1.0 20140219 by UEPONYA

//******基本的な使い方****************
//スクリプトとアニメを一緒にいれればおk
//スクリプトが先ならアニメが入った時点でリロードがかかりますし
//アニメが先ならスクリプトの初期化時にロードされます
//複数アニメ対応とかは面倒なので無し

//---------以下解説とソース------------------

//*****装着物スクリプトの基本*******
//装着物は基本的に 装着をon_rez 取り外しをattachイベントで検出します
//タイマーはよっぽどの用途でも無い限りは0.2秒レートがええです
//AO系でタイマーを起動する場合 パーミッション取得出来た時のみにしたほうがうけがよろしいです

//*****負荷コントロール周り*********
//あとLSLの基本としてスクリプト外への出力は最低限のレートに留めるべきとされています
//データ取得に関しては関数一個で完結するものはいくらやってもok
//内部での変数書き換えはリスト以外なら気にせずじゃんじゃんやっちまっていい


key     owner_key;
string  anim_name;

integer Cur_status;
integer Lst_status;

default
{
    state_entry()
    {
         owner_key  = llGetOwner();
         anim_name  = llGetInventoryName(INVENTORY_ANIMATION,0);//アニメーション取得は一回でおk
         llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);
    }
    run_time_permissions(integer perm){
        //ホントはちゃんと取得されたパーミッションフラグを確認せんとあかんのだけど
       //こんくらいのスクリプトなら無くても割と問題なく動くのでやらない

        llSetTimerEvent(0.2);//ハイレートすぎると重いのでこの程度にしておく
    }
    timer()
    {
        Cur_status = llGetAgentInfo(owner_key) & AGENT_TYPING;
        // 同じ情報の参照が二箇所以上ある場合はグローバル変数にぶっこむ方がトータルでは軽い

        if(Cur_status!=Lst_status){//切り替わった時だけアニメ再生を制御するほうが軽い
            if (Cur_status){//このへんのif elseの書き方は全体の書かれ方とかを見て決める
                //タイピング開始時の処理
                llStartAnimation(anim_name);
            }else{
                //タイピング終了時の処理
                llStopAnimation(anim_name);
            }            

            Lst_status=Cur_status;
        }
    }
    changed(integer change){
        if(change&CHANGED_INVENTORY)llResetScript();//プリムの中身変わったらスクリプトリセットしてしまう
        //これだけでよっぽどのバグが無い限り回復するのでメンテナンスフリーになる
    }
    attach(key id)
    {
        if(id==NULL_KEY){//デタッチ時はアニメーションのパーミッションを取得してる前提で止めちゃう
            llSetTimerEvent(0.0);//別にタイマー止める必要は全くないんだがテンプレみたいなもんなので
            llStopAnimation(anim_name);
        }
    }
    on_rez(integer t){
        llResetScript();//装着時はアタッチよりonrezが先にくるのでここでリセットしてしまう
    }
}