From 8d06b9e851020e9251f38463d4b224ed08b076e2 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 21 Oct 2018 07:56:34 -0400 Subject: [PATCH] Updated for Build 155 --- .../Compiles/Functions/GMS_fnc_mainThread.sqf | 3 +- .../Functions/GMS_fnc_nearestPlayers.sqf | 10 ++-- .../Groups/GMS_fnc_create_AI_Group.sqf | 8 ++- .../Groups/GMS_fnc_missionGroupMonitor.sqf | 27 ++++----- .../GMS_fnc_garrisonBuilding_ATLsystem.sqf | 12 ++-- .../Missions/GMS_fnc_missionSpawner.sqf | 18 +++--- .../Compiles/Units/GMS_fnc_processAIHit.sqf | 5 +- .../Compiles/Units/GMS_fnc_processAIKill.sqf | 6 +- .../Vehicles/GMS_fnc_revealNearbyPlayers.sqf | 52 ++++++++++++++++ .../GMS_fnc_scanForPlayersNearVehicles.sqf | 9 +++ .../Vehicles/GMS_fnc_spawnBoatPatrol.sqf | 2 + .../Vehicles/GMS_fnc_spawnMissionHeli.sqf | 4 +- .../Vehicles/GMS_fnc_spawnSubPatrol.sqf | 2 + .../Vehicles/GMS_fnc_spawnVehiclePatrol.sqf | 3 + .../custom_server/Compiles/blck_functions.sqf | 4 +- .../custom_server/Compiles/blck_variables.sqf | 29 +++++---- .../custom_server/Configs/blck_configs.sqf | 30 ++++++++-- .../Configs/blck_configs_epoch.sqf | 59 ++++++++++++------- .../Configs/blck_configs_exile.sqf | 24 +++++--- .../Configs/blck_configs_exile_mil.sqf | 16 ++++- .../Configs/blck_configs_mil.sqf | 3 +- .../custom_server/Configs/blck_defines.hpp | 28 +++++++-- .../Configs/blck_dynamicConfigs.sqf | 2 +- .../custom_server/Missions/Blue/default.sqf | 2 +- .../custom_server/init/blck_init_HC.sqf | 17 +++--- .../custom_server/init/blck_init_server.sqf | 44 +++++++++----- @GMS/addons/custom_server/init/build.sqf | 4 +- .../pullDynamicMission.sqf | 15 +++-- changeLog.sqf | 43 +++++++++----- 29 files changed, 333 insertions(+), 148 deletions(-) create mode 100644 @GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_revealNearbyPlayers.sqf create mode 100644 @GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_scanForPlayersNearVehicles.sqf diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf index 5bd9a25..3f54f6d 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf @@ -41,7 +41,7 @@ while {true} do _timer5sec = diag_tickTime + 5; [] call blck_fnc_missionGroupMonitor; [] call blck_fnc_sm_missionPatrolMonitor; - //[] call blck_fnc_vehiclePatrolPlayerSensor; + //diag_log format["[blckeagls] _fnc_mainThread 5 Second Timer Handled | Timstamp %1",diag_tickTime]; }; if (diag_tickTime > _timer20sec) then @@ -49,6 +49,7 @@ while {true} do [] call blck_fnc_cleanupAliveAI; [] call blck_fnc_cleanupObjects; [] call blck_fnc_cleanupDeadAI; + [] call blck_fnc_scanForPlayersNearVehicles; //[] call blck_fnc_cleanEmptyGroups; _timer20sec = diag_tickTime + 20; //diag_log format["[blckeagls] _fnc_mainThread 20 Second Timer Handled | Timstamp %1",diag_tickTime]; diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_nearestPlayers.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_nearestPlayers.sqf index a4bc55e..363fa50 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_nearestPlayers.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_nearestPlayers.sqf @@ -1,10 +1,8 @@ - -params["_coords","range"]; +//diag_log format["_fnc_nearestPlayers: _this = %1",_this]; +params["_coords","_range"]; private["_return","_playerClassNames","_epochClasses","_exileClasses"]; -_epochClasses = ["Epoch_Female_F","Epoch_Male_F"]; -_exileClasses = ["Exile_Unit_Player"]; -if (blck_modType isEqualTo "Epoch") then {_playerClassNames = _epochClasses}; -if (blck_modType isEqualTo "Exile") then {_playerClassNames = _exileClasses}; +if (blck_modType isEqualTo "Epoch") then {_playerClassNames = ["Epoch_Female_F","Epoch_Male_F"]}; +if (blck_modType isEqualTo "Exile") then {_playerClassNames = ["Exile_Unit_Player"]}; _return = nearestObjects[_coords,_playerClassNames,_range]; _return \ No newline at end of file diff --git a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_create_AI_Group.sqf b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_create_AI_Group.sqf index ceeb554..ac7b3d4 100644 --- a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_create_AI_Group.sqf +++ b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_create_AI_Group.sqf @@ -16,9 +16,11 @@ private["_groupSpawned"]; _groupSpawned = createGroup [blck_AI_Side, true]; //_groupSpawned setVariable["groupVehicle",objNull]; -#ifdef useDynamicSimulation -_groupSpawned enableDynamicSimulation true; -#endif +if (blck_simulationManager == blck_useDynamicSimulationManagement) then +{ + _groupSpawned enableDynamicSimulation true; +}; + _groupSpawned setcombatmode "RED"; _groupSpawned setBehaviour "COMBAT"; _groupSpawned allowfleeing 0; diff --git a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf index 828a3a5..d5f7ecc 100644 --- a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf +++ b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf @@ -164,28 +164,22 @@ _fn_simulationMonitor = { }else{ _playerType = ["Epoch_Male_F","Epoch_Female_F"]; }; - //diag_log format["_fn_simulationMonitor:: _playerType = %1",_playerType]; { - // player nearEntities [["Car", "Motorcycle", "Tank"], 50]; - _players = (leader _x) nearEntities [_playerType, 1800]; + _players = (leader _x) nearEntities [_playerType, blck_simulationEnabledDistance]; if (count _players > 0) then { - // Be sure simulation is on for all units in the group - if !(_x getVariable["blck_simulationStatus",false]) then + if !(simulationEnabled _x) then { - _x setVariable["blck_simulationStatus",true]; - { - _x enableSimulationGlobal true; - }forEach (units _x); + { + _x enableSimulationGlobal true; + (_players select 0) reveal _x; // Force simulation on + }forEach (units _x); }; }else{ // Be sure simulation is off for all units in the group. - if !(_x getVariable["blck_simulationStatus",true]) then + if (simulationEnabled _x) then { - _x setVariable["blck_simulationStatus",false]; - { - _x enableSimulationGlobal false; - }forEach (units _x); + {_x enableSimulationGlobal false}forEach (units _x); }; }; } forEach blck_monitoredMissionAIGroups; @@ -200,6 +194,5 @@ if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: execut uiSleep 0.1; [] call _fn_monitorGroupWaypoints; -#ifndef useDynamicSimulation -[] call _fn_simulationMonitor; -#endif +if (blck_simulationManager == blck_useBlckeaglsSimulationManagement) then {[] call _fn_simulationMonitor}; + diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_ATLsystem.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_ATLsystem.sqf index 5e4c184..bf8f77c 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_ATLsystem.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_ATLsystem.sqf @@ -41,9 +41,9 @@ _staticsSpawned = []; _group = call blck_fnc_create_AI_Group; { _g = _x; - { - diag_log format["_g %1 = %2",_forEachIndex,_g select _forEachIndex]; - }forEach _g; + //{ + //diag_log format["_g %1 = %2",_forEachIndex,_g select _forEachIndex]; + //}forEach _g; // ["Land_Unfinished_Building_02_F",[-28.3966,34.8145,-0.00268841],0,true,true,[["B_HMG_01_high_F",[-5.76953,1.16504,7.21168],360]],[]], _x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_statics","_men"]; //diag_log format["_bldClassName = %1 | _bldRelPos = %2 | _bldDir = %3",_bldClassName,_bldRelPos,_bldDir]; @@ -53,8 +53,8 @@ _group = call blck_fnc_create_AI_Group; _buildingsSpawned pushBack _building; _staticsSpawned = [_building,_group,_statics,_men,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_ATL; }forEach _garrisonedBuilding_ATLsystem; -{ - diag_log format["__fnc_garrisonBuilding_ATLsystem: %2 = %1",_x select 1, _x select 0]; -}forEach [ [_buildingsSpawned,"Buildings"],[_staticsSpawned,"Statics"]]; +//{ + //diag_log format["__fnc_garrisonBuilding_ATLsystem: %2 = %1",_x select 1, _x select 0]; +//}forEach [ [_buildingsSpawned,"Buildings"],[_staticsSpawned,"Statics"]]; _return = [_group,_buildingsSpawned,_staticsSpawned]; _return diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf index 2e53b64..bdf2de6 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf @@ -64,6 +64,7 @@ _blck_AllMissionAI = []; _AI_Vehicles = []; _blck_localMissionMarker = [_markerClass,_coords,"","",_markerColor,_markerType]; #define delayTime 1 +#define useRelativePos true #ifdef blck_debugMode diag_log "_missionSpawner: All variables initialized"; @@ -174,14 +175,6 @@ if (blck_debugLevel > 0) then }; #endif -uiSleep delayTime;; - -if (count _missionLootVehicles > 0) then -{ - _temp = [_coords,_missionLootVehicles,_loadCratesTiming] call blck_fnc_spawnMissionLootVehicles; - _crates append _temp; -}; - uiSleep delayTime; _abort = false; @@ -364,7 +357,6 @@ if (_abort) exitWith _vehToSpawn = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; if (blck_useVehiclePatrols && ((_vehToSpawn > 0) || count _missionPatrolVehicles > 0)) then { - #define useRelativePos true _temp = [_coords,_vehToSpawn,_aiDifficultyLevel,_missionPatrolVehicles,useRelativePos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionVehiclePatrols; if (typeName _temp isEqualTo "ARRAY") then @@ -395,6 +387,13 @@ if (_spawnCratesTiming isEqualTo "atMissionSpawnGround") then _objects append _crates; }; }; +uiSleep delayTime;; + +if (count _missionLootVehicles > 0) then +{ + _temp = [_coords,_missionLootVehicles,_loadCratesTiming] call blck_fnc_spawnMissionLootVehicles; + _crates append _temp; +}; if (_noPara > 0 && (random(1) < _chancePara) && _paraTriggerDistance == 0) then { diag_log format["_fnc_missionSpawner (436): spawning %1 paraunits at mission spawn",_noPara]; @@ -459,6 +458,7 @@ while {_missionComplete isEqualTo -1} do #ifdef blck_debugMode if (blck_debugLevel > 2) exitWith {uiSleep blck_triggerLoopCompleteTime;diag_log "_missionSpawner (492) scripted Mission End blck_debugLevel = 3";}; #endif + if (_endIfPlayerNear) then { if ([_locations,20,true] call blck_fnc_playerInRangeArray) then {_missionComplete = 1}; diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIHit.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIHit.sqf index 924029b..254ecb6 100644 --- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIHit.sqf +++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIHit.sqf @@ -16,7 +16,7 @@ private ["_unit","_instigator","_group","_wp"]; _unit = _this select 0 select 0; _instigator = _this select 0 select 3; - + diag_log format["EH_AIHit:: _units = %1 and _instigator = %2 units damage is %3",_unit,_instigator, damage _unit]; #ifdef blck_debugMode if (blck_debugLevel >= 2) then { @@ -47,8 +47,11 @@ if ((damage _unit) > 0.1 ) then diag_log format["_EH_AIHit::-->> Healing unit %1",_unit]; }; _unit setVariable["hasHealed",true,true]; + /* _unit addMagazine "SmokeShellOrange"; _unit fire "SmokeShellMuzzle"; + */ + "SmokeShellRed" createVehicle ((position _unit) getPos[3,_unit getRelDir _instigator]; _unit addItem "FAK"; _unit action ["HealSoldierSelf", _unit]; _unit setDamage 0; diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf index 3d2eada..1f6cdbc 100644 --- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf +++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf @@ -25,10 +25,8 @@ _unit setVariable ["blck_cleanupAt", (diag_tickTime) + blck_bodyCleanUpTimer, tr blck_deadAI pushback _unit; _group = group _unit; [_unit] joinSilent grpNull; -if (count(units _group) < 1) then { - #ifdef useDynamicSimulation - _group enableDynamicSimulation false; - #endif +if (count(units _group) < 1) then +{ deleteGroup _group; }; if (blck_launcherCleanup) then {[_unit] spawn blck_fnc_removeLaunchers;}; diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_revealNearbyPlayers.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_revealNearbyPlayers.sqf new file mode 100644 index 0000000..84da46c --- /dev/null +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_revealNearbyPlayers.sqf @@ -0,0 +1,52 @@ + +/* + algorhytm one: pure chance base on inverse of distance. More efficient. + algorhythm two: based on canSee. More detailed. +*/ + +params["_vehicle","_searchRadius","_detectionOdds"]; +private["_player","_detectionOdds","_nearbyPlayers","_knowsAbout","_cansee","_knowledgeGained"]; +_nearbyPlayers = [position _vehicle, _vehicle getVariable["blck_vehicleSearchRange",500]] call blck_fnc_nearestPlayers; + +if (blck_revealMode isEqualTo "detailed") then +{ + private["_crew","_group"]; + _crew = crew _vehicle; + _group = group(_crew select 0); + { + if (random(1) < _detectionOdds) then + { + _player = _x; + { + _cansee = [objNull, "VIEW"] checkVisibility [eyePos _x, position _player]; + if (_cansee > 0) then + { + _knowledgeGained = _cansee; + } else { + _knowledgeGained = _x knowsAbout _player; + if (_knowledgeGained == 0) then {_knowledgeGained = 0.1}; + }; + _x reveal[_player,_knowledgeGained]; + //diag_log format["_fnc_revealNearbyPlayers: player %1 revealed to unit %2",_player,_x]; + }forEach _crew; + }; + }forEach _nearbyPlayers; +}; + +if (blck_revealMode isEqualTo "basic") then +{ + { + _player = _x; + if (random(1) < _detectionOdds) then + { + _knowsAbout = (_vehicle) knowsAbout _player; + if (_knowsAbout > 0) then + { + _knowledgeGained = _knowsAbout; + } else { + _knowledgeGained = (_searchRadius - (_x distance _vehicle))/_searchRadius; + }; + _x reveal[_player, _knowledgeGained]; + }; + }forEach _nearbyPlayers; +}; \ No newline at end of file diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_scanForPlayersNearVehicles.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_scanForPlayersNearVehicles.sqf new file mode 100644 index 0000000..c3a52bf --- /dev/null +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_scanForPlayersNearVehicles.sqf @@ -0,0 +1,9 @@ +// GMS_fnc_vehiclePlayerSensingLogic.sqf + +// No params +private["_searchRadius","_detectionOdds"]; +{ + _searchRadius = _x getVariable["blck_vehicleSearchRadius",800]; + _detectionOdds = _x getVariable["blck_vehiclePlayerDetectionOdds",0.5]; + [_x,_searchRadius,_detectionOdds] call blck_fnc_revealNearbyPlayers; +}forEach blck_monitoredVehicles; \ No newline at end of file diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnBoatPatrol.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnBoatPatrol.sqf index e1d800c..58b941e 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnBoatPatrol.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnBoatPatrol.sqf @@ -21,6 +21,8 @@ if (blck_debugLevel > 1) then {diag_log format["spawnVehicle.sqf: _vehType = %1 _veh = createVehicle[_vehType, _pos, [], 0, "NONE"]; _veh setVariable["blck_vehicle",true]; +_veh setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeSurfaceVehicle]; +_veh setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds]; [_veh] call blck_fnc_protectVehicle; #ifdef blck_debugMode diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionHeli.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionHeli.sqf index 4056a8e..b2fa2d5 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionHeli.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionHeli.sqf @@ -72,7 +72,9 @@ if !(isNull _grpPilot) then #endif _patrolHeli = createVehicle [_chopperType, _coords, [], 90, "FLY"]; - //_grpPilot setVariable["groupVehicle",_patrolHeli]; + _patrolHeli setVariable["blck_vehicle",true]; + _patrolHeli setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeAir]; + _patrolHeli setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds]; [_patrolHeli] call blck_fnc_protectVehicle; _patrolHeli setFuel 1; _patrolHeli engineOn true; diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnSubPatrol.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnSubPatrol.sqf index e1d800c..cf2359b 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnSubPatrol.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnSubPatrol.sqf @@ -22,6 +22,8 @@ if (blck_debugLevel > 1) then {diag_log format["spawnVehicle.sqf: _vehType = %1 _veh = createVehicle[_vehType, _pos, [], 0, "NONE"]; _veh setVariable["blck_vehicle",true]; [_veh] call blck_fnc_protectVehicle; +_veh setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeSubs]; +_veh setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds]; #ifdef blck_debugMode if (blck_debugLevel > 1) then {diag_log format["spawnVehicle.sqf:: vehicle spawned is %1",_veh];}; diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf index 41ffed2..aa3219d 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf @@ -40,6 +40,9 @@ if !(isNull _group) then _veh = [_vehType,_pos] call blck_fnc_spawnVehicle; // _veh addEventHandler["HandleDamage",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIVehicle_HandleDamage}]; _veh addMPEventHandler["MPHit",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIVehicle_HandleHit}]; + _veh setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeGroundVehicle]; + _veh setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds]; + //_group setVariable["groupVehicle",_veh]; #ifdef blck_debugMode if (blck_debugLevel > 1) then diff --git a/@GMS/addons/custom_server/Compiles/blck_functions.sqf b/@GMS/addons/custom_server/Compiles/blck_functions.sqf index b364ad9..eeadfbe 100644 --- a/@GMS/addons/custom_server/Compiles/blck_functions.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_functions.sqf @@ -41,7 +41,7 @@ blck_fnc_spawnMissionLootBoxesRelative = compileFinal preprocessFileLineNumbers blck_fnc_spawnSingleObject = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnSingleObject.sqf"; blck_fnc_emptyObjectInventory = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_emptyObjectInventory.sqf"; blck_fnc_spawnMissionLandscapeRelative = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionLandscapeRelative.sqf"; - +blck_fnc_nearestPlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_nearestPlayers.sqf"; //blck_fnc_getTraderCitiesEpoch = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitiesEpoch.sqf"; //blck_fnc_getTraderCitesExile = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesExile.sqf"; @@ -123,6 +123,8 @@ blck_fnc_releaseVehicleToPlayers = compileFinal preprocessFileLineNumbers "\q\ad blck_fnc_deleteAIVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_deleteAIVehicle.sqf"; blck_fnc_destroyVehicleAndCrew = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_destroyVehicleAndCrew.sqf"; blck_fnc_reloadVehicleAmmo = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_reloadVehicleAmmo.sqf"; +blck_fnc_scanForPlayersNearVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_scanForPlayersNearVehicles.sqf"; +blck_fnc_revealNearbyPlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_revealNearbyPlayers.sqf"; // functions to support Units blck_fnc_removeGear = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_removeGear.sqf"; // Strip an AI unit of all gear. diff --git a/@GMS/addons/custom_server/Compiles/blck_variables.sqf b/@GMS/addons/custom_server/Compiles/blck_variables.sqf index 62b529b..eb96142 100644 --- a/@GMS/addons/custom_server/Compiles/blck_variables.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_variables.sqf @@ -12,8 +12,10 @@ */ #include"\q\addons\custom_server\Configs\blck_defines.hpp"; -blck_debugON = true; -blck_debugLevel = 0; // Sets level of detail for debugging info - WIP. +diag_log "[blckeagls] loading variables"; + +// blck_debugON = false; Moved to blck_configs.sqf because of script loading order issues. +// blck_debugLevel = 0; Moved to blck_configs.sqf because of script loading order issues. blck_minFPS = 8; //////////////////////////////////////////////// @@ -22,7 +24,6 @@ blck_minFPS = 8; blck_townLocations = []; //nearestLocations [blck_mapCenter, ["NameCity","NameCityCapital"], 30000]; blck_ActiveMissionCoords = []; blck_recentMissionCoords = []; -blck_locationBlackList = []; blck_monitoredVehicles = []; blck_livemissionai = []; blck_monitoredMissionAIGroups = []; // Used to track groups in active missions for whatever purpose @@ -34,20 +35,26 @@ blck_activeMissions = []; blck_deadAI = []; blck_connectedHCs = []; blck_missionMarkers = []; -blck_groupsOnHC = []; -blck_vehiclesOnHC = []; +//blck_groupsOnHC = []; +//blck_vehiclesOnHC = []; //blck_HC_monitoredVehicles = []; //blck_HC_monitoredGroups = []; -#ifdef useDynamicSimulation -"Group" setDynamicSimulationDistance 1800; -enableDynamicSimulationSystem true; -#endif +if (blck_simulationManager == 2) then +{ + "Group" setDynamicSimulationDistance 1800; + enableDynamicSimulationSystem true; +}; blck_heliCrashSites = []; // radius within whih missions are triggered. The trigger causes the crate and AI to spawn. -blck_TriggerDistance = 1000; +#ifdef blck_milServer +blck_TriggerDistance = 1500; +#else +blck_TriggerDistance = 1500; +#endif + blck_mainThreadUpdateInterval = 60; -//blck_missionSpawning = false; +blck_revealMode = "detailed"; //""basic" /*group or vehicle level reveals*/,detailed /*unit by unit reveals*/"; diag_log "[blckeagls] Variables Loaded"; blck_variablesLoaded = true; diff --git a/@GMS/addons/custom_server/Configs/blck_configs.sqf b/@GMS/addons/custom_server/Configs/blck_configs.sqf index ffe225f..0abfbe1 100644 --- a/@GMS/addons/custom_server/Configs/blck_configs.sqf +++ b/@GMS/addons/custom_server/Configs/blck_configs.sqf @@ -13,12 +13,23 @@ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; + /* + changing any of these variables may break the mission systemChat + */ + blck_locationBlackList = []; // Do not touch ... + blck_debugON = false; // Do not touch ... + blck_debugLevel = 0; // Do not touch ... #ifdef blck_milServer execVM "\q\addons\custom_server\Configs\blck_configs_mil.sqf"; if (true) exitWith {}; #endif - diag_log "[blckeagls] Loading configurations for Non-militarized servers: blck_configs.sqf"; + //diag_log "[blckeagls] Loading configurations for Non-militarized servers: blck_configs.sqf"; + /* + ************************************** + Configurations begin here + ************************************** + */ /*************************************************************** BLCKEAGLS SUPPLEMENTAL MODULES **************************************************************** @@ -31,7 +42,14 @@ blck_spawnMapAddons = true; // When true map addons will be spawned based on parameters define in custum_server\MapAddons\MapAddons_init.sqf blck_spawnStaticLootCrates = true; // When true, static loot crates will be spawned and loaded with loot as specified in custom_server\SLS\SLS_init_Epoch.sqf (or its exile equivalent). - + blck_simulationManager = blck_useBlckeaglsSimulationManagement; + diag_log format["[blckeagls] blck_configs: blck_simulationManager = %1",blck_simulationManager]; + /* + blck_simulationManagementOff - no simulation management occurs + blck_useBlckeaglsSimulationManager - simulation is enabled/disabled by periodic checks for nearby players; a 'wake' function is included when a units simulation is turned on + blck_useDynamicSimulationManagement 2 - arma dynamic simulation is used + */ + // Note that you can define map-specific variants in custom_server\configs\blck_custom_config.sqf blck_useTimeAcceleration = false; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. blck_timeAccelerationDay = 0.25; // Daytime time accelearation @@ -87,7 +105,7 @@ blck_SmokeAtMissions = [false,"random"]; // set to [false,"anything here"] to disable this function altogether. blck_useSignalEnd = true; // When true a smoke grenade/chemlight will appear at the loot crate for 2 min after mission completion. blck_missionEndCondition = "allKilledOrPlayerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear" - blck_killPercentage = 0.9; // The mission will complete if this fraction of the total AI spawned has been killed. + blck_killPercentage = 0.999999; // The mission will complete if this fraction of the total AI spawned has been killed. // This facilitates mission completion when one or two AI are spawned into objects. blck_spawnCratesTiming = "atMissionSpawnGround"; // Choices: "atMissionSpawnGround","atMissionEndGround","atMissionEndAir". // Crates spawned in the air will be spawned at mission center or the position(s) defined in the mission file and dropped under a parachute. @@ -367,8 +385,8 @@ { diag_log format["[blckeagles] Dynamic Configs Enabled"]; execVM "\q\addons\custom_server\Configs\blck_dynamicConfigs.sqf"; - waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;}; - waitUntil{blck_dynamicConfigsLoaded}; - blck_dynamicConfigsLoaded = nil; + //waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;}; + //waitUntil{blck_dynamicConfigsLoaded}; + //blck_dynamicConfigsLoaded = nil; }; blck_configsLoaded = true; diff --git a/@GMS/addons/custom_server/Configs/blck_configs_epoch.sqf b/@GMS/addons/custom_server/Configs/blck_configs_epoch.sqf index b53b2e5..f04f016 100644 --- a/@GMS/addons/custom_server/Configs/blck_configs_epoch.sqf +++ b/@GMS/addons/custom_server/Configs/blck_configs_epoch.sqf @@ -538,7 +538,10 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR "ItemBloodBag_Empty", "ItemBloodBag_Full", "ItemAntibiotic", "nanite_cream_epoch", "nanite_pills_epoch"]; blck_specialItems = blck_throwableExplosives + blck_medicalItems; blck_NVG = ["NVG_EPOCH"]; - blck_epochValuables = ["PartOreGold","PartOreSilver","PartOre","ItemGoldBar","ItemGoldBar2oz","ItemGoldBar3oz","ItemGoldBar4oz","ItemGoldBar5oz","ItemGoldBar6oz","ItemGoldBar7oz","ItemGoldBar8oz","ItemGoldBar9oz","ItemGoldBar10oz","ItemSilverBar","ItemSilverBar2oz","ItemSilverBar3oz","ItemSilverBar4oz","ItemSilverBar5oz","ItemSilverBar6oz","ItemSilverBar7oz","ItemSilverBar8oz","ItemSilverBar9oz","ItemSilverBar10oz","ItemAluminumBar","ItemAluminumBar10oz","ItemCopperBar","ItemCopperBar10oz","ItemTinBar","ItemTinBar10oz","ItemTopaz","ItemOnyx","ItemSapphire","ItemAmethyst","ItemEmerald","ItemCitrine","ItemRuby","ItemQuartz","ItemJade","ItemGarnet","ItemKiloHemp"]; + blck_epochValuables = ["PartOreGold","PartOreSilver","PartOre","ItemGoldBar","ItemSilverBar", + "ItemGoldBar10oz","ItemTopaz","ItemOnyx","ItemSapphire","ItemAmethyst", + "ItemEmerald","ItemCitrine","ItemRuby","ItemQuartz","ItemJade", + "ItemGarnet","ItemKiloHemp"]; blck_epochBuildingSupplies = ["PartPlankPack","ItemPlywoodPack","CinderBlocks","MortarBucket","ItemScraps", "ItemCorrugated","ItemCorrugatedLg","CircuitParts","WoodLog_EPOCH","ItemRope","ItemStick","ItemRock","ItemBurlap","ItemBulb","ItemSolar","ItemCables","ItemBattery","Pelt_EPOCH","JackKit","ItemCanvas","ItemSeedBag","ItemPipe"]; blck_epochVehicleRepair = ["EngineParts","FuelTank","SpareTire","ItemGlass", @@ -594,9 +597,9 @@ for examples of how you can do this see \Major\Compositions.sqf ["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"], ["MMG_01_hex_F","150Rnd_93x64_Mag"], ["MMG_01_tan_F","150Rnd_93x64_Mag"], - ["MMG_02_black_F","150Rnd_93x64_Mag"], - ["MMG_02_camo_F","150Rnd_93x64_Mag"], - ["MMG_02_sand_F","150Rnd_93x64_Mag"], + ["MMG_02_black_F","130Rnd_338_Mag"], + ["MMG_02_camo_F","130Rnd_338_Mag"], + ["MMG_02_sand_F","130Rnd_338_Mag"], ["srifle_DMR_02_camo_F","10Rnd_338_Mag"], ["srifle_DMR_02_F","10Rnd_338_Mag"], ["srifle_DMR_02_sniper_F","10Rnd_338_Mag"], @@ -629,8 +632,10 @@ for examples of how you can do this see \Major\Compositions.sqf ["10Rnd_127x54_Mag" ,1,4], ["10Rnd_127x54_Mag",1,4], ["10Rnd_93x64_DMR_05_Mag" ,1,4], - ["10Rnd_93x64_DMR_05_Mag" ,1,4] + ["10Rnd_93x64_DMR_05_Mag" ,1,4], // Apex Ammo + ["130Rnd_338_Mag",1,3], + ["150Rnd_93x64_Mag",1,3] ], [ // Optics ["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3], @@ -662,7 +667,7 @@ for examples of how you can do this see \Major\Compositions.sqf ["ItemAluminumBar",1,3], ["ItemTinBar",1,3], ["ItemCanvas",2,4], - //"SeedPacket_Hemp","SeedPacket_GoldenSeal","SeedPacket_Poppy","SeedPacket_Pumpkin","SeedPacket_Sunflower" + //"SeedPacket_Hemp","SeedPacket_GoldenSeal","SeedPacket_Poppy","SeedPacket_Pumpkin","SeedPacket_Sunflower" ["ItemKiloHemp",1,3], ["ItemRope",1,3], ["ItemBurlap",1,3], @@ -682,7 +687,7 @@ for examples of how you can do this see \Major\Compositions.sqf ["ItemKiloHemp",1,2],["ItemRuby",1,2],["ItemSilverBar",1,2],["ItemEmerald",1,2],["ItemTopaz",1,2],["ItemOnyx",1,2],["ItemSapphire",1,2],["ItemAmethyst",1,2], ["ItemSodaRbull",1,3],["ItemSodaOrangeSherbet",1,3],["ItemSodaPurple",1,3],["ItemSodaMocha",1,3],["ItemSodaBurst",1,3], ["CookedChicken_EPOCH",1,3],["CookedGoat_EPOCH",1,3],["CookedSheep_EPOCH",1,3],["FoodSnooter",1,3],["FoodMeeps",1,3],["FoodBioMeat",1,3],["ItemTuna",1,3],["ItemSeaBass",1,3],["ItemTrout",1,3], - "Towelette" , "ItemVitamins", "morphine_epoch", "iodide_pills_epoch", "adrenaline_epoch", + "FAK" , "Towelette" , "ItemVitamins", "morphine_epoch", "iodide_pills_epoch", "adrenaline_epoch", "caffeinepills_epoch", "orlistat_epoch", "ItemCanteen_Empty", "ItemCanteen_Clean", "ItemBottlePlastic_Empty", "ItemBottlePlastic_Clean", "atropine_epoch", "ItemWaterPurificationTablets", "ItemPainKillers", "ItemDefibrillator", "ItemBloodBag_Empty", "ItemBloodBag_Full", "ItemAntibiotic", "nanite_cream_epoch", "nanite_pills_epoch" @@ -730,11 +735,22 @@ for examples of how you can do this see \Major\Compositions.sqf ["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"], ["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"], ["MMG_01_hex_F","150Rnd_93x64_Mag"], + ["MMG_01_tan_F","150Rnd_93x64_Mag"], + ["MMG_02_black_F","130Rnd_338_Mag"], + ["MMG_02_camo_F","130Rnd_338_Mag"], + ["MMG_02_sand_F","130Rnd_338_Mag"], ["srifle_DMR_02_camo_F","10Rnd_338_Mag"], - ["srifle_DMR_03_F","10Rnd_338_Mag"], + ["srifle_DMR_02_F","10Rnd_338_Mag"], + ["srifle_DMR_02_sniper_F","10Rnd_338_Mag"], + ["srifle_DMR_03_F","10Rnd_338_Mag"], + ["srifle_DMR_03_tan_F","10Rnd_338_Mag"], ["srifle_DMR_04_Tan_F","10Rnd_338_Mag"], - ["srifle_DMR_05_hex_F","10Rnd_338_Mag"], - ["srifle_DMR_06_camo_F","10Rnd_338_Mag"] + ["srifle_DMR_05_hex_F","10Rnd_338_Mag"], + ["srifle_DMR_05_tan_F","10Rnd_338_Mag"], + ["srifle_DMR_06_camo_F","10Rnd_338_Mag"], + ["srifle_DMR_04_F","10Rnd_127x54_Mag"], + ["srifle_DMR_05_blk_F","10Rnd_93x64_DMR_05_Mag"], + ["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"] ], [//Magazines @@ -757,7 +773,10 @@ for examples of how you can do this see \Major\Compositions.sqf ["10Rnd_127x54_Mag" ,1,4], ["10Rnd_127x54_Mag",1,4], ["10Rnd_93x64_DMR_05_Mag" ,1,4], - ["10Rnd_93x64_DMR_05_Mag" ,1,4] + ["10Rnd_93x64_DMR_05_Mag" ,1,4], + // Apex Ammo + ["130Rnd_338_Mag",1,3], + ["150Rnd_93x64_Mag",1,3] ], [ // Optics ["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3], @@ -789,7 +808,7 @@ for examples of how you can do this see \Major\Compositions.sqf ["ItemAluminumBar",1,3], ["ItemTinBar",1,3], ["ItemCanvas",2,4], - //"SeedPacket_Hemp","SeedPacket_GoldenSeal","SeedPacket_Poppy","SeedPacket_Pumpkin","SeedPacket_Sunflower" + //"SeedPacket_Hemp","SeedPacket_GoldenSeal","SeedPacket_Poppy","SeedPacket_Pumpkin","SeedPacket_Sunflower" ["ItemKiloHemp",1,3], ["ItemRope",1,3], ["ItemBurlap",1,3], @@ -810,7 +829,7 @@ for examples of how you can do this see \Major\Compositions.sqf ["ItemKiloHemp",1,2],["ItemRuby",1,2],["ItemSilverBar",1,2],["ItemGoldBar10oz",1,2], ["ItemSodaRbull",1,3],["ItemSodaOrangeSherbet",1,3],["ItemSodaPurple",1,3],["ItemSodaMocha",1,3],["ItemSodaBurst",1,3], ["CookedChicken_EPOCH",1,3],["CookedGoat_EPOCH",1,3],["CookedSheep_EPOCH",1,3],["FoodSnooter",1,3],["FoodMeeps",1,3],["FoodBioMeat",1,3],["ItemTuna",1,3],["ItemSeaBass",1,3],["ItemTrout",1,3], - "Towelette" , "ItemVitamins", "morphine_epoch", "iodide_pills_epoch", "adrenaline_epoch", + "FAK" , "Towelette" , "ItemVitamins", "morphine_epoch", "iodide_pills_epoch", "adrenaline_epoch", "caffeinepills_epoch", "orlistat_epoch", "ItemCanteen_Empty", "ItemCanteen_Clean", "ItemBottlePlastic_Empty", "ItemBottlePlastic_Clean", "atropine_epoch", "ItemWaterPurificationTablets", "ItemPainKillers", "ItemDefibrillator", "ItemBloodBag_Empty", "ItemBloodBag_Full", "ItemAntibiotic", "nanite_cream_epoch", "nanite_pills_epoch" @@ -935,10 +954,10 @@ for examples of how you can do this see \Major\Compositions.sqf ["Heal_EPOCH",1,2],["Defib_EPOCH",1,2],["Repair_EPOCH",1,2],["FAK",1,5],["VehicleRepair",1,5], ["ItemSodaRbull",1,3],["ItemSodaOrangeSherbet",1,3],["ItemSodaPurple",1,3],["ItemSodaMocha",1,3],["ItemSodaBurst",1,3], ["CookedChicken_EPOCH",1,3],["CookedGoat_EPOCH",1,3],["CookedSheep_EPOCH",1,3],["FoodSnooter",1,3],["FoodMeeps",1,3],["FoodBioMeat",1,3],["ItemTuna",1,3],["ItemSeaBass",1,3],["ItemTrout",1,3], - "Towelette" , "ItemVitamins", "morphine_epoch", "iodide_pills_epoch", "adrenaline_epoch", + "FAK" , "Towelette" , "ItemVitamins", "morphine_epoch", "iodide_pills_epoch", "adrenaline_epoch", "caffeinepills_epoch", "orlistat_epoch", "ItemCanteen_Empty", "ItemCanteen_Clean", "ItemBottlePlastic_Empty", "ItemBottlePlastic_Clean", "atropine_epoch", "ItemWaterPurificationTablets", "ItemPainKillers", "ItemDefibrillator", - "ItemBloodBag_Empty", "ItemBloodBag_Full", "ItemAntibiotic", "nanite_cream_epoch", "nanite_pills_epoch" + "ItemBloodBag_Empty", "ItemBloodBag_Full", "ItemAntibiotic", "nanite_cream_epoch" ], [ // Backpacks ["B_AssaultPack_dgtl",0,2],["B_AssaultPack_khk",0,2],["B_AssaultPack_mcamo",0,2],["B_AssaultPack_ocamo",0,2],["B_AssaultPack_rgr",0,2],["B_AssaultPack_sgg",0,2], @@ -1058,7 +1077,7 @@ for examples of how you can do this see \Major\Compositions.sqf ["CookedChicken_EPOCH",1,3],["CookedGoat_EPOCH",1,3],["CookedSheep_EPOCH",1,3], ["FoodSnooter",1,3],["FoodMeeps",1,3],["FoodBioMeat",1,3],["ItemTuna",1,3],["ItemSeaBass",1,3],["ItemTrout",1,3],["ItemPowderMilk",1,3],["ItemRicebox",1,3], ["ItemCereals",1,3],["krypto_candy_epoch",1,3],["ItemBakedBeans",1,3],["HotAxeSauce_epoch",1,3], - "Towelette" , "ItemVitamins", "morphine_epoch", "iodide_pills_epoch", "adrenaline_epoch", + "FAK" , "Towelette" , "ItemVitamins", "morphine_epoch", "iodide_pills_epoch", "adrenaline_epoch", "caffeinepills_epoch", "orlistat_epoch", "ItemCanteen_Empty", "ItemCanteen_Clean", "ItemBottlePlastic_Empty", "ItemBottlePlastic_Clean", "atropine_epoch", "ItemWaterPurificationTablets", "ItemPainKillers", "ItemDefibrillator", "ItemBloodBag_Empty", "ItemBloodBag_Full", "ItemAntibiotic", "nanite_cream_epoch", "nanite_pills_epoch" @@ -1077,7 +1096,7 @@ blck_highPoweredLoot = blck_BoxLoot_Orange; blck_supportLoot = blck_BoxLoot_Orange; - blck_crateTypes = ["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F","Box_NATO_Wps_F","I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F"]; // Default crate type. - - diag_log "[blckeagls] Configurations for Epoch Loaded"; - blck_configsEpochLoaded = true; \ No newline at end of file +blck_crateTypes = ["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F","Box_NATO_Wps_F","I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F"]; // Default crate type. + +diag_log "[blckeagls] Configurations for Epoch Loaded"; +blck_configsEpochLoaded = true; diff --git a/@GMS/addons/custom_server/Configs/blck_configs_exile.sqf b/@GMS/addons/custom_server/Configs/blck_configs_exile.sqf index e74beaf..e51b1a2 100644 --- a/@GMS/addons/custom_server/Configs/blck_configs_exile.sqf +++ b/@GMS/addons/custom_server/Configs/blck_configs_exile.sqf @@ -710,9 +710,9 @@ for examples of how you can do this see \Major\Compositions.sqf ["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"], ["MMG_01_hex_F","150Rnd_93x64_Mag"], ["MMG_01_tan_F","150Rnd_93x64_Mag"], - ["MMG_02_black_F","150Rnd_93x64_Mag"], - ["MMG_02_camo_F","150Rnd_93x64_Mag"], - ["MMG_02_sand_F","150Rnd_93x64_Mag"], + ["MMG_02_black_F","130Rnd_338_Mag"], + ["MMG_02_camo_F","130Rnd_338_Mag"], + ["MMG_02_sand_F","130Rnd_338_Mag"], ["srifle_DMR_02_camo_F","10Rnd_338_Mag"], ["srifle_DMR_02_F","10Rnd_338_Mag"], ["srifle_DMR_02_sniper_F","10Rnd_338_Mag"], @@ -743,7 +743,10 @@ for examples of how you can do this see \Major\Compositions.sqf ["10Rnd_127x54_Mag" ,1,5], ["10Rnd_127x54_Mag",1,5], ["10Rnd_93x64_DMR_05_Mag" ,1,5], - ["10Rnd_93x64_DMR_05_Mag" ,1,5] + ["10Rnd_93x64_DMR_05_Mag" ,1,5], + // Apex Ammo + ["130Rnd_338_Mag",1,3], + ["150Rnd_93x64_Mag",1,3] ], [ // Optics ["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2], @@ -805,6 +808,10 @@ for examples of how you can do this see \Major\Compositions.sqf ["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"], ["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"], ["MMG_01_hex_F","150Rnd_93x64_Mag"], + ["MMG_01_tan_F","150Rnd_93x64_Mag"], + ["MMG_02_black_F","130Rnd_338_Mag"], + ["MMG_02_camo_F","130Rnd_338_Mag"], + ["MMG_02_sand_F","130Rnd_338_Mag"], ["srifle_DMR_02_camo_F","10Rnd_338_Mag"], ["srifle_DMR_03_F","10Rnd_338_Mag"], ["srifle_DMR_04_Tan_F","10Rnd_338_Mag"], @@ -830,7 +837,10 @@ for examples of how you can do this see \Major\Compositions.sqf ["10Rnd_127x54_Mag" ,1,4], ["10Rnd_127x54_Mag",1,4], ["10Rnd_93x64_DMR_05_Mag" ,1,4], - ["10Rnd_93x64_DMR_05_Mag" ,1,4] + ["10Rnd_93x64_DMR_05_Mag" ,1,4], + // Apex Ammo + ["130Rnd_338_Mag",1,3], + ["150Rnd_93x64_Mag",1,3] ], [ // Optics ["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3], @@ -1035,10 +1045,10 @@ blck_contructionLootExile = [ ["Exile_Item_Sand",4,10],["Exile_Item_Cement",4,10],["Exile_Item_WaterCanisterDirtyWater",1,3],["Exile_Item_FuelCanisterFull",1,3] ], [//Items - ["Exile_Item_Matches","Exile_Item_CookingPot","Exile_Item_CanOpener","Exile_Item_Handsaw","Exile_Item_Pliers","Exile_Item_Grinder","Exile_Item_Foolbox","Exile_Item_Hammer", + "Exile_Item_Matches","Exile_Item_CookingPot","Exile_Item_CanOpener","Exile_Item_Handsaw","Exile_Item_Pliers","Exile_Item_Grinder","Exile_Item_Foolbox","Exile_Item_Hammer", "Exile_Item_CordlessScrewdriver","Exile_Item_FireExtinguisher","Exile_Item_OilCanister","Exile_Item_Screwdriver","Exile_Item_Shovel","Exile_Item_Wrench","Exile_Item_CordlessScrewdriver", "Exile_Item_FireExtinguisher","Exile_Item_OilCanister","Exile_Item_Screwdriver","Exile_Item_DuctTape","Binocular","Rangefinder","ItemGPS","ItemMap","ItemCompass","ItemRadio","ItemWatch", - "Exile_Item_XM8"] + "Exile_Item_XM8" ], [ // Backpacks diff --git a/@GMS/addons/custom_server/Configs/blck_configs_exile_mil.sqf b/@GMS/addons/custom_server/Configs/blck_configs_exile_mil.sqf index bb44f7f..95cb473 100644 --- a/@GMS/addons/custom_server/Configs/blck_configs_exile_mil.sqf +++ b/@GMS/addons/custom_server/Configs/blck_configs_exile_mil.sqf @@ -675,6 +675,13 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR "Exile_Item_InstantCoffee" ]; + #ifdef useCUP + + #endif + + #ifdef useRHS + + #endif blck_ConsumableItems = blck_Meats + blck_Drink + blck_Food; blck_throwableExplosives = ["HandGrenade","MiniGrenade"]; blck_otherExplosives = ["1Rnd_HE_Grenade_shell","3Rnd_HE_Grenade_shell","DemoCharge_Remote_Mag","SatchelCharge_Remote_Mag"]; @@ -846,7 +853,10 @@ for examples of how you can do this see \Major\Compositions.sqf ["10Rnd_127x54_Mag",1,4], ["10Rnd_93x64_DMR_05_Mag" ,1,4], ["10Rnd_93x64_DMR_05_Mag" ,1,4], - ["130Rnd_338_Mag",3,5] + ["130Rnd_338_Mag",3,5], + // Apex Ammo + ["130Rnd_338_Mag",1,3], + ["150Rnd_93x64_Mag",1,3] ], [ // Optics ["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3], @@ -1051,10 +1061,10 @@ blck_contructionLootExile = [ ["Exile_Item_JunkMetal",1,10],["Exile_Item_LightBulb",1,10],["Exile_Item_MetalBoard",1,10],["Exile_Item_MetalPole",1,10],["Exile_Item_CamoTentKit",1,10],["Exile_Item_MetalScrews",3,10] ], [//Items - ["Exile_Item_Matches","Exile_Item_CookingPot","Exile_Item_CanOpener","Exile_Item_Handsaw","Exile_Item_Pliers","Exile_Item_Grinder","Exile_Item_Foolbox","Exile_Item_Hammer", + "Exile_Item_Matches","Exile_Item_CookingPot","Exile_Item_CanOpener","Exile_Item_Handsaw","Exile_Item_Pliers","Exile_Item_Grinder","Exile_Item_Foolbox","Exile_Item_Hammer", "Exile_Item_CordlessScrewdriver","Exile_Item_FireExtinguisher","Exile_Item_OilCanister","Exile_Item_Screwdriver","Exile_Item_Shovel","Exile_Item_Wrench","Exile_Item_CordlessScrewdriver", "Exile_Item_FireExtinguisher","Exile_Item_OilCanister","Exile_Item_Screwdriver","Exile_Item_DuctTape","Binocular","Rangefinder","ItemGPS","ItemMap","ItemCompass","ItemRadio","ItemWatch", - "Exile_Item_XM8"] + "Exile_Item_XM8" ], [ // Backpacks diff --git a/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf b/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf index 1f6a484..b002760 100644 --- a/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf +++ b/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf @@ -26,7 +26,8 @@ blck_spawnMapAddons = true; // When true map addons will be spawned based on parameters define in custum_server\MapAddons\MapAddons_init.sqf blck_spawnStaticLootCrates = true; // When true, static loot crates will be spawned and loaded with loot as specified in custom_server\SLS\SLS_init_Epoch.sqf (or its exile equivalent). - + blck_simulationManager = blck_useBlckeaglsSimulationManagement; + diag_log format["[blckeagls] blck_configs: blck_simulationManager = %1",blck_simulationManager]; // Note that you can define map-specific variants in custom_server\configs\blck_custom_config.sqf blck_useTimeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. blck_timeAccelerationDay = 2; // Daytime time accelearation diff --git a/@GMS/addons/custom_server/Configs/blck_defines.hpp b/@GMS/addons/custom_server/Configs/blck_defines.hpp index a22f1b3..8e328f9 100644 --- a/@GMS/addons/custom_server/Configs/blck_defines.hpp +++ b/@GMS/addons/custom_server/Configs/blck_defines.hpp @@ -11,14 +11,22 @@ http://creativecommons.org/licenses/by-nc-sa/4.0/ */ + #define useAPEX -//#define useDynamicSimulation -//#define blck_debugMode -//#define blck_milServer +#define blck_milServer +#define blck_useCUP +#define blck_useRHS //////////////////////////// // Do not touch anything below this line /////////////////////////// + +//#define useDynamicSimulation +//#define blck_debugMode +//#define GRG_TestServer +#define GRGserver +#define blck_triggerLoopCompleteTime 40*60 + #define onFoot 1 #define inVehicle 2 @@ -29,5 +37,15 @@ #define groupSpawned 2 #define timesSpawned 3 #define respawnAt 4 - - +#define blck_playerDetectionRangeAir 800 +#define blck_playerDetectionRangeGroundVehicle 400 +#define blck_vehiclePlayerDetectionOdds 0.6 +#define blck_playerDetectionRangeSubs 100 +#define blck_playerDetectionRangeSurfaceVehicle 150 +#define blck_simulationEnabledDistance 2500 +#define blck_simulationManagementOff 0 +#define blck_useBlckeaglsSimulationManager 1 +#define blck_useDynamicSimulationManagement 2 +#define blck_simulationManagementOff 0 +#define blck_useBlckeaglsSimulationManagement 1 +#define blck_useDynamicSimulationManagement 2 diff --git a/@GMS/addons/custom_server/Configs/blck_dynamicConfigs.sqf b/@GMS/addons/custom_server/Configs/blck_dynamicConfigs.sqf index d5a99b8..4ae4aff 100644 --- a/@GMS/addons/custom_server/Configs/blck_dynamicConfigs.sqf +++ b/@GMS/addons/custom_server/Configs/blck_dynamicConfigs.sqf @@ -103,7 +103,7 @@ if (blck_modType isEqualTo "Exile") then { _classnameList = (missionConfigFile >> "CfgExileArsenal" ) call BIS_fnc_getCfgSubClasses; }; -diag_log format["_fnc_dynamicConfigsConfigurator: count _classnameList = %1",count _classnameList]; +//diag_log format["_fnc_dynamicConfigsConfigurator: count _classnameList = %1",count _classnameList]; { private _temp = [_x] call bis_fnc_itemType; //diag_log _temp; diff --git a/@GMS/addons/custom_server/Missions/Blue/default.sqf b/@GMS/addons/custom_server/Missions/Blue/default.sqf index 46e3a86..0323c78 100644 --- a/@GMS/addons/custom_server/Missions/Blue/default.sqf +++ b/@GMS/addons/custom_server/Missions/Blue/default.sqf @@ -79,7 +79,7 @@ private _addedLandscape = ["Land_FoodSacks_01_cargo_brown_F","Land_FoodSacks_01_ "Land_BarrelTrash_grey_F","Land_WoodenTable_large_F","Land_BagFence_Short_F","Land_WoodPile_F"] */ -_missionLandscape = ["Flag_AAF_F","Land_TentDome_F","Land_TentDome_F","Land_TentDome_F","Land_TentDome_F","Land_FieldToilet_F","Campfire_burning_F"]; // list of objects to spawn as landscape +_missionLandscape = [/*"Flag_AAF_F",*/"Land_TentDome_F","Land_TentDome_F","Land_TentDome_F","Land_TentDome_F","Land_FieldToilet_F","Campfire_burning_F"]; // list of objects to spawn as landscape for "_i" from 1 to 8 do { _missionLandscape pushBack selectRandom [ diff --git a/@GMS/addons/custom_server/init/blck_init_HC.sqf b/@GMS/addons/custom_server/init/blck_init_HC.sqf index b3c9bb2..ad678eb 100644 --- a/@GMS/addons/custom_server/init/blck_init_HC.sqf +++ b/@GMS/addons/custom_server/init/blck_init_HC.sqf @@ -47,15 +47,14 @@ blck_configsLoaded = nil; call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_custom_config.sqf"; #ifdef GRGserver -diag_log "[blckegls] Running Ghostridergaming Version"; +diag_log "[blckeagls] Running GRG Version"; #endif -#ifdef useDynamicSimulation -diag_log "[blckegls] dynamic simulation manager enabled"; -#else -diag_log "[blckegls] blckegls simulation manager enabled"; -#endif -//_marker = createMarker ["HomeBase",[24000,18000,0]]; -//_marker setMarkerColor "ColorBlack"; -//_marker setMarkerType "hd_flag"; + +switch (blck_simulationManager) do + case 1: {diag_log "[blckeagls] dynamic simulation manager enabled"}; + case 2: {diag_log "[blckeagls] blckeagls simulation manager enabled"}; + case 0: {diag_log "[blckeagls] simulation management disabled"}; +}; + diag_log format["[blckeagls] for HC version %1 Build %2 Loaded in %3 seconds",_blck_versionDate,_blck_version,diag_tickTime - _blck_loadingStartTime]; //,blck_modType]; [] spawn blck_fnc_HC_monitor; diff --git a/@GMS/addons/custom_server/init/blck_init_server.sqf b/@GMS/addons/custom_server/init/blck_init_server.sqf index e671e69..c82bf89 100644 --- a/@GMS/addons/custom_server/init/blck_init_server.sqf +++ b/@GMS/addons/custom_server/init/blck_init_server.sqf @@ -11,24 +11,19 @@ if ( !(isServer) || hasInterface) exitWith{}; -#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +#include "blck_defines.hpp"; if !(isNil "blck_Initialized") exitWith{}; private _blck_loadingStartTime = diag_tickTime; #include "\q\addons\custom_server\init\build.sqf"; diag_log format["[blckeagls] Loading Server Mission System Version %2 Build Date %1",_blck_versionDate,_blck_version]; -call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf"; -waitUntil {(isNil "blck_variablesLoaded") isEqualTo false;}; -waitUntil{blck_variablesLoaded}; -blck_variablesLoaded = nil; - // compile functions call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf"; waitUntil {(isNil "blck_functionsCompiled") isEqualTo false;}; waitUntil{blck_functionsCompiled}; blck_functionsCompiled = nil; -diag_log format["[blckeagls] debug mode settings:blck_debugON = %1 blck_debugLevel = %2",blck_debugON,blck_debugLevel]; +diag_log format["[blckeagls] functions compiled at %1",diag_tickTime]; blck_modType = call blck_fnc_getModType; publicVariable "blck_modType"; @@ -37,16 +32,26 @@ execVM "\q\addons\custom_server\Configs\blck_configs.sqf"; waitUntil {(isNil "blck_configsLoaded") isEqualTo false;}; waitUntil{blck_configsLoaded}; blck_configsLoaded = nil; -diag_log format["[blckeagls] blck_useHC = %1",blck_useHC]; +diag_log format["[blckeagls] blck_useHC = %1 | blck_simulationManager = %2 ",blck_useHC,blck_simulationManager]; +diag_log format["[blckeagls] debug mode settings:blck_debugON = %1 blck_debugLevel = %2",blck_debugON,blck_debugLevel]; + // Load any user-defined specifications or overrides call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_custom_config.sqf"; +diag_log format["[blckeagls] configurations loaded at %1",diag_tickTime]; + + +call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf"; +waitUntil {(isNil "blck_variablesLoaded") isEqualTo false;}; +waitUntil{blck_variablesLoaded}; +blck_variablesLoaded = nil; +diag_log format["[blckeagls] blck_variables loaded at %1",diag_tickTime]; // spawn map addons to give the server time to position them before spawning in crates etc. if (blck_spawnMapAddons) then { call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\MapAddons\MapAddons_init.sqf"; }else{ - diag_log "[blckegls] Map Addons disabled"; + diag_log "[blckeagls] Map Addons disabled"; }; blck_spawnMapAddons = nil; @@ -63,13 +68,24 @@ diag_log "[blckeagls] Mission Lists Loaded Successfully"; [] execVM "\q\addons\custom_server\Missions\Static\GMS_StaticMissions_init.sqf"; [] execVM "q\addons\custom_server\Missions\UMS\GMS_UMS_init.sqf"; // loads functions and spawns any static missions. -diag_log "blck_init_server: ->> Static and UMS systems initialized."; +diag_log "[blckeagls] blck_init_server: ->> Static and UMS systems initialized."; -#ifdef useDynamicSimulation -diag_log "[blckegls] dynamic simulation manager enabled"; -#else -diag_log "[blckegls] blckegls simulation manager enabled"; +switch (blck_simulationManager) do +{ + case 2: {diag_log "[blckeagls] dynamic simulation manager enabled"}; + case 1: {diag_log "[blckeagls] blckeagls simulation manager enabled"}; + case 0: {diag_log "[blckeagls] simulation management disabled"}; +}; + + +#ifdef GRGserver +// start the dynamic loot crate system +[] execVM "\q\addons\custom_server\DLS\DLS_init.sqf"; +waitUntil {(isNil "blck_DLSComplete") isEqualTo false;}; +waitUntil{blck_DLSComplete}; +blck_DLSComplete = nil; #endif + diag_log format["[blckeagls] version %1 Build %2 Loaded in %3 seconds",_blck_versionDate,_blck_version,diag_tickTime - _blck_loadingStartTime]; //,blck_modType]; diag_log format["blckeagls] waiting for players to join ---- >>>>"]; diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index fde48c8..36b5f24 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,6 +1,6 @@ private ["_version","_versionDate"]; -blck_version = "6.84 Build 149"; +blck_version = "6.86 Build 155"; _blck_version = blck_version; -_blck_versionDate = "8-5-18 5:00 PM"; +_blck_versionDate = "10-20-18 1:30 AM"; blck_pvs_version = _blck_version; publicVariable blck_pvs_version; diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/pullDynamicMission.sqf b/Tools/Dynamic Missions/pullDynamicMission.VR/pullDynamicMission.sqf index 98f15e8..1955d63 100644 --- a/Tools/Dynamic Missions/pullDynamicMission.VR/pullDynamicMission.sqf +++ b/Tools/Dynamic Missions/pullDynamicMission.VR/pullDynamicMission.sqf @@ -199,6 +199,7 @@ systemChat _logging; //diag_log format["_cb = %1%2",endl,_cb]; _configuredStatics = []; +_configuredStaticsPositions = []; _configuredUnits = []; /* This bit will set up the garrison for each building having units and / or statics inside it or on top. @@ -222,7 +223,7 @@ _fn_configureGarrisonForBuildingATL = { if (_b isEqualTo _building) then { _configuredStatics pushBackUnique _x; - + //_configuredStaticsPositions pushBack (getPosATL _x) vectorDiff CENTER; if (_staticsText isEqualTo "") then { _staticsText = format['["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff (getPosATL _b),getDir _x]; @@ -285,7 +286,7 @@ _cb = _cb + "_garrisonedBuilding_ATLsystem = ["; }; }; -} forEach ((allMissionObjects "StaticWeapon") + (allMissionObjects unitMarkerObject)); +} forEach ((allMissionObjects "StaticWeapon") + (allMissionObjects "Man") + (allMissionObjects unitMarkerObject)); _cb = _cb + format["%1];%1%1",endl]; /////////////////// @@ -415,20 +416,24 @@ _cb = _cb + format["%1];%1%1",endl]; /////////////////// // Setup info for remaining static/emplaced weapons /////////////////// +_count = 0; _cb = _cb + format["_missionEmplacedWeapons = ["]; { - if !(_x in _configuredStatics) then - { + //if !(_x in _configuredStatics) then + private _isInside = [_x] call _fn_isInside; + if !(_isInside) then + { // ["B_HMG_01_high_F",[22883.5,16757.6,6.31652],"blue",0,10] _line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true']; systemChat _line; - if (_forEachIndex == 0) then + if (_count == 0) then { _cb = _cb + format["%1%2",endl,_line]; } else { _cb = _cb + format[",%1%2",endl,_line]; }; + _count = _count + 1; }; }forEach allMissionObjects "StaticWeapon"; diff --git a/changeLog.sqf b/changeLog.sqf index 6783c7c..60d0127 100644 --- a/changeLog.sqf +++ b/changeLog.sqf @@ -2,34 +2,49 @@ blck Mission system by Ghostrider [GRG] Loosely based on the AI mission system by blckeagls ver 2.0.2 Contributions by Narines: bug fixes, testing, infinite ammo fix. -Ideas or code from that by Vampire and KiloSwiss have been used for certain functions. - - +Ideas or code from that by He-Man, Vampire and KiloSwiss have been used for certain functions. +Many thanks for new Coding and ideas from Grahame. Significant Changes: ===================== -6.86 (Experimental) +6.86 Build 155 +Added support for spawning infantry and statics inside buildings for forming a garrison using either of two methods. + 1. by placing a marker object such as a sphere in the building you define it as having units/statics inside + 2. by placing units or statics in it you determine the garrison to be placed at mission spawn. +Added tools to facilitate grabbing data from missions in the editor (see the new TOOLS folders for more information). +Added additional error checks for missing mission parameters. +Fixed: issues that prevented completion of capture/hostage missions on exile servers +Added: code that forces air, land and sea vehicles to detect nearby players which should help with frozen AI _noChoppers +Changed: code for blckeagls simulation manager to force simulation when groups are awoken. +Added: additional settings for simulation management (see blck_configs.sqf for details) +Changed: Simulation management is now set using the new variable blck_simulationManager which is defined in blck_configs.sqf +Fixed: issues with AI not throwing smoke when healing themselves. -Build 153. -Added: tools to pull data from mission.sqm pre-formated for use in static or dynamic blckeagls missions. -Added: functions that allow you to spawn units, statics inside or on top of buildings. -Fixed: an issue that caused vehicles to be destroyed by buildings upon mission spawn. -Fixed: an issue that prevented completion of capture/hostage missions on Exile servers (Thanks to MGTDB). - -6.84 -Added Option to load weapons, pistols, uniforms, headgear, vests and backpacks from CfgPricing or the Arsenal Pricing and exclude items above a certain price +6.84 Build 145 +Added Option to load weapons, pistols, uniforms, headgear, vests and backpacks from CfgPricing (Epoch) or the Arsenal (Exile) and exclude items above a certain price Add details on configs for enabling this and setting the maximum price + To use this new feature + Set blck_useConfigsGeneratedLoadouts = true; + + To specify the maximum price for items added to AI, change: + blck_maximumItemPriceInAI_Loadouts = 100; + NOTE: this function overides any loadouts you specify in blck_config.sqf etc. -Added functions to despawn static patrols invehicles on on foot when no players are nearby. This tracks the number of infantry alive in a group and respawns only the number alive when the group was despawned. - +Added functions to despawn static patrols of all types when no players are nearby. This tracks the number of infantry alive in a group and respawns only the number alive when the group was despawned. Added: Static units will now be spawned with gear specific to difficulty level (blue, red, green, orange) as specified in blck_config.sqf etc. +Added: AI now have a chance of spawning with binocs or range finders. +Added: a lit road cone spawns at the center of the mission to help find it and aid in triggering mission completion. Changed: Hostage missions redesigned to reduce chances of AI being glitched into containers and of mission objects flying about when spawned in. +Changed: Units are spawned with greater dispersion. +Changed: method for spawning random landscapes has been changed. Note the added randomization in missions\blue\default.sqf + Fixed: Collisions between objects at missions caused issues. Fixed: Attempted a fix to reduce the chance that AI will spawn inside or under objects like rocks or containers. Fixed: Captive missions now complete properly. Fixed: Hostage missions now complete properly. +Fixed: Paratroops spawned at UMS missions now spawn with scuba gear. Version 1.82 Build 134 Added: configs for blue, red, green and orange pistol, vest, backpack and uniforms (with thanks to Grahame for suggesting this change and doing most of the coding)