【GAME】ARMA3 EXILE MODサーバの旅その36
うむむ・・。
公式フォーラムはちゃんと見てないとダメくさい。
英語は弱いので、一見スルーしちゃうんです。
(;^ω^)
既知のバグというやつ。
確かに、前々から気になっていた、ログ上のエラーが、これっぽい(放置してるとMPKilledなんちゃら、てのが沢山出る)
EXILE MOD Server側のバグ問題、ここではそのほとんどがタイポ(入力ミス・スペルミス)のようです。
ExileServer_system_garbageCollector_deleteObject、ExileServer_object_construction_network_upgradeConstructionRequest、ExileServer_system_event_ambientFlyOver_startの3ファイル
立ち上げ1時間辺りから、徐々に負荷がデカくなっていく理由が、これだったら良いんだけども。
MPKilledの所は、イベントオブジェクト削除しなきゃならないのに、出来てないって事はその分リソースを消費したままになってる?とか。
とりあえず、今、放置して様子を見ている。
(負荷)重くなっていくかは、まだ調べてませんけど。
ログがスッキリして気持ち良くなりましたが。
今度は、こいつが気になる。
cargo_house_v2_f.p3d (from) not found in the operative map
これが出まくる。
どこのスクリプトで出てるのか調べたんだけども、Addon上ではないよう。
それーとなく調べてみたら、mission.sqfの例のやつっぽい(addOns=[])何かを追加すれば良いようです。
まだ推測の範疇を超えてませんが。addOnsに記述する文字は、以下のオブジェクトのファイル場所っぽくて。
https://community.bistudio.com/wiki/createSimpleObject/objects
よく利用するボヘミア公式のオブジェクトリストの中に「Addons」という欄があるじゃないですか。
https://community.bistudio.com/wiki/Arma_3_CfgVehicles_EMPTY
つまりは。
a3\structures_f\mil\cargo\Cargo_House_V2_F.p3d
なら(ファイルデミリタを”_”に変えて)
a3_structures_f_mil_cargo
のように書くと良い・・・・とか(まだ推測です)
https://community.bistudio.com/wiki/Arma_3_CfgPatches_CfgVehicles
このページには、”Class”という名ですが、一致してる。
多分、これで良いっぽい。
しかし・・、このCargo_House_V2_Fなんてオブジェクトは、俺のMAP内に無いっぽいんだけども・・。
(;^ω^)
あ、DMSイベントで置かれたって事かな。
放置して、確認しよう。
ついでに、CUP MOD入れてるので、”cup_core”を追記しておいた。
追記:
上記の結果ですが、うん、サーバー負荷が無くなりました。やっておいて良かった。
稼働させておくと、徐々に重くなっていっていたので、リスタート1時間毎にするか?とか思ってたので、非常にえがった。
今度は、ログ上にこんなメッセージが大量に吐き出されるようになった。
Server: Object 2:2112 not found (message Type_121)
調べてみると、EXILE MODというよりも、Server側のメッセージぽくて、操作対象のAIが存在しないというものらしい。
どういう事なんでしょ。無視してもええんかな。
テストプレーする度に、色々なモノが気になっていく・・。
(;´Д`)
これまで一度も、パトロール車両と出会わなかったので、気になっていたが。。
なるほど、スポーン地で爆散してたり、そもそも道路を走ってくれてなかったw
(;^ω^)
コードを追ってみて、何か分かるかもしれない。
OccupationのBlacklistエリア登録です。
これを設定しておかないと、バンディットAIが必死にトレーダーを攻撃してしまうんです(死なないけども)
MAPマークから自動で認識してくれたら便利なんだけども。
親切なサーバーなら、プレーヤースポーン地も入れちゃうんでしょうけども、私の所はトレーダーのみとなりますw
補足:
AIスポーン前に必ず、occupation/scripts/fnc_isSafePos.sqfで、このブラックリスト&拠点&トレーダーとの距離チェックが入るようになってます。
追記:AI難易度
私的には殺人的難易度なのですが・・
多分、コレくらいで、皆様に丁度ええのでは無いかと・・。
(;^ω^)
「初見ヘッショありますけども」
やっと見つけたぞ!!
m9( ゚д゚)!!
苦節数年、いくら検索しても見つけられなかった、オブジェクト。
(Kongariサーバではレア湧きアイテムとして有名なようです)
ゲーム中に所持して、ログアウトして、データベースでクラス名を確認。。
Exile_Item_RubberDuck
よーやく、クラス名が判明しました。
EXILE MODのオブジェクトだったんですね。ほら、RubberやDuckで検索しても、ゴムボートの方が出てきてしまってた。
湧きアイテムとして、追加ッ!
追記:このアヒルちゃんで、かつて無い素晴らしい機能を追加しました!!これは凄いw
あと、ゴミアイテムのExile_Item_BurlapSackで、アウトドアバックパックをクラフトできるようにしてたんですが・・
ダメなようでした。残念
(;´Д`)Dayz SAを参考にしたんですよ。
missionのconfig.cpp内で、水やガソリンのソース元オブジェクトを設定できますが。。。
なんでか、キレイな水の方(CleanWaterSource)の設定が反映されません。
”watercooler”しか許されてないようです。
私のサーバには、watercoolerなんてモノは存在しませんので・・別のもので代用する予定でした。
サーバのコードを追って調べてみよう。
FuelSource(ガソリンのソース元)の方は、ちゃんと動作しました。
CUP MODなら以下を追加すると、ガススタンドで給油できます(ジェリ缶)
“fuelstation_feed","fuelstation_feed_ep1″,"fuelstation_feed_pmc"
なるほろ・・コードを追ってみました。
(;´Д`)
mission/config.cpp(class CfgInteractionModels)から、exile_client/code/ExileClient_object_item_craft.sqf(60行)から、exileClient_util_model_isNearby.sqf(19行)ときて、周辺オブジェクトを調べてます(10m範囲)
結構シンプルで、WaterSourceだからと特別なコードはありませんでした。WorkBenchだろうと、WoodSourceだろうと、FuelSourceも同じコードを走ってます。
CfgInteractionModelsに定義されたClass内のmodels[]があるか調べてるだけです。
確か、オブジェクトには計算無しStaticタイプ(一番低負荷)があって、それで置かれると検知不能だった気がします。
た・ぶ・ん・・、それが原因かな。と
WaterSourceとして、MAP内の「井戸オブジェクト」を指定してたんですが、ダメとなりました。
(;´∀`)
んじゃ、どーしようか。自分で配置すりゃええんですけども。
補足:ウソでした。ちゃんと設定できました(次記事にて)
追記:記述忘れラッシュ
設定見る度に「あれ?」という事になり、設定忘れで有ることに気付かされる。
価格設定が終わったと思ってたら、「DLC APEX」用アイテムの事をすっかり忘れてたり・・。
クラフトに必要な、アイテム(EXILE_ITEM_****)の湧きがそもそも存在して無かったり・・(かなり有った)
Exile_Magazine_8Rnd_74Pelletsと、Exile_Magazine_8Rnd_74Slugを、今更勘違いしてたし・・。
追記:MAP外に行ったら?
MAP外に出た時の対応です。
こちらのスクリプトを使うと、MAP外は放射能エリアとなるようです。
ガスマスクしててもダメージにする事も可能なようです。
追記:Occupation Placeの改造
そのキッカケはこれ。
MAPに登録された場所と、実際の街の場所が全然違う場合が結構あります。
TakistanのJazaという街は、こんな感じで2箇所に別れてますが、MAP上の地点はその真中です。
OccupationPlaceでは、この真中に沸くようになってるんです。
これではパトロールではありません。。
(;´Д`)
occupationPlaces.sqf(56行)
{(下記、動作版)
exitWith{_pos = getPos _x};
}nearestObjects [_pos, [“house"], 300];
この3行を追加するといいかもです(←まだ動作確認してない)
300mの範囲にある建物に、その地点を移動してるだけです。これで、もれなく街の中をパトロールしてくれるでしょう。
[“house"]を、店舗や街のランドマークなんかに書き換えても良いでしょうね(そのつもりだけど)
リストで帰ってくるので、建物をランダムで選んでもいいかもです。
建物が無かった場合でも、_posの上書き無しなだけ、なので、問題無いはず。
スポーン直前に、findEmptyPositionで安全な湧き場所を調べてるようなので、大丈夫っぽい(50m範囲)
追記:
OccupationPlaces(街パトロールAI)の改造コードの続きです。
案の定、上のコードは動きませんでした。
もっと、ちゃんとした書き方にしました・・。
(;´∀`)
完全動作版がこれ。ちゃんとログ出しもしてますよ(不要なら削除して下さい)
MAP登録されてる街地点から、半径500m内の建物から、ランダムで1個選んで、そこをPlacesスポーン地点に変更します。
occupationPlaces.sqf(56行付近に追加)
_houses=nearestTerrainObjects[_pos,[“BUILDING","HOUSE"],500,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;
_logDetail = format [“[OCCUPATION:Places]:: change position name: %1 position: %2",_locationName,_pos];
[_logDetail] call SC_fnc_log;
};
nearestTerrainObjectsの方がベストっぽかったので、こちらにしました。これなら、全てのMAPで動作するでしょう。
半径500mだと、結構な数の建物が対象になりますので、ランダム性が増します。街の建物が密集気味のMAPなら、範囲を小さくした方が良いでしょうね。
nearestTerrainObjectsでは、[“BUILDING","HOUSE"]を指定してますが、他にも種類がありますので、必要に応じて編集してください。
MapマークをONにしてる場合は、その場所にマークが付きますので、以下を編集すれば、前の場所にマークが付きます。
(340行付近)
_marker = createMarker [format [“%1", _locationName],_spawnPosition];
この_spawnPositionを、_tempposに変えれば、もともとのMAP登録地点になるかと思います。
追記:CUPアイテムのリスト&価格
CUPのアイテムを利用する場合の、設定テンプレートがこれ。
Weapons/Units/Vehicles MOD利用時は便利かと思います。
CUP Weapons/CUP Units/CUP Vehicles Class Names And Trader Prices!
ディスカッション
コメント一覧
まだ、コメントがありません