57 lines
1.8 KiB
Plaintext
57 lines
1.8 KiB
Plaintext
|
local _pos = [0,0,0];
|
||
|
local _num = 1;
|
||
|
local _findRun = true;
|
||
|
local _playerNear = true;
|
||
|
local _isTavi = toLower worldName == "tavi";
|
||
|
|
||
|
//We need to loop findSafePos until it doesn't return the map center
|
||
|
while {_findRun} do {
|
||
|
|
||
|
if (DZMSStaticPlc) then {
|
||
|
_pos = DZMSStatLocs call BIS_fnc_selectRandom;
|
||
|
_pos = [(_pos select 0), (_pos select 1)]; // Position needs to be 2D.
|
||
|
} else {
|
||
|
_pos = [getMarkerPos "center",0,((getMarkerSize "center") select 1) * .75,30,0,.2,0,DZMSBlacklistZones] call BIS_fnc_findSafePos;
|
||
|
};
|
||
|
local _isOk = true;
|
||
|
// Let's check for nearby water within 100 meters
|
||
|
{
|
||
|
if (surfaceIsWater _x) exitWith {_isOk = false;};
|
||
|
} count [_pos,[(_pos select 0), (_pos select 1)+100],[(_pos select 0)+100, (_pos select 1)],[(_pos select 0), (_pos select 1)-100],[(_pos select 0)-100, (_pos select 1)]];
|
||
|
|
||
|
//Lets test the height on Taviana
|
||
|
if (_isTavi) then {
|
||
|
local _tavTest = createVehicle ["Can_Small",[(_pos select 0),(_pos select 1),0],[], 0, "CAN_COLLIDE"];
|
||
|
_isOk = (((getPosASL _tavTest) select 2) <= 185);
|
||
|
deleteVehicle _tavTest;
|
||
|
};
|
||
|
|
||
|
// Check if position is far enough away from other missions
|
||
|
{
|
||
|
if ((typeName _x) == "ARRAY" && {_pos distance _x < DZMSDistanceBetweenMissions}) exitWith {
|
||
|
_isOk = false;
|
||
|
};
|
||
|
} count DZE_MissionPositions;
|
||
|
|
||
|
// Check for near safezones if Epoch/Overpoch
|
||
|
if (DZMSEpoch) then {
|
||
|
{
|
||
|
if (_pos distance (_x select 0) < 700) exitWith {
|
||
|
_isOk = false;
|
||
|
};
|
||
|
} count DZE_SafeZonePosArray;
|
||
|
};
|
||
|
|
||
|
//Check for players within 500 meters
|
||
|
_playerNear = [_pos,500] call DZMSNearPlayer;
|
||
|
|
||
|
//Lets combine all our checks to possibly end the loop
|
||
|
if (_isOk && !_playerNear && {count _pos == 2}) then {
|
||
|
_findRun = false;
|
||
|
};
|
||
|
|
||
|
if (DZMSDebug) then {diag_log format["DZMSFindPos: %1 attempts to find a safe position",_num];};
|
||
|
_num = _num + 1;
|
||
|
};
|
||
|
_pos set [2, 0];
|
||
|
_pos
|