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

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

ミッションで地雷原を作成するテストコード

次のsqfコードをinitServer.sqfで保存するか記述しておく。
トリガーのテキスト欄にGEN_MineClusterと記述すると地雷原を作成し、マップ上に地雷原マーカーが作成される。
またEAST(OPFOR)側に地雷を探知させている。

{
	if (triggerText _x == "GEN_MineCluster") then	
	{
		_x spawn 
		{
			private ["_mineType","_MineNums","_MineRevealSide"];
			private ["_RandomPosX","_RandomPosY","_RotatePosX","_RotatePosY",
					 "_overLand","_mine","_MineDepth","_MinePos","_pos"];

			private _h = 0;
			Private _MineArray = [];

			_TrgCenterPos = getPos _this;
			_CenterPosX = _TrgCenterPos select 0;
			_CenterPosY = _TrgCenterPos select 1;

			_MineTrgRad   = (triggerArea _this)select 2;
			_MineTrgShape = (triggerArea _this)select 3;
			if (_MineTrgRad < 0) then {_MineTrgRad = 360 + _MineTrgRad};

			deleteVehicle _this;

			_mineAT  = "ATMine";
			_mineAPf = "APERSBoundingMine";//4
			_mineAPb = "APERSMine";//8

			_Side = EAST;

			if(!_CheckSide)
			then{_MineRevealSide = _Side};

			_cos = cos _MineTrgRad;	_sin = sin _MineTrgRad;

			_baseX00 = _CenterPosX +    0;	_baseY24 = _CenterPosY + 24.0;
			_baseX02 = _CenterPosX - 40.0;
			_baseX03 = _CenterPosX + 40.0;
			_baseX04 = _CenterPosX - 20.0;	_baseY02 = _CenterPosY -  2.0;
			_baseX05 = _CenterPosX + 20.0;	_baseY27 = _CenterPosY - 27.5;

			_TrgSin24 = (_baseY24 - _CenterPosY) * _sin + _CenterPosX + _CenterPosX * _cos;
			_TrgCos24 = (_baseY24 - _CenterPosY) * _cos + _CenterPosY - _CenterPosX * _sin;

			_TrgSin02 = (_baseY02 - _CenterPosY) * _sin + _CenterPosX + _CenterPosX * _cos;
			_TrgCos02 = (_baseY02 - _CenterPosY) * _cos + _CenterPosY - _CenterPosX * _sin;

			_TrgSin27 = (_baseY27 - _CenterPosY) * _sin + _CenterPosX + _CenterPosX * _cos;
			_TrgCos27 = (_baseY27 - _CenterPosY) * _cos + _CenterPosY - _CenterPosX * _sin;


			_basePosX01 = _TrgSin24 - (_baseX00 * _cos);
			_basePosY01 = _TrgCos24 + (_baseX00 * _sin);
			_basePos01	= [_basePosX01,_basePosY01,0];

			_basePosX02 = _TrgSin24 - (_baseX02 * _cos);
			_basePosY02 = _TrgCos24 + (_baseX02 * _sin);
			_basePos02	= [_basePosX02,_basePosY02,0];

			_basePosX03 = _TrgSin24 - (_baseX03 * _cos);
			_basePosY03 = _TrgCos24 + (_baseX03 * _sin);
			_basePos03	= [_basePosX03,_basePosY03,0];

			_basePosX04 = _TrgSin02 - (_baseX04 * _cos);
			_basePosY04 = _TrgCos02 + (_baseX04 * _sin);
			_basePos04	= [_basePosX04,_basePosY04,0];

			_basePosX05 = _TrgSin02 - (_baseX05 * _cos);
			_basePosY05 = _TrgCos02 + (_baseX05 * _sin);
			_basePos05	= [_basePosX05,_basePosY05,0];

			_basePosX06 = _TrgSin27 - (_baseX00 * _cos);
			_basePosY06 = _TrgCos27 + (_baseX00 * _sin);
			_basePos06	= [_basePosX06,_basePosY06,0];

			_basePosX07 = _TrgSin27 - (_baseX03 * _cos);
			_basePosY07 = _TrgCos27 + (_baseX03 * _sin);
			_basePos07	= [_basePosX07,_basePosY07,0];

			_basePosX08 = _TrgSin27 - (_baseX02 * _cos);
			_basePosY08 = _TrgCos27 + (_baseX02 * _sin);
			_basePos08	= [_basePosX08,_basePosY08,0];

			{
				_mine = createMine [_mineAT,_x,[],0];
				_MineArray = _MineArray + [_mine];

				Private _PosX = (_x select 0);
				Private _PosY = (_x select 1);

				_MineClusterAPosX = _PosX; 		_MineClusterAPosY = _PosY + 8;
				_MineClusterBPosX = _PosX - 8;	_MineClusterBPosY = _PosY - 5;
				_MineClusterCPosX = _PosX + 8;	_MineClusterCPosY = _PosY - 5;

				_ClusterX01 = (_MineClusterAPosY - _PosY) * _sin - (_MineClusterAPosX - _PosX) * _cos + _PosX;
				_ClusterY01 = (_MineClusterAPosY - _PosY) * _cos + (_MineClusterAPosX - _PosX) * _sin + _PosY;
				_ClusterA   = [_ClusterX01,_ClusterY01,0];

				_ClusterX02 = (_MineClusterBPosY - _PosY) * _sin - (_MineClusterBPosX - _PosX) * _cos + _PosX;
				_ClusterY02 = (_MineClusterBPosY - _PosY) * _cos + (_MineClusterBPosX - _PosX) * _sin + _PosY;
				_ClusterB   = [_ClusterX02,_ClusterY02,1];

				_ClusterX03 = (_MineClusterCPosY - _PosY) * _sin - (_MineClusterCPosX - _PosX) * _cos + _PosX;
				_ClusterY03 = (_MineClusterCPosY - _PosY) * _cos + (_MineClusterCPosX - _PosX) * _sin + _PosY;
				_ClusterC   = [_ClusterX03,_ClusterY03,3];

				{
					for "_i" from 1 to 4 do
					{
						Private _Rad = random 360;
						Private _ClusterSize = 6.5;
						Private _MinePosX = (_x select 0);
						Private _MinePosY = (_x select 1);

						_MineCos = cos _Rad; _MineSin = sin _Rad;
						_RandomPosX = _MinePosX + ( _ClusterSize * sqrt random 1 * _MineCos );
						_RandomPosY = _MinePosY + ( _ClusterSize * sqrt random 1 * _MineSin );
						_pos = [_RandomPosX ,_RandomPosY ,_h];

						if( _i == 1)then{_MineType = _mineAPf};
						if( _i == 2 || _i == 3 )then{_MineType = _mineAPb};
						if( _i == 4 && (_x select 2) == 1)then{_MineType = _mineAPf};
						if( _i == 4 && (_x select 2) != 1)then{_MineType = _mineAPb};

						_mine = createMine [_MineType,_pos,[],0];
						_MineArray = _MineArray + [_mine];
					};
				}forEach [_ClusterA,_ClusterB,_ClusterC];
			}forEach [_basePos01,_basePos02,_basePos03,_basePos04,
					  _basePos05,_basePos06,_basePos07,_basePos08];

			{_MineRevealSide revealMine _x}forEach _MineArray;
			call BIS_fnc_drawMinefields;

		};//spawn End
	};//GEN Trigger End
} forEach (allMissionObjects "EmptyDetector");