【GAME】ARMA3 EXILE MODサーバの旅その47
追記:DMSのAI管理
なんでしょうね。。
終わったつもりが、色々と残り作業が湧いてきてしまいます。
(;´Д`)
拙作のEXILEサーバアドオン「LOOT BOX」
もう、もう、本当に終わりっぽいので、明日には公開できるかと思います(あれから、AIも湧かせられるように仕様追加)
完全最終デバッグ中で御座います。PM9:00現在
まだ運用実績がゼロですので、しばらくベータ扱いで、当ブログにて公開配布致します。
サーバ管理者さんが当ブログを見てる確立は限りなくゼロに近いでしょうけども。宜しければ・・お使いください。
この様な感じで、黄色:アイテムボックス、赤:地雷かAIが湧きます。
もちろん、数や範囲は自由に設定できます。地雷も多めになってる状態です。
(オレンジ色はアドオンとは関係無し)
新登場のAI様がいらっしゃいましたw
(;^ω^)
ちゃーんと、周囲を警戒してますね。ガッツリと、階段側をスポットしております。普通に階段を登ったら、確実にヤラれます。
この後、ヘッショされたのは、内緒です。
DMSアドオンでAIを置いてるので、設定の類はDMS側のものが適用されます。今の所は、アサルトクラスで難易度はランダムにしてます。
設定できるようにした方がええかな。。
しかし、こんな感じで「建物内にAIが居るかもしれない・・」という恐怖が、これまでのEXILEには無い緊張感を生み出すんではないかと。
建物オブジェクトによっては、屋上もあるので、屋上ならスナイパーを設置するとか・・ね(一応、考えたw)
AIは建物内で湧く事になってるので、足を負傷してるところから察するに、屋根から落ちちゃったんかな?
このアドオンのAIは持ち場から、基本的に動かないんですが。
丁度、ゾンビ2体に襲われてるところを目撃。
ちゃーんと、逃げながら戦闘しております。
(;´∀`)がんばってぇ~AIさぁ~ん、このサーバのゾンビは鬼畜ですぞー
アイテムボックスの中身を、取ることが出来なくなる時があるんですよね。EXILEを普通にプレーしてても、稀に発生するので、何か原因があるのか、調査しなければなりません。
追記:DMSのAI管理
AI湧きはDMSを利用しているのですが、DMSではプレーヤーが近くに居ない場合、停止させる事ができるんです。
サーバ負荷的にも、これは利用したい訳です。
軽~く調査をしてみます。
DMSでAIを湧かす時に必ずこれが呼ばれてます。
[_group,true] call DMS_fnc_FreezeToggle;
んで、このコードを読んでみると、意外にもシンプルな形で、フリーズとしていたようです。
_x enableSimulationGlobal false;
_group setVariable [“DMS_isGroupFrozen",true];(同時に変数としても格納)
EDENエディタでも見掛ける”あれ”です。これが、フリーズの正体です。でも、シミュレーションをOFFにすると、具体的にどーなるのかは、イマイチ分かってませんけども。
fn_FreezeManager.sqf
このコードで行われてました。
これも原始的な方法で驚きました(トリガーって使えないんかな?)
実際の部分は、fn_IsPlayerNearby.sqf で・・
{
{
if (isPlayer _x) then
{
throw _x;
};
} forEach (crew _x);
} forEach (_pos nearEntities [[“Exile_Unit_Player","LandVehicle", “Air", “Ship"], _dis]);
単純にプレーヤーを全部舐めて距離を調べてるんですね。
(;´Д`)
公式ドキュメント見てて、何度か見たけど、まったく知りません。
※そもそも読む気が無い
プレーヤーをチェックしてる、fn_FreezeManager.sqfが、このFSMで動作してるんです。
どーいったタイミングで、どんな風に動作するのか、まったく分からない。だって、これですよ。呼び出し元がここしか無いんです。
missions.fsm
item21[] = {“Freeze_Manager",2,250,1067.652466,248.645218,1157.652100,298.645233,0.000000,"Freeze Manager"};
まぁ・・まぁ・・ここまでコードを追ったところで、何をする訳でもありませんけどもね。。
(;^ω^)
どー動作してるのか、気になったもので。
ウチのアドオンでも、DMSのフリーズ機能は利用できるはずなので、これに合せて、コードを修正する予定です。ただ、グループ単位なんだけどもねぇ。。
しかし、日本車の名前に、バンディットとか、DAYZとか。
海外の方が見たら、どー思うんだろうかw
ヽ(;゚д゚)ノ バンディットッ!?
そういえば、Arma3 Toolsというユーティリティに、FSMEditorという項目があったのを思い出しました。
お絵かきツールですか?
否、何かが違う・・・。
そうだ、DMSのFSMファイルを読み込んでみればええんだ。
::
うむ、ここに、Freeze Managerの呼び出しが書かれてました。
起動タイミングは、以下。
((diag_tickTime – _freeze) > DMS_ai_freezeCheckingDelay)
呼び出しはこう。_freezeは待機秒用のもの。
_freeze = diag_tickTime;
call DMS_fnc_FreezeManager;
うむ・・・・
・・・・で。
なんなのArma3ってwww
ヽ(;゚д゚)ノ
ちなみに上記のフリーズ系のDMS設定は、以下のものになります。
a3_dms/sonfig.sqf
DMS_ai_freezeCheckingDelay フリーズチェック間隔(秒)
DMS_ai_freezeOnSpawn スポーン時フリーズするか?
追記:AIフリーズ
AIをフリーズ化する方法は、DMSの深いところまでコードを追わないといけないんかなぁ。。
と憂鬱になっていたのですが。
思いの外、簡単でした。
_group setVariable [“DMS_AllowFreezing",true];
グループオブジェクトにこれをセットするだけのようです。
(;^ω^)
まだ、実際に動作を確認してませんが、これで良いっぽい・・・と信じたい。
めちゃめちゃコードを読みまくって、どっと疲れが・・・。
(;´Д`)
ログを見る限り、ちゃんと動作してるっぽいけども、動作確認は明日です。
ディスカッション
コメント一覧
そういえば前回のコメント時に名前入れて無かったですが、訳に関してコメントを残したのは自分です。
それと、aiの設置に関しまして質問ですが、dmsにaiの湧き制御を任せてるという事ですが、これは鯖起動直後にランダム町位置に先にaiを沸かせているという状態でしょうか?dmsの近くにプレイヤーが来ない限りはフリーズさせておく機能はこれで沸かせたaiにも適応されますか?また、aiのパーティー設定は各位置によって個別でしょうか?
あ、やっぱ、ゆきひとさんでしたか。えがった。
じゃ、discordでやり取りできますね。
DMSに湧きを任せるというよりは、「AI作成部分だけを利用させてもらってる」いう感じです。
これはOccupationアドオンと同じやり方ですので、安心かな、と。
継承されるのは、装備・AIスキルくらいと思います(がっつり調査してませんが・・)
なので、現在は「AI置きっぱなし」です(サーバ起動時だけで全て完了、バックグラウンドで動作してない)
Occupationのスタティック配置AIに近いです。
追記:サーバ負荷軽減のために、周辺調査してみます
今の所、何も考えずパーティー/グループは、個々に別々です。
他プレーヤーと遭遇というテイの感じで考えてました。居るかもしれない・・で、MAP上でも2-3人配置すれば十分かな~と。
何かアイデアなどがありましたら、ドゥンドゥン入れ込んじゃうので、宜しくです。
そうですねー、Discord側でやり取りできたら私の方も楽です。
ルートボックスに関してはそのままでも大丈夫だと思いますが、aiは結構面倒くさく、鯖のfps数値獲得して数値が一定以上の場合作動するという機能も利用してやると良いかもしれません。occupationとかではたまに湧き後のside変換と装備品積み替えがうまく行かずにデフォルト装備のままのaiが走り回ってる事がありますがこれは多分鯖負荷具合の高い時に実行してしまってその後の一番負荷のかかる積み替え等でコケてるのだと推測してます。
鯖の負荷具合的には近場にプレイヤーが居ない場合はフリーズ状態で存在してるのが望ましいかも知れません。それか、vemfのようにai自体は沸かせず、トリガーだけ配置しておき、プレイヤーが近付いたら一定感覚で沸かせるか。。。
アーマの場合はグループリーダーが脳みその役割で計算しますので、例えば同一の場所に複数人湧くのではあればそこで湧いたaiは同一グループに突っ込んだ方が鯖全体的に負荷が少なくなります。
う、返信忘れてた。
(;^ω^)
はい、参考にさせて頂いて、リリースの運びとなりました。
vemfは知らないです。
そういえばryan zonbieもトリガー駆動っぽいですよね、ちょっと調べてみよう。
ついでなので、occupationのところ、調べてみました。参考になれば。
occupationのAIの装備は、DMS側で行ってるようで、_customGearSetという形で全一式occupationから渡してるだけです。
DMS/fn_SpawnAISoldier.sqfで全てのAIが生成されてます。
DMS/fn_DMS_preInit.sqf(11行)で、
DMS_DEBUG = true
とする事で、
AI生成時のタイミングで、装備をログ出力させる事ができます。
ログの内容はこんな形のようです。
DMSイベントで、_customGearSetを利用する事は無いと思うので(多分)、これが出れば全部occupationのAIと見て良いかと思います(他アドオンが利用してなければ)
(format [“SpawnAISoldier :: Equipping unit %1 with _customGearSet: %2”,_unit,_customGearSet]) call DMS_fnc_DebugLog;
ぱっと見、特別な事はしてません。悪いならArma3の方?
DMS/fn_SpawnAISoldier.sqf(300行付近)
_unit addHeadgear _helmet;
_unit forceAddUniform _uniform;
_unit addVest _vest;
こんなのが続く。
ただ、355行に、バックパックのイベントリがなんちゃら、と特別なコードが書かれてます。