Release Candidate!

This commit is contained in:
eraser1 2016-06-06 22:47:15 -05:00
parent c4a9b3f1b2
commit e0dc8c874d
39 changed files with 347 additions and 257 deletions

View File

@ -4,7 +4,7 @@ class CfgPatches
{
units[] = {};
weapons[] = {};
a3_DMS_version = "May 22, 2016 (2) (TEST)";
a3_DMS_version = "June 6, 2016 (RC1)";
requiredVersion = 1.36;
requiredAddons[] = {"exile_client","exile_server_config"};
};
@ -57,6 +57,7 @@ class CfgFunctions
class ImportFromM3E_3DEN_Convert {};
class ImportFromM3E_3DEN_Static {};
class IsPlayerNearby {};
class IsPosBlacklisted {};
class IsNearWater {};
class IsValidPosition {};
class MissionParams {};

View File

@ -52,7 +52,6 @@ DMS_SpawnMissions_Scheduled = false; // Whether or not to spawn missions in a sc
DMS_AI_KillPercent = 100; // The percent amount of AI that need to be killed for "killPercent" mission requirement (NOT IMPLEMENTED)
/*Mission Marker settings*/
DMS_MissionMarkerCount = 2; // If you modify your CreateMarker and have multiple markers, you probably want to change this. *cough*Vish*cough*
DMS_ShowDifficultyColorLegend = true; // Whether or not to show a "color legend" at the bottom left of the map that shows which color corresponds to which difficulty. I know it's not very pretty, meh.
DMS_MarkerText_ShowMissionPrefix = true; // Whether or not to place a prefix before the mission marker text. Enable this if your players get confused by the marker names :P
DMS_MarkerText_MissionPrefix = "Mission:"; // The text displayed before the mission name in the mission marker.
@ -240,6 +239,8 @@ DMS_SpawnMissions_Scheduled = false; // Whether or not to spawn missions in a sc
[[11375,16170],[14302,18600]],
[[13300,14670],[14875,16170]]
*/
//[[2350,4680],100] // This random example blacklists any position within 100 meters of coordinates "[2350,4680]"
];
/* Mission System Settings */

View File

@ -121,40 +121,9 @@ if !((toLower DMS_MissionMarkerLoseDotColor) in DMS_A3_AllMarkerColors) then
// Create and send Client Functions using compileFinal for security.
DMS_CLIENT_fnc_spawnDynamicText = compileFinal
("
[
_this,
0,
safeZoneY,
"+str DMS_dynamicText_Duration+",
"+str DMS_dynamicText_FadeTime+",
0,
24358+round(random 5)
] spawn BIS_fnc_dynamicText;
");
// Send Client Functions using compileFinal for security.
publicVariable "DMS_CLIENT_fnc_spawnDynamicText";
DMS_CLIENT_fnc_spawnTextTiles = compileFinal
("
[
parseText _this,
[
0,
safeZoneY,
1,
1
],
[10,10],
"+str DMS_textTiles_Duration+",
"+str DMS_textTiles_FadeTime+",
0
] spawn BIS_fnc_textTiles;
");
publicVariable "DMS_CLIENT_fnc_spawnTextTiles";
DMS_CLIENT_fnc_hintSilent = compileFinal "hintSilent parsetext format['%1',_this];";
publicVariable "DMS_CLIENT_fnc_hintSilent";
publicVariable "DMS_Version";

View File

@ -59,6 +59,64 @@ DMS_HeliParatrooper_Arr = [];
DMS_FrozenAIGroups = [];
DMS_CLIENT_fnc_spawnDynamicText = compileFinal
("
if (isNil 'DMS_CLIENT_DynamicText_inProgress') then
{
DMS_CLIENT_DynamicText_inProgress = true;
_this spawn
{
[
_this,
0,
safeZoneY,
"+str DMS_dynamicText_Duration+",
"+str DMS_dynamicText_FadeTime+",
0,
24358
] call BIS_fnc_dynamicText;
DMS_CLIENT_DynamicText_inProgress = nil;
};
}
else
{
["+str (DMS_dynamicText_Duration+DMS_dynamicText_FadeTime) +",{_this call DMS_CLIENT_fnc_spawnDynamicText},_this,false,false] call ExileClient_system_thread_addTask;
};
");
DMS_CLIENT_fnc_spawnTextTiles = compileFinal
("
if (isNil 'DMS_CLIENT_TextTiles_inProgress') then
{
DMS_CLIENT_TextTiles_inProgress = true;
_this spawn
{
[
parseText _this,
[
0,
safeZoneY,
1,
1
],
[10,10],
"+str DMS_textTiles_Duration+",
"+str DMS_textTiles_FadeTime+",
0
] call BIS_fnc_textTiles;
DMS_CLIENT_TextTiles_inProgress = nil;
};
}
else
{
["+str (DMS_textTiles_Duration+DMS_textTiles_FadeTime) +",{_this call DMS_CLIENT_fnc_spawnTextTiles},_this,false,false] call ExileClient_system_thread_addTask;
};
");
DMS_CLIENT_fnc_hintSilent = compileFinal "hintSilent parsetext format['%1',_this];";
// Initialize mission variables...
CALLFILE("\x\addons\dms\missions\static_init.sqf");
CALLFILE("\x\addons\dms\missions\mission_init.sqf");

View File

@ -12,7 +12,7 @@ if (!DMS_ai_offload_to_client) exitWith {};
{
private _leader = leader _x;
private _group = _x;
if ((!isNull _leader) && {(alive _leader) && {!isPlayer _leader}}) then
if !(isPlayer _leader) then
{
if (DMS_DEBUG) then
{

View File

@ -61,16 +61,16 @@ private _added = false;
if !(params
[
["_pos","",[[]],[2,3]],
["_completionInfo","",[[]]],
["_timeOutInfo","",[[]],[1,2]],
["_units","",[[]]],
["_missionObjs","",[[]],[3,4]],
["_messages","",[[]],[3]],
["_markers","",[[]],[DMS_MissionMarkerCount]],
["_side","bandit",[""]],
["_difficulty","moderate",[""]],
["_missionEvents",[],[[]]]
"_pos",
"_completionInfo",
"_timeOutInfo",
"_units",
"_missionObjs",
"_messages",
"_markers",
"_side",
"_difficulty",
"_missionEvents"
])
exitWith
{

View File

@ -71,17 +71,17 @@ private _added = false;
if !(params
[
["_pos","",[[]],[2,3]],
["_completionInfo","",[[]]],
["_groupReinforcementsInfo","",[[]]],
["_timeOutInfo","",[[]],[1,2]],
["_units","",[[]]],
["_missionObjs","",[[]],[3,4]],
["_messages","",[[]],[3]],
["_markers","",[[]],[DMS_MissionMarkerCount]],
["_side","bandit",[""]],
["_difficulty","moderate",[""]],
["_missionEvents",[],[[]]]
"_pos",
"_completionInfo",
"_groupReinforcementsInfo",
"_timeOutInfo",
"_units",
"_missionObjs",
"_messages",
"_markers",
"_side",
"_difficulty",
"_missionEvents"
])
exitWith
{

View File

@ -16,8 +16,8 @@
if !(params
[
["_missionName","",[""]],
["_messageInfo",[],[[]],[2]]
"_missionName",
"_messageInfo"
])
exitWith
{
@ -27,7 +27,7 @@ exitWith
_messageInfo params
[
["_titleColor","#FFFF00",[""]],
["_message","",[""]]
"_message"
];
if (DMS_DEBUG) then

View File

@ -13,8 +13,8 @@
if !(params
[
["_pos","",[[],objNull],[2,3]],
["_relPos","",[[]],[2,3]]
"_pos",
"_relPos"
])
exitWith
{

View File

@ -27,9 +27,9 @@
if !(_x params
[
["_objs",[objNull],[objNull,[],grpNull]],
["_timeAddedToList",diag_tickTime,[0]],
["_timeUntilClean",DMS_CompletedMissionCleanupTime,[0]]
"_objs",
"_timeAddedToList",
"_timeUntilClean"
])
then
{

View File

@ -88,8 +88,8 @@
if (!(params
[
["_crate",objNull,[objNull]],
["_lootValues","",[0,"",[]],[2,3]]
"_crate",
"_lootValues"
])
||
{isNull _crate})
@ -230,9 +230,9 @@ else
if !((_crateValues params
[
["_weps", [], [[]]],
["_items", [], [[]]],
["_backpacks", [], [[]]]
"_weps",
"_items",
"_backpacks"
]))
exitWith
{

View File

@ -21,10 +21,10 @@
if !(params
[
["_centerPos", 0, [[]], [2,3]],
["_distanceMin", 0, [0]],
["_distanceMax", 0, [0]],
["_posParameters", 0, [[]]]
"_centerPos",
"_distanceMin",
"_distanceMax",
"_posParameters"
])
exitWith
{

View File

@ -8,39 +8,13 @@
*/
private _weapon = _this;
private _compatibleMuzzles = getArray (configfile >> "CfgWeapons" >> _this >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems");
private _weaponName = getText (configFile >> "cfgWeapons" >> _weapon >> "displayName");
switch (true) do
if (_compatibleMuzzles isEqualTo []) then
{
// Zafir accepts no suppressors :(
//case ((_weapon find "Zafir")>-1) : {""};
case ((_weaponName find "6.5") > -1) :
{
if (_weapon find "LMG_Mk200" > -1) then
{
"muzzle_snds_H_MG";
}
else
{
"muzzle_snds_H";
};
};
case ((_weaponName find "5.56") > -1) : {"muzzle_snds_M"};
case ((_weaponName find "7.62") > -1) : {"muzzle_snds_B"};
case ((_weaponName find ".45") > -1) : {"muzzle_snds_acp"};
case ((_weaponName find "9 mm") > -1) : {"muzzle_snds_L"};
case ((_weaponName find ".338") > -1) : {selectRandom ["muzzle_snds_338_black","muzzle_snds_338_green","muzzle_snds_338_sand"]};
case ((_weaponName find "9.3 mm") > -1) : {selectRandom ["muzzle_snds_93mmg","muzzle_snds_93mmg_tan"]};
default {""};
"" // Return an empty string if there are no compatible muzzles/suppressors
}
else
{
selectRandom _compatibleMuzzles // Choose a random muzzle/suppressor (this is actually faster than selecting the first one)
};

View File

@ -9,8 +9,6 @@
eg: _group setVariable ["DMS_AllowFreezing",false]
*/
if !(DMS_ai_allowFreezing) exitWith {};
private _recentlyUnfrozen = [];
{
@ -43,13 +41,15 @@ private _recentlyUnfrozen = [];
} forEach DMS_FrozenAIGroups;
if (DMS_ai_allowFreezing) then
{
{
if (((count (units _x))>1) && {_x getVariable ["DMS_AllowFreezing",true]} && {!(DMS_ai_freeze_Only_DMS_AI && {!(_x getVariable ["DMS_SpawnedGroup",false])})}) then
{
private _leader = leader _x;
private _group = _x;
if ((!isNull _leader) && {alive _leader} && {!(isPlayer _leader)} && {!([_leader,DMS_ai_freezingDistance] call DMS_fnc_IsPlayerNearby)}) then
if (!(isPlayer _leader) && {!([_leader,DMS_ai_freezingDistance] call DMS_fnc_IsPlayerNearby)}) then
{
[_group,true] call DMS_fnc_FreezeToggle;
@ -62,7 +62,8 @@ private _recentlyUnfrozen = [];
_group setVariable ["DMS_AllowFreezing",false];
};
};
} forEach allGroups;
} forEach allGroups;
};
// NOW we allow them to be frozen again, so we avoid checking for nearby players TWICE on a group(s) that has just been un-frozen.

View File

@ -111,15 +111,15 @@
// Check ALL the variables
if !(params
[
["_AIGroup", grpNull, [grpNull] ],
["_reinforcementInfo", [], [[]], [2] ],
["_updateInfo", [], [[]], [2] ],
["_spawnLocations", [], [[]] ],
["_class", "", [""] ],
["_difficulty", "", [""] ],
["_side", "", [""] ],
["_monitorType", "", [""] ],
["_monitorParams", [], [[]] ]
"_AIGroup",
"_reinforcementInfo",
"_updateInfo",
"_spawnLocations",
"_class",
"_difficulty",
"_side",
"_monitorType",
"_monitorParams"
])
exitWith
{
@ -130,8 +130,8 @@ exitWith
if !(_reinforcementInfo params
[
["_wavesInfo", [], [[]]],
["_unitsInfo", [], [[]]]
"_wavesInfo",
"_unitsInfo"
])
exitWith
{
@ -142,8 +142,8 @@ exitWith
if !(_wavesInfo params
[
["_maxReinforcementWaves", -1, [0]],
["_reinforcementWavesGiven", 0, [0]]
"_maxReinforcementWaves",
"_reinforcementWavesGiven"
])
exitWith
{
@ -154,8 +154,8 @@ exitWith
if !(_unitsInfo params
[
["_maxReinforcementUnits", -1, [0]],
["_reinforcementUnitsGiven", 0, [0]]
"_maxReinforcementUnits",
"_reinforcementUnitsGiven"
])
exitWith
{
@ -166,8 +166,8 @@ exitWith
if !(_updateInfo params
[
["_updateDelay", 300, [0]],
["_lastUpdated", 0, [0]]
"_updateDelay",
"_lastUpdated"
])
exitWith
{
@ -234,9 +234,9 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_posOrObj", [], [objNull,[]], [2,3]],
["_radius", 0, [0]],
["_reinforcementCount", 0, [0]]
"_posOrObj",
"_radius",
"_reinforcementCount"
])
exitWith
{
@ -257,7 +257,7 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_AICount", 0, [0]]
"_AICount"
])
exitWith
{
@ -276,8 +276,8 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_AICount", 0, [0]],
["_reinforcementCount", 0, [0]]
"_AICount",
"_reinforcementCount"
])
exitWith
{
@ -298,9 +298,9 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_AICount", 0, [0]],
["_reinforcementCount", 0, [0]],
["_increment_AICount", 0, [0]]
"_AICount",
"_reinforcementCount",
"_increment_AICount"
])
exitWith
{
@ -323,8 +323,8 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_AICount", 0, [0]],
["_reinforcementCount", 0, [0]]
"_AICount",
"_reinforcementCount"
])
exitWith
{
@ -354,7 +354,7 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_AICount", 0, [0]]
"_AICount"
])
exitWith
{
@ -396,7 +396,7 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_vehicle", objNull, [objNull]]
"_vehicle"
])
exitWith
{
@ -442,8 +442,8 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_staticGun", objNull, [objNull]],
["_gunPos", [], [[]], [2,3]]
"_staticGun",
"_gunPos"
])
exitWith
{
@ -488,10 +488,10 @@ if (!_reinforcementsDepleted && {(diag_tickTime-_lastUpdated)>_updateDelay}) the
{
if !(_monitorParams params
[
["_AICount",0,[0]],
["_ejectFFVGunners",false,[false]],
["_maxJumpers",0,[0]],
["_remainAsGunship", 0, [false]]
"_AICount",
"_ejectFFVGunners",
"_maxJumpers",
"_remainAsGunship"
])
exitWith
{

View File

@ -46,9 +46,9 @@
{
if !(_x params
[
["_heli", objNull, [objNull]],
["_dropPoint", 0, [[], objNull], [2,3]],
["_remainAsGunship", false, [false]]
"_heli",
"_dropPoint",
"_remainAsGunship"
])
exitWith
{

View File

@ -13,8 +13,8 @@
if !(params
[
["_position",[],[[]],[2,3]],
["_radius",0,[0]]
"_position",
"_radius"
])
exitWith
{

View File

@ -13,8 +13,8 @@
if !(params
[
["_pos", "", [objNull,[]], [2,3]],
["_dis", 0, [0]]
"_pos",
"_dis"
])
exitWith
{

View File

@ -0,0 +1,85 @@
/*
DMS_fnc_IsPosBlacklisted
Created by eraser1
Usage:
[
_pos,
[
_blacklist1,
_blacklist2,
...
_blacklistN
]
] call DMS_fnc_IsPosBlacklisted;
A blacklist can be in the form:
[[x1,y1],[x2,y2]]
where x1 is LESS than x2, and y1 is LESS than y2
or,
[[x,y],radius]
where any position within "radius" meters of position "x,y" is blacklisted.
Returns true if the given position is blacklisted.
*/
if !(params
[
"_pos",
"_blacklists"
]) exitWith
{
diag_log format ["DMS ERROR :: Calling DMS_fnc_IsPosBlacklisted with invalid parameters: %1",_this];
};
try
{
{
_x params
[
"_blacklist_pos",
"_blacklist_parameter"
];
if (_blacklist_parameter isEqualType 0) then
{
if ((_pos distance2D _blacklist_pos) <= _blacklist_parameter) throw _x;
}
else
{
_pos params
[
"_pos_x",
"_pos_y"
];
_blacklist_pos params
[
"_minX",
"_minY"
];
_blacklist_parameter params
[
"_maxX",
"_maxY"
];
if ((_pos_x >= _minX) && {_pos_x <= _maxX} && {_pos_y >= _minY} && {_pos_y <= _maxY}) throw _x;
};
} forEach _blacklists;
false
}
catch
{
if (DMS_DEBUG) then
{
format["Position |%1| is blacklisted by blacklist parameter |%2|. All provided blacklists: %3",_pos,_exception,_blacklists] call DMS_fnc_DebugLog;
};
true
};

View File

@ -20,14 +20,14 @@
if !(params
[
["_pos", [], [[]], [0,2,3]],
["_waterNearLimit", DMS_WaterNearBlacklist, [0] ],
["_minSurfaceNormal", DMS_MinSurfaceNormal, [0] ],
["_spawnZoneNearLimit", DMS_SpawnZoneNearBlacklist, [0] ],
["_traderZoneNearLimit", DMS_TraderZoneNearBlacklist,[0] ],
["_missionNearLimit", DMS_MissionNearBlacklist, [0] ],
["_playerNearLimit", DMS_PlayerNearBlacklist, [0] ],
["_territoryNearLimit", DMS_TerritoryNearBlacklist, [0] ]
"_pos",
"_waterNearLimit",
"_minSurfaceNormal",
"_spawnZoneNearLimit",
"_traderZoneNearLimit",
"_missionNearLimit",
"_playerNearLimit",
"_territoryNearLimit"
])
then
{
@ -51,7 +51,7 @@ else
};
if (!(DMS_findSafePosBlacklist isEqualTo []) && {([_pos, DMS_findSafePosBlacklist] call BIS_fnc_isPosBlacklisted)}) then
if (!(DMS_findSafePosBlacklist isEqualTo []) && {([_pos, DMS_findSafePosBlacklist] call DMS_fnc_IsPosBlacklisted)}) then
{
throw ("a blacklisted position");
};

View File

@ -26,8 +26,8 @@ private _exit = false;
{
if !(_x params
[
["_completionType", "", [""] ],
["_completionArgs", [], [[],grpNull] ]
"_completionType",
"_completionArgs"
])
then
{

View File

@ -18,11 +18,11 @@
if !(params
[
["_playerObj", objNull, [objNull] ],
["_unit", objNull, [objNull] ],
["_AISide", "", [""] ],
["_AIType", "", [""] ],
["_roadKilled", false, [false] ]
"_playerObj",
"_unit",
"_AISide",
"_AIType",
"_roadKilled"
])
exitWith
{

View File

@ -11,15 +11,15 @@
Returns a new position offset from the provided position with the provided distance and direction. Position provided is at ground level in AGL
This function has been deprecated by the new functionality of the "getPos" command (https://community.bistudio.com/wiki/getPos). This function has been updated for efficiency and compatibility.
This function has been deprecated by the new functionality of the "getPos" command (https://community.bistudio.com/wiki/getPos). This function has been updated for efficiency and retained for compatibility.
*/
if !(params
[
["_origin","",[objNull,[]],[2,3]],
["_dis",0,[0]],
["_dir",0,[0]]
"_origin",
"_dis",
"_dir"
])
exitWith
{

View File

@ -14,8 +14,8 @@
if !(params
[
["_min",0,[0]],
["_max",0,[0]]
"_min",
"_max"
])
exitWith
{

View File

@ -15,9 +15,9 @@
if !(params
[
["_group",grpNull,[grpNull,objNull]],
["_pos",[0,0,0],[[]],[2,3]],
["_difficulty","moderate",[""]]
"_group",
"_pos",
"_difficulty"
])
then
{

View File

@ -24,10 +24,10 @@
if !(params
[
["_units",[],[[]]],
["_finalGroup",grpNull,[grpNull]],
["_pos",[0,0,0],[[]],[2,3]],
["_difficulty","moderate",[""]]
"_units",
"_finalGroup",
"_pos",
"_difficulty"
])
then
{

View File

@ -18,8 +18,8 @@
if !(params
[
["_objects", [], [[]]],
["_newCPos", [], [[]],[3]]
"_objects",
"_newCPos"
])
exitWith
{

View File

@ -18,11 +18,11 @@
if !(params
[
["_pos","_pos ERROR",[[]],[3]],
["_count","_count ERROR",[0]],
["_difficulty","_difficulty ERROR",[""]],
["_class","_class ERROR",[""]],
["_side","_side ERROR",[""]]
"_pos",
"_count",
"_difficulty",
"_class",
"_side"
])
exitWith
{

View File

@ -25,11 +25,11 @@
if !(params
[
["_positions","_positions ERROR",[[]]],
["_count","_count ERROR",[0]],
["_difficulty","_difficulty ERROR",[""]],
["_class","_class ERROR",[""]],
["_side","_side ERROR",[""]]
"_positions",
"_count",
"_difficulty",
"_class",
"_side"
])
exitWith
{

View File

@ -37,12 +37,12 @@ private _unarmed = false;
if !(params
[
["_group",grpNull,[grpNull]],
["_pos",[0,0,0],[[]],[3]],
["_class","random",[""]],
["_difficulty","random",[""]],
["_side","bandit",[""]],
["_type","soldier",[""]]
"_group",
"_pos",
"_class",
"_difficulty",
"_side",
"_type"
])
then
{

View File

@ -23,11 +23,11 @@
if !(params
[
["_positions",[],[[]]],
["_group",grpNull,[grpNull]],
["_class","random",[""]],
["_difficulty","static",[""]],
["_side","bandit",[""]]
"_positions",
"_group",
"_class",
"_difficulty",
"_side"
])
exitWith
{

View File

@ -20,11 +20,11 @@
if !(params
[
["_positions",[],[[]],[1,2]],
["_group",grpNull,[grpNull]],
["_class","random",[""]],
["_difficulty","static",[""]],
["_side","bandit",[""]]
"_positions",
"_group",
"_class",
"_difficulty",
"_side"
])
exitWith
{
@ -32,15 +32,7 @@ exitWith
};
// Using another params-exitwith structure just for _spawnPos because it's pretty important...
if !(_positions params
[
["_spawnPos",[],[[]],[2,3]]
])
exitWith
{
diag_log format ["DMS ERROR :: Calling DMS_fnc_SpawnAIVehicle with invalid _positions parameters: %1",_positions];
};
_spawnPos = _positions select 0;
private _vehClass =
if ((count _this)>5) then

View File

@ -14,8 +14,8 @@
if !(params
[
["_crateClassName","_crateClassName ERROR",[""]],
["_pos","_pos ERROR",[[]],[3]]
"_crateClassName",
"_pos"
])
exitWith
{

View File

@ -23,14 +23,14 @@
if !(params
[
["_AIGroup", 0, [grpNull]],
["_class", 0, [""]],
["_difficulty", 0, [""]],
["_side", 0, [""]],
["_dropPoint", 0, [[],objNull], [2,3]],
["_ejectFFVGunners", 0, [false]],
["_maxJumpers",0,[0]],
["_remainAsGunship", 0, [false]]
"_AIGroup",
"_class",
"_difficulty",
"_side",
"_dropPoint",
"_ejectFFVGunners",
"_maxJumpers",
"_remainAsGunship"
])
exitWith
{

View File

@ -18,9 +18,9 @@ if (DMS_SpawnMinesAroundMissions) then
{
if !(params
[
["_centerPos","",[[]],[2,3]],
["_difficulty","",["",[]],[2]],
["_side","",[""]]
"_centerPos",
"_difficulty",
"_side"
])
exitWith
{

View File

@ -28,8 +28,8 @@
if !(params
[
["_vehicleClass","",[""]],
["_position","",[[]],[2,3]]
"_vehicleClass",
"_position"
])
exitWith
{

View File

@ -19,9 +19,9 @@ try
{
if !(params
[
["_vehicleClass","",[""]],
["_pos",[],[[]],[2,3]],
["_pinCode","",[0,""]]
"_vehicleClass",
"_pos",
"_pinCode"
])
then
{

View File

@ -22,8 +22,8 @@
if !(params
[
["_a1", [], [[]]],
["_a2", [], [[]]]
"_a1",
"_a2"
])
exitWith
{

View File

@ -94,9 +94,9 @@ If you are using Vilayer or some other GameServer hosting service, and/or the ab
**DMS does not currently support headless client. Do not attempt to use HC with DMS unless you know what you are doing.**
## Troubleshooting:
DMS won't spawn missions? Check RPT for config errors or make sure PBO is packed correctly by unpacking it and ensuring the folder structure is "\x\addons\a3_DMS\...".
If you're having any issues with DMS, check your RPT for errors and make sure PBO is packed correctly by unpacking it and ensuring the folder structure is "\x\addons\a3_DMS\...".
If you can't figure it out, leave a post on [the DMS thread on exile forums](http://www.exilemod.com/topic/61-dms-defents-mission-system/?do=findComment&comment=242). **Make sure to include your RPT, config.sqf, as well as any changed files.**
If you can't figure it out, leave a post on [the DMS thread on exile forums](http://www.exilemod.com/topic/61-dms-defents-mission-system/?do=findComment&comment=242). **Make sure to include your RPT, config.sqf, as well as any changed files. Please use [pastebin](http://pastebin.com/), spoilers, or something similar; DO NOT PASTE EVERYTHING DIRECTLY INTO THE POST (without putting it in a spoiler)**
___
@ -104,6 +104,7 @@ ___
### 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/).
### Thanks:
@ -122,7 +123,6 @@ ___
- [Valthos from The Altis Project](https://www.thealtisproject.co.uk/)
- [Flowrider from Optimum Gaming](http://www.optimum-multigaming.com/)
- [CEN from ATD Gaming](http://atdgaming.com/)
- [second coming from ExileYorkshire](http://exileyorkshire.co.uk/)
___
@ -150,6 +150,15 @@ ___
# Changelog:
### Test Branch:
#### June 6, 2016 (10:45 PM CST-America) **Release Candidate 1**:
* New function: DMS_fnc_IsPosBlacklisted (optimized replacement for "BIS_fnc_IsPosBlacklisted")
* Config value "DMS_findSafePosBlacklist" now supports the ability to blacklist within a certain distance of a given position.
* "DMS_CLIENT" functions are now compiled in pre-init (broadcasting is still done in post-init).
* Notifications from "textTilesRequest" and "dynamicTextRequest" should no longer "stack" on each other; if two missions spawn right after another, the second mission notification will be delayed at least until the first one completes.
* More Micro-optimizations on most functions; parameters passed to DMS functions will no longer be checked to see if they are the right type, etc. It was determined that they didn't really provide any benefit, as most errors either don't trigger the "params" error, or the error is simply reiterated elsewhere.
* "DMS_fnc_FindSuppressor" has been overhauled; it simply checks the configs for the provided weapon classname to return a random muzzle/suppressor classname. Consequently, the function is smaller, faster, and perfectly compatible with any weapon.
* The "freeze manager" will now unfreeze AI if needed regardless of setting "DMS_ai_allowFreezing" to false.
#### May 22, 2016 (3:15 PM CST-America):
* **NEW CONFIG VALUES:**
DMS_ai_freezeOnSpawn