mirror of
https://github.com/Defent/DMS_Exile.git
synced 2024-08-30 16:52:12 +00:00
Release Candidate!
This commit is contained in:
parent
c4a9b3f1b2
commit
e0dc8c874d
@ -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 {};
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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";
|
||||
|
@ -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");
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_pos","",[[],objNull],[2,3]],
|
||||
["_relPos","",[[]],[2,3]]
|
||||
"_pos",
|
||||
"_relPos"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -27,9 +27,9 @@
|
||||
|
||||
if !(_x params
|
||||
[
|
||||
["_objs",[objNull],[objNull,[],grpNull]],
|
||||
["_timeAddedToList",diag_tickTime,[0]],
|
||||
["_timeUntilClean",DMS_CompletedMissionCleanupTime,[0]]
|
||||
"_objs",
|
||||
"_timeAddedToList",
|
||||
"_timeUntilClean"
|
||||
])
|
||||
then
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_centerPos", 0, [[]], [2,3]],
|
||||
["_distanceMin", 0, [0]],
|
||||
["_distanceMax", 0, [0]],
|
||||
["_posParameters", 0, [[]]]
|
||||
"_centerPos",
|
||||
"_distanceMin",
|
||||
"_distanceMax",
|
||||
"_posParameters"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -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)
|
||||
};
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -46,9 +46,9 @@
|
||||
{
|
||||
if !(_x params
|
||||
[
|
||||
["_heli", objNull, [objNull]],
|
||||
["_dropPoint", 0, [[], objNull], [2,3]],
|
||||
["_remainAsGunship", false, [false]]
|
||||
"_heli",
|
||||
"_dropPoint",
|
||||
"_remainAsGunship"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_position",[],[[]],[2,3]],
|
||||
["_radius",0,[0]]
|
||||
"_position",
|
||||
"_radius"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_pos", "", [objNull,[]], [2,3]],
|
||||
["_dis", 0, [0]]
|
||||
"_pos",
|
||||
"_dis"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
85
@ExileServer/addons/a3_dms/scripts/fn_IsPosBlacklisted.sqf
Normal file
85
@ExileServer/addons/a3_dms/scripts/fn_IsPosBlacklisted.sqf
Normal 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
|
||||
};
|
@ -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");
|
||||
};
|
||||
|
@ -26,8 +26,8 @@ private _exit = false;
|
||||
{
|
||||
if !(_x params
|
||||
[
|
||||
["_completionType", "", [""] ],
|
||||
["_completionArgs", [], [[],grpNull] ]
|
||||
"_completionType",
|
||||
"_completionArgs"
|
||||
])
|
||||
then
|
||||
{
|
||||
|
@ -18,11 +18,11 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_playerObj", objNull, [objNull] ],
|
||||
["_unit", objNull, [objNull] ],
|
||||
["_AISide", "", [""] ],
|
||||
["_AIType", "", [""] ],
|
||||
["_roadKilled", false, [false] ]
|
||||
"_playerObj",
|
||||
"_unit",
|
||||
"_AISide",
|
||||
"_AIType",
|
||||
"_roadKilled"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -14,8 +14,8 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_min",0,[0]],
|
||||
["_max",0,[0]]
|
||||
"_min",
|
||||
"_max"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_group",grpNull,[grpNull,objNull]],
|
||||
["_pos",[0,0,0],[[]],[2,3]],
|
||||
["_difficulty","moderate",[""]]
|
||||
"_group",
|
||||
"_pos",
|
||||
"_difficulty"
|
||||
])
|
||||
then
|
||||
{
|
||||
|
@ -24,10 +24,10 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_units",[],[[]]],
|
||||
["_finalGroup",grpNull,[grpNull]],
|
||||
["_pos",[0,0,0],[[]],[2,3]],
|
||||
["_difficulty","moderate",[""]]
|
||||
"_units",
|
||||
"_finalGroup",
|
||||
"_pos",
|
||||
"_difficulty"
|
||||
])
|
||||
then
|
||||
{
|
||||
|
@ -18,8 +18,8 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_objects", [], [[]]],
|
||||
["_newCPos", [], [[]],[3]]
|
||||
"_objects",
|
||||
"_newCPos"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -23,11 +23,11 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_positions",[],[[]]],
|
||||
["_group",grpNull,[grpNull]],
|
||||
["_class","random",[""]],
|
||||
["_difficulty","static",[""]],
|
||||
["_side","bandit",[""]]
|
||||
"_positions",
|
||||
"_group",
|
||||
"_class",
|
||||
"_difficulty",
|
||||
"_side"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -14,8 +14,8 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_crateClassName","_crateClassName ERROR",[""]],
|
||||
["_pos","_pos ERROR",[[]],[3]]
|
||||
"_crateClassName",
|
||||
"_pos"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -18,9 +18,9 @@ if (DMS_SpawnMinesAroundMissions) then
|
||||
{
|
||||
if !(params
|
||||
[
|
||||
["_centerPos","",[[]],[2,3]],
|
||||
["_difficulty","",["",[]],[2]],
|
||||
["_side","",[""]]
|
||||
"_centerPos",
|
||||
"_difficulty",
|
||||
"_side"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -28,8 +28,8 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_vehicleClass","",[""]],
|
||||
["_position","",[[]],[2,3]]
|
||||
"_vehicleClass",
|
||||
"_position"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
@ -19,9 +19,9 @@ try
|
||||
{
|
||||
if !(params
|
||||
[
|
||||
["_vehicleClass","",[""]],
|
||||
["_pos",[],[[]],[2,3]],
|
||||
["_pinCode","",[0,""]]
|
||||
"_vehicleClass",
|
||||
"_pos",
|
||||
"_pinCode"
|
||||
])
|
||||
then
|
||||
{
|
||||
|
@ -22,8 +22,8 @@
|
||||
|
||||
if !(params
|
||||
[
|
||||
["_a1", [], [[]]],
|
||||
["_a2", [], [[]]]
|
||||
"_a1",
|
||||
"_a2"
|
||||
])
|
||||
exitWith
|
||||
{
|
||||
|
15
README.md
15
README.md
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user