ミッションで地雷原を作成するテストコード
次の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");