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

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

追記:街パトロール改造、細かいのイッパイ。丁度ええ難易度

うむむ・・。

公式フォーラムはちゃんと見てないとダメくさい。

英語は弱いので、一見スルーしちゃうんです。

(;^ω^)

既知のバグというやつ。

確かに、前々から気になっていた、ログ上のエラーが、これっぽい(放置してると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が存在しないというものらしい。

どういう事なんでしょ。無視してもええんかな。

追記:

テストプレーする度に、色々なモノが気になっていく・・。

(;´Д`)

これまで一度も、パトロール車両と出会わなかったので、気になっていたが。。

なるほど、スポーン地で爆散してたり、そもそも道路を走ってくれてなかった

(;^ω^)

コードを追ってみて、何か分かるかもしれない。

この設定を忘れてた。

OccupationのBlacklistエリア登録です。

これを設定しておかないと、バンディットAIが必死にトレーダーを攻撃してしまうんです(死なないけども)

MAPマークから自動で認識してくれたら便利なんだけども。

親切なサーバーなら、プレーヤースポーン地も入れちゃうんでしょうけども、私の所はトレーダーのみとなりますw

補足:

AIスポーン前に必ず、occupation/scripts/fnc_isSafePos.sqfで、このブラックリスト&拠点&トレーダーとの距離チェックが入るようになってます。

追記:AI難易度

AIさん達に、幾度となく殺されました。

私的には殺人的難易度なのですが・・

多分、コレくらいで、皆様に丁度ええのでは無いかと・・。

(;^ω^)

「初見ヘッショありますけども」

おっ、やはり道路を走らないパトロールですな。

(;^ω^)
AdminToolKitで偶然見つけたコレ!

やっと見つけたぞ!!

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の改造

街パトロールAIのコードについて改造してみようと思います。

そのキッカケはこれ。

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!

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

Posted by nabe