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

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

トリガーの大きさでフェンスを自動生成するスクリプトのコード公開編

この記事で言ってたやつを今更公開
question-and-life.hateblo.jp




コード内のコメントアウトは気にしないで消してもらってOK。
相変わらずのスパゲティコード。
個人的な備忘録用。
トリガーの端に沿ってフェンスが作られる。
地雷原から保護するためにワイヤーフェンスを設置し、地雷注意の看板が設置される。

以上

トリガーのテキスト欄にGEN_MineFenceと書いて適当なサイズのトリガーを設置するだけ。
あとはこのsqfを実行させれば動く。

入り口とかはない。解説載せるほどじゃないからコード読んだらどんな処理かは概ね分かるはず。
入り口とか色々作りたかったら分かる人は色々編集してみて。


{
	if (triggerText _x == "GEN_MineFence")then	
	{
		_x spawn 
		{
			_Trigger  = (triggerArea _this);
			_TrgSizeX = _Trigger select 0;
			_TrgSizeY = _Trigger select 1;
			_TrgRad   = _Trigger select 2;
			_TrgShape = _Trigger select 3;//True Square
			_CenterPos  = getPos _this;
			_CenterPosX = _CenterPos select 0;
			_CenterPosY = _CenterPos select 1;
			if(_TrgRad < 0)then{_TrgRad = 360 + _TrgRad};
  
  			_MineSizeX = _TrgSizeX * 2;
			_MineSizeY = _TrgSizeY * 2;
  
  			_TrgRPosX = _CenterPosX + _TrgSizeX;
			_TrgLPosX = _CenterPosX - _TrgSizeX;
			_TrgTPosY = _CenterPosY + _TrgSizeY;
			_TrgBPosY = _CenterPosY - _TrgSizeY;

  			_cos = cos _TrgRad;
			_sin = sin _TrgRad;
  
			deleteVehicle _this;

			_MineMark = ["Land_Sign_MinesTall_English_F","Land_Sign_MinesDanger_English_F"];

			_SetPosX = _TrgLPosX + 1.5;
			_SetPosY = _TrgBPosY + 1.5;

			_TrgFromDis = 1.8;
			_MarkPosR = _TrgRPosX + _TrgFromDis;
			_MarkPosL = _TrgLPosX - _TrgFromDis;
			_MarkPosT = _TrgTPosY + _TrgFromDis;
			_MarkPosB = _TrgBPosY - _TrgFromDis;

			_MarkRadR = _TrgRad +  90;
			_MarkRadL = _TrgRad + 270;
			_MarkRadT = _TrgRad + 180;
			_MarkRadB = _TrgRad +   0;
			{if(_x > 360)then{_x = 360 - _x}}forEach[_MarkRadR,_MarkRadL,_MarkRadT,_MarkRadB];

			_YsinXcos = _CenterPosX - _CenterPosY * _sin + _CenterPosX * _cos;
			_YcosXsin = _CenterPosY - _CenterPosY * _cos - _CenterPosX * _sin;

			_BoardTPosRX = (_MarkPosT * _sin) - (_MarkPosR * _cos) + _YsinXcos;
			_BoardTPosRY = (_MarkPosT * _cos) + (_MarkPosR * _sin) + _YcosXsin;
			_BoardBPosRX = (_MarkPosB * _sin) - (_MarkPosR * _cos) + _YsinXcos;
			_BoardBPosRY = (_MarkPosB * _cos) + (_MarkPosR * _sin) + _YcosXsin;

			_BoardTPosR  = [_BoardTPosRX ,_BoardTPosRY ,0];
			_BoardBPosR  = [_BoardBPosRX ,_BoardBPosRY ,0];

			//_BoardT = (selectRandom _MineMark) createVehicle _BoardTPosR;
			//_BoardT setPosATL _BoardTPosR;
			//_BoardT setDir _MarkRadT;

			//_BoardB = (selectRandom _MineMark) createVehicle _BoardBPosR;
			//_BoardB setPosATL _BoardBPosR;
			//_BoardB setDir _MarkRadB;

			_countBoardX = Ceil (_TrgSizeX * 2 / 12);

			for [{ _i = 0 }, { _i < _countBoardX}, { _i = _i + 1 }] do
			{
				_BoardTPosLX = (_MarkPosT * _sin) - (_SetPosX * _cos) + _YsinXcos;
				_BoardTPosLY = (_MarkPosT * _cos) + (_SetPosX * _sin) + _YcosXsin;
				_BoardBPosLX = (_MarkPosB * _sin) - (_SetPosX * _cos) + _YsinXcos;
				_BoardBPosLY = (_MarkPosB * _cos) + (_SetPosX * _sin) + _YcosXsin;
				_BoardTPosX  = [_BoardTPosLX ,_BoardTPosLY ,0];
				_BoardBPosX  = [_BoardBPosLX ,_BoardBPosLY ,0];

				_BoardT = (selectRandom _MineMark) createVehicle _BoardTPosX;
				_BoardT setPosATL _BoardTPosX;
				_BoardT setDir _MarkRadT;

				_BoardB = (selectRandom _MineMark) createVehicle _BoardBPosX;
				_BoardB setPosATL _BoardBPosX;
				_BoardB setDir _MarkRadB;

				_SetPosX = _SetPosX + 12;
			};

			_BoardRPosTX = (_MarkPosT * _sin) - (_MarkPosR * _cos) + _YsinXcos;
			_BoardRPosTY = (_MarkPosT * _cos) + (_MarkPosR * _sin) + _YcosXsin;
			_BoardLPosTX = (_MarkPosT * _sin) - (_MarkPosL * _cos) + _YsinXcos;
			_BoardLPosTY = (_MarkPosT * _cos) + (_MarkPosL * _sin) + _YcosXsin;
			_BoardYPosRT = [_BoardRPosTX ,_BoardRPosTY ,0];
			_BoardYPosLT = [_BoardLPosTX ,_BoardLPosTY ,0];

			//_BoardR = (selectRandom _MineMark) createVehicle _BoardYPosRT;
			//_BoardR setPosATL _BoardYPosRT;
			//_BoardR setDir _MarkRadR;

			//_BoardL = (selectRandom _MineMark) createVehicle _BoardYPosLT;
			//_BoardL setPosATL _BoardYPosLT;
			//_BoardL setDir _MarkRadL;

			_countBoardY = Ceil (_TrgSizeY * 2 / 12);

			for [{ _i = 0 }, { _i < _countBoardY}, { _i = _i + 1 }] do
			{
				_BoardRPosX  = (_SetPosY * _sin) - (_MarkPosR * _cos) + _YsinXcos;
				_BoardRPosY  = (_SetPosY * _cos) + (_MarkPosR * _sin) + _YcosXsin;
				_BoardLPosX  = (_SetPosY * _sin) - (_MarkPosL * _cos) + _YsinXcos;
				_BoardLPosY  = (_SetPosY * _cos) + (_MarkPosL * _sin) + _YcosXsin;
				_BoardYPosR  = [_BoardRPosX ,_BoardRPosY ,0];
				_BoardYPosL  = [_BoardLPosX ,_BoardLPosY ,0];
				
				_BoardR = (selectRandom _MineMark) createVehicle _BoardYPosR;
				_BoardR setPosATL _BoardYPosR;
				_BoardR setDir _MarkRadR;

				_BoardL = (selectRandom _MineMark) createVehicle _BoardYPosL;
				_BoardL setPosATL _BoardYPosL;
				_BoardL setDir _MarkRadL;

				_SetPosY = _SetPosY + 12;
			};


			_Fenceobj = selectRandom ["Land_Razorwire_F"];
			_FenceLeng = 8;
			_FenceHalfLeng = _FenceLeng / 2;

			_FencePosR = _TrgRPosX - _FenceHalfLeng;
			_FencePosX = _TrgLPosX + _FenceHalfLeng;
			_FencePosT = _TrgTPosY - _FenceHalfLeng;
			_FencePosY = _TrgBPosY + _FenceHalfLeng;

			_RotateTPosRX = (_TrgTPosY * _sin) - (_FencePosR * _cos) + _YsinXcos;
			_RotateTPosRY = (_TrgTPosY * _cos) + (_FencePosR * _sin) + _YcosXsin;
			_RotateBPosRX = (_TrgBPosY * _sin) - (_FencePosR * _cos) + _YsinXcos;
			_RotateBPosRY = (_TrgBPosY * _cos) + (_FencePosR * _sin) + _YcosXsin;
			_RotateTPosR  = [_RotateTPosRX ,_RotateTPosRY ,0];
			_RotateBPosR  = [_RotateBPosRX ,_RotateBPosRY ,0];

			_countX = ceil ((_TrgSizeX * 2 - _FenceLeng) / _FenceLeng);
			_countY = ceil ((_TrgSizeY * 2 - _FenceLeng) / _FenceLeng);

			{	_Fence = _Fenceobj createVehicle _x;
				_Fence setPosATL _x;
				_Fence setDir _TrgRad;
			}forEach [_RotateTPosR,_RotateBPosR];

 
			for [{ _i = 0 }, { _i < _countX}, { _i = _i + 1 }] do 
			{
				_RotateTPosLX = (_TrgTPosY * _sin) - (_FencePosX * _cos) + _YsinXcos;
				_RotateTPosLY = (_TrgTPosY * _cos) + (_FencePosX * _sin) + _YcosXsin;
				_RotateBPosLX = (_TrgBPosY * _sin) - (_FencePosX * _cos) + _YsinXcos;
				_RotateBPosLY = (_TrgBPosY * _cos) + (_FencePosX * _sin) + _YcosXsin;
				_RotateTPosX  = [_RotateTPosLX ,_RotateTPosLY ,0];
				_RotateBPosX  = [_RotateBPosLX ,_RotateBPosLY ,0];
  
				{
					_Fence = _Fenceobj createVehicle _x;
					_Fence setPosATL _x;
					_Fence setDir _TrgRad;
				}forEach [_RotateTPosX,_RotateBPosX];
				_FencePosX = _FencePosX + _FenceLeng;
			};

			_TrgRad = _TrgRad + 90; 

			_RotateRPosTX = (_FencePosT * _sin) - (_TrgRPosX * _cos) + _YsinXcos;
			_RotateRPosTY = (_FencePosT * _cos) + (_TrgRPosX * _sin) + _YcosXsin;
			_RotateLPosTX = (_FencePosT * _sin) - (_TrgLPosX * _cos) + _YsinXcos;
			_RotateLPosTY = (_FencePosT * _cos) + (_TrgLPosX * _sin) + _YcosXsin;
			_RotateYPosRT = [_RotateRPosTX ,_RotateRPosTY ,0];
			_RotateYPosLT = [_RotateLPosTX ,_RotateLPosTY ,0];
			{
				_Fence = _Fenceobj createVehicle _x;
				_Fence setPosATL _x;
				_Fence setDir _TrgRad;
			}forEach [_RotateYPosRT ,_RotateYPosLT];

			for [{ _i = 0 }, { _i < _countY }, { _i = _i + 1 }] do 
			{ 
				_RotateRPosX  = (_FencePosY * _sin) - (_TrgRPosX * _cos) + _YsinXcos;
				_RotateRPosY  = (_FencePosY * _cos) + (_TrgRPosX * _sin) + _YcosXsin;
				_RotateLPosX  = (_FencePosY * _sin) - (_TrgLPosX * _cos) + _YsinXcos;
				_RotateLPosY  = (_FencePosY * _cos) + (_TrgLPosX * _sin) + _YcosXsin;
				_RotateYPosR  = [_RotateRPosX ,_RotateRPosY ,0];
				_RotateYPosL  = [_RotateLPosX ,_RotateLPosY ,0];
 
				{
					_Fence = _Fenceobj createVehicle _x;
					_Fence setPosATL _x;
					_Fence setDir _TrgRad;
				}forEach [_RotateYPosR ,_RotateYPosL];
				_FencePosY = _FencePosY + _FenceLeng; 
			};
 		};//spawn End
	};//GEN Trigger End