arma3でチキンクリスプ食べながらスクリプト

arma3のエディッタ向けスクリプトを自分用に投稿

トリガーを使わずにユニットを車両に乗せるスクリプト

Oldmanではトリガーを使わずにInitスクリプトモジュールを使ってユニットを車両に乗せている。
そのスクリプトの一部を改変して使いやすいようにしてみた。

グループが戦闘状態になると車両に搭乗する

//_thisはモジュールと同期しているユニットのこと
[_this] spawn
{
params ["_leader"];
_vehClass = "O_MBT_02_base_F"; //車両クラスを使う
_UnitPos = ;//乗員の位置を入れる
_VehPos = ;//車両の位置を入れる

waituntil {sleep 1; behaviour _leader == "COMBAT"};
_Vehicle = _leader nearEntities [_vehClass, 50];
//50m以内の全ての_vehclassの配列を_Vehicleに格納

group _leader addvehicle _vehicle#0;
 //配列_Vehicleの0番目の車両をグループリーダーに指定する

{[_x] OrderGetIn true;_x allowfleeing 0} foreach units group _leader;
//各ユニットを車両に搭乗させ士気を最大に上げる

_wp = (group _leader) addWaypoint [_leader getrelpos [90,0], 0];
[group _leader, currentWaypoint group _leader] setWaypointType "SAD";
//距離90m方位0の位置にSeek & Destroyのウェイポイントを設定する
};


これとは別に航空機用のスクリプトもあったので使いやすいように改変してみる

0 = _this spawn 
{ _VehClass = "I_Plane_Fighter_04_F";
_CharPos = [11851.5,13081.6,0];
_VehPos = [11842.1,13075.4,0];
//ここまでは上と同じ

_this enableDynamicSimulation false; _this enablesimulation true;
 (group _this) enableDynamicSimulation false;
//航空機なのでダイナミックシミュレーションを無効にしている

 waituntil { BIS_relEast getVariable "threat" > 90 || behaviour _this == "COMBAT" || _this distance _charPos > 30}; 
//----注意----
//waituntilの一番目の条件については未確認で推測であるので注意
//おそらくBIS_relEastはOldmanのミッション内で使われているグローバル変数(と思われる)
//プレイヤーのOPFOR軍との敵対値を取得している(と思われる)
//2番目は戦闘状態、3番目が車両とユニットの距離

 _Vehicle =  _this nearEntities [_VehClass, 50]; 
 group _this addvehicle _vehicle#0; 
 {[_x] OrderGetIn true;_x allowfleeing 0} foreach units group _this; 
//概ね上のスクリプトと同じ

 _stalking = [group _this, group player, 10, 10, { BIS_relEast getVariable "threat" < 20 }, _VehPos] spawn BIS_fnc_stalk;
//プレイヤーを追跡するファンクション
//追跡するグループ,追跡されるグループ,ウェイポイント更新間隔,追跡精度,終了条件,帰還位置
};


このスクリプトを応用すれば例えば戦闘機のスクランブル発進をすることもできる
モジュールを使うときはスクリプトを反映させる対象にのみ同期させること
f:id:question_and_life:20200918224319j:plain

スクランブルのようなスクリプトにしたいときは滑走路までの障害物はあらかじめ移動か削除しておくこと
f:id:question_and_life:20200918224517j:plain