diff --git a/@ExileServer/addons/a3_dms/config.cpp b/@ExileServer/addons/a3_dms/config.cpp
index cad366c..f9fd11f 100644
--- a/@ExileServer/addons/a3_dms/config.cpp
+++ b/@ExileServer/addons/a3_dms/config.cpp
@@ -76,6 +76,7 @@ class CfgFunctions
class SetGroupBehavior {};
class SetGroupBehavior_Separate {};
class SetRelPositions {};
+ class ShuffleNewArray {};
class SpawnAIGroup {};
class SpawnAIGroup_MultiPos {};
class SpawnAIVehicle {};
diff --git a/@ExileServer/addons/a3_dms/config.sqf b/@ExileServer/addons/a3_dms/config.sqf
index d93cc65..d2b2044 100644
--- a/@ExileServer/addons/a3_dms/config.sqf
+++ b/@ExileServer/addons/a3_dms/config.sqf
@@ -112,20 +112,21 @@ DMS_SpawnMissions_Scheduled = false; // Whether or not to spawn missions in a sc
DMS_UsePredefinedMissionLocations = false; // Whether or not to use a list of pre-defined mission locations instead before attempting to find a random (valid) position. The positions will still be checked for validity. If none of the provided positions are valid, a random one will be generated.
DMS_PredefinedMissionLocations = [ // List of Preset/Predefined mission locations.
/* List of positions:
- position1: [x_1,y_1,z_1],
- position2: [x_2,y_2,z_2],
+ "x" and "y" are the center to a position on the map, and "r" is a radius about the center.
+ position1: [[x_1,y_1],r_1],
+ position2: [[x_2,y_2],r_2],
...
- positionN: [x_N,y_N,z_N]
+ positionN: [[x_N,y_N],r_N]
*/
];
DMS_PredefinedMissionLocations_WEIGHTED = [ // List of Preset/Predefined mission locations WITH WEIGHTED CHANCES. This will NOT override "DMS_PredefinedMissionLocations", and everything from "DMS_PredefinedMissionLocations" will behave as though it has 1 weight per position.
/* List of arrays with position and weighted chance:
- [[x_1,y_1,z_1], chance_1],
- [[x_2,y_2,z_2], chance_2],
+ [[[x_1,y_1],r_1], weight_1],
+ [[[x_2,y_2],r_2], weight_2],
...
- [[x_N,y_N,z_N], chance_N]
+ [[[x_N,y_N],r_N], weight_N]
*/
];
diff --git a/@ExileServer/addons/a3_dms/fn_DMS_postInit.sqf b/@ExileServer/addons/a3_dms/fn_DMS_postInit.sqf
index 7d38e86..1b6e07e 100644
--- a/@ExileServer/addons/a3_dms/fn_DMS_postInit.sqf
+++ b/@ExileServer/addons/a3_dms/fn_DMS_postInit.sqf
@@ -81,51 +81,6 @@ WEST setFriend[RESISTANCE,0];
-if ((!isNil "A3XAI_isActive") && {!DMS_ai_offload_Only_DMS_AI}) then
-{
- diag_log 'DMS DETECTED A3XAI. Enabling "DMS_ai_offload_Only_DMS_AI"!';
- DMS_ai_offload_Only_DMS_AI = true;
-};
-
-if ((isClass (configFile >> "CfgPatches" >> "Ryanzombies")) && {!DMS_ai_offload_Only_DMS_AI}) then
-{
- diag_log 'DMS DETECTED RyanZombies. Enabling "DMS_ai_offload_Only_DMS_AI"!';
- DMS_ai_offload_Only_DMS_AI = true;
-};
-
-if !(DMS_ai_offload_to_client) then
-{
- DMS_ai_offloadOnUnfreeze = false;
-};
-
-if !(DMS_ai_allowFreezing) then
-{
- DMS_ai_freezeOnSpawn = false;
-};
-
-
-
-DMS_A3_AllMarkerColors = [];
-for "_i" from 0 to ((count(configfile >> "CfgMarkerColors"))-1) do
-{
- DMS_A3_AllMarkerColors pushBack (toLower (configName ((configfile >> "CfgMarkerColors") select _i)));
-};
-
-
-if !((toLower DMS_MissionMarkerWinDotColor) in DMS_A3_AllMarkerColors) then
-{
- diag_log format ["DMS ERROR :: Unsupported color for DMS_MissionMarkerWinDotColor (""%1""). Switching color to ""ColorBlue"".",DMS_MissionMarkerWinDotColor];
- DMS_MissionMarkerWinDotColor = "ColorBlue";
-};
-
-if !((toLower DMS_MissionMarkerLoseDotColor) in DMS_A3_AllMarkerColors) then
-{
- diag_log format ["DMS ERROR :: Unsupported color for DMS_MissionMarkerLoseDotColor (""%1""). Switching color to ""ColorRed"".",DMS_MissionMarkerLoseDotColor];
- DMS_MissionMarkerLoseDotColor = "ColorRed";
-};
-
-
-
// Send Client Functions using compileFinal for security.
publicVariable "DMS_CLIENT_fnc_spawnDynamicText";
publicVariable "DMS_CLIENT_fnc_spawnTextTiles";
@@ -138,16 +93,6 @@ format["DMS_Version: %1",DMS_Version] remoteExecCall ["diag_log", -2, "DMS_LogVe
-// Add the weighted predefined locations to the list of predefined locations
-{
- for "_i" from 1 to (_x select 1) do
- {
- DMS_PredefinedMissionLocations pushBack (_x select 0);
- };
-} forEach DMS_PredefinedMissionLocations_WEIGHTED;
-
-
-
// Set up the minimum/maximum co-ordinate values for x and y...
DMS_MinMax_X_Coords = [DMS_MinDistFromWestBorder, worldSize - DMS_MinDistFromEastBorder];
DMS_MinMax_Y_Coords = [DMS_MinDistFromSouthBorder, worldSize - DMS_MinDistFromNorthBorder];
diff --git a/@ExileServer/addons/a3_dms/fn_DMS_preInit.sqf b/@ExileServer/addons/a3_dms/fn_DMS_preInit.sqf
index ba1bb87..7bb4f9f 100644
--- a/@ExileServer/addons/a3_dms/fn_DMS_preInit.sqf
+++ b/@ExileServer/addons/a3_dms/fn_DMS_preInit.sqf
@@ -144,3 +144,62 @@ CALLFILE("\x\addons\dms\missions\mission_init.sqf");
missionNamespace setVariable [format["DMS_SpecialMissionSpawnCount_%1",_mission], 0];
missionNamespace setVariable [format["DMS_SpecialMissionLastSpawn_%1",_mission], 0];
} forEach DMS_SpecialMissions;
+
+
+
+
+
+if ((!isNil "A3XAI_isActive") && {!DMS_ai_offload_Only_DMS_AI}) then
+{
+ diag_log 'DMS DETECTED A3XAI. Enabling "DMS_ai_offload_Only_DMS_AI"!';
+ DMS_ai_offload_Only_DMS_AI = true;
+};
+
+if ((isClass (configFile >> "CfgPatches" >> "Ryanzombies")) && {!DMS_ai_offload_Only_DMS_AI}) then
+{
+ diag_log 'DMS DETECTED RyanZombies. Enabling "DMS_ai_offload_Only_DMS_AI"!';
+ DMS_ai_offload_Only_DMS_AI = true;
+};
+
+if !(DMS_ai_offload_to_client) then
+{
+ DMS_ai_offloadOnUnfreeze = false;
+};
+
+if !(DMS_ai_allowFreezing) then
+{
+ DMS_ai_freezeOnSpawn = false;
+};
+
+
+
+DMS_A3_AllMarkerColors = [];
+for "_i" from 0 to ((count(configfile >> "CfgMarkerColors"))-1) do
+{
+ DMS_A3_AllMarkerColors pushBack (toLower (configName ((configfile >> "CfgMarkerColors") select _i)));
+};
+
+
+if !((toLower DMS_MissionMarkerWinDotColor) in DMS_A3_AllMarkerColors) then
+{
+ diag_log format ["DMS ERROR :: Unsupported color for DMS_MissionMarkerWinDotColor (""%1""). Switching color to ""ColorBlue"".",DMS_MissionMarkerWinDotColor];
+ DMS_MissionMarkerWinDotColor = "ColorBlue";
+};
+
+if !((toLower DMS_MissionMarkerLoseDotColor) in DMS_A3_AllMarkerColors) then
+{
+ diag_log format ["DMS ERROR :: Unsupported color for DMS_MissionMarkerLoseDotColor (""%1""). Switching color to ""ColorRed"".",DMS_MissionMarkerLoseDotColor];
+ DMS_MissionMarkerLoseDotColor = "ColorRed";
+};
+
+
+
+// Add the weighted predefined locations to the list of predefined locations
+{
+ for "_i" from 1 to (_x select 1) do
+ {
+ DMS_PredefinedMissionLocations pushBack (_x select 0);
+ };
+} forEach DMS_PredefinedMissionLocations_WEIGHTED;
+
+DMS_PredefinedMissionLocations = DMS_PredefinedMissionLocations call DMS_fnc_ShuffleNewArray;
diff --git a/@ExileServer/addons/a3_dms/objects/nedbuild1_objects.sqf b/@ExileServer/addons/a3_dms/objects/nedbuild1_objects.sqf
index e5259e0..c23c332 100644
--- a/@ExileServer/addons/a3_dms/objects/nedbuild1_objects.sqf
+++ b/@ExileServer/addons/a3_dms/objects/nedbuild1_objects.sqf
@@ -1,14 +1,14 @@
[
- ["Land_Cargo_House_V2_F",[0,15,0],0],
- ["Land_Cargo_House_V2_F",[6.2,15,0],0],
- ["Land_Cargo_House_V2_F",[-6.2,15,0],0],
- ["Land_Cargo_House_V2_F",[15,0,0],90],
- ["Land_Cargo_House_V2_F",[15,6.2,0],90],
- ["Land_Cargo_House_V2_F",[15,-6.2,0],90],
- ["Land_Cargo_House_V2_F",[0,-15,0],180],
- ["Land_Cargo_House_V2_F",[-6.2,-15,0],180],
- ["Land_Cargo_House_V2_F",[6.2,-15,0],180],
- ["Land_Cargo_House_V2_F",[-15,0,0],270],
- ["Land_Cargo_House_V2_F",[-15,-6.2,0],270],
- ["Land_Cargo_House_V2_F",[-15,6.2,0],270]
-]
\ No newline at end of file
+ ["Land_Cargo_House_V2_F",[0,15,0],0,[],false,true],
+ ["Land_Cargo_House_V2_F",[6.2,15,0],0,[],false,true],
+ ["Land_Cargo_House_V2_F",[-6.2,15,0],0,[],false,true],
+ ["Land_Cargo_House_V2_F",[15,0,0],90,[],false,true],
+ ["Land_Cargo_House_V2_F",[15,6.2,0],90,[],false,true],
+ ["Land_Cargo_House_V2_F",[15,-6.2,0],90,[],false,true],
+ ["Land_Cargo_House_V2_F",[0,-15,0],180,[],false,true],
+ ["Land_Cargo_House_V2_F",[-6.2,-15,0],180,[],false,true],
+ ["Land_Cargo_House_V2_F",[6.2,-15,0],180,[],false,true],
+ ["Land_Cargo_House_V2_F",[-15,0,0],270,[],false,true],
+ ["Land_Cargo_House_V2_F",[-15,-6.2,0],270,[],false,true],
+ ["Land_Cargo_House_V2_F",[-15,6.2,0],270,[],false,true]
+]
diff --git a/@ExileServer/addons/a3_dms/objects/nedguns1_objects.sqf b/@ExileServer/addons/a3_dms/objects/nedguns1_objects.sqf
index 4b84d63..86a13bb 100644
--- a/@ExileServer/addons/a3_dms/objects/nedguns1_objects.sqf
+++ b/@ExileServer/addons/a3_dms/objects/nedguns1_objects.sqf
@@ -1,14 +1,14 @@
[
- ["Land_Cargo_House_V3_F",[0,15,0],0],
- ["Land_Cargo_House_V3_F",[6.2,15,0],0],
- ["Land_Cargo_House_V3_F",[-6.2,15,0],0],
- ["Land_Cargo_House_V3_F",[15,0,0],90],
- ["Land_Cargo_House_V3_F",[15,6.2,0],90],
- ["Land_Cargo_House_V3_F",[15,-6.2,0],90],
- ["Land_Cargo_House_V3_F",[0,-15,0],180],
- ["Land_Cargo_House_V3_F",[-6.2,-15,0],180],
- ["Land_Cargo_House_V3_F",[6.2,-15,0],180],
- ["Land_Cargo_House_V3_F",[-15,0,0],270],
- ["Land_Cargo_House_V3_F",[-15,-6.2,0],270],
- ["Land_Cargo_House_V3_F",[-15,6.2,0],270]
-]
\ No newline at end of file
+ ["Land_Cargo_House_V3_F",[0,15,0],0,[],false,true],
+ ["Land_Cargo_House_V3_F",[6.2,15,0],0,[],false,true],
+ ["Land_Cargo_House_V3_F",[-6.2,15,0],0,[],false,true],
+ ["Land_Cargo_House_V3_F",[15,0,0],90,[],false,true],
+ ["Land_Cargo_House_V3_F",[15,6.2,0],90,[],false,true],
+ ["Land_Cargo_House_V3_F",[15,-6.2,0],90,[],false,true],
+ ["Land_Cargo_House_V3_F",[0,-15,0],180,[],false,true],
+ ["Land_Cargo_House_V3_F",[-6.2,-15,0],180,[],false,true],
+ ["Land_Cargo_House_V3_F",[6.2,-15,0],180,[],false,true],
+ ["Land_Cargo_House_V3_F",[-15,0,0],270,[],false,true],
+ ["Land_Cargo_House_V3_F",[-15,-6.2,0],270,[],false,true],
+ ["Land_Cargo_House_V3_F",[-15,6.2,0],270,[],false,true]
+]
diff --git a/@ExileServer/addons/a3_dms/objects/nedmed1_objects.sqf b/@ExileServer/addons/a3_dms/objects/nedmed1_objects.sqf
index ce80ba4..aed81c8 100644
--- a/@ExileServer/addons/a3_dms/objects/nedmed1_objects.sqf
+++ b/@ExileServer/addons/a3_dms/objects/nedmed1_objects.sqf
@@ -1,14 +1,14 @@
[
- ["Land_Medevac_house_V1_F",[0,15,0],0],
- ["Land_Medevac_house_V1_F",[6.2,15,0],0],
- ["Land_Medevac_house_V1_F",[-6.2,15,0],0],
- ["Land_Medevac_house_V1_F",[15,0,0],90],
- ["Land_Medevac_house_V1_F",[15,6.2,0],90],
- ["Land_Medevac_house_V1_F",[15,-6.2,0],90],
- ["Land_Medevac_house_V1_F",[0,-15,0],180],
- ["Land_Medevac_house_V1_F",[-6.2,-15,0],180],
- ["Land_Medevac_house_V1_F",[6.2,-15,0],180],
- ["Land_Medevac_house_V1_F",[-15,0,0],270],
- ["Land_Medevac_house_V1_F",[-15,-6.2,0],270],
- ["Land_Medevac_house_V1_F",[-15,6.2,0],270]
-]
\ No newline at end of file
+ ["Land_Medevac_house_V1_F",[0,15,0],0,[],false,true],
+ ["Land_Medevac_house_V1_F",[6.2,15,0],0,[],false,true],
+ ["Land_Medevac_house_V1_F",[-6.2,15,0],0,[],false,true],
+ ["Land_Medevac_house_V1_F",[15,0,0],90,[],false,true],
+ ["Land_Medevac_house_V1_F",[15,6.2,0],90,[],false,true],
+ ["Land_Medevac_house_V1_F",[15,-6.2,0],90,[],false,true],
+ ["Land_Medevac_house_V1_F",[0,-15,0],180,[],false,true],
+ ["Land_Medevac_house_V1_F",[-6.2,-15,0],180,[],false,true],
+ ["Land_Medevac_house_V1_F",[6.2,-15,0],180,[],false,true],
+ ["Land_Medevac_house_V1_F",[-15,0,0],270,[],false,true],
+ ["Land_Medevac_house_V1_F",[-15,-6.2,0],270,[],false,true],
+ ["Land_Medevac_house_V1_F",[-15,6.2,0],270,[],false,true]
+]
diff --git a/@ExileServer/addons/a3_dms/objects/nedresearch_objects.sqf b/@ExileServer/addons/a3_dms/objects/nedresearch_objects.sqf
index 5d6da9c..dc042bc 100644
--- a/@ExileServer/addons/a3_dms/objects/nedresearch_objects.sqf
+++ b/@ExileServer/addons/a3_dms/objects/nedresearch_objects.sqf
@@ -1,7 +1,7 @@
[
- ["Land_Research_HQ_F",[10,0,0],0],
+ ["Land_Research_HQ_F",[10,0,0],0,[],false,true],
["Land_CncBarrierMedium4_F",[1,7,0],0],
["Land_CncBarrierMedium4_F",[1,-7,0],0],
["Land_CncBarrierMedium4_F",[-3,-4,0],90],
["Land_CncBarrierMedium4_F",[-3,3.5,0],90]
-]
\ No newline at end of file
+]
diff --git a/@ExileServer/addons/a3_dms/scripts/fn_FindSafePos.sqf b/@ExileServer/addons/a3_dms/scripts/fn_FindSafePos.sqf
index 89f54bf..3106961 100644
--- a/@ExileServer/addons/a3_dms/scripts/fn_FindSafePos.sqf
+++ b/@ExileServer/addons/a3_dms/scripts/fn_FindSafePos.sqf
@@ -43,26 +43,15 @@ DMS_DebugMarkers = [];
*/
private _isValidSpot = false;
-
-private _presetLocs = [];
-private _presetLocsLength = 0;
-
-if (DMS_UsePredefinedMissionLocations) then
-{
- // Shuffle the array so that the positions are selected in random order
- _presetLocs = DMS_PredefinedMissionLocations call ExileClient_util_array_shuffle;
- _presetLocsLength = count _presetLocs;
-};
-
-
private _pos = [];
for "_attempts" from 1 to MAX_ATTEMPTS do
{
_pos =
- if (DMS_UsePredefinedMissionLocations && {_attempts<=_presetLocsLength}) then
+ if (DMS_UsePredefinedMissionLocations) then
{
- _presetLocs select (_attempts - 1)
+ _posInfo = selectRandom DMS_UsePredefinedMissionLocations;
+ [_posInfo select 0, random (_posInfo select 1), random 360] call DMS_fnc_SelectOffsetPos
}
else
{
diff --git a/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E.sqf b/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E.sqf
index 8e91278..ba57e66 100644
--- a/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E.sqf
+++ b/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E.sqf
@@ -51,12 +51,12 @@ private _objs = _export apply
{
// Create the object
private _obj = createVehicle [_x select 0, [0,0,0], [], 0, "CAN_COLLIDE"];
- _obj enableSimulationGlobal false;
+ _obj enableSimulationGlobal (_x param [5,false,[false]]);
// Calculate the object's position using provided relative position
private _objPos = [_pos,_x select 1] call DMS_fnc_CalcPos;
- if (((count _x)>4) && {!(_x select 4)}) then
+ if (_x param [4,false,[false]]) then
{
// Supports bank/pitch
_obj setPosATL _objPos;
diff --git a/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E_Convert.sqf b/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E_Convert.sqf
index 492abe9..289d8f5 100644
--- a/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E_Convert.sqf
+++ b/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E_Convert.sqf
@@ -52,7 +52,7 @@ if ((isNil "_export") || {!(_export isEqualType [])}) exitWith
private _objs = _export apply
{
private _obj = createVehicle [_x select 0, [0,0,0], [], 0, "CAN_COLLIDE"];
- _obj enableSimulationGlobal false;
+ _obj enableSimulationGlobal (_x param [5,false,[false]]);
private _pos = (_x select 1) vectorAdd [0,0,5000];
diff --git a/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E_Static.sqf b/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E_Static.sqf
index f2798bc..f52b561 100644
--- a/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E_Static.sqf
+++ b/@ExileServer/addons/a3_dms/scripts/fn_ImportFromM3E_Static.sqf
@@ -46,8 +46,8 @@ if ((isNil "_export") || {!(_export isEqualType [])}) exitWith
private _objs = _export apply
{
private _obj = createVehicle [_x select 0, [0,0,0], [], 0, "CAN_COLLIDE"];
- _obj enableSimulationGlobal false;
-
+ _obj enableSimulationGlobal (_x param [5,false,[false]]);
+
private _pos = _x select 1;
if (_x select 4) then
diff --git a/@ExileServer/addons/a3_dms/scripts/fn_SelectMission.sqf b/@ExileServer/addons/a3_dms/scripts/fn_SelectMission.sqf
index 63fbcbd..ad43922 100644
--- a/@ExileServer/addons/a3_dms/scripts/fn_SelectMission.sqf
+++ b/@ExileServer/addons/a3_dms/scripts/fn_SelectMission.sqf
@@ -84,8 +84,8 @@ if (diag_fps >= DMS_MinServerFPS && {_playerCount >= DMS_MinPlayerCount}) then
if
(
- (_playerCount > _minPlayers) &&
- {_playerCount < _maxPlayers} &&
+ (_playerCount >= _minPlayers) &&
+ {_playerCount <= _maxPlayers} &&
{_maxTimesPerRestart > _timesSpawned} &&
{(_time - (missionNamespace getVariable format["DMS_SpecialMissionLastSpawn_%1",_mission])) > _timeBetween}
) then
diff --git a/@ExileServer/addons/a3_dms/scripts/fn_SetAILocality.sqf b/@ExileServer/addons/a3_dms/scripts/fn_SetAILocality.sqf
index 845408e..527e7cd 100644
--- a/@ExileServer/addons/a3_dms/scripts/fn_SetAILocality.sqf
+++ b/@ExileServer/addons/a3_dms/scripts/fn_SetAILocality.sqf
@@ -51,11 +51,11 @@ if (!isNull _client) then
ExileServerOwnershipSwapQueue pushBack [_AI,_client];
};
+ private _msg = format ["DMS :: AI %1 |%2| has been offloaded to you.",_AIType,_AI];
+ _msg remoteExecCall ["diag_log", _client];
if (DMS_ai_offload_notifyClient) then
{
- private _msg = format ["DMS :: AI %1 |%2| has been offloaded to you.",_AIType,_AI];
_msg remoteExecCall ["systemChat", _client];
- _msg remoteExecCall ["diag_log", _client];
};
if (DMS_DEBUG) then
diff --git a/@ExileServer/addons/a3_dms/scripts/fn_ShuffleNewArray.sqf b/@ExileServer/addons/a3_dms/scripts/fn_ShuffleNewArray.sqf
new file mode 100644
index 0000000..c4a3585
--- /dev/null
+++ b/@ExileServer/addons/a3_dms/scripts/fn_ShuffleNewArray.sqf
@@ -0,0 +1,20 @@
+/*
+ DMS_fnc_ShuffleNewArray
+ created by eraser1
+
+ Usage:
+ _array call DMS_fnc_ShuffleNewArray
+
+ Shuffles an array without modifying the original (input) array.
+*/
+
+_this = + _this;
+
+_shuffled = [];
+
+for "_i" from (count _this) to 1 step -1 do
+{
+ _shuffled pushBack (_this deleteAt floor(random _i));
+};
+
+_shuffled;
diff --git a/@ExileServer/addons/a3_dms/scripts/fn_TargetsKilled.sqf b/@ExileServer/addons/a3_dms/scripts/fn_TargetsKilled.sqf
index ae904e9..7ccb8e8 100644
--- a/@ExileServer/addons/a3_dms/scripts/fn_TargetsKilled.sqf
+++ b/@ExileServer/addons/a3_dms/scripts/fn_TargetsKilled.sqf
@@ -22,18 +22,32 @@ private _killed = false;
try
{
{
- private _lastDistanceCheckTime = _x getVariable ["DMS_LastAIDistanceCheck",time];
- private _pos = getPosWorld _x;
- private _spawnPos = _x getVariable ["DMS_AISpawnPos",0];
-
- if ((DMS_MaxAIDistance>0) && {!(_spawnPos isEqualTo 0)} && {((time - _lastDistanceCheckTime)>DMS_AIDistanceCheckFrequency) && {(_pos distance2D _spawnPos)>DMS_MaxAIDistance}}) then
+ if (DMS_MaxAIDistance>0) then
{
- _x setDamage 1;
- diag_log format ["Killed a runaway unit! |%1| was more than %2m away from its spawn position %3!",_x,DMS_MaxAIDistance,_spawnPos];
+ private _lastDistanceCheckTime = _x getVariable ["DMS_LastAIDistanceCheck",time];
+ private _pos = getPosWorld _x;
+ private _spawnPos = _x getVariable ["DMS_AISpawnPos",0];
+
+ if (!(_spawnPos isEqualTo 0) && {(time - _lastDistanceCheckTime)>DMS_AIDistanceCheckFrequency}) then
+ {
+ if ((_pos distance2D _spawnPos)>DMS_MaxAIDistance) then
+ {
+ _x setDamage 1;
+ diag_log format ["Killed a runaway unit! |%1| was more than %2m away from its spawn position %3!",_x,DMS_MaxAIDistance,_spawnPos];
+ }
+ else
+ {
+ _x setVariable ["DMS_LastAIDistanceCheck",time];
+ throw _x;
+ };
+ }
+ else
+ {
+ throw _x;
+ };
}
else
{
- _x setVariable ["DMS_LastAIDistanceCheck",time];
throw _x;
};
} forEach (_this call DMS_fnc_GetAllUnits); // DMS_fnc_GetAllUnits will return living AI unit objects only, so we only need to check for runaway units
diff --git a/README.md b/README.md
index af11c07..213007b 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-  
+  
# To the User:
@@ -100,16 +100,16 @@ If you can't figure it out, leave a post on [the DMS thread on exile forums](htt
### HEADLESS CLIENT:
-**DMS does not currently support headless client. Do not attempt to use HC with DMS unless you know what you are doing.**
+**DMS does not run on a headless client. Do not attempt to use HC with DMS unless you know what you are doing.**
___
# Credits:
### Authors:
-- [Defent](https://github.com/Defent) from [NumenaDayZ](http://numenadayz.com/).
-- [eraser1](https://github.com/eraser1) from [TrainwreckDayZ](http://www.trainwreckdayz.com/home).
-- [secondcoming](https://github.com/secondcoming) from [ExileYorkshire](http://exileyorkshire.co.uk/).
+- [Defent](https://github.com/Defent)
+- [eraser1](https://github.com/eraser1)
+- [secondcoming](https://github.com/secondcoming)
### Thanks:
@@ -121,6 +121,7 @@ ___
- [William from Refugees of the Fallen](http://rtfgaming.com/) for the amazing slums static mission base and ideas :)
- [DONKEYPUNCH](https://github.com/donkeypunchepoch) for everything on the [February 17th 2016 commit](https://github.com/Defent/DMS_Exile/wiki/Changelog#february-17-2016-600-pm-cst-america) ;)
- [MGTDB](https://github.com/MGTDB) for the plethora of fixes, testing, and all-around doing our work for us :P
+- [PrimusNZ](https://github.com/PrimusNZ) for some fixes.
- Everybody's feedback on [the DMS thread on exile forums](http://www.exilemod.com/topic/61-dms-defents-mission-system/?do=findComment&comment=242)
#### Testers/Reporters:
@@ -150,7 +151,7 @@ ___
* Spawning in a trader on mission completion ([Trillseeker82](http://www.exilemod.com/topic/61-dms-defents-mission-system/?do=findComment&comment=43932)).
#### Full Headless Client Support.
-* AI will still be offloaded to clients (ideally); strictly DMS functions will be handled by the HC.
+* Handling DMS functions/code as well as AI on the HC.
___