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

2019年1月1日プライベートarma3,dayz,exile,mod,server

20190101174244_1

追記:アイテム湧き最終調整

追記:超簡単さらなる圧縮

追記:オーディオファイルの編集

追記:SFXサウンド

追記:lootboxアドオンの更新

追記:ゾンビのLOOTアイテムも弾抜き

追記:謎エラーの原因わかった

追記:謎エラー

追記:高速化してる?

元日ですか、そうですか。。

(;^ω^)あけおめ~初詣行ったよ~

以前、Battleyeキックに悩まされてるので、いっそ、綺麗にゼロから書き直そうと、やり直し作業をしております。

嫌々ながら作業してたので、書き間違いがあるやも、しれなかったので。

20190101174254_1

管理用のAdminToolKitで十数個、これはしょうが無い。ミッションに含めてる、スクリプトで数個。

image

この世にチーターがいなけりゃ、こんな仕組み要らないのよ・・。

battleyeホルダーのscript.logにキック対象のコードが書き出されるので、これを以下のルールに従って、script.txtに追記していきます。

Exileでは、各行毎にコマンドが紐付けされてるので、エラーコードも控えておきます(例:#21 とか)

・”(ダブルクオート)にエスケープ処理(頭に半角/を書く)

・/(バックスラッシュ)にエスケープ処理

・改行を\nに書き直す

・頭と最後は、”・・・"の感じで括られる

※つまり1行で纏め上げる。これの他、余計な記述は一切許されない

エラーコードが、たとえば#7と書かれていたら、+2でscript.txtの9行に追加する必要があります(決まりごとなので+2で覚える

んで、追加する際は、空白と”!=”を頭に書く必要があります。

!="・・・・・・" こんな感じになります。

意味的には、このコードはキックされない例外ですよーと、Battleyeに教えてる意味になります。

image

もうちょいだけ説明。各行の頭には、意味深な数字がありますが、7は、キック&ログ出力という意味(全部7だけども)

上写真のように、createVehicleなら、この行のフィルター内にこのコマンドが入ってるのが分かるはずです。

ちなみに、サーバ起動中に、このscript.txtを書き直しても、適用されないので、また、起動し直さないといけない。

そう、これが辛いのよ。。。

(;´Д`)

追記:高速化してる?

image

上作業で、何度も起動を繰り返してる訳ですが、ついでなので、起動パラメーターでの高速化もチェックしてます。

デフォルトで自動的に最適に設定されてそうですけども、あえて、明示的に設定してみる。

追加スレッド(exThreads)では、各処理にスレッドが割り当てられる。これは、サーバでも同様です。

大型ページのサポート(hugePages)では、より大きなメモリ操作が行えるようになる。今どきのPCなら、沢山メモリ積んでるわけですし。

ログなし(noLogs)クライアント限定。クライアント側なら、ログはまず不要でしょう。実際、ほとんどログ出てません。

世界(-world)クライアント限定。起動時に読み込むMAPです。実際にサーバに接続するまで、MAPは分かりっこないんですよ。

image

サーバはAMD CPUなので、もしかして自動適用されてないかも・・と思ったので、CPUカウントや、メモリ系関連パラメータをイジって起動テスト。

以前のように1コアに処理が集中する事が無くなったような気がします(気がするだけかもしれない)

追記:謎エラー

20190101213205_1

うむむ・・・。

アイテム湧きが動作しなくなる謎エラーで足止め状態。。

エラーログにも出てないし、改造したコードを戻しても治らない。

なんでや・・。

20190101220105_1

ね?ゾンビちゃん。

image

そうなると、自然とコード解析になってしまうんですよね。

(;^ω^)

実際のアイテム湧きは、サーバ側で実施されてますが、湧きのリクエストはクライアント側から行われてます。

ExileClient_system_lootManager_thread_spawn.sqf

なので、サーバ側は指定された1個の建物内に沸かせて、1ターン終了という感じ(建物には別途IDが振られる。これはガーベージコレクタ関連でしょう、多分)

ざっと見た所、特殊な事はしてない。

image

Youtube動画を見ながら深夜作業。

ExileServer_system_lootManager_spawnLootInBuilding.sqf

に、こんなの埋めて、湧き対象の建物を全てリストアップしようとしております。

diag_log format[“[********ITEM LOOT]:: %1 , %2 (%3)",typeOf _building,_lootTableName,count(_localPositions)];

嗚呼・・地道なデバッグ作業ぇぇ。

(;´Д`)

20190103030712_1

むむむ?

アイテムが沸かなくなった建物のログが出てないぞ・・・。

CUP MODで仕様が変わったとか・・?(直前に、大きくバージョンが上がっていた)

3:05:35 Object id 9d629e3b (1595) not found in slot 83,235
3:05:35 In last 3000 miliseconds was lost another 2 these messages.
3:05:35 Link cannot be resolved

こんなログが出てる。

う・・・む、要調査や・・・。

(;´Д`)

20190103031558_1

建物のクラス名の変更は無いようですし。

image

MODのchangelogを見ても特に見当たらない。

もう一回、CUPをダウンロードしてこようか。。

image

(次の日)

サーバ(手動DL)クライアント側(SteamでDL)のCUP MODを見比べてみた。

バージョンは一緒っぽいけど、ファイルの数がちゃうッ!

ヽ(;゚д゚)ノ なんでや

Steamを信用して、クライアント側からサーバにコピーする。

無論、Linuxサーバなので、ファイル名の大文字が無いかのチェックも怠らない。

(;^ω^)

追記:謎エラーの原因わかった

20190103213020_1

単純にMODのバージョンが違っていたというオチでした。

短期間の間にCUP MODバージョンが上がっていたようでした。

(;´Д`)

TerrainsとCore両方1.11.0だったと思っていたんですが、この数日間の間に1.11.1に上がってたらしい(terrainsは1.11.2)

20190103211811_1

無事、アイテム湧きを確認。

( ´Д`)=3 ふぅ

MODバージョン相違すると、サーバからキックされると思ってたんですが、サブバージョンは無視されるとか?

image

サーバ起動してから、軽い気持ちで映画を見てしもうた。ピクセルってやつ。

これのお陰で、サーバリスタートが正常に動作するのを確認できたw

(;´∀`)2度もリスタートしてたわ

image

ログにはこんなケタタマしいほどのリスタートの文字が・・。

長い事やってるが、そういや、初めて見たw

(;^ω^)

追記:ゾンビのLOOTアイテムも弾抜き

image

アイテム湧きに、過酷なマガジン弾抜き改造を施してる訳ですが。。。。

ゾンビが所持してるアイテムにも、実施しませう。

(;^ω^)

@exilez/scripts/SpawnZombie/SpawnZombie.sqf(132行付近)

                _zombie addItemToVest call _lootGroup;

この行を以下の様にします。

private _vestContainer = vestContainer _zombie;
private _item = call _lootGroup;
private _ammoCount = getNumber(configFile >> “CfgMagazines" >> _item >> “count");
if(_ammoCount > 1)then{
     _vestContainer addMagazineAmmoCargo [_item, 1,floor(random _ammoCount)+1];
}else{
     _zombie addItemToVest _item;
};

これで、華麗に弾抜きしちゃいますよぉ。

何度かテストプレーしてますが・・・

m9( ゚д゚)か、過酷ッ!

追記:lootboxアドオンの更新

image

拙作のlootboxアドオンも、同様に弾抜き機能を入れ込みます。

配布元(GIT)

また、loot箱内にアイテムが散乱しすぎてるきらいがあるので、適当に削除する機能も入れ込む。

Poptabが大量すぎる気がするので、デフォルト設定値を、Exileデフォルト値に近づける。

追記:SFXサウンド

image

マップ上で音が鳴るようにしてるんですが、だいぶ以前に書いた部分だったので見直し。

こんな感じで複数定義して、後はランダムで適当に選んで鳴らしてくれる(description.ext)公式CfgSFX

5番目の引数が、ランダムで適用される確率値で、多めに鳴らしたいサウンドに偏らせる事が出来る。

追記:オーディオファイルの編集

image

ミッションファイルを太らせてる原因だったサウンドファイルを、さらにダイエットするため編集。

大体半分程度まで圧縮できた。

(゚∀゚)

追記:超簡単さらなる圧縮

image

ミッションファイルは可能な限り小さい方が良い。全てのプレーヤーがダウンロードする訳なので。

設定ファイルとなると、軽く数千行行ってしまう訳で、そんな設定ファイルは大量にあります。

保存する際、改行コードをCR+LFではなくて、LFにする事で、1行辺り1バイト削る事ができる訳です。可逆なので安心。

って事は、1ファイル(≒設定)辺り、10~30KBは簡単に削れます。

追記:アイテム湧き最終調整

20190104215016_1

デバッグが済んで、やっとこさアイテム湧きの調整(多分これで最後でしょう)をやってます。

多からず、少なからず、たまにはボーナスも・・という微妙な感じを出したい。

途中、拙作アドオンのAIさんと遭遇。

装備がしょぼいので、すぐ分かるw

(;^ω^)

20190104215918_1

鹵獲もアイテム取得の手段です。こちらも、調整。

しかし、5.56mm使いやすい。プレーヤーとしてプレーしてた時は、7mmばっかだった。

20190104221112_1

どこぞの空港にて。

( ´Д`)=3 ふぅ

2019年1月1日プライベートarma3,dayz,exile,mod,server

Posted by nabe