Arma3で航空機を誘導したりするマーシャラー用スクリプト(離陸用スクリプトVer0.4編)
とりあえず動くところまで確認できたので公開
_Marshaller = Marshaller; //まだver0.4なので甲板作業員にグローバル変数でMarshallerと名付けて使っている if(vehicle player isKindOf "Helicopter")then /*プレイヤーの車両の種類を判別*/ { /* ヘリのエンジンがオフなら真、オンなら偽 ヘリとマーシャラーの高低差が1.5m以内にあるなら真、1.5mを超えると偽 条件:偽なら最初のループへ戻る 艦船の上だと機能しない可能性があるので、後日さらに等で速度検知などで対応したい */ _heli = vehicle Player; _MaHeigh = (getPosATL _Marshaller)select 2; _HeHeigh = (getPosATL _heli)select 2; if(1.5 >= (_MaHeigh - _HeHeigh) && (_MaHeigh - _HeHeigh) >= -1.5)then { [_Heli,_Marshaller] spawn { _Heli = _this select 0; _Marshaller = _this select 1; if(!(isEngineOn _heli))then { /* コールドスタート時の処理 スリープを挟んだりするためにspawnを使う 2秒スリープはヘリに乗り込んで座席に座るまでの時間 20秒スリープはエンジンの出力が離陸可能になるまでの平均時間 5秒スリープは合図終了するまでの時間 10秒スリープはクリアサインを開始から終了までの時間*/ sleep 2; /*エンジンのダメージを参照し、オレンジなら緊急停止のサインを出す*/ if( 0.33 > (_Heli getHitPointDamage "hitEngine") ) then { _Marshaller Switchmove "Acts_JetsMarshallingEnginesOn_in"; _Marshaller playMove "Acts_JetsMarshallingEnginesOn_loop"; sleep 20; _Marshaller playMove "Acts_JetsMarshallingEnginesOn_Out"; sleep 5; _Marshaller Switchmove "Acts_JetsMarshallingClear_in"; _Marshaller playMove "Acts_JetsMarshallingClear_loop"; _Marshaller playMove "Acts_JetsMarshallingClear_Out"; sleep 8; _Marshaller Switchmove "Acts_JetsMarshallingStraight_in"; _Marshaller playMove "Acts_JetsMarshallingStraight_loop"; WaitUntil {((getPosATL _Heli)select 2) > 10}; _Marshaller playMove "Acts_JetsMarshallingStraight_out"; } else { _Marshaller Switchmove "Acts_JetsMarshallingEnginesOn_in"; _Marshaller playMove "Acts_JetsMarshallingEnginesOn_loop"; sleep 6; _Marshaller Switchmove "Acts_JetsMarshallingEmergencyStop_in"; _Marshaller playMove "Acts_JetsMarshallingEmergencyStop_loop"; sleep 10; _Marshaller playMove "Acts_JetsMarshallingEmergencyStop_Out"; }; }else { /*エンジンがある程度動いている状態からの誘導 エンジンスタートの合図は省略している エンジンのダメージ処理は同じ*/ if( 0.33 > (_Heli getHitPointDamage "hitEngine") ) then { _Marshaller Switchmove "Acts_JetsMarshallingClear_in"; _Marshaller playMove "Acts_JetsMarshallingClear_loop"; _Marshaller playMove "Acts_JetsMarshallingClear_Out"; sleep 8; _Marshaller Switchmove "Acts_JetsMarshallingStraight_in"; _Marshaller playMove "Acts_JetsMarshallingStraight_loop"; WaitUntil {((getPosATL _Heli)select 2) > 10}; _Marshaller playMove "Acts_JetsMarshallingStraight_out"; } else { _Marshaller Switchmove "Acts_JetsMarshallingEmergencyStop_in"; _Marshaller playMove "Acts_JetsMarshallingEmergencyStop_loop"; sleep 10; _Marshaller playMove "Acts_JetsMarshallingEmergencyStop_Out"; }; }; }; };//If End };