【遅】ARMA3 EXILE MODサーバの旅その123
追記:アドオンメッセージ機能更新
追記:明けても、新ゾンビ追加
追記:気づいたら大晦日にデバッグ
追記:mklink備忘録
追記:ゴミ車両スポーンAPP(直し)
追記:空爆スクリプト
追記:SQF基本的なメモ
追記:オートタレット
追記:CFGを眺める
追記:Chernarus Redux MAP次期情報
追記:AI死んだらマガジン削除
どうにもモチベが維持できない。。。
(;´Д`)
五右衛門サーバの鯖缶さんが、Discordの小部屋に参加して頂き、僅かながら盛り上がったモチベで、残作業をやる。
上写真のは、前々から考えてた、ヘンタイAI・・・
:(;゙゚’ω゚’):
左から、Tire-man、Barrel-man、Pumpkin-manと仮で名前を付けてる。
そう、見たまんま、露出してる部分しかダメージを受けないという、それはそれはヘンタイAIなのです。
既に実装は済ませてるので、あとはデバッグだけです。
(;^ω^)
後は、微妙な更新ですが、Exile(DMS)では、近くにプレーヤーが居ないとAIが固まってる仕様なのです(負荷防止)
再度近くにプレーヤーが来たら、動き出すのですが、この際、ライフを全開にしてやります。車両も。
「逃げたらダメよ」という事で。
追記:AI死んだらマガジン削除
ゾンビが出るので、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次期情報
次期バージョンの開発中だそうです。
どの辺りの位置なのか聞いてませんが。見てくださいよ、この雰囲気。
たまりません。
(;´Д`)
追記:CFGを眺める
ある事をしようかと、Vehicleのコンフィグ(バニラだけで、83万行)を眺める。
写真は、固定機銃の所。
memoryPointMissile[] = {“spice rakety", “usti hlavne“};
memoryPointMissileDir[] = {“konec rakety", “konec hlavne“};
場所を指すのがここらしい。
もう、何語か分からねぇという。
:(;゙゚’ω゚’):
人形オブジェクトのベースとなるManのコンフィグ。
class CAManBase: Man
class Civilian: CAManBase
class SoldierWB: CAManBase
こんな感じに継承されてるようです。(それはそれは、もの凄い)大量の定義の上に成り立ってるんですよね。
こんな便利なコマンドがあったのね。
追記:オートタレット
アドオンに、他ゲームでもあるようなオートタレットを追加してます(多分、最後の追加機能)
実際にどんな挙動をするのか未知数なので、まだ仮ですけども。
マップ上の要所を守りたい場合などに、難易度調整的に利用できる。
通常の機銃だと、威力が高いので、アサルトやサブマシンガンとかに変更とか出来るようにしてみたい。
あと、初期スポーンに、海からのボートスタートを用意してみた。
(;^ω^)
追記:SQF基本的なメモ
いままでやっつけ感満載でSQFコードを書いてきましたが、ちゃんと基本的な言語仕様を抑えておこうと復習と備忘録。
追記:空爆スクリプト
BIS_fnc_moduleCASなんていう便利なコマンドを発見してしまって。
勢い余って、空爆機能をアドオンに追加。
(;^ω^)
ランダムで、プレーヤの誰かを空爆してしまいます(条件指定可)
追記:ゴミ車両スポーンAPP
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";
Edenで色々イジってたら思いついた。
この方がゾンビっぽいよね。
(;^ω^)
さて、実装できるだろうか。
上記に関連する資料として、こんなのをメモ。
ふっとWikiを眺めてたら、こんなコマンドを見つけた。
Steamオーバーレイうんたらと書かれています。
実際に、どのように使えるのか分かりませんが、メモ。
追記:mklink備忘録
毎回忘れる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….
追記:気づいたら大晦日にデバッグ
(;^ω^)大晦日やないかーい
自作アドオン、細かーい所をじっくり見ると、やっぱ小汚いコードな訳です。
SQFほとんど知らない頃のものに、積み重ねて書き続けてますからねぇ。。。w
気付いたら直しの繰り返し。高速化にも繋がるしね。今見ると、よくこれで動いてたな、と思う代物もあったり・・と。
:(;゙゚’ω゚’):
何気にWiki見てたら、Ver2.1で、Hashが扱えるようになってたのね。
配列を扱うのが便利なSQFに、より情報扱いが楽なハッシュが追加と。いまさら感アリアリですが、今だに微妙に進化してんですArma3。
はよ、continueが欲しいw
コード触ってると、アイデアが出ちゃうので、色々を更新を掛ける。
ロケーション(村・町・大きな町)で、AIの難易度を自動で調整されるような機能を追加。
そういや、変化があった方がええよねぇ。。
(;^ω^)
歴史あるArma、座標系はコマンドによって、様々な癖がある。
ほとんどのコマンドは、[x,y,z]の3次元座標を受け入れるし、適当に無視してくれるんですが、一部例外もあったりするので、気が抜けない。
isOnRoad(その場所は道路?)とかもそう。
よーく利用する、setVariable(オブジェクトに情報ぶっ込める)とか、Locationオブジェクトも同様に突っ込めるものだと思ってたが・・。
これは、新たにcreateLocationで生成したものだけの限定だった。これは盲点・・。
追記:明けても、新ゾンビ追加
年が明けたらしい。。
(;^ω^)こんな事をやってるんだが・・?
ゾンビの見た目を調整してる。
_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]];
こんなのとか・・・w
これは、怖い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];
追記:アドオンメッセージ機能更新
サーバの定期メッセージの機能を大きく追加。
今まで静的なメッセージのみでしたが、動的なコンテンツも用意。
プレーヤーリスト、ランキング(リスペクト/キルデス上位10)、拠点家賃アラート、鯖缶がログインしてたらメッセージなどなど、色々追加しました。
ランキングは、負荷防止のため、サーバー起動時にソートした情報になります。
ディスカッション
コメント一覧
まだ、コメントがありません