【遅】ARMA3 EXILE MODサーバの旅その123

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

image

追記:アドオンメッセージ機能更新

追記:明けても、新ゾンビ追加

追記:気づいたら大晦日にデバッグ

追記:mklink備忘録

追記:ゴミ車両スポーンAPP(直し)

追記:空爆スクリプト

追記:SQF基本的なメモ

追記:オートタレット

追記:CFGを眺める

追記:Chernarus Redux MAP次期情報

追記:AI死んだらマガジン削除

どうにもモチベが維持できない。。。

(;´Д`)

五右衛門サーバの鯖缶さんが、Discordの小部屋に参加して頂き、僅かながら盛り上がったモチベで、残作業をやる。

上写真のは、前々から考えてた、ヘンタイAI・・・

:(;゙゚’ω゚’):

左から、Tire-man、Barrel-man、Pumpkin-manと仮で名前を付けてる。

そう、見たまんま、露出してる部分しかダメージを受けないという、それはそれはヘンタイAIなのです。

image

既に実装は済ませてるので、あとはデバッグだけです。

(;^ω^)

image

後は、微妙な更新ですが、Exile(DMS)では、近くにプレーヤーが居ないとAIが固まってる仕様なのです(負荷防止)

再度近くにプレーヤーが来たら、動き出すのですが、この際、ライフを全開にしてやります。車両も。

「逃げたらダメよ」という事で。

追記:AI死んだらマガジン削除

image

ゾンビが出るので、AIには多めにマガジンを持たせてますが、これ・・鹵獲されてしまう事にもなります。

なので、死んだら、全マグ削除ッ!!

m9( ゚д゚)!!

死んだら武器手放してしまうので、生成時にクラスを保持。

fn_SpawnAISoldier.sqf

_unit setVariable [“CLASS_MAG",_magazine,false];

fn_OnKilled.sqf

//*add  remove mags.
private _cmag=_unit getVariable [“CLASS_MAG",null];
if!(isNull _cmag)then{
    {_unit removeItem _x;} forEach (items _unit);
};

で削除。

ヘンタイAIだけ、あまりにもチャーミーなので、一般AIにも、頭にフルーツを乗っけてやった。

この場合は、何の能力もないけどもw

知らんプレーヤーは、警戒すんだろうな。。w

(;^ω^)

Land_Pumpkin_01_F、Land_Orange_01_Fにしてるけど、これCUP MODのオブジェクトなのよね。

追記:Chernarus Redux MAP次期情報

Chernarus Redux(DISCORD)

image

次期バージョンの開発中だそうです。

image

どの辺りの位置なのか聞いてませんが。見てくださいよ、この雰囲気。

image

たまりません。

(;´Д`)

追記:CFGを眺める

image

ある事をしようかと、Vehicleのコンフィグ(バニラだけで、83万行)を眺める。

写真は、固定機銃の所。

memoryPointMissile[] = {“spice rakety", “usti hlavne“};
memoryPointMissileDir[] = {“konec rakety", “konec hlavne“};

場所を指すのがここらしい。

もう、何語か分からねぇという。

:(;゙゚’ω゚’):

image

人形オブジェクトのベースとなるManのコンフィグ。

class CAManBase: Man

class Civilian: CAManBase
class SoldierWB: CAManBase

こんな感じに継承されてるようです。(それはそれは、もの凄い)大量の定義の上に成り立ってるんですよね。

diag_exportConfig

こんな便利なコマンドがあったのね。

追記:オートタレット

image

アドオンに、他ゲームでもあるようなオートタレットを追加してます(多分、最後の追加機能)

実際にどんな挙動をするのか未知数なので、まだ仮ですけども。

マップ上の要所を守りたい場合などに、難易度調整的に利用できる。

通常の機銃だと、威力が高いので、アサルトやサブマシンガンとかに変更とか出来るようにしてみたい。

あと、初期スポーンに、海からのボートスタートを用意してみた。

(;^ω^)

追記:SQF基本的なメモ

いままでやっつけ感満載でSQFコードを書いてきましたが、ちゃんと基本的な言語仕様を抑えておこうと復習と備忘録。

プリプロセッサーコマンド

コードの最適化チップス

追記:空爆スクリプト

image

BIS_fnc_moduleCASなんていう便利なコマンドを発見してしまって。

勢い余って、空爆機能をアドオンに追加。

(;^ω^)

ランダムで、プレーヤの誰かを空爆してしまいます(条件指定可)

追記:ゴミ車両スポーンAPP

image

mimiさんにて、動作チェックして頂きました。

(;^ω^)改造しまくってて、自サーバ動かないのよw

バンビプレーヤーのための車両スポーン(ギャンブル)、タブレットのボタンから呼び出せる(動作未チェック)

40%の確率で安い車両が出るが、ハズレ時は廃棄車両。煙の中から、姿が現れるようにしてる。

(;^ω^)アラームが鳴るように追加

車両は、config.cpp/’CfgExileArsenal’からランダムで選ばれる(’quality’が4以下、’price’が5000以下)

出現させる車両はこんな感じでリストで。['Exile_Car_Lada_Hipster’,’Exile_Car_Golf_Red’,’Exile_Bike_QuadBike_Red’,’Exile_Car_Tractor_Red’,’Exile_Bike_OldBike’]

[]spawn{_item=’Exile_Item_Magazine01′;if!(_item in(magazines player))exitWith{systemChat’Can you use magic? Nothing Ero-Book1′};_pos=[getPos player,5,100,5,0,0.3,0,[]]call BIS_fnc_findSafePos;if(_pos isEqualTo[])exitWith{};player removeItem _item;systemChat’Spawned your vehicle!’;_pos=[_pos#0,_pos#1,0];createVehicle['SmokeShell’,_pos,[],0,’CAN_COLLIDE’];uisleep 10;playSound 'AlarmCar’;if(random 1<0.5)then{_pos set[2,0.1];_veh=createVehicle[selectRandom['Exile_Car_Lada_Hipster’,’Exile_Car_Golf_Red’,’Exile_Bike_QuadBike_Red’,’Exile_Car_Tractor_Red’,’Exile_Bike_OldBike’],_pos,[],0,’CAN_COLLIDE’];_veh setDir random 360;_veh setDamage random 0.5;_veh setFuel (random 0.7)+0.1;}else{_veh=createSimpleObject[selectRandom['Land_Wreck_Skodovka_F’,’Land_Wreck_Offroad_F’,’Land_Wreck_Car3_F’],ATLToASL(_pos)];_veh spawn{uisleep 60;deleteVehicle _this};};};

アイコンは、こんなのが良いかと(クアッドバイク)

textureNoShortcut = “\A3\Soft_F\Quadbike_01\Data\UI\Quadbike_01_CA.paa";

image

Edenで色々イジってたら思いついた。

この方がゾンビっぽいよね。

(;^ω^)

さて、実装できるだろうか。

上記に関連する資料として、こんなのをメモ。

Selections/Memory points dump

image

ふっとWikiを眺めてたら、こんなコマンドを見つけた。

openYoutubeVideo

Steamオーバーレイうんたらと書かれています。

実際に、どのように使えるのか分かりませんが、メモ。

追記:mklink備忘録

image

毎回忘れるmklink、念の為、備忘録。

サーバ構築中の際、MODをコピペするんじゃなくて、そのままSteamのライブラリを参照させておけば楽ですよね(MODは最新に保持されてる)

Linuxだと、ユーザーレベルで当たり前に使われるものですが、WindowsだとGUI上で操作できない(よね?)ので、知らない方も多い。

自分は、Dドライブに設定してるので、ここになってます。

D:\SteamLibrary\steamapps\common\Arma 3\!Workshop

サーバディレクトリ上で、コマンドプロンプト(cmd)で、以下のコマンドでリンクを貼れる(より丁寧に解説)

1.Winキー押したら、”cmd”とタイプ、コマンドプロンプトの候補が出るので、それをクリック。

2.黒い画面が出たら、サーバディレクトリに移動。”cd  “(サーバーディレクトリのパス)” ”(エクスプローラーのアドレス部分の両端を ” で括ってコピペ)

3.補足:ドライブが違う場合は、”d:” や “e:”と入れて、ドライブを変える

4.そしたら、mklink /d mod “(Steamワークショップのディレクトリ)” って入れれば、”mod”というディレクトリ(見た目)が出来上がる

※Steamワークショップのディレクトリの調べ方は、Arma3を立ち上げてランチャーからMODの格納場所を調べる

そしたら、こんな感じで、短い記述で書ける。

“-mod=mod\@ExileMod;mod\@CUP Terrains – Core;mod\@CBA_A3;mod\@Chernarus Redux;mod\@gac JSDF;mod….

追記:気づいたら大晦日にデバッグ

image

(;^ω^)大晦日やないかーい

自作アドオン、細かーい所をじっくり見ると、やっぱ小汚いコードな訳です。

SQFほとんど知らない頃のものに、積み重ねて書き続けてますからねぇ。。。w

気付いたら直しの繰り返し。高速化にも繋がるしね。今見ると、よくこれで動いてたな、と思う代物もあったり・・と。

:(;゙゚’ω゚’):

何気にWiki見てたら、Ver2.1で、Hashが扱えるようになってたのね。

HashMap

配列を扱うのが便利なSQFに、より情報扱いが楽なハッシュが追加と。いまさら感アリアリですが、今だに微妙に進化してんですArma3。

はよ、continueが欲しいw

image

コード触ってると、アイデアが出ちゃうので、色々を更新を掛ける。

ロケーション(村・町・大きな町)で、AIの難易度を自動で調整されるような機能を追加。

そういや、変化があった方がええよねぇ。。

(;^ω^)

歴史あるArma、座標系はコマンドによって、様々な癖がある。

ほとんどのコマンドは、[x,y,z]の3次元座標を受け入れるし、適当に無視してくれるんですが、一部例外もあったりするので、気が抜けない。

isOnRoad(その場所は道路?)とかもそう。

よーく利用する、setVariable(オブジェクトに情報ぶっ込める)とか、Locationオブジェクトも同様に突っ込めるものだと思ってたが・・。

これは、新たにcreateLocationで生成したものだけの限定だった。これは盲点・・。

追記:明けても、新ゾンビ追加

image

年が明けたらしい。。

(;^ω^)こんな事をやってるんだが・・?

ゾンビの見た目を調整してる。

_v = (createSimpleObject['Exile_Cosmetic_Axe’,[0,0,0]]);
_v attachto [this,[0.35,-0.1,-0.1],’head’];
_v setVectorUp [-1,0,-1];
_v = (createSimpleObject['Exile_Cosmetic_Knife’,[0,0,0]]);
_v attachto [this,[-0.1,0.22,0.3],’pelvis’];
_v setVectorDirAndUp [[0.5,0,0.5],[0,-0.1,0.5]];

image

こんなのとか・・・w

image

これは、怖いw

ヽ(;゚д゚)ノ

コードはこちらです。

_v = (createSimpleObject[selectRandom['Exile_Animal_Sheep_White’,’Exile_Animal_Goat_Black’,’Exile_Animal_Goat_Dirty’,’Exile_Animal_Sheep_Tricolor’],[0,0,0]]);
_v attachto [this,[0,-0.4,0.5],’pelvis’];
_v setVectorUp [0,-0.5,1];

追記:アドオンメッセージ機能更新

image

サーバの定期メッセージの機能を大きく追加。

今まで静的なメッセージのみでしたが、動的なコンテンツも用意。

プレーヤーリスト、ランキング(リスペクト/キルデス上位10)、拠点家賃アラート、鯖缶がログインしてたらメッセージなどなど、色々追加しました。

ランキングは、負荷防止のため、サーバー起動時にソートした情報になります。

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

Posted by nabe