【GAME】ARMA3 EXILE MODサーバの旅その39

sc20180106124919追記:Meltdown&Spectre兄弟

前サーバ構築の際にやりたかった事を、しております。

Arma3を必要としない、見ての通り素材作成です。。

(;´∀`)

普段はあまり画像や音源編集なんてしないので、なんだか新鮮です。

画像は、Billboardオブジェクトへのテスクチャーやローディングロゴなど、ほぼ完了。

今は、音源編集してます。

さすがArmaです。MODだけで無く音源もネット上に結構あります。Regional Ambient Sounds Packを使わせて頂いてます。そのままではファイルサイズがデカいんで編集してます。

以前、動画編集用に買ったVegasProに付いてきた、SoundForgeとやらで編集してたんですが、後々に高音質データしか作れない事に気付き、フリーで有名なAudacityに切り替えました。

8Khzな低音質データで十分なのです。

(;´∀`)

これで、音声1ファイル80Kb程度に収める事ができた。どちらも、Ogg形式は対応してる。

sc20180106162645ちなみに、画像編集は、当初GIMPを使ってたんですが、どうにも慣れなくて、普段使いのExpressionDesignでやった。

※どちらもフリー
sc20180106181242サーバ負荷テスト

(アドオン分全て稼働させるため)しばらく放置していて、確認(プレーヤーゼロ状態)

Core i5 4670Kですが、1.5Ghz近辺で、15%が最大のようでした。メモリは、2.2GB付近。

タスクスケジューラでGPU値が見れるようになりましたが、この「Compute」って、PhysXを含んでたりしないのかな。とはいえ、こちらも3%程度。

これなら、本番環境のA6-3650(OC3.5Ghz)でも耐えられるでしょう。Linuxだし。

追記:OccupationPlacesの改造補足

sc20180106181925前に、町パトロールAIが、パトロールっぽく無い場所に沸く点で、改造しましたが。。

さらに改良しました。

MAPに記録されたランドマークポイントで沸く(デフォルト)所を、近くの建物を探して、そこで沸くようにしましたが。

稀に、Waypointの失敗をするらしく、棒立ちになってしまうようでした。

そこで、建物の近くの道路上で湧くようにしました。

これで、ほとんどの場合、町並びの所でパトロールしてくれるはずです。

今回、青字の部分を新しく追加しました。ログ出しはコメントになってます。建物・道路が見つからなければ、スルーするだけです。

occupationPlaces.sqf(56行付近)追加する全コード

    _houses=nearestTerrainObjects[_pos,[“BUILDING”,”HOUSE”],400,false];
    //_logDetail = format [“[OCCUPATION:Places]:: name: %1 count %2”,_locationName,count(_houses)];
    //[_logDetail] call SC_fnc_log;
    if(count(_houses) > 0) then
    {
        _pos=getPos selectRandom _houses;
        _road=_pos nearRoads 100; ←100m圏内の道路を探す
        if(count(_road) > 0) then
        {
            _pos = getPos selectRandom _road; ←ランダムで選ぶ
        };

        //_logDetail = format [“[OCCUPATION:Places]:: change name: %1 position: %2”,_locationName,_pos];
        //[_logDetail] call SC_fnc_log;
    };

※ブラウザからコピーすると、” とか ’ とか化けるので注意

※nearRoadやnearestTerrainObjectsは、エラー時はNULL(nil)を返すのですが、count()に渡しても例外発生は無く、問題無いようです。nilチェックするとコードが数行増えてしまうし、削除しました。

追記:看板とかの結果チェック

20180106193922_1・・・・・・。

(;´∀`)

Armaの世界で、ゆっくりに出会えるとは思ってもみませんでした。

256*256で作ってしまったので、横長になってもうた。

追記:調整テストプレー

20180107180438_1ほぼ、設定系の作業は終わってる。

バグとか無いか、最終的な調整に入っております。

画面右上のロゴが、これで良いのか、未だ悩んでる。

追記:幻のアイテムと遭遇

20180107175920_1ぴ・・ピヨコちゃんじゃまいか。

ヽ(;゚д゚)ノ!

激レアにしたので、設定した俺ですら驚いてしまったのだw

黄色なんで遠くからでも目立っちゃうんですけども。

20180107180841_1ちゃっかり、画像のスペクト比を直しました。

うん、OK。
20180107181244_1アイテム湧きも入念にチェック。

他サーバに比べれば、結構湧きます。

ただ・・、写真のように、背景に溶け込むように設定してます(何度も微調整しまくった・・)

。゚(゚´Д`゚)゚。

町漁りでも楽しめるようにの配慮です。私は、EXILE初見の頃は、アイテム漁りだけで十分おもろかったんですw

20180107181311_1うむ・・、当初の予定通りに、沸いてるようです。

サバイバル押しの調整になっております。

これでも、十分甘くしましたけども・・。

追記:看板スクリプトの最終盤

大きな看板(Land_Billboard_F)に、順番に画像を貼り付けます。ランダムにしたければ、「selectRandom _bills」と書けばOK(※1の部分)

古いラジオ(Radio_Old)に、3Dサウンドを割り当てます。サウンドの詳細は、description.extに記述します。複数登録してランダム再生も可能。

青字の部分は、あるオブジェクト周辺の看板は、画像固定したい場合などに利用できます。不要なら削除してください。

//*****************************add initServer.sqfからコピーする部分
private _vehicles = [
[“Land_Billboard_F”, [5818.69, 5904.45, 253.427], [0.611226, -0.791456, 0], [0, 0, 1], true],
[“Land_Billboard_F”, [6205.13, 5912.37, 308.629], [0.243536, -0.969892, 0], [0, 0, 1], true],
[“Radio_Old”, [6076.05, 5625.22, 304.328], [-0.440405, -0.897781, -0.00575302], [0.00962416, -0.0111285, 0.999892], true],

・・・・・・

下:追記する部分

private _bills=[ ←画像の一覧
            “bill0.jpg”,”bill1.jpg”,”bill2.jpg”,”bill3.jpg”,”bill4.jpg”
            ];
private _cnt=0;
{
    private _vehicle = (_x select 0) createVehicleLocal [0,0,0];
    _vehicle allowDamage false;
    _vehicle setPosWorld (_x select 1);
    _vehicle setVectorDirAndUp [_x select 2, _x select 3];
    //_vehicle enableSimulationGlobal (_x select 4);
    //_vehicle setVariable [“ExileIsLocked”, -1, true];
   
    if (_vehicle isKindOf “Land_Billboard_F“) then ←看板
    {
        if(count(nearestObjects [_vehicle, [“Land_Kiosk_redburger_F”], 100]) > 0)then{ ←100m以内の看板は画像固定
            _vehicle setObjectTexture [0,”bill14.jpg”];
        }else{
            _vehicle setObjectTexture [0,_bills select _cnt]; ←※1
            _cnt=_cnt+1;if(_cnt >= count(_bills)) then{_cnt=0};
        };
    };
    if (_vehicle isKindOf “Radio_Old“) then ←3Dサウンドの登録
    {
        private _trg = createTrigger [“EmptyDetector”, _x select 1];//,false];
        //_trg setTriggerActivation [“NONE”,”NOT PRESENT”,false];
        _trg setTriggerStatements [“true”,””,””];
        _trg setSoundEffect [“$NONE$”,””,””,”Radio“]; ←サウンド指定
    };
}
forEach _vehicles;

用意する画像は、2:1で良いようです。綺麗にしたいなら、512x256(JPEGで約50KB)で、多少汚くても良ければ256x128(JPEGで約20KB)で十分です。PAAかJPEGで。

追記:AI動作Behaviorについて

sc20180108112636町パトロールにバリエーションを持たせるために、AI動作(Behavior)をランダム設定していましたが、いっこマズイやつがあった。

Stealth/Combat/Aware/Safe/Careless

5種類選べるんだけども、Safe/Carelessは、本気の”平和ボケ状態”です。危険があっても、戦おうとしません。これはマズイ。パトロールAIを設置する際は、SafeとCarelessは避けたほうがいい。

公式ページ解説

DMSやOccuなどではAwareが使われてます。危険があっても、隊列を乱さず動作してるのはそのためです。

Stealth/Combatは、設定Waypointをキャンセルしちゃう。Stealthともなると、匍匐、ライトOFF、勝手に行動し始めたりします。

追記:3Dサウンド設定

sc20180108115157勘違いしてました。やっぱちゃんと調べた方がええです・・。

(;^ω^)

description.extにこんな感じで登録しておくんですが。

引数がイッパイあって、ロクに調べもしてませんでした。

左から、「ファイル名・音量・ピッチ・聞こえる距離・切り替り頻度・切り替り設定3つ(min/mid/max)」となってます。

class CfgSFX{
    sounds[]={Radio};
    class Radio{
        name=””;
        sound1[]={“radio1.ogg”,db-10,1.0,500,0,0,20,52.6};
        sound2[]={“radio2.ogg”,db-10,1.0,500,0.2,0,20,42.3};
        sound3[]={“radio3.ogg”,db-10,1.0,500,0.2,0,20,53.1};
        sound4[]={“radio4.ogg”,db-10,1.0,500,0,0,20,39.8};
        sounds[]={“sound1″,”sound2″,”sound3″,”sound4”};
        empty[]={“”,0,0,0,0,0,0,0};
    }
};

使う時は、”Radio”とすれば、登録されてる4種類の中からランダムで選ばれて再生されます(sounds[]の中身)リピート再生時は、最後から4つの設定で、勝手に切り替わるようです。

ここでは距離500mとしてますが、本当に500m辺りから聞こえ初めます。1Kmと設定しても同様です。なので、実際にプレーしてみて、リアリティがあるかどうか確認が必要です。

自分ではラジオが鳴ってる様子を出したかったので、丁度良かったです。

(;´∀`)

追記:PAAファイル化

sc20180108173330使用する画像は意味なくJPEGにしてたんですが、試しにPAAで変換してみたら・・

何気に圧縮が効いてるようです。

PNG(23.8KB)が、17.8KBまで小さくなってます。

う・・ん、JPEG得意の画像もあるし、一概になんとも言えませんが。

透明を利用するならPAAしかないですけども。

いやいや、JPEGの高圧縮に勝るものは無いようでした(近くで見ると汚いけども)モデルテクスチャーなどの利用以外はJPEGの方がさらに50%位小さいです。

別途インストール必要な「Arma3 Tools(無料)」内の「TexView2」で変換できます。変換する画像は、2^xサイズでないとダメです。

追記:MAP外放射能エリア

sc20180108182319こちらのスクリプトを利用させて頂いて、MAP外は放射能エリアとなりました。

動作も確認。

ファイル1個だけでシンプルでした。
追記:Meltdown&Spectre兄弟

sc20180109094645今世間を騒がしてる、Intel CPUにおける脆弱性問題。

いわゆるMeltdownとSpectre問題。

そのまま、CPUコードに依存する設計上の問題なので、何気に”大問題”なんです。

ソフト側(OSも含む)で根本的に対応できないんです。ハードウェア(CPU)交換でしか対応できない。

(高速化のために)予め予測実行した後に、エラーを発生させると、予測実行していた部分が、そのままクリアされず残ってるというもの。

この予測実行部分に、メモリを読み取るコードを忍ばせておくと、いくらでも盗めるんだそうです。

※簡単なCPUコードで、プログラマなら誰でも理解できる

これは、絶対、裁判沙汰になります。インテルさんガクブル状態でしょう。独自ソフトを使ってる産業業界での、対策コストは相当な額ですよ・・・。

インテルの現行製品のほとんどが該当、AMDも古めの製品に該当してるそうです(10年以上前、Athlon64 X2とか)

あるCPU生コードを実行しなきゃいい訳で、インターネットで感染するという類のものではありません。

コメントを残す

メールアドレスが公開されることはありません。