arma2-epoch-server/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSFindPos.sqf

57 lines
1.8 KiB
Plaintext
Raw Permalink Normal View History

2022-04-21 16:15:41 +03:00
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