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

2018年12月23日プライベートarma3,dayz,exile,mod,server

追記:久々にサーバ更新

追記:アイテム湧きカスタムの覚書

追記:アイテム湧きの再設定

追記:Linuxの罠、再び

追記:新しい?HINOMARU EXILEサーバ

追記:久々にTakistanの地に立つ

追記:新しいサーバロゴ完成ッ

追記:マガジン湧きカスタム動作結果

追記:プレーヤーイン時のカスタム

追記:自衛隊MODを適用するか悩む

もうBattleyeのキックが夢に出てくるようになって・・しばらく、現実逃避しておりましたが。。

(;´Д`)デバッグが地獄、ウツになるわ

最近、時間が出来つつあるので、ちょこちょこと久々に初めております。。

Arma3がオワコンになろうとも、サーバ公開まではこぎ着けたい。

Exileをプレーしたくても、私個人的にDayZまで過酷じゃなくて、カジュアル過ぎない程度のソロ志向過酷サーバが好きなのです。

MIJさんのサーバとか好きやった(現在、サーバ更新掛けてないようなので、もう管理してないっぽい)

(;^ω^)・・・

低Pingサーバだと、皆無なんですよね。。

やってみたいなぁ・・と思っていたやつの一つが実現しそうです。

やっと見つけました。

setAmmo

これw(magazineとかそれっぽい名称で検索掛けても、Arma3ではアイテムオブジェクトのそれを指す名称なんですよ・・)

んで、これは、何をするんかというと、マガジン内の弾数を設定するコマンドなんですよ。

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

この記事でやってましたが、アイテム湧きのカスタムの一つで、「武器+マガジン」ではなくて、「武器だけ」にするのはもちろんの事。

Dayzよろしく、「マガジン」湧きにも、残弾数もランダムって事にしたかったんです。

(;^ω^)

まだ動作確認してないけども。多分、これで最大の弾数をゲットできるはずなので。

_ammoCount = getArray(configFile >> “cfgMagazines" >> _itemClassName >> “count");

@ExileServer/code/ExileServer_system_lootManager_spawnLootInBuilding.sqf の79行辺りに、追記すりゃええ訳です。

ですが。。

アイテム湧きは、湧き用オブジェクト(_lootHolder)のカーゴに追加する形で入れ込んでる(1箇所に複数個湧くので)

んですが、名前だけで指定してるんですよね。

_lootHolder addMagazineCargoGlobal [_magazineClassName, _numberOfMagazines];

うむむ、どないして、やるんだ。

数分後。。。

setAmmoページを見てみると、プレーヤーが現在所持してるマガジンに対してだけのようです。

player setAmmo [handgunWeapon player, 10];

あ。。無理っぽい。

(;´Д`)

数分後。。。

むむ?

lootHolder  setAmmoってやればええんじゃまいか?

まずは、動作確認からですね。。

あともう一個。アイテム湧きとして、PopTabも沸かせたい。。。

(;´∀`)

多分、そういうアドオンがありそうだけど、自分でやってみる。

プレーヤーがPopTabを落とすアクションがあるので、そこから追ってみる。

クライアントからの受信で、Serverのここが呼ばれる。

ExileServer_system_money_network_putMoneyRequest.sqf

近くにPoptabがあれば統合されて、Exile_PopTabsというオブジェクトが生成される。

※CfgPoptabStorageに最大値が設定されてる

※クライアント環境変数ExileMoneyに、Poptab数が入ってる

んで、実装の部分はこんなでした。

    _container setVariable [“ExileMoney", _containerMoney, true];

これを、アイテム湧きとするなら、lootHolder に、これをそのままセットすれば良いっぽい。

ただ、複数アイテムにしちゃうと、訳分からなくなりそうなので、Exile_PopTabsオブジェクトに強制的に書き換えれば良いんかな?

そう、うまく動作するか分からないけんども。

追記:久々にサーバ更新

久々にサーバを起動してみた(Ubuntu16.04LTS)

色々MOD更新やらOSアップデートやらが、溜まってる。

うむむ・・これ、これが面倒なんすよね。サーバが閉鎖する理由ってこれなんじゃないかと思います。

特にOSアップデートが曲者で、ライブラリリンクが切れてしまう恐れがある。最悪は、(仕様変更とかで)動作不可まで陥る。それが嫌で、古めの16.04LTSにしてる(本当ならDebianとかRedhat系の方が安心かも)

ざっと確認した所、大丈夫やった。動いてる

(;´Д`)ふぅ・・

MODの更新はあるかな・・と、唯一利用してるCUP MODを見たら。

現在、1.11.0とめっさバージョンアップしとるがなッ!

ヽ(;゚д゚)ノ!入ってるの1.4.2

枯れてるMODなのに、そう更新入るもんか?何があった?!(枯れてる≒安定してるの意味)

変な仕様変更とかされてなきゃいいんだけど。。。マップの地形変化とか。。。

((((;゚Д゚))))

TerrainsCoreは7.5GB、TerrainsMapは2.5GBのようです。サーバに直に置くので、ダウンロードしておく(しばらく掛かるだろうなぁ・・)

追記:アイテム湧きカスタムの覚書

上で触れた武器アイテム湧きのカスタム部分のコーディング前調査の覚書。

Arma 3 CfgMagazinesリファレンス(AmmoのCfg情報)

※Exileで追加される武器もこのCfgツリー内にあるんだろうか。。

Exile_Item_MountainDupe(マウンテンデュープ)が、2個セット湧きなのは、そう書かれてるんですが(無論1個湧きに修正)、なんでか、アイテム種別が”Magazine”になってる。

BIS_fnc_itemTypeによって、アイテム種別が調べられるんですが、これだとホントのマガジンだけを、なんとかして絞らねばならない(というか、マガジンという形状のモノ、ランチャーとかあるし)

僅か追加4行ですが、これで動くだろうか。。(まだ動作確認してないよ)

@ExileServer/code/ExileServer_system_lootManager_spawnLootInBuilding.sqf の66行辺りに

_ammoCount = getNumber(configFile >> “cfgMagazines" >> _itemClassName >> “count");
if(_ammoCount > 1)then{
     _lootHolder setAmmo [_itemClassName, ceil(random _ammoCount)+1];
};

configFileからの読み取りで例外が発生しそうな感じですが、無くても”0”が帰ってくるようなので、無いならこれでええかと(つーか、駄目だろそんな仕様。ボヘミアさん)

マガジンを拾っても、最悪の場合1発だけ入ってるぞ・・と。

(;^ω^)・・過酷や

ちなみに、武器湧きだけ(マガジン無し)にしたい場合は、この部分をまるっコメントアウトすればええですよ。

:(;゙゚’ω゚’):・・か、過酷

※1マグだけなら、_numberOfMagazines=1とすればいい

んで、Poptab湧きですが。その下の部分(switch終わり)にこれを追加。

if(_itemClassName isEqualTo “Exile_PopTabs") then
{
     _lootHolder setVariable [“ExileMoney", floor(random 250)*2+1, true];
}

Exile_PopTabsをloot_tableに追加しておく必要がありますが、これが出たら、初めてPoptabを入れ込みます。

ここでは、1~500(2刻み)にしましたが、要調整です。

Poptabが湧くエリアって、民家だけにしたいですよね。これだとloot_tableで制御できるので、バランス調整もしやすいでしょう。

重要:まだ動作確認してません

普通、サバ缶って、実際に遊んでみて確認するんでしょうけど、自分の場合、(8割方)実際にインしないで、コーディング画面とログだけ見てるんですよ。

サーバの起動に数分(アドオン処理終わり)、インするのにも数分(Arma3立ち上げ)掛かるんだもん。

ほとんどのExileサーバが、デフォルト設定で動いてるのはその性ですよ。

追記:アイテム湧きの再設定

動作確認する前に、アイテム湧きの調整もついでにやる。

Exileやサバイバルゲーといえば、アイテム漁りは最重要な要素です。

しかしながら、終わりが見えないバランス調整

実際の所は、こんな感じで各アイテムグループを、確率で指定してます。

無論、ほとんどのサーバは、デフォルトのままで稼働してる場合がほとんどですが、1個イジったら、また弄りたくなる・・の繰り返しで、ほぼ全部書き換えと相成りました。

コンガリサーバにも登場するらしい、このイエローダックちゃんも、もちろん出てくる。

(;^ω^)

違う用途だけども。。

久しぶりすぎて、忘れそうになってたので、やり方備忘録。

EXILE公式からLootTableCompiler-1.0.3bをゲットして、以下のファイルを編集する。

LootItemGroups.h アイテムのグループの定義

LootTables.h 建物種別毎に、湧きグループの定義

そしたらcompile loot tables.batで、ファイルを生成する。

CfgExileLootServer.hppが出来上がるので、exile_server_config.pbo内に入れてPBOパックする(無論、config.cppで「#include “CfgExileLootServer.hpp"」とかしておく。既存クラスは全削除)

見ての通り、全部武器を沸かせるようにしてます。アタッチメントだって、全湧きです。

サーバによっては、トレーダーでしか扱わないとか、あるんでしょうけど。

とにかく、アイテム漁りが楽しくなるよう、重点を置いてます。

でも、まぁ・・そう簡単に問屋は下ろしませんけどもねぇ・・。

そもそも、弾が無いのだw ←(;´Д`)

optic_twsというスコープ。デフォルト設定では、無効になってたんで、いままでスルーしてましたが、調べてみたら、

Thermal Weapon Sight
Magnification: 4x–10x

・・と書かれてます。これって、温度変化の部分が見えちゃう例のやつって事かな(使った事ないし、動画でしか見たことが無い)

チート級のアイテムってやつか。

よしッ!沸かすぞ。

いざっ、インしてみようかと思ったら、どこぞのタイミングでやらかしてしまったらしい。。。

動かなくなってもうた。

変更分を一気に適用すると、毎回、こうなんだよなぁ。。

(;´Д`)分かってはいるが、再起動がタルいのよ

デバッグ作業や。。。下に続く

追記:Linuxの罠、再び

Warning Message: No entry 'bin\config.bin/CfgWorlds.Takistan’.

なんでか、MAP定義ファイルを読み込んでくれません。

16:50:58 Warning Message: No entry 'bin\config.bin/CfgWorlds.Takistan’.
16:50:58 Warning Message: No entry '.gridNumbersOverLines’.
16:50:58 Warning Message: '/’ is not a value
16:50:58 Warning Message: No entry '.centerPosition’.
16:50:58 Warning Message: []: '/’ not an array
16:50:58 Cannot evaluate " – no file
16:50:58 Warning Message: []: '/’ not an array
16:50:58 Cannot evaluate " – no file

こんなのが出ております。

あぁ・・・・いつか見たことがあるが、もう解決方法なんて、覚えてません。

(´;ω;`)

・・・ですが、かれこれ長いことArma3サーバを触ってる経験が、生かされます。

そういや、CUP MODを更新したっけな。。

この画面を逃さなかった。

Linuxサーバなら、見逃しちゃならぬ、不届き者がいるのですよ。

Addons」←これッ

これにどんだけ、泣かされてきた事か。。。

。゚(゚´Д`゚)゚。

addons

と書かなっきゃ駄目なんですよ。ウソっぽいけど、本当だから、気づくのに苦労させられたんです。

※他にも大文字ファイルがあるけど、ゲームとは直接関係ない。ディレクトリ名とPBOファイルだけ変える

いつかMOD自動更新スクリプトを用意するつもりだけど、これを忘れないようにしないといけない。

追記:新しい?HINOMARU EXILEサーバ

いまサーバリストを見たら、HINOMARUというEXILEサーバがありました。

前からありましたっけ?

マップは、ALTISで、PvEっぽい。MODは大量に必要ですが、全てSteamからインスコ可能ですね。

追記:久々にTakistanの地に立つ

うむむ。快晴です。目が痛い。

武器だけ湧いてるのは確認したぞ。

だが、マガジンの残数とポップタブ湧きは、うまく動いてないようだ。

むむ。。

(;´Д`)

setAmmoは、ローカルで実行しろ、って書いてあった。アイテム湧きでは、実質的に無理や。

あ、勘違いしてた。そもそもの使い方に誤りがあった。setAmmoは、装備してる武器に対してのコマンドみたい。

いや待てよ。

プレーヤーが再インした際に、前状態を再現する時どーやんのよ。調べてみる。

ExileServer_object_player_database_load.sqf

ここで、目新しいものを発見(目的から外れる。。。。)

_player setVariable [“ExileMoney", (_data select 38), true];
_player setVariable [“ExileScore", (_data select 39)];
_player setVariable [“ExileKills", (_data select 40)];
_player setVariable [“ExileDeaths", (_data select 41)];
_player setVariable [“ExileClanID", _clanID];
_player setVariable [“ExileClanData", _clanData];
_player setVariable [“ExileName", _name];
_player setVariable [“ExileOwnerUID", _playerUID];
_player setVariable [“ExileDatabaseID", _data select 0];
_player setVariable [“ExileHunger", _data select 4];
_player setVariable [“ExileThirst", _data select 5];
_player setVariable [“ExileAlcohol", _data select 6];
_player setVariable [“ExileTemperature", _data select 44];
_player setVariable [“ExileWetness", _data select 45];
_player setVariable [“ExileIsBambi", false];
_player setVariable [“ExileXM8IsOnline", false, true];

おおっ、プレーヤーの状態の環境変数ですよ。

んで、話は戻って。addMagazineAmmoCargoというコマンドを見つける。

これで、前状態のマガジンの残弾を再現してるようです。

んでは、さっきのコードを書き直してみましょう。

@ExileServer/code/ExileServer_system_lootManager_spawnLootInBuilding.sqf の57行辺り(case 1: から)

/*
                     if (_itemClassName isEqualTo “Exile_Item_MountainDupe") then
                     {
                         _lootHolder addMagazineCargoGlobal [_itemClassName, 1];
                     }
                     else
                     {
                         _lootHolder addMagazineCargoGlobal [_itemClassName, 1];
                     };
*/                   
                     _ammoCount = getNumber(configFile >> “cfgMagazines" >> _itemClassName >> “count");
                     if(_ammoCount > 1)then{
                         _lootHolder addMagazineAmmoCargo [_itemClassName, 1,floor(random _ammoCount)+1];
                     }else{
                         _lootHolder addMagazineCargoGlobal [_itemClassName, 1];
                     };

旧コードはコメントにしちゃいます(念の為、_ammoCount は、頭でPrivate宣言しておこう)

さて、これでどうよ。

しかし、思いっきり標準コードをカスタムしてるけど、普通のサーバはやってないと思う。だが、コンガリはやってる

追記:新しいサーバロゴ完成ッ

ロゴ新しくしたいなぁ・・と思っていたので、さっきまで熱中してしまった。

ミッションロード中に出る、あれです。

シンプルでええんじゃないかと。。

(;^ω^)

追記:マガジン湧きカスタム動作結果

色々寄り道してしまったが、例のアイテム湧きでの、マガジン残弾減らし作戦の動作結果です。

m9( ゚д゚)成功ッ

写真をご覧頂くと、僅か数発しか残ってないAKのマガジンが。。

Arma3の仕様上、数字で分からないんで、左枠のゲージで知るしか無いんですけどもね。。

運良く、所持武器の5.56STANAGが湧いてたので、残弾を確認。これは10発しか入ってなかった。

おや、拙作アドオンが置いたクレイトが、あんな所にあるじゃまいか。

EXILE MOD武器のマガジンというか、ショットガンの残弾も少なく湧いてます。

おや、アヒルちゃん。

当然ですが、SMGのマガジンも同様に減らされてます。

m9っ`Д´) 過酷ッ!!

追記:プレーヤーイン時のカスタム

プレーヤーがサーバに接続した際にカスタムするなら、ここです。

バンビ状態でインする時

ExileServer_object_player_createBambi.sqf

ロードでの再接続時

ExileServer_object_player_database_load.sqf

毎回、アルコールを摂取した状態(ExileAlcohol>0)でインしてみたら、どーかなぁ?とかテスト予定。

(;´∀`)

この前、「エクセル」って書こうと思ったら「exile」ってキー打ってた。病気です。

追記:自衛隊MODを適用するか悩む

現代の自衛隊をモチーフにした「Japan Unit」というMODがあります(約1.1GB、Steamに有り)

陸海空毎にアセットが用意されていて、しっかりしたMODですが、見ての通り、国旗をあしらっただけというのがほとんど。奥のヘリは三菱製、フッソ製トラックとかあるが。

だが、魅力的なアイテムがあるんですよ。

m9( ゚д゚)89式ッッッッ!!!日本国産小銃(アサルト)っすよ。奥さんッ!

※クラス名:Howa Type 89:jpa_wepn_Type89_base(jpa_wepn_Type89Fというストックが違うやつも有り)

これが使いたくてたまらない。これのためだけに、1GB MODを適用するかどーか、すげー悩んでます。

※できるだけ利用MODを抑えたい

このランチャーも、国産ランチャーのようです(クラス名:Howa 84-RR:jpa_JSDF_W_RR_84mm)

89式は、普通の5.56NATO弾なので手に入れやすい。

あと、もう一個ッある!!

m9( ゚д゚)カワサキKLX250ッ!!!

これも入れ込みたいよねぇ。。。

2018年12月23日プライベートarma3,dayz,exile,mod,server

Posted by nabe