From 58dbfd509a89928037999e5b64a6c3fd574ceac0 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Wed, 9 Sep 2020 07:56:24 -0400 Subject: [PATCH 01/67] small bug fixes / CBA compatability added --- .../Compiles/Units/GMS_fnc_spawnUnit.sqf | 8 +++-- .../Vehicles/GMS_fnc_spawnVehicle.sqf | 31 +++++++++++++++++-- @GMS/addons/custom_server/init/build.sqf | 6 ++-- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf index 356f671..435dfc8 100644 --- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf +++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf @@ -89,12 +89,16 @@ _weap = selectRandom _weaponList; _unit addWeaponGlobal _weap; _ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines"); _unit addMagazines[selectRandom _ammochoices,3]; +/* _optics = getArray (configfile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems"); _pointers = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems"); _muzzles = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems"); _underbarrel = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems"); - - +*/ +_muzzles = [_weap, 101] call BIS_fnc_compatibleItems; +_optics = [_weap, 201] call BIS_fnc_compatibleItems; +_pointers = [_weap, 301] call BIS_fnc_compatibleItems; +_underbarrel = [_weap, 302] call BIS_fnc_compatibleItems; if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _muzzles)}; if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _optics)}; diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf index 4048d6b..7816744 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf @@ -13,7 +13,7 @@ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; params["_vehType","_pos",["_special","NONE"],["_radius",30]]; - +//diag_log format["_spawnVehicle: _vehType = %1 | _special = %2 | _radiu = %3",_vehType,_special,_radius]; private _veh = createVehicle[_vehType, _pos, [], _radius, _special]; _veh setVectorUp surfaceNormal position _veh; _veh allowDamage true; @@ -21,6 +21,33 @@ _veh enableRopeAttach true; _veh setVariable["blck_vehicle",true]; [_veh] call blck_fnc_protectVehicle; [_veh] call blck_fnc_emptyObject; - +if (_vehType isKindOf "Plane") then { + private _pos = [_pos select 0, _pos select 1, ((getPos _veh) select 2 + 500)]; + _veh setPosATL _pos; + // adapted from: https://community.bistudio.com/wiki/setVelocity + private _vel = velocity _vehicle; + private _dir = direction _vehicle; + #define speedIncr 250 + _veh setVelocity [ + (_vel select 0) + (sin _dir * speedIncr), + (_vel select 1) + (cos _dir * speedIncr), + (_vel select 2) + ]; + _veh flyInHeightASL [200,100,400]; +}; +if (_vehType isKindOf "Helicopter") then +{ + private _pos = [_pos select 0, _pos select 1, ((getPos _veh) select 2 + 100)]; + _veh setPosATL _pos; + private _vel = velocity _vehicle; + private _dir = direction _vehicle; + #define speedIncr 25 + _veh setVelocity [ + (_vel select 0) + (sin _dir * speedIncr), + (_vel select 1) + (cos _dir * speedIncr), + (_vel select 2) + ]; + _veh flyInHeightASL [200,100,400]; +}; _veh diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 753c9a0..eb96444 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 218 -#define blck_versionNumber 7.00 -#define blck_buildDate "8-29-20" +#define blck_buildNumber 219 +#define blck_versionNumber 7.01 +#define blck_buildDate "9-9-20" From fb8d7680ee62df136f96931003a51fbe3ff62960 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Wed, 9 Sep 2020 08:29:14 -0400 Subject: [PATCH 02/67] Fixed issue with jets crashing on spawn. --- .../Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf index 7816744..a1c2f10 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf @@ -22,12 +22,12 @@ _veh setVariable["blck_vehicle",true]; [_veh] call blck_fnc_protectVehicle; [_veh] call blck_fnc_emptyObject; if (_vehType isKindOf "Plane") then { - private _pos = [_pos select 0, _pos select 1, ((getPos _veh) select 2 + 500)]; + private _pos = [_pos select 0, _pos select 1, ((getPos _veh) select 2) + 400]; _veh setPosATL _pos; // adapted from: https://community.bistudio.com/wiki/setVelocity - private _vel = velocity _vehicle; - private _dir = direction _vehicle; - #define speedIncr 250 + private _vel = velocity _veh; + private _dir = direction _veh; + #define speedIncr 150 _veh setVelocity [ (_vel select 0) + (sin _dir * speedIncr), (_vel select 1) + (cos _dir * speedIncr), @@ -37,10 +37,10 @@ if (_vehType isKindOf "Plane") then { }; if (_vehType isKindOf "Helicopter") then { - private _pos = [_pos select 0, _pos select 1, ((getPos _veh) select 2 + 100)]; + private _pos = [_pos select 0, _pos select 1, ((getPos _veh) select 2) + 100]; _veh setPosATL _pos; - private _vel = velocity _vehicle; - private _dir = direction _vehicle; + private _vel = velocity _veh; + private _dir = direction _veh; #define speedIncr 25 _veh setVelocity [ (_vel select 0) + (sin _dir * speedIncr), From 2523f3892426d2d96087f113f380eaff986a274d Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Wed, 9 Sep 2020 19:18:33 -0400 Subject: [PATCH 03/67] Fixed: Jets do not crash after spawn --- .../Compiles/Units/GMS_fnc_spawnUnit.sqf | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf index 435dfc8..cff28fd 100644 --- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf +++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf @@ -95,16 +95,11 @@ _pointers = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" > _muzzles = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems"); _underbarrel = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems"); */ -_muzzles = [_weap, 101] call BIS_fnc_compatibleItems; -_optics = [_weap, 201] call BIS_fnc_compatibleItems; -_pointers = [_weap, 301] call BIS_fnc_compatibleItems; -_underbarrel = [_weap, 302] call BIS_fnc_compatibleItems; -if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _muzzles)}; -if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _optics)}; -if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _pointers)}; -if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _muzzles)}; -if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _underbarrel)}; +if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom ([_weap, 101] call BIS_fnc_compatibleItems))}; // muzzles +if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom ([_weap, 201] call BIS_fnc_compatibleItems))}; // optics +if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom ([_weap, 301] call BIS_fnc_compatibleItems))}; // pointers +if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom ([_weap, 302] call BIS_fnc_compatibleItems))}; // underbarrel if ((count(getArray (configFile >> "cfgWeapons" >> _weap >> "muzzles"))) > 1) then { _unit addMagazine "1Rnd_HE_Grenade_shell"; @@ -127,7 +122,8 @@ if (round(random 10) <= 5) then { _unit addItem selectRandom blck_specialItems; }; - + +/* if ( !(_Launcher isEqualTo "none") && !(_backpacks isEqualTo [])) then { _unit addWeaponGlobal _Launcher; @@ -143,6 +139,26 @@ if ( !(_Launcher isEqualTo "none") && !(_backpacks isEqualTo [])) then _unit addBackpack selectRandom _backpacks; }; }; +*/ +if !(_backpacks isEqualTo []) then +{ + if (_Launcher isEqualTo "none") then + { + if ( random (1) < blck_chanceBackpack) then + { + _unit addBackpack selectRandom _backpacks; + }; + } else { + _unit addWeaponGlobal _Launcher; + _unit addBackpack (selectRandom _backpacks); + private _mags = getArray (configFile >> "CfgWeapons" >> _Launcher >> "magazines"); + for "_i" from 1 to 3 do + { + _unit addItemToBackpack (_mags select 0); // call BIS_fnc_selectRandom; + }; + _unit setVariable["Launcher",_launcher,true]; + }; +}; if(sunOrMoon < 0.2 && blck_useNVG)then { From f80db226428775a3f706e18cb709ed00e76461df Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Wed, 9 Sep 2020 19:19:46 -0400 Subject: [PATCH 04/67] Fixed: Arcraft do not crash when 2 or more are spawned over a mission. --- .../Missions/GMS_fnc_monitorInitializedMissions.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 589675c..4e4f203 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -199,7 +199,11 @@ _missionParameters params[ { if (random(1) < _chanceHeliPatrol) then { - _temp = [_coords,_difficulty,_missionHelis,_uniforms,_headGear,_vests,_backpacks,_weaponList, _sideArms,"none"] call blck_fnc_spawnMissionHeli; + private _xaxis = _coords select 0; + private _yaxis = _coords select 1; + private _zaxis = 100; + private _offset = 15 * _i; + _temp = [[_xaxis + _offset,_yaxis + _offset, _zaxis + _offset],_difficulty,_missionHelis,_uniforms,_headGear,_vests,_backpacks,_weaponList, _sideArms,"none"] call blck_fnc_spawnMissionHeli; if (typeName _temp isEqualTo "ARRAY") then { blck_monitoredVehicles pushBack (_temp select 0); From 3eb13f9736adfaffebe63af086b0a6e505c9695c Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Wed, 9 Sep 2020 19:20:40 -0400 Subject: [PATCH 05/67] Attempted Fix: spawn vehicle patrols in safe position. --- .../Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf index 41d59bd..dc2d07a 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf @@ -46,7 +46,7 @@ if (_missionPatrolVehicles isEqualTo []) then } else { _spawnPos = _x select 1; }; - _vehicle = _x select 0; + _vehicle = _x select 0; _vehGroup = [blck_AI_Side,true] call blck_fnc_createGroup; _patrolVehicle = objNull; @@ -56,6 +56,7 @@ if (_missionPatrolVehicles isEqualTo []) then [_vehGroup,_spawnPos,_coords,_crewCount,_crewCount,_skillAI,1,2,false,_uniforms, _headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaGroup] call blck_fnc_spawnGroup; _missionAI append (units _vehGroup); blck_monitoredMissionAIGroups pushBack _vehGroup; + _spawnPos = _spawnPos findEmptyPosition[0,50,_vehicle];; #define useWaypoints true _patrolVehicle = [_coords,_spawnPos,_vehicle,40,60,_vehGroup,useWaypoints,_crewCount] call blck_fnc_spawnVehiclePatrol; From c083f4d86b20ac0939f36d631d35ac18e21235dd Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 12 Sep 2020 09:41:37 -0400 Subject: [PATCH 06/67] suppress plants and rocks at mission 'houses' --- .../Compiles/Functions/GMS_fnc_mainThread.sqf | 2 +- .../Compiles/Missions/GMS_fnc_endMission.sqf | 16 ++++---- .../Missions/GMS_fnc_initializeMission.sqf | 7 +++- .../GMS_fnc_monitorInitializedMissions.sqf | 19 +++++---- .../Missions/GMS_fnc_spawnRandomLandscape.sqf | 41 ++++++++++--------- .../custom_server/Compiles/blck_functions.sqf | 4 +- .../custom_server/Compiles/blck_variables.sqf | 1 + 7 files changed, 50 insertions(+), 40 deletions(-) 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 a06d129..2303de1 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf @@ -57,7 +57,7 @@ while {true} do if ((diag_tickTime > _timer1min)) then { _timer1min = diag_tickTime + 60; - + [] call blck_fnc_restoreHiddenObjects; [] call blck_fnc_groupWaypointMonitor; [] call blck_fnc_cleanupAliveAI; [] call blck_fnc_cleanupObjects; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf index bcddd0f..841b52c 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf @@ -15,9 +15,10 @@ #include "\q\addons\custom_server\Configs\blck_defines.hpp" _fn_missionCleanup = { - params["_coords","_mines","_objects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]]; + params["_coords","_mines","_objects","_hiddenObjects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]]; [_mines] call blck_fnc_clearMines; blck_oldMissionObjects pushback [_coords,_objects, (diag_tickTime + _cleanupCompositionTimer)]; + blck_hiddenTerrainObjects pushBack[_hiddenObjects,(diag_tickTime + _cleanupCompositionTimer)]; blck_liveMissionAI pushback [_coords,_blck_AllMissionAI, (diag_tickTime + _cleanupAliveAITimer)]; blck_missionsRunning = blck_missionsRunning - 1; blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords]; @@ -42,6 +43,7 @@ params[ "_coords", "_mines", "_objects", + "_hiddenObjects", "_crates", "_blck_AllMissionAI", "_endMsg", @@ -68,13 +70,13 @@ switch (_endCondition) do if (local _x) then {deleteVehicle _x}; }forEach _crates; - [_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; + [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; [format["Mission | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log; }; case 1: { // Normal End if (blck_useSignalEnd) then { - [_crates select 0] spawn blck_fnc_signalEnd; + [_crates select 0,150] spawn blck_fnc_signalEnd; { _x enableRopeAttach true; }forEach _crates; @@ -102,7 +104,7 @@ switch (_endCondition) do }; } forEach _vehicles; - [_coords,_mines,_objects,_blck_AllMissionAI,_markerName,blck_AliveAICleanUpTimer,blck_cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; + [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,blck_AliveAICleanUpTimer,blck_cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; [format["Mission Completed | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log; }; case 2: { // Aborted for moving a crate @@ -112,7 +114,7 @@ switch (_endCondition) do } forEach _crates; #define illegalCrateMoveMsg "Crate moved before mission completed" [["warming",illegalCrateMoveMsg,_markerLabel]] call blck_fnc_messageplayers; - [_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; + [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; [format["Mission Aborted | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log; }; case 3: { // Mision aborted for killing an asset @@ -123,7 +125,7 @@ switch (_endCondition) do if (local _x) then {deleteVehicle _x}; }forEach _crates; [["warning",_endMsg,_markerLabel]] call blck_fnc_messageplayers; - [_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; + [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; [format["Mission Aborted | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log; }; @@ -135,7 +137,7 @@ switch (_endCondition) do if (local _x) then {deleteVehicle _x}; }forEach _crates; - [_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; + [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; }; }; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 425500e..3693cef 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -109,6 +109,8 @@ if (_coords isEqualTo []) exitWith false; }; +if (blck_debugLevel >= 3) then {diag_log format["_fnc_initializeMission: _markerMissionName = %1 | _coords = %2",_markerMissionName,_coords]}; + blck_ActiveMissionCoords pushback _coords; blck_missionsRunning = blck_missionsRunning + 1; @@ -152,6 +154,7 @@ private _missionTimeoutAt = diag_tickTime + blck_MissionTimeout; private _triggered = 0; private _spawnPara = if (random(1) < _chancePara) then {true} else {false}; private _objects = []; +private _hiddenObjects = []; private _mines = []; private _crates = []; private _missionAIVehicles = []; @@ -159,9 +162,9 @@ private _blck_AllMissionAI = []; private _AI_Vehicles = []; private _assetSpawned = objNull; -private _missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; +private _missionData = [_coords,_mines,_objects,_hiddenObjects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; blck_activeMissionsList pushBack [_missionCategoryDescriptors,_missionTimeoutAt,_triggered,_spawnPara,_missionData,_missionParameters]; [format["Initialized Mission %1 | description %2 | difficulty %3 at %4",_markerName, _markerMissionName, _difficulty, diag_tickTime]] call blck_fnc_log; -true \ No newline at end of file +true diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 4e4f203..a42d191 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -34,8 +34,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do "_missionsData" // ]; - // 0 1 2 3 4 5 6 7 8 - _missionData params ["_coords","_mines","_objects","_crates","_blck_AllMissionAI","_assetSpawned","_missionAIVehicles","_markers"]; + _missionData params ["_coords","_mines","_objects","_hiddenObjects","_crates","_blck_AllMissionAI","_assetSpawned","_missionAIVehicles","_markers"]; _missionParameters params[ "_markerName", @@ -123,7 +122,7 @@ _missionParameters params[ { //[format["_fnc_monitorInitializedMissions: mission timed out: %1",_el]] call blck_fnc_log; _missionCategoryDescriptors set[noActive, _noActive - 1]; - [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, -1] call blck_fnc_endMission; + [_coords,_mines,_objects,_hiddenObjects,_crates, _blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, -1] call blck_fnc_endMission; }; // Handle mission waiting to be triggerd and player is within the range to trigger @@ -158,7 +157,8 @@ _missionParameters params[ _temp = [_coords, _missionLandscape] call blck_fnc_spawnCompositionObjects; }; - _objects append _temp; + _objects append [_temp select 0]; + _hiddenObjects append [_temp select 1]; uiSleep delayTime; try { @@ -315,7 +315,7 @@ _missionParameters params[ _el set[missionData, _missionData]; - // Everything spawned withouth serous errors so lets keep the mission active for future monitoring + // Everything spawned withouth serious errors so lets keep the mission active for future monitoring blck_activeMissionsList pushBack _el; } @@ -325,7 +325,7 @@ _missionParameters params[ if (_exception isEqualTo 1) then { _missionCategoryDescriptors set[noActive, _noActive - 1]; - [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, 1] call blck_fnc_endMission; + [_coords,_mines,_objects,_hiddenObjects,_crates, _blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, 1] call blck_fnc_endMission; ["Critial Error returned by one or more critical functions, mission spawning aborted!",'error'] call blck_fnc_log; }; }; @@ -436,6 +436,7 @@ _missionParameters params[ switch (_exception) do { case 1: { // Normal Mission End + //diag_log format["_monitorInitializedMissions: Normal mission end"]; if (_spawnCratesTiming in ["atMissionEndGround","atMissionEndAir"]) then { if (!(_secureAsset) || (_secureAsset && (alive _assetSpawned))) then @@ -493,7 +494,7 @@ _missionParameters params[ [_assetSpawned,selectRandom(_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]])] remoteExec["switchMove",-2]; }; }; - [_coords,_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission; + [_coords,_mines,_objects,_hiddenObjects,_crates,_blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission; _waitTime = diag_tickTime + _tMin + random(_tMax - _tMin); _missionCategoryDescriptors set [noActive,_noActive - 1]; @@ -501,10 +502,10 @@ _missionParameters params[ }; case 2: { // Abort, crate moved. _endMsg = "Crate Removed from Mission Site Before Mission Completion: Mission Aborted"; - [_coords,_mines,_objects,_crates, _blck_AllMissionAI,"Crate Removed from Mission Site Before Mission Completion: Mission Aborted",_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission; + [_coords,_mines,_objects,_hiddenObjects,_crates, _blck_AllMissionAI,"Crate Removed from Mission Site Before Mission Completion: Mission Aborted",_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission; }; case 3: { // Abort, key asset killed - [_coords,_mines,_objects,_crates,_blck_AllMissionAI,_assetKilledMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission; + [_coords,_mines,_objects,_hiddenObjects,_crates,_blck_AllMissionAI,_assetKilledMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission; }; case 4: { // Reserved for grpNull errors in the future diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf index 059df64..3ff61d0 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf @@ -13,30 +13,33 @@ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; params["_coords","_missionLandscape",["_min",3],["_max",15],["_nearest",1]]; -private["_objects","_wreck","_dir","_dirOffset"]; #define maxObjectSpawnRadius 25 #define minObjectSpawnRadius 15 private _objectSpawnRange = maxObjectSpawnRadius - minObjectSpawnRadius; -_objects = []; -_wreck = createVehicle ["RoadCone_L_F", _coords]; // To designate the mission center -_wreck allowDamage true; -_wreck enableSimulation false; -_wreck enableSimulationGlobal false; -_wreck enableDynamicSimulation false; -_objects pushBack _wreck; -{ +private _newObjs = []; +private _hiddenObjs = []; - private _dir = random(360); - private _radius = minObjectSpawnRadius + random(maxObjectSpawnRadius); - _wreck = createVehicle[_x, _coords getPos[_radius,_dir], [], 2]; - _wreck allowDamage true; - _wreck enableSimulation false; - _wreck enableSimulationGlobal false; - _wreck enableDynamicSimulation false; - _wreck setDir (_wreck getRelDir _coords); - _objects pushback _wreck; +{ + private _spawnPos = _coords getPos[minObjectSpawnRadius + random(maxObjectSpawnRadius), random(359)]; + private _objClassName = _x; + if (_objClassName isKindOf "House" && blck_hideRocksAndPlants) then + { + private _shrubs = nearestTerrainObjects[_spawnPos,["TREE", "SMALL TREE", "BUSH","FENCE", "WALL","ROCK"], sizeOf _objClassName]; + if !(_shrubs isEqualTo []) then + { + _hiddenOjbs append _shrubs; + {_x hideObjectGlobal true} forEach _shrubs; + }; + }; + private _obj = createVehicle[_x, _spawnPos, [], 2]; + _obj allowDamage true; + _obj enableSimulation false; + _obj enableSimulationGlobal false; + _obj enableDynamicSimulation false; + _obj setDir (_obj getRelDir _coords); + _newObjs pushback _obj; sleep 0.1; } forEach _missionLandscape; -_objects +[_newObjs,_hiddenObjs] diff --git a/@GMS/addons/custom_server/Compiles/blck_functions.sqf b/@GMS/addons/custom_server/Compiles/blck_functions.sqf index 20094d7..71faa96 100644 --- a/@GMS/addons/custom_server/Compiles/blck_functions.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_functions.sqf @@ -15,7 +15,7 @@ private _functions = [ // General functions ["blck_fnc_waitTimer","\q\addons\custom_server\Compiles\Functions\GMS_fnc_waitTimer.sqf"], - //["blck_fnc_timedOut","\q\addons\custom_server\Compiles\Functions\GMS_fnc_timedOut.sqf"], + ["blck_fnc_restoreHiddenObjects","\q\addons\custom_server\Compiles\Functions\GMS_fnc_restoreHiddenObjects.sqf"], ["blck_fnc_FindSafePosn","\q\addons\custom_server\Compiles\Functions\GMS_fnc_findSafePosn.sqf"], ["blck_fnc_findSafePosn_2","\q\addons\custom_server\Compiles\Functions\GMS_fnc_findSafePosn_2.sqf"], ["blck_fnc_randomPosition","\q\addons\custom_server\Compiles\Functions\GMS_fnc_randomPosn.sqf"], // find a randomPosn. see script for details. @@ -75,7 +75,7 @@ private _functions = [ ["blck_fnc_spawnCrate","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnCrate.sqf"], // Simply spawns a crate of a specified type at a specific position. ["blck_fnc_spawnMissionCrates","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionCrates.sqf"], ["blck_fnc_cleanupObjects","\q\addons\custom_server\Compiles\Missions\GMS_fnc_cleanUpObjects.sqf"], - ["blck_fnc_spawnCompositionObjects","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnBaseObjects.sqf"], + ["blck_fnc_spawnCompositionObjects","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnCompositionObjects.sqf"], ["blck_fnc_spawnRandomLandscape","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnRandomLandscape.sqf"], ["blck_fnc_spawnMissionVehiclePatrols","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionVehiclePatrols.sqf"], ["blck_fnc_spawnEmplacedWeaponArray","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnEmplacedWeaponArray.sqf"], diff --git a/@GMS/addons/custom_server/Compiles/blck_variables.sqf b/@GMS/addons/custom_server/Compiles/blck_variables.sqf index 8777869..45b631b 100644 --- a/@GMS/addons/custom_server/Compiles/blck_variables.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_variables.sqf @@ -33,6 +33,7 @@ blck_monitoredVehicles = []; blck_livemissionai = []; blck_monitoredMissionAIGroups = []; // Used to track groups in active missions for whatever purpose blck_oldMissionObjects = []; +blck_hiddenTerrainObjects = []; blck_pendingMissions = []; blck_missionsRunning = 0; blck_missionsRun = 0; From f937d9987fd1ab719d1db410453b79ab93987d02 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 19 Sep 2020 13:29:10 -0400 Subject: [PATCH 07/67] Updates to plugin to build 5 --- .../GMS_fnc_createMissionMarkers.sqf | 2 +- .../Functions/GMS_fnc_findSafePosn.sqf | 2 + .../GMS_fnc_garrisonBuilding_relPosSystem.sqf | 4 + @blckeagls_EDEN/addons/3EDEN_plugin.pbo | Bin 133307 -> 140667 bytes @blckeagls_EDEN/addons/3EDEN_plugin.pbo.bak | Bin 129973 -> 0 bytes .../Core/fn_buildingContainer.sqf | 5 +- .../Core/fn_configureGarrisonATL.sqf | 30 ++- .../Core/fn_createGarrisonMarker.sqf | 19 ++ .../3EDEN_plugin/Core/fn_createLootMarker.sqf | 20 ++ .../addons/3EDEN_plugin/Core/fn_display.sqf | 7 +- .../Core/fn_displayGarrisonMarkers.sqf | 30 +++ .../Core/fn_displayLootMarkers.sqf | 27 ++ .../3EDEN_plugin/Core/fn_endMessage.sqf | 7 +- .../3EDEN_plugin/Core/fn_getGarrisonInfo.sqf | 38 ++- .../Core/fn_getLootVehicleInfo.sqf | 31 ++- .../Core/fn_initializeAttributes.sqf | 2 + .../3EDEN_plugin/Core/fn_isInfantry.sqf | 1 - .../addons/3EDEN_plugin/Core/fn_onDrag.sqf | 13 + .../3EDEN_plugin/Core/fn_onRegistered.sqf | 28 ++ .../3EDEN_plugin/Core/fn_onUnregister.sqf | 14 + .../3EDEN_plugin/Core/fn_removeMarker.sqf | 18 ++ .../3EDEN_plugin/Core/fn_setEventHandlers.sqf | 14 + .../3EDEN_plugin/Core/fn_setGarrison.sqf | 43 ++- .../3EDEN_plugin/Core/fn_setLootVehicle.sqf | 49 +++- .../3EDEN_plugin/Core/fn_updateObjects.sqf | 7 +- .../addons/3EDEN_plugin/Export/Untitled-1.txt | 195 ++++++++++---- .../3EDEN_plugin/Export/fn_exportDynamic.sqf | 114 ++++---- .../3EDEN_plugin/Export/fn_exportStatic.sqf | 6 +- .../addons/3EDEN_plugin/config.cpp | 4 +- @blckeagls_EDEN/addons/3EDEN_plugin/defines.h | 245 ++++++------------ 30 files changed, 629 insertions(+), 346 deletions(-) delete mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin.pbo.bak create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createGarrisonMarker.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createLootMarker.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayGarrisonMarkers.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayLootMarkers.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onDrag.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onRegistered.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onUnregister.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_removeMarker.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setEventHandlers.sqf diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_createMissionMarkers.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_createMissionMarkers.sqf index 05f5629..3181d9a 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_createMissionMarkers.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_createMissionMarkers.sqf @@ -61,4 +61,4 @@ if (toUpper(_markerType) in ["ELLIPSE","RECTANGLE"]) then // not an Icon .... //diag_log format["_fnc_createMarkers: case of ICON: _markers = %1",_markers]; }; -_markers +_markers \ No newline at end of file diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf index 6162ee1..ebf2333 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf @@ -99,6 +99,7 @@ while { !_validspot} do _count = _count - 1; _slope = _slope + 0.02; uiSleep 0.1; // to give the server a chance to handle other jobs for a moment + diag_log format["_findSafePosn: _count = %1 | _slope = %2 | _coords = %3",_count,_slope,_coords]; } else { //uiSleep 1; @@ -175,6 +176,7 @@ while { !_validspot} do }; }; + //diag_log format["_fnc_findSafePosn: _coords = %1 | _flatCoords = %2 | _searchCenter = %3 | _angle %4 | _count = %5 | _validSpot = %6",_coords,_flatCoords,_searchCenter,_angle,_count,_validspot]; }; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf index a35c1e6..2969fbc 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf @@ -22,6 +22,10 @@ params["_center", ["_sideArms",[]] ]; +{ + diag_log format["_fnc_garrisonBuilding_relPosSystem: _this %1 = %2",_forEachIndex,_this select _forEachIndex]; +}forEach _this; + if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout}; if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call blck_fnc_selectAISidearms}; if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call blck_fnc_selectAIUniforms}; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin.pbo b/@blckeagls_EDEN/addons/3EDEN_plugin.pbo index 0809a60c01ad5c8acb22d17f1037321a2be0f86e..8af2660f8259925348a6afa66f5478d729e918bd 100644 GIT binary patch delta 12971 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 delta 8597 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 NzVqJb=Koe!{||d_V9fvk diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin.pbo.bak b/@blckeagls_EDEN/addons/3EDEN_plugin.pbo.bak deleted file mode 100644 index 0e447ecc171e97e35709fb061bcd4859f756d0be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129973 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 Db^Rmt diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_buildingContainer.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_buildingContainer.sqf index a61f190..e15af7a 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_buildingContainer.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_buildingContainer.sqf @@ -8,17 +8,16 @@ params["_u",["_category","House"]]; private _pos = getPosASL _u; private _building = objNull; private _surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,10]; -//diag_log format["_surfacesAbove = %1",_surfacesAbove]; + { if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; } forEach _surfacesAbove; if (_building isEqualTo objNull) then { private _surfacesBelow = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 10],_u,_u,true,100]; - //diag_log format["_surfacesBelow = %1",_surfacesBelow]; { if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; } forEach _surfacesBelow; }; -//diag_log format["_fn_buildingContainer: _u = %1 | _building = %2",_u,_building]; + _building \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf index 5410554..0643dab 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf @@ -1,9 +1,12 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ - - -private _building = _this select 0; -private _CENTER = _this select 1; +params["_building","_center"]; private _pos = getPosATL _building; private _garrisonedBuildings = missionNamespace getVariable["blck_garrisonedBuildings",[]]; private _count = 0; @@ -13,6 +16,7 @@ private _buildingGarrisonATL = []; private _configuredStatics = []; private _configuredUnits = []; private _statics = nearestObjects[getPosATL _building,["StaticWeapon"],sizeOf (typeOf _building)]; +private _units = nearestObjects[getPosATL _building,["Man"],sizeOf (typeOf _building)] select {(vehicle _x) isEqualTo _x}; private _lineBreak = toString [10]; { @@ -20,11 +24,9 @@ private _lineBreak = toString [10]; { private _isInside = [_x] call blck3DEN_fnc_isInside; private _container = [_x] call blck3DEN_fnc_buildingContainer; - //diag_log format["evaluating building %1 static %2 isInside = %3 container = %4",_building,_x,_isInside,_container]; if (_isInside && (_container isEqualTo _building)) then { _configuredStatics pushBackUnique _x; - //diag_log format["Building %1 | buildingPos %2 | _pos %3",typeOf _x, getPosATL _x,_pos]; _staticsText pushBack [format['%1',typeOf _x],(getPosATL _x) vectorDiff (_pos),getDir _x]; }; }; @@ -32,7 +34,6 @@ private _lineBreak = toString [10]; _staticsText joinString _lineBreak; // Since this is run from the editor we do not have to worry about units running off from their original locations -private _units = nearestObjects[getPosATL _building,["Man"],sizeOf (typeOf _building)] select {(vehicle _x) isEqualTo _x}; { if !(_x in _configuredUnits) then { @@ -47,14 +48,12 @@ private _units = nearestObjects[getPosATL _building,["Man"],sizeOf (typeOf _buil } forEach _units; _unitsText joinString _lineBreak; -//diag_log format["_staticsText for building %1 = %2",_building,_staticsText]; -//diag_log format["_unitsText for building %1 = %2",_building,_unitsText]; if !((_staticsText isEqualTo []) && (_unitsText isEqualTo [])) then { _buildingGarrisonATL = [ format["%1", typeOf _building], - (getPosATL _building) vectorDiff _pos, + (getPosATL _building) vectorDiff _center, getDir _building, true, true, @@ -62,5 +61,12 @@ if !((_staticsText isEqualTo []) && (_unitsText isEqualTo [])) then _unitsText ]; }; -//diag_log format["_buildingGarrisonATL = %1",_buildingGarrisonATL]; -[_buildingGarrisonATL,_configuredStatics,_configuredUnits] + +private "_return"; +if (_buildingGarrisonATL isEqualTo []) then +{ + _return = []; +} else { + _return = [_buildingGarrisonATL,_configuredStatics,_configuredUnits]; +}; +_return diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createGarrisonMarker.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createGarrisonMarker.sqf new file mode 100644 index 0000000..4f244e1 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createGarrisonMarker.sqf @@ -0,0 +1,19 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ + +params["_object"]; + +private _marker = create3DENEntity ["object","Sign_Arrow_Large_Yellow_F",getPos _object]; +private _markerPos = getPos _object; +private _bbr = boundingBoxReal _object; +_p1 = _bbr select 0; +_p2 = _bbr select 1; +_height = abs ((_p2 select 2) - (_p1 select 2)); +_marker setPosATL [_markerPos select 0, _markerPos select 1, (_markerPos select 2) + _height]; +_object setVariable ["marker",_marker]; + +true \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createLootMarker.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createLootMarker.sqf new file mode 100644 index 0000000..5f2f091 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createLootMarker.sqf @@ -0,0 +1,20 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ + +params["_object"]; + +private _marker = create3DENEntity ["object","Sign_Arrow_Large_Green_F",getPos _object]; +private _markerPos = getPos _object; +private _bbr = boundingBoxReal _object; +_p1 = _bbr select 0; +_p2 = _bbr select 1; +_height = abs ((_p2 select 2) - (_p1 select 2)); +_marker setPosATL [_markerPos select 0, _markerPos select 1, (_markerPos select 2) + _height]; +_object setVariable ["marker",_marker]; + +true + diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_display.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_display.sqf index 7e74fb2..6cf873b 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_display.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_display.sqf @@ -1,4 +1,9 @@ - +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ params["_message"]; // As found in fn_3DENExportTerrainBuilder.sqf diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayGarrisonMarkers.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayGarrisonMarkers.sqf new file mode 100644 index 0000000..a6071ff --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayGarrisonMarkers.sqf @@ -0,0 +1,30 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_state"]; +all3DENEntities params ["_objects"]; +_objects = _objects select {_x getVariable["garrisoned",false]}; + +missionNameSpace setVariable["blck_displayGarrisonMarkerOn",_state]; +{ + if (_state) then // if the request was to show the markers then .... + { + private _marker = _x getVariable["marker",""]; + diag_log format["_x = %1 | _marker = %2",_x,_marker]; + if (_marker isEqualto "") then + { + [_x] call blck3DEN_fnc_createGarrisonMarker; + [_x] call blck3DEN_fnc_setEventHandlers; + }; + } else { + blck_displayGarrisonMarkerOn = false; + if !(_x getVariable["marker",""] isEqualTo "") then + { + [_x] call blck3DEN_fnc_removeMarker; + }; + }; + +} forEach _objects; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayLootMarkers.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayLootMarkers.sqf new file mode 100644 index 0000000..aa1ad0c --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayLootMarkers.sqf @@ -0,0 +1,27 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_state"]; +all3DENEntities params ["_objects"]; +_objects = _objects select {_x getVariable ["lootVehicle",false]}; + +missionNamespace setVariable["blck_displayLootMarkerOn",_state]; +{ + if (_state) then // if the request was to show the markers then .... + { + if (_x getVariable["marker",""] isEqualto "") then + { + [_x] call blck3DEN_fnc_createLootMarker; + [_x] call blck3DEN_fnc_setEventHandlers; + }; + } else { + if !(_x getVariable["marker",""] isEqualTo "") then + { + [_x] call blck3DEN_fnc_removeMarker; + }; + }; + +} forEach _objects; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_endMessage.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_endMessage.sqf index 97d8c6e..aff7298 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_endMessage.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_endMessage.sqf @@ -1,4 +1,9 @@ - +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ params["_end"]; missionNamespace setVariable["blck_endMessage",_end]; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getGarrisonInfo.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getGarrisonInfo.sqf index c5c01ba..50c6a7c 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getGarrisonInfo.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getGarrisonInfo.sqf @@ -1,19 +1,29 @@ - -private _object = get3DENSelected "object" select {((typeOf _x) isKindOf "House") && [_x] call BIS_fnc_isBuildingEnterable}; +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +private _objects = get3DENSelected "object"; private "_message"; - switch (count _objecct) do +diag_log format["getGarrisonInfo: _object = %1",format["%1",_object]]; + if (_objects isEqualTo []) then { - case 0: {_message = "No Enterable Buildings selected"}; - case 1: { - if (_object getVariable["garrisoned",false]) then - { - _message = format["Building %1 IS Garrisoned",typeOf _object]; + _message = "No Buildings Selected"; +} else { + if (count _objects == 1) then + { + if ((_objects select 0) getVariable["garrisoned",false]) then + { + _message = format["Building %1 IS Garrisoned",typeOf (_objects select 0)]; } else { - _message = format["Building %1 is NOT Garrisoned",typeOf _object]; + _message = format["Building %1 is NOT Garrisoned",typeOf (_objects select 0)]; }; - }; - default {_message = "Select a single building then try again"}; - }; - [_message,"Status"] call BIS_fnc_3DENShowMessage; + } else { + _message = format["Select a single building then try again"]; + }; +}; systemChat _message; - diag_log _message; \ No newline at end of file + diag_log _message; + [_message,"Status"] call BIS_fnc_3DENShowMessage; + diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getLootVehicleInfo.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getLootVehicleInfo.sqf index d096d5f..7a3bfc6 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getLootVehicleInfo.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getLootVehicleInfo.sqf @@ -1,22 +1,31 @@ -private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "Car"}; +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "Car" || (typeOf _x) isKindOf "Ship" || (typeOf _x) isKindOf "ThingX"}; private "_message"; -switch (count _objects) do -{ - case 0: {_message = "Select a vehicle and try again"}; - case 1: { + if (_objects isEqualTo []) then + { + _message = "No Cars/Ships/ThingX Selected"; +} else { + if (count _objects == 1) then + { if ((_objects select 0) getVariable["lootvehicle",false]) then { - _message = format["Vehicle %1 IS a loot vehicle",typeOf (_objects select 0)]; + _message = format["Vehicle %1 IS a Loot Vehicle",typeOf (_objects select 0)]; } else { - _message = format["Vehicle %1 is NOT a loot vehicle",typeOf (_objects select 0)]; + _message = format["Vehicle %1 is NOT a Loot Vehicle",typeOf (_objects select 0)]; }; + } else { + _message = format["% Vehicles Selected. Select a single vehicle then try again",count _objects]; }; - default {_message = "Select a single vehicle and try again"}; }; - -[_message,"Status"] call BIS_fnc_3DENShowMessage; - systemChat _message; diag_log _message; +[_message,"Status"] call BIS_fnc_3DENShowMessage; + + diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_initializeAttributes.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_initializeAttributes.sqf index 9bee0fb..f76c05f 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_initializeAttributes.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_initializeAttributes.sqf @@ -13,5 +13,7 @@ missionNamespace setVariable["blck_endState",getText(configFile >> "CfgBlck3DEN" missionNamespace setVariable["blck_startMessage","TODO: Add a start message"]; missionNamespace setVariable["blck_endMessage","TODO: Add an end message"]; missionNamespace setVariable["blck_missionLocations","random"]; +missionNameSpace setVariable["blck_displayGarrisonMarkerOn",false]; +missionNamespace setVariable["blck_displayLootMarkerOn",false]; diag_log format["Mission Attributes Initialized for blckeagls at time %1",diag_tickTime]; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_isInfantry.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_isInfantry.sqf index 72bf045..62fccec 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_isInfantry.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_isInfantry.sqf @@ -8,5 +8,4 @@ private _u = _this select 0; private _isInfantry = if ((_u isKindOf "Man") && (vehicle _u) isEqualTo _u) then {true} else {false}; - //diag_log format["_fn_isInfantry: _isInfantry = %1",_isInfantry]; _isInfantry \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onDrag.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onDrag.sqf new file mode 100644 index 0000000..0231da8 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onDrag.sqf @@ -0,0 +1,13 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_object"]; +if !(_object getVariable["marker",""] isEqualTo "") then +{ + private _marker = _object getVariable["marker",""]; + private _markerPos = getPosATL _object; + _marker setPosATL[_markerPos select 0, _markerPos select 1, (_markerPos select 2) + sizeOf _object]; +}; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onRegistered.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onRegistered.sqf new file mode 100644 index 0000000..855bed8 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onRegistered.sqf @@ -0,0 +1,28 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ + +params["_object"]; + +switch (true) do +{ + case ((typeOf _object) isKindOf "ThingX" && blck_displayLootMarkerOn): { + if !(_object getVariable["lootVehicle",""] isEqualTo "") then + { + [_object] call blck3DEN_fnc_createLootMarker; + [_object] call blck3DEN_fnc_setEventHandlers; + }; + }; + case ((typeOf _object) isKindOf "House" && blck_displayGarrisonMarkerOn): { + if !(_object getVariable["garrisoned",""] isEqualTo "") then + { + [_object] call blck3DEN_fnc_createGarrisonMarker; + [_object] call blck3DEN_fnc_setEventHandlers; + }; + }; +}; + + diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onUnregister.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onUnregister.sqf new file mode 100644 index 0000000..2697b27 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onUnregister.sqf @@ -0,0 +1,14 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_object"]; +if !(_object getvariable["marker",""] isEqualTo "") then +{ + [_object] call blck3DEN_fnc_removeMarker; + _object setVariable ["marker",nil]; + //_object setVariable ["lootVehicle",nil]; + //_object setVariable ["garrisoned",nil]; +}; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_removeMarker.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_removeMarker.sqf new file mode 100644 index 0000000..0d60cfb --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_removeMarker.sqf @@ -0,0 +1,18 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ + +params["_object"]; + +private _marker = _object getVariable["marker",""]; +if !(_marker isEqualTo "") then +{ + private _id = get3DENEntityID _marker; + delete3DENEntities [_id]; + _object setVariable["marker",nil]; +}; + +true \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setEventHandlers.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setEventHandlers.sqf new file mode 100644 index 0000000..e807bdb --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setEventHandlers.sqf @@ -0,0 +1,14 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_object"]; + +_object removeAllEventHandlers "UnregisteredFromWorld3DEN"; +_object removeAllEventHandlers "RegisteredToWorld3DEN"; +_object removeAllEventHandlers "Dragged3DEN"; +_object addEventHandler ["Dragged3DEN",{_this call blck3DEN_fnc_onDrag;}]; +_object addEventHandler ["UnregisteredFromWorld3DEN",{_this call blck3DEN_fnc_onUnregister;}]; +_object addEventHandler ["RegisteredToWorld3DEN", {_this call blck3DEN_fnc_onRegistered;}]; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setGarrison.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setGarrison.sqf index 268fb11..926134a 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setGarrison.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setGarrison.sqf @@ -1,26 +1,47 @@ - +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ params["_state"]; +private _markersStateON = missionNamespace getVariable["blck_displayGarrisonMarkerOn",false]; +[false] call blck3DEN_fnc_displayGarrisonMarkers; private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "House"}; +private "_message"; if (_objects isEqualTo []) exitWith { - _m = "Select one or more buildings to configure"; - systemChat _m; + _message = "Select one or more buildings to configure"; + systemChat _message; + diag_log _message; + [_message,"Status"] call BIS_fnc_3DENShowMessage; }; { if ([_x] call BIS_fnc_isBuildingEnterable) then { _x setVariable["garrisoned",_state]; - _m = format["building of type %1 had garrison state set to %2",typeOf _x,_state]; - systemChat _m; - diag_log _m; + _message = format["building of type %1 had garrison state set to %2",typeOf _x,_state]; + systemChat _message; + diag_log _message; + if (blck_displayGarrisonMarkerOn) then + { + [_x] call blck3DEN_fnc_createGarrisonedMarker; + [_x] call blck3DEN_fnc_setEventHandlers; + }; } else { - _m = format["Object type %1 ignored: only enterable buildings can be garrisoned",typeOf _x]; - systemChat _x; - diag_log _x; + _message = format["Object type %1 ignored: only enterable buildings can be garrisoned",typeOf _x]; + systemChat _message; + diag_log _message; + [_message,"Status"] call BIS_fnc_3DENShowMessage; }; } forEach _objects; -_m = format["Garrison State of %1 buildings updated to %2",count _objects,_state]; -systemChat _m; \ No newline at end of file +_message = format["Garrison State of %1 buildings updated to %2",count _objects,_state]; +systemChat _message; +if (_markersStateON) then +{ + [true] call blck3DEN_fnc_displayGarrisonMarkers; +}; +[_message,"Status"] call BIS_fnc_3DENShowMessage; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setLootVehicle.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setLootVehicle.sqf index 27f574a..d624ad5 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setLootVehicle.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setLootVehicle.sqf @@ -1,22 +1,49 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + + sets a flag stored through setVariable for each selected object that meets the filter criteria + only objects of type "Car"or "ThingX" are allowed. +*/ + params["_state"]; -private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "Car"}; +private _markerStateON = missionNameSpace getVariable["blck_displayLootMarkerOn",false]; +[false] call blck3DEN_fnc_displayLootMarkers; +private "_message"; +private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "Car" || (typeOf _x) isKindOf "Ship"}; // if (_objects isEqualTo []) exitWith { - _m = "Select one or more vehicles to configure"; - systemChat _m; + _message = "Select one or more vehicles or items of type ThingX to configure"; + systemChat _message; }; { - if ((typeOf _x) isKindOf "Car") then + if ((typeOf _x) isKindOf "Car" || (typeOf _x) isKindOf "Ship") then { _x setVariable["lootvehicle",_state]; - _m = format["Vehicle type %1 set to Loot Vehilce = %1",typeOf _x,_state]; - systemChat _m; - diag_log _m; + if (blck_displayLootMarkerOn && _state) then + { + [_x] call blck3DEN_fnc_createLootMarker; + [_x] call blck3DEN_fnc_setEventHandlers; + } else { + if !(_state) then + { + [_x] call blck3DEN_fnc_removeLootMarker; + }; + }; + _message = format["Vehicle type %1 set to Loot Vehicle = %1",typeOf _x,_state]; + systemChat _message; + diag_log _message; } else { - _m = format["Object with type %1 ignored:: only objects of type Car can be used as loot vehicles",typeOf _x]; - diag_log _m; - systemChat _m; + _message = format["Object with type %1 ignored:: only objects of type Car can be used as loot vehicles",typeOf _x]; + diag_log _message; + systemChat _message; }; } forEach _objects; -_m = format["Loot Vehicle State of %1 vehicles updated to %2",count _objects,_state]; + +if (_markerStateON) then +{ + [true] call blck3DEN_fnc_displayLootMarkers; +}; +_message = format["Loot Vehicle State of %1 objects updated to %2",count _objects,_state]; systemChat _m; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_updateObjects.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_updateObjects.sqf index dbdf17a..033239d 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_updateObjects.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_updateObjects.sqf @@ -1,4 +1,9 @@ - +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ private _objects = get3DENSelected "object"; private _markers select {(typeOf _x) = _markerType}; { diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt index d1d19da..6b9c321 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt @@ -1,51 +1,148 @@ -class CfgVehicles -{ - class Object - { - class AttributeCategories - { - class LandVehicle; - class blckLandVehicle: LandVehicle; - { - class Attributes - { - class blckLootVehicle - { - // https://community.bistudio.com/wiki/Eden_Editor:_Configuring_Attributes#Scenario - displayName = "Loot Vehicle"; - toolTip = "Enable/Disable Use as Loot Vehicle"; - property = "blckLootVehicle"; - control = "Edit"; - expression = "_this setVariable['%s',_value];"; - defaultValue = 'false'; - unique = 0; - validate = "BOOL"; - typeName = "BOOL"; - }; - }; - }; - class Static; - class blckHouse: Static - { - class Attributes - { - class blckGarison - { - // https://community.bistudio.com/wiki/Eden_Editor:_Configuring_Attributes#Scenario - displayName = "Garison Building"; - toolTip = "Enable/Disable ?Garisoned Building"; - property = "blckGarison"; - control = "Edit"; - expression = "_this setVariable['%s',_value];"; - defaultValue = 'false'; - unique = 0; - validate = "BOOL"; - typeName = "BOOL"; - }; - }; - }; - }; - }; -}; \ No newline at end of file +/* + Dynamic Mission Generated + Using 3DEN Plugin for blckeagls + dynamicMission.sqf generated:: blckeagls 3DEN Plugin Version 0 : Build 5 : Build Date 09/19/20 + By Ghostrider-GRG- +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +#include "\q\addons\custom_server\Missions\privateVars.sqf"; + +_defaultMissionLocations = []; +_markerType = ["ELLIPSE",[250,250],"SOLID"]; +_markerColor = "COLORRED"; +_startMsg = "TODO: Change approiately"; +_endMsg = "TODO: Change Appropriately"; +_markerMissionName = "TODO: Update appropriately"; +_crateLoot = blck_BoxLoot_Blue; +_lootCounts = blck_lootCountsBlue; + +_garrisonedBuildings_BuildingPosnSystem = [ + +]; + +_garrisonedBuilding_ATLsystem = [ + ["Land_Cargo_Patrol_V3_F",[0,0,0],45,true,true,[["O_GMG_01_high_F",[0.533447,-1.45142,4.34404],229.902]],[]], + ["Land_Cargo_Patrol_V3_F",[0,0,0],90,true,true,[["O_GMG_01_high_F",[-0.669434,-1.43628,4.34404],272.772]],[]], + ["Land_Cargo_HQ_V3_F",[0,0,0],269.183,true,true,[["O_Mortar_01_F",[4.13428,-1.79297,3.12652],0]],[[[-1.19116,2.72095,3.12796],0]]], + ["Land_Cargo_Patrol_V3_F",[0,0,0],179.749,true,true,[["O_GMG_01_high_F",[-1.22046,0.542969,4.34404],0]],[]] +]; + +_missionLandscape = [ + ["Land_HBarrier_Big_F",[-1.98413,-1.92993,-4.76837e-007],45,true,true], + ["Land_HBarrier_Big_F",[3.98779,-7.51294,-4.76837e-007],45,true,true], + ["Land_HBarrier_Big_F",[-7.52954,12.9387,-4.76837e-007],270,true,true], + ["Land_HBarrier_Big_F",[-7.65234,21.4033,-4.76837e-007],90,true,true], + ["Land_HBarrier_5_F",[24.321,15.1624,-4.76837e-007],270,true,true], + ["Land_HBarrier_Big_F",[25.2722,-3.87012,-4.76837e-007],328.551,true,true], + ["Land_HBarrier_Big_F",[20.9385,18.7275,-4.76837e-007],180,true,true], + ["Land_HBarrier_Big_F",[18.2209,-8.25903,-4.76837e-007],330,true,true], + ["Land_HBarrier_Big_F",[10.5823,-10.2063,-4.76837e-007],0,true,true], + ["Land_HBarrier_Big_F",[34.0476,6.36035,-4.76837e-007],299.181,true,true], + ["Land_Cargo_House_V3_F",[11.125,-4.1167,-4.76837e-007],180,true,true], + ["Land_Cargo_House_V3_F",[33.6809,29.3313,-4.76837e-007],90.6682,true,true], + ["Land_HBarrier_Big_F",[17.3999,23.9451,-4.76837e-007],90,true,true], + ["Land_HBarrier_Big_F",[3.64941,26.885,-4.76837e-007],0,true,true], + ["Land_HBarrier_Big_F",[29.6377,37.4236,-4.76837e-007],225,true,true], + ["Land_HBarrier_Big_F",[12.1257,27.1333,-4.76837e-007],1.36604e-005,true,true], + ["Land_HBarrier_Big_F",[36.0908,34.8279,-4.76837e-007],0,true,true], + ["Land_HBarrier_Big_F",[22.8857,39.9236,-4.76837e-007],180,true,true], + ["Land_HBarrier_Big_F",[37.969,13.8748,-4.76837e-007],299.181,true,true], + ["Land_HBarrier_Big_F",[39.5908,21.3279,-4.76837e-007],270,true,true], + ["Land_HBarrier_Big_F",[39.4658,29.7029,-4.76837e-007],90,true,true], + ["Land_HBarrier_Big_F",[-4.69336,26.6685,-4.76837e-007],0,true,true], + ["Land_HBarrier_Big_F",[14.4446,39.6458,-4.76837e-007],180,true,true], + ["Land_HBarrier_5_F",[16.6345,47.3489,-4.76837e-007],180.149,true,true], + ["Land_HBarrier_5_F",[11.1445,47.3962,-4.76837e-007],180.149,true,true], + ["Land_HBarrier_5_F",[18.7251,43.8938,-4.76837e-007],269.822,true,true], + ["Land_HBarrier_5_F",[7.49487,45.4861,-4.76837e-007],124.084,true,true], + ["Land_Cargo_House_V3_F",[33.5195,22.5332,-4.76837e-007],90.6682,true,true], + ["Land_HBarrier_Big_F",[-6.20093,4.80859,-4.76837e-007],75.8618,true,true], + ["RoadCone_L_F",[9.69141,6.51465,-4.76837e-007],0,true,true], + ["Land_Cargo40_military_green_F",[-3.2334,35.5225,-4.76837e-007],45.5098,true,true], + ["Land_Cargo20_grey_F",[-7.22656,32.293,-4.76837e-007],44.3033,true,true], + ["Land_Cargo20_grey_F",[-13.3616,30.4897,-4.76837e-007],0,true,true], + ["Land_Cargo20_grey_F",[26.2278,-12.2869,-4.76837e-007],6.20739,true,true], + ["Land_Cargo20_grey_F",[39.1899,4.03271,-4.76837e-007],272.936,true,true], + ["Land_Canteen_F",[36.6631,46.6692,-4.76837e-007],0,true,true], + ["Land_PaperBox_01_open_boxes_F",[30.7021,49.6111,-4.76837e-007],0,true,true] +]; + +_simpleObjects = [ + +]; + +_missionLootVehicles = [ + +]; + +_missionPatrolVehicles = [ + ["O_LSV_02_armed_F",[24.1306,-41.168,0],87.1292,75,75], + ["O_LSV_02_armed_F",[12.8894,74.8223,-4.76837e-007],87.7224,75,75] +]; + +_submarinePatrolParameters = [ + +]; + +_airPatrols = [ + +]; + +_missionEmplacedWeapons = [ + ["O_HMG_01_high_F",[9.55957,44.0073,-4.76837e-007],0], + ["O_HMG_01_high_F",[21.7991,15.363,-4.76837e-007],0] +]; + +_missionGroups = [ + [[16.9512,1.75757,0.00143862],3,6,"Blue",30,45], + [[8.01904,18.9385,3.12796],3,6,"Blue",30,45], + [[23.6782,30.5142,0.00143862],3,6,"Blue",30,45], + [[30.0935,9.90186,0.00143862],3,6,"Blue",30,45], + [[-0.340576,10.3516,0.00143862],3,6,"Blue",30,45] +]; + +_scubaGroupParameters = [ + +]; + +_missionLootBoxes = [ + ["Land_Pallet_MilBoxes_F",[-3.88013,11.6785,-4.76837e-007],_crateLoot,_lootCounts,0] +]; + +/* + Use the parameters below to customize your mission - see the template or blck_configs.sqf for details about each them +*/ +_chanceHeliPatrol = blck_chanceHeliPatrolBlue; +_noChoppers = blck_noPatrolHelisBlue; +_missionHelis = blck_patrolHelisBlue; +_chancePara = blck_chanceParaBlue; +_noPara = blck_noParaBlue; +_paraTriggerDistance = 400; +_paraSkill = 'Blue'; +_chanceLoot = 0.0; +_paraLoot = blck_BoxLoot_Blue; +_paraLootCounts = blck_lootCountsBlue; +_missionLandscapeMode = "precise"; +_uniforms = blck_SkinList; +_headgear = blck_headgear; +_vests = blck_vests; +_backpacks = blck_backpacks; +_sideArms = blck_Pistols; +_spawnCratesTiming = "atMissionSpawnGround"; +_loadCratesTiming = "atMissionSpawn"; +_endCondition = "allKilledOrPlayerNear"; +_minNoAI = blck_MinAI_Blue; +_maxNoAI = blck_MaxAI_Blue; +_noAIGroups = blck_AIGrps_Blue; +_noVehiclePatrols = blck_SpawnVeh_Blue; +_noEmplacedWeapons = blck_SpawnEmplaced_Blue; +_minNoAI = blck_MinAI_Blue; +_maxNoAI = blck_MaxAI_Blue; +_noAIGroups = blck_AIGrps_Blue; +_noVehiclePatrols = blck_SpawnVeh_Blue; +_noEmplacedWeapons = blck_SpawnEmplaced_Blue; + +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf index 806d835..56d1a5b 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf @@ -23,26 +23,6 @@ lootVehicleVariableName = getText(configFile >> "CfgBlck3DEN" >> "configs" >> " buildingPosGarrisonVariableName = getText(configFile >> "CfgBlck3DEN" >> "configs" >> "buildingPosGarrisonVariableName"); buildingATLGarrisionVariableName = getText(configFile >> "CfgBlck3DEN" >> "configs" >> "buildingATLGarrisionVariableName"); -/* -{ - diag_log format["param %1 = %2",_forEachIndex,_x]; -} forEach [ - objectAtMissionCenter, - blck_minAI, - blck_maxAI, - minPatrolRadius, - maxPatrolRadius, - maxVehiclePatrolRadius, - aircraftPatrolRadius, - oddsOfGarison, - maxGarrisonStatics, - typesGarrisonStatics, - blck_MissionDifficulty, - lootVehicleVariableName, - buildingPosGarrisonVariableName, - buildingATLGarrisionVariableName -];*/ - CENTER = [0,0,0]; diag_log format["Dynamic Export called at %1",diag_tickTime]; @@ -115,11 +95,11 @@ if !(_markers isEqualTo []) then { _m1 = _markers select 0; _markerType = (_m1 get3DENAttribute "itemClass") select 0; - _markerShape = (_m1 get3DENAttribute "markerType") select 0; + //_markerShape = (_m1 get3DENAttribute "markerType") select 0; _markerColor = (_m1 get3DENAttribute "baseColor") select 0; _markerText = (_m1 get3DENAttribute "text") select 0; if !(_markerText isEqualTo "") then {blck_dynamicmarkerMissionName = _markerText}; - _markerBrush = (_m1 get3DENAttribute "markerBrush") select 0; + _markerBrush = (_m1 get3DENAttribute "brush") select 0; _markerPos = (_m1 get3DENAttribute "position") select 0; _markerSize = (_m1 get3DENAttribute "size2") select 0; _markerText = (_m1 get3DENAttribute "text") select 0; @@ -136,11 +116,11 @@ if !(_markers isEqualTo []) then diag_log format[" More than one marker was found; only the first marker was processed"]; }; } else { - _markerType = "mil_square"; - _markerShape = "null"; - _markerSize = "[0,0]"; + _markerType = "ELLIPSE"; + //_markerShape = "ELLIPSE"; + _markerSize = "[250,250]"; _markerColor = "COLORRED"; - _markerBrush = "null"; + _markerBrush = "SOLID"; if !(_objects isEqualTo []) then { CENTER = getPosATL (_objects select 0); @@ -149,7 +129,6 @@ if !(_markers isEqualTo []) then }; diag_log format[" No marker was found, using default values and position for mission center position"]; }; -diag_log format["_m1 = %1 | _type = %2 | _shape = %3 | _size = %4 | _color = %5 | _brush = %6 | _text = %7",_m1,_markerType,_markerShape,_markerSize,_markerColor,_markerBrush,_markerText]; if (CENTER isEqualTo [0,0,0]) then { @@ -163,49 +142,56 @@ private _garisonedUnits = []; private _landscape = _objects select{ !(isSimpleObject _x) && - ((typeOf _x) isKindOf "Static") + ((typeOf _x) isKindOf "Static" || ( (typeOf _x) isKindOf "ThingX")) && + !((typeOf _x) isKindOf "ReammoBox_F") && + !(_x getVariable["isLootContainer",false]) && + !((typeOf _x) isKindOf "Helper_Base_F") }; -private _garisonedPos = []; -private _helpers = _objects select {((typeOf _x) isEqualTo garisonMarkerObject)}; -diag_log format["garisonMarkerObject = %1 | _helpers = %2",garisonMarkerObject,_helpers]; -{ - if ([_x] call blck3DEN_fnc_isInside) then - { - _building = [_x] call blck3DEN_fnc_buildingContainer; - _garisonedBuildings pushbackunique _building; - // data structure ["building Classname",[/*building pos*/],/*building dir*/,/*odds of garrison*/, /*Max Statics*/,/*types statics*/,/*max units*/], - // 1 2 3 4 5 6 7 8 9 - _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true',oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; - }; -} forEach _helpers; -//diag_log format["CENTER = %1 | _landscape = %2",CENTER,_landscape]; -private _garrisonATL = []; -{ - _atl = [_x,CENTER] call blck3DEN_fnc_configureGarrisonATL; - // format["_fnc_exportDynamic: _building = %1 | _atl = %2",_x,_atl]; - //diag_log format["_fnc_exportDynamic: typeName _atl = %1",typeName _atl]; - if (typeName _atl isEqualTo "STRING") then {diag_log format["_fnc_exportDynamic: length _atl = %1 | _atl = '' is %2",count _atl, _atl isEqualTo ""]}; - if !(_atl isEqualTo []) then { - if !((_atl select 0) isEqualTo []) then - { - _garrisonATL pushBack (_atl select 0); - _garisonedBuildings pushBack _x; - _garisonedStatics append (_atl select 1); - _garisonedUnits append (_atl select 2) - //diag_log format["_fnc_exportDynamic: garrisoned building added: %1",_atl]; - }; +private _garisonedPos = []; + +diag_log format["_exportDynamic (174): count _landscape = %1",count _landscape]; +for "_i" from 1 to (count _landscape) do +{ + if (isNull _building) exitWith {}; + private _building = _landscape deleteAt 0; + diag_log format ["_garrisonedPos: evaluating _building %1 | ;garrisoned = %2'",_building,_building getVariable["garrisoned",false]]; + if (_building getVariable["garrisoned",false]) then + { + _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true',oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; + } else { + _landscape pushBack _building; }; -} forEach _landscape; +}; + +private _garrisonATL = []; +for "_i" from 1 to (count _landscape) do +{ + if (isNull _building) exitWith {}; + private _building = _landscape deleteAt 0; + _atl = [_building,CENTER] call blck3DEN_fnc_configureGarrisonATL; + if (_atl isEqualTo []) then { + _landscape pushBack _building; + } else { + _garrisonATL pushBack (format[" %1",_atl select 0]); + _garisonedBuildings pushBack _building; + _garisonedStatics append (_atl select 1); + _garisonedUnits append (_atl select 2); + }; +}; diag_log format["_garrisonATL = %1",_garrisonATL]; private _missionLandscape = []; +for "_i" from 1 to (count _landscape) do { - if !(_x in _garisonedBuildings) then + private _building = _landscape deleteAt 0; + if (isNull _building) exitWith {}; + diag_log format["typeOf _x = %1 | _x isMarker = %2",typeOf _building,_building getVariable["marker",false]]; + if !(_building getVariable["marker",false]) then { - _missionLandscape pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true']; + _missionLandscape pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true']; }; -}forEach _landscape; +}; private _simpleObjects = _objects select {isSimpleObject _x}; diag_log format["_simpleObjects = %1",_simpleObjects]; @@ -218,7 +204,7 @@ private _missionLootVehicles = []; private _lootVehicles = _objects select { ((typeOf _x) isKindOf "AllVehicles") && !((typeOf _x) isKindOf "Man") && - (_x get3DENAttribute "name" isEqualTo lootVehicleVariableName) + (_x getVariable["lootvehicle",false]) }; diag_log format["_lootVehicles = %1",_lootVehicles]; { @@ -229,7 +215,7 @@ _missionPatrolVehicles = []; private _patrolVehicles = _objects select { (((typeOf _x) isKindOf "Car") || ((typeOf _x) isKindOf "Tank") || ((typeOf _x) isKindOf "Ship")) && !((typeOf _x) isKindOf "SDV_01_base_F") && - !(_x in _lootVehicles) + !(_x getVariable["lootvehicle",false]) }; diag_log format["_patrolVehicles = %1",_patrolVehicles]; { @@ -289,7 +275,7 @@ private _scubaGroups = []; } forEach _scuba; private _lootContainers = []; -private _ammoBoxes = _objects select { +private _ammoBoxes = _objects select { // "ReammoBox_F" (((typeOf _x) isKindOf "ReammoBox") || ((typeOf _x) isKindOf "ReammoBox_F")) }; diag_log format["_ammoBoxes = %1",_ammoboxes]; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf index ca3dab0..84e9d94 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf @@ -89,11 +89,11 @@ if !(_markers isEqualTo []) then { _m1 = _markers select 0; _markerType = (_m1 get3DENAttribute "itemClass") select 0; - _markerShape = (_m1 get3DENAttribute "markerType") select 0; + //_markerShape = (_m1 get3DENAttribute "markerType") select 0; _markerColor = (_m1 get3DENAttribute "baseColor") select 0; _markerText = (_m1 get3DENAttribute "text") select 0; if !(_markerText isEqualTo "") then {blck_dynamicmarkerMissionName = _markerText}; - _markerBrush = (_m1 get3DENAttribute "markerBrush") select 0; + _markerBrush = (_m1 get3DENAttribute "brush") select 0; _markerPos = (_m1 get3DENAttribute "position") select 0; _markerSize = (_m1 get3DENAttribute "size2") select 0; _markerText = (_m1 get3DENAttribute "text") select 0; @@ -103,7 +103,7 @@ if !(_markers isEqualTo []) then */ } else { _markerType = "mil_square"; - _markerShape = ""; + //_markerShape = ""; _markerSize = [0,0]; _markerColor = "COLORRED"; _markerBrush = ""; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp index 5c8ba4a..9c2ece5 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp @@ -52,8 +52,8 @@ class CfgBlck3DEN class CfgVersion { version = 1.0; - build = 3; - date = "08/23/20"; + build = 5; + date = "09/19/20"; }; }; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/defines.h b/@blckeagls_EDEN/addons/3EDEN_plugin/defines.h index 034f2a8..7b08db5 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/defines.h +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/defines.h @@ -44,27 +44,32 @@ class CfgFunctions class Core { file = "3EDEN_plugin\Core"; - class help {}; + class about {}; + class buildingContainer {}; + class configureGarrisonATL {}; + class createLootMarker {}; + class createGarrisonMarker {}; + class display {}; + class displayGarrisonMarkers {}; + class displayLootMarkers {}; class getGarrisonInfo {}; class getLootVehicleInfo {}; - class getMissionGarrisonInfo {}; - class getMissionLootVehicleInfo {}; + class help {}; class initializeAttributes {}; class isInfantry {}; class isInside {}; - class buildingContainer {}; - class display {}; + class loadCratesTiming {}; + class onDrag {}; + class onRegistered {}; + class onUnregister {}; + class removeMarker {}; class setDifficulty {}; class setCompletionMode {} class setGarrison {}; class setLootVehicle {}; class setSpawnLocations {}; class spawnCratesTiming {}; - class loadCratesTiming {}; - class endMessage {}; - class startMessage {}; - class configureGarrisonATL {}; class versionInfo {}; }; }; @@ -85,7 +90,7 @@ class cfg3DEN { OnMissionLoad = "call blck3DEN_fnc_initializeAttributes"; OnMissionNew = "call blck3DEN_fnc_initializeAttributes"; - onHistoryChange = "call blck3DEN_fnc_updateObjects"; + //onHistoryChange = "call blck3DEN_fnc_updateObjects"; }; }; @@ -110,24 +115,6 @@ class cfg3DEN }; }; - class blck_garison: Combo - { - class Value - { - text = "Set Garison State"; - items[] = {"No_Garison","Has_garison"}; - }; - class no_garison - { - text = "No Garison"; - //action = "_this setVariable['garison',0];"; - }; - class has_garison - { - text = "Has Garison"; - //action = "_this setVariable['garison',1];"; - }; - }; }; @@ -148,24 +135,7 @@ class cfg3DEN class CfgVehicles { - class House; - class blck_House: House - { - class Attributes - { - class blck_garisoned - { - displayName = "Garrison"; - toolTip = "Define Garrisoned Buildings"; - control = "blck_garison"; - - expression = "_this setVariable ['garrisoned',_value];"; - defaultValue = false; - unique = 0; - }; - }; - }; }; class ctrlMenuStrip; @@ -175,67 +145,6 @@ class display3DEN { class Controls { - /* - class ContextMenu: ctrlMenu - { - class Items - { - items[] += { - "blck_markLootVehicle", - "blck_markGarisonBuildingPos" - }; - class blck_markLootVehicle - { - text = "Designate Loot Vehicles"; - value = false; - //action = "systemChat 'value toggled'"; - conditionShow = "selectedObject"; - items[] = { - "blck_clearLootVehicle", - "blck_designateLootVehicle" - }; - }; - class blck_clearLootVehicle - { - text = "Clear Loot Vehicle Settings"; - value = false; - action = "[false] call blck3DEN_fnc_setLootVehicleStatus"; - }; - class blck_deisgnateLootVehicle - { - text = "Desinate Loot Vehicle"; - value = true; - action = "[true] call blck3DEN_fnc_setLootVehicleStatus"; - }; - - class blck_markGarisonBuildingPos - { - text = "Designate Garisoned Buildings"; - value = false; - conditionShow = "selectedObject"; - items[] = { - "blck_clearGarisonSettings", - "blck_designateGarisonedBuilding" - }; - }; - class blck_clearGarisonSettings - { - text = "Clear Garison Settings"; - value = false; - conditionShow = "selectedObject"; - action = "[false] call blck3DEN_fnc_setGarison"; - }; - class blck_designateGarisonedBuilding - { - text = "Set as Garisoned Building"; - value = true; - conditionShow = "SelectedObject"; - action = "[true] call blck3DEN_fnc_setGarison"; - }; - - }; - }; - */ class MenuStrip: ctrlMenuStrip { @@ -258,12 +167,12 @@ class display3DEN "blckMissionLocation", "blckSeparator", "blck_setGarrison", - "blck_getGarrisonInfo", - "blck_getMissionGarrisonInfo", + //"blck_getGarrisonInfo", + //"blck_getMissionGarrisonInfo", "blckSeparator", "blck_markLootVehicle", - "blck_getLootVehicleInfo", - "blck_getMissionLootVehicleInfo", + //"blck_getLootVehicleInfo", + //"blck_getMissionLootVehicleInfo", "blckSeparator", "blckSaveStaticMission", "blckSaveDynamicMission", @@ -420,35 +329,6 @@ class display3DEN action = "['atMissionCompletion'] call blck3DEN_fnc_loadCratesTiming"; }; - /* - ///////////////////////////// - class blckMissionMessages - { - text = "Set timing for loading crates"; - items[] = { - "blckStartMessage", - "blckEndMessage" - }; - }; - // ["Title","Default","ctrlControlsGroupNoScrollbars","ctrlControlsGroup","ctrlDefault"] - class Edit; - class blckEdit: Edit - { - control = "Edit"; - value = ""; - }; - class blckStartMessage: blckEdit - { - text = "Misstion Start Message"; - action = "[_value] call blck3DEN_startMessage"; - }; - class blckEndMessage: blckEdit - { - text = "Mission End Message"; - action = "[_value] call blck3DEN_endMessage"; - }; - */ - class blckMissionLocation { text = "Toggle Random or Fixed Location"; @@ -470,16 +350,26 @@ class display3DEN action = "['fixed'] call blck3DEN_fnc_setSpawnLocations"; }; + /////////////////////////////////////////////////////// + class blck_setGarrison { - text = "Set as Garrisoned Building"; + text = "Garrisoned Building Settings"; toolTip = "Set garrison status of selected buildings"; items[] = { - "blck_isGarrisoned", - "blck_clearGarrisoned", - "blck_getGarrisonInfo" + "blck_setGarrisonedState", + "blck_getGarrisonInfo", + "blck_garrisonMarkers" }; }; + class blck_setGarrisonedState + { + items[] = { + "blck_isGarrisoned", + "blck_clearGarrisoned" + }; + text = "Garrison Settings"; + }; class blck_isGarrisoned { text = "Garrison Building"; @@ -498,46 +388,79 @@ class display3DEN { text = "Get Building Garrisoned Setting"; toolTip = "Get the selected buildings garrisoned flag"; - value = 0; action = "call blck3DEN_fnc_getGarrisonInfo"; }; - class getMissionGarrisonInfo + class blck_garrisonMarkers { - text = "Get garrison flag for selected buildings"; - toolTip = "The garrisoned flag state will be displayed for selected bulidings"; - value = 0; - action = "call blck3DEN_fnc_getMissionGarrisonInfo"; + items[] = { + "blck_GarrisonMarkersOn", + "blck_GarrisonMarkersOff" + }; + text = "Toggle markers over garrisoned buildings"; }; + class blck_GarrisonMarkersOn + { + text = "Display Markers over Garrisoned Buildings"; + action = "[true] call blck3DEN_fnc_displayGarrisonMarkers"; + }; + class blck_GarrisonMarkersOff + { + text = "Hide Markers over Garrisoned Buildings"; + action = "[false] call blck3DEN_fnc_displayGarrisonMarkers"; + }; + + /////////////////////////////////////////////////////////////// class blck_markLootVehicle { - text = "Designate Loot Vehicles"; - value = false; - //action = "systemChat 'value toggled'"; - conditionShow = "selectedObject"; + text = "Loot Vehicle Settings"; items[] = { - "blck_clearLootVehicle", - "blck_designateLootVehicle" + "blck_designateLootVehicleState", + "blck_getLootVehicleInfo", + "blck_displayLootMarkers" }; }; - class blck_clearLootVehicle + class blck_designateLootVehicleState + { + items[] = { + "blck_setAsLootVehicle", + "blck_clearLootVehicleFlag" + }; + text = "Loot Vehicle Settings"; + }; + class blck_clearLootVehicleFlag { text = "Clear Loot Vehicle Settings"; - value = false; action = "[false] call blck3DEN_fnc_setLootVehicle"; }; - class blck_designateLootVehicle + class blck_setAsLootVehicle { text = "Desinate Loot Vehicle"; - value = true; action = "[true] call blck3DEN_fnc_setLootVehicle"; }; class blck_getLootVehicleInfo { text = "Get setting for selected vehicle"; - value = 0; action = "call blck3DEN_fnc_getLootVehicleInfo"; - }; + }; + class blck_displayLootMarkers + { + items[] = { + "blck_lootMarkersOn", + "blck_lootMarkersOff" + }; + text = "Toggle Loot Vehicle Markers"; + }; + class blck_lootMarkersOn + { + text = "Mark Loot Vehicles / Objects"; + action = "[true] call blck3DEN_fnc_displayLootMarkers"; + }; + class blck_lootMarkersOff + { + text = "Hide Markers of Loot Vehicles / Objects"; + action = "[false] call blck3DEN_fnc_displayLootMarkers"; + }; ///////////////////////////// class blckSaveStaticMission { From 4878bccd0bbf142a2c998071a690edd9c1082805 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Mon, 21 Sep 2020 21:58:48 -0400 Subject: [PATCH 08/67] Fixed issues with export of simple objects --- @blckeagls_EDEN/addons/3EDEN_plugin.pbo | Bin 140667 -> 137360 bytes .../Core/fn_configureGarrisionBuildingPos.sqf | 34 ---- .../Core/fn_configureGarrisonATL.sqf | 7 +- .../addons/3EDEN_plugin/Export/Untitled-1.txt | 157 ++---------------- .../3EDEN_plugin/Export/fn_exportDynamic.sqf | 50 +++--- .../3EDEN_plugin/Export/fn_exportStatic.sqf | 16 +- .../addons/3EDEN_plugin/config.cpp | 4 +- 7 files changed, 58 insertions(+), 210 deletions(-) delete mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisionBuildingPos.sqf diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin.pbo b/@blckeagls_EDEN/addons/3EDEN_plugin.pbo index 8af2660f8259925348a6afa66f5478d729e918bd..3d7074220714d3dc2c6544f2122304901d075fb8 100644 GIT binary patch delta 2608 zcmcgtT}&KR6!t)q-Nmw5U;*1wdRe3`?QZ2)gq2!AT}iOgv}q!R3W3-}7@Fmgxc8Jox=W{j`Ks+;>W-h>V zP3Dpf3=P0bUzd!F%y>;mg#X?*E^fyhmkj{ljRXT6-rEd0HTyA0z;a_rOYoEmdh zl{-DnV)613fz%R5N%d1@rSFX7t0Vbv$yyK!i#_ZM$4ipj`#c}u{VZ%R*AW#ZuNd^> zM}3fW$ne!sOcX&9IwPcnZM?LB5ac@~;iwphN_>R!vUZo9t3!-iS@3Qz*mxSrM&6J{<~1?>!bNxKu{D$T_~z_)$^UN6Q3Lo z@R1V^y$tfA#QWJQsZTIVBBw$EtA~#eT1hQo@Y&icKEj=JQmHh{3ay^Ka3^tR3`h#a zUs?sZI93jo2tPs=&VB-|Thi0g(-_nyJk$=7e?7Zd+v@EBh}QMrAQb`|-gDyt`{-Lff!yh&FBibtp(izMai2*||YLg{y0@a3PLlv73rg-{Rqh|2)ImpHz<{_|I ze;mIKo@6S}FLLOg-I%3##VsavT_2Ca4Yll6!OC^E=P)d7j_%arTvtf4|vrws7kk=h9c$-kxsW@v-dZ?8P+U9m`MmyhfH^ z{rFS2cAwwZcyMIh@#Orz=O66b)?HzZuRe#bD(v~`zOCJpn;T!9c{@!eH!pvy@3D@J z(Vni(JMNe$)zaXT!636k+y55{ zggjo~yPqtp`fcY)-@5vD7fI*sTgtPC$|q;0($Qm2q+hB9$^3o6jvYZ)XAlH#=y$mA z>et90+^Nryjqc<#r1uu1+*h6UU%_d$c8$*NJ>4R@$Em6Uv;=Q-zU#*ih|w2 zuuoR7&r2)Qm3!i^g?()x*dNbyB49O074llO;03yOV!CrGFGZpD^tl~nLL7v zS%_CLR8i()+=7Z7GjsyV--4YOPfD z?)s1@%B6xOIBKl0CX|#59f=|W1sBK1@qk;-bqE52*(f_;tj-R!1>lBJ=f+Z_Y&)Iy z(8Hb(OzDu(NC~U$^&n)7zIlZd)PZ5&3esvaT%OF_0LsRSOYaBVu=t>;(XljXfidHA z?%usZ`ehC&0W`*j1w$h)EQ0@k0zE+3NQGQbD`RM-6)24R;}x<+S%Ra}&LD4;;WLmpACMULf)v3M19EifXY!Uz!-B#jN@_|VEyikLJ|vg8HEt;6ZjhQX%i<6TiiIz+rT}GZ*ASfWet|8T>>6xW zvZ3>)4E3#odzCA6vnEU4$tDTpZNe5b8vAmT?KC~OQOEfd0;hBY9Qqm)t?mKWDC4}u z!A)CRV085{;AhMj`eRGcHoV@A2MnLu+; z6op!WTAk|}H-!3L0Yxk10?nhHtDj1-Xp}{}RY=q-bW#;j73*A4aP&YHtBmmfD9DIo zLJ8r=caC&(LFOA}L8IX?3=W8u#ZfL=CZeDed*h$D|Ff0S#9l0-$w=0lkrm5Pl^P=i zl4x-`6Z)sJ_MupEvOHDB^j%0Mt7$sj7+sPIEE}PWFi#qdsC97Bh}q0;zsar<%%c|? zV1q`hBPc^qvBuQH(7=SrB1ZFIl#A3D?UEthnElPN%6P{)3`8r0@%sV{#wfXF3{>x< zXkyz%w|N*SZOA$4p-*= zUQ?MtXpdFq)7dOW@DB9}Fw(?%t5J9V2V{P6G#NQ`IAJ0wRZpf983ww=8u>$&s19xF0nOJxYWs7nfwjbZ4s-nKKFO($NsN{*UrogXVrO{KNuV0j8jUP-LqX<~-SixCbEt#xPIwttc> o^`U=}pRcRm{yv#2Y&thTvi{Ph&(FOhkIcRMT1mft>DBrF0!PDB`2YX_ diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisionBuildingPos.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisionBuildingPos.sqf deleted file mode 100644 index 0d392f7..0000000 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisionBuildingPos.sqf +++ /dev/null @@ -1,34 +0,0 @@ - - -#define oddsOfGarrison 0.67 -#define maxGarrisonStatics 3 -#define maxGarrisonUnits 4 -#define typesGarrisonStatics [] // When empty a static will be randomly chosen from the defaults for blckeagls -#define garrisonMarkerObject "Sign_Sphere100cm_F" // This can be anything you like. I find this large sphere easy to see and convenient. -#define unitMarkerObject "Sign_Arrow_Direction_Green_F" // This can be anything. I chose this arrow type because it allows you to easily indicate direction. - -_helpers = allMissionObjects garrisonMarkerObject; -//diag_log format["_helpers = %1",_helpers]; -{ - if ( (typeOf _x) isEqualTo garrisonMarkerObject) then - { - private _isInside = [_x] call _fn_isInside; - if (_isInside) then - { - _building = [_x] call _fn_buildingContainer; - blck_garrisonedBuildings pushbackunique _building; - blck_garrisonedBuildings pushbackunique _x; - // data structure ["building Classname",[/*building pos*/],/*building dir*/,/*odds of garrison*/, /*Max Statics*/,/*types statics*/,/*max units*/], - // 1 2 3 4 5 6 7 8 9 - _line = format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true',oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; - systemChat _line; - //diag_log _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; - }; -} forEach _helpers; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf index 0643dab..7d44bf4 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf @@ -50,13 +50,16 @@ _unitsText joinString _lineBreak; if !((_staticsText isEqualTo []) && (_unitsText isEqualTo [])) then { + private _allowDamage = (_building get3DENAttribute "allowDamage") select 0; + private _enableSimulation = (_building get3DENAttribute "enableSimulation") select 0; + diag_log format["_configureGarrisonATL: _building %1 | damage %2 | simulation %3",_allowDamage,_enableSimulation]; _buildingGarrisonATL = [ format["%1", typeOf _building], (getPosATL _building) vectorDiff _center, getDir _building, - true, - true, + _allowDamage, + _enableSimulation, _staticsText, _unitsText ]; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt index 6b9c321..141fbb2 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt @@ -1,148 +1,11 @@ - -/* - Dynamic Mission Generated - Using 3DEN Plugin for blckeagls - dynamicMission.sqf generated:: blckeagls 3DEN Plugin Version 0 : Build 5 : Build Date 09/19/20 - By Ghostrider-GRG- -*/ - -#include "\q\addons\custom_server\Configs\blck_defines.hpp"; -#include "\q\addons\custom_server\Missions\privateVars.sqf"; - -_defaultMissionLocations = []; -_markerType = ["ELLIPSE",[250,250],"SOLID"]; -_markerColor = "COLORRED"; -_startMsg = "TODO: Change approiately"; -_endMsg = "TODO: Change Appropriately"; -_markerMissionName = "TODO: Update appropriately"; -_crateLoot = blck_BoxLoot_Blue; -_lootCounts = blck_lootCountsBlue; - -_garrisonedBuildings_BuildingPosnSystem = [ - -]; - -_garrisonedBuilding_ATLsystem = [ - ["Land_Cargo_Patrol_V3_F",[0,0,0],45,true,true,[["O_GMG_01_high_F",[0.533447,-1.45142,4.34404],229.902]],[]], - ["Land_Cargo_Patrol_V3_F",[0,0,0],90,true,true,[["O_GMG_01_high_F",[-0.669434,-1.43628,4.34404],272.772]],[]], - ["Land_Cargo_HQ_V3_F",[0,0,0],269.183,true,true,[["O_Mortar_01_F",[4.13428,-1.79297,3.12652],0]],[[[-1.19116,2.72095,3.12796],0]]], - ["Land_Cargo_Patrol_V3_F",[0,0,0],179.749,true,true,[["O_GMG_01_high_F",[-1.22046,0.542969,4.34404],0]],[]] -]; - -_missionLandscape = [ - ["Land_HBarrier_Big_F",[-1.98413,-1.92993,-4.76837e-007],45,true,true], - ["Land_HBarrier_Big_F",[3.98779,-7.51294,-4.76837e-007],45,true,true], - ["Land_HBarrier_Big_F",[-7.52954,12.9387,-4.76837e-007],270,true,true], - ["Land_HBarrier_Big_F",[-7.65234,21.4033,-4.76837e-007],90,true,true], - ["Land_HBarrier_5_F",[24.321,15.1624,-4.76837e-007],270,true,true], - ["Land_HBarrier_Big_F",[25.2722,-3.87012,-4.76837e-007],328.551,true,true], - ["Land_HBarrier_Big_F",[20.9385,18.7275,-4.76837e-007],180,true,true], - ["Land_HBarrier_Big_F",[18.2209,-8.25903,-4.76837e-007],330,true,true], - ["Land_HBarrier_Big_F",[10.5823,-10.2063,-4.76837e-007],0,true,true], - ["Land_HBarrier_Big_F",[34.0476,6.36035,-4.76837e-007],299.181,true,true], - ["Land_Cargo_House_V3_F",[11.125,-4.1167,-4.76837e-007],180,true,true], - ["Land_Cargo_House_V3_F",[33.6809,29.3313,-4.76837e-007],90.6682,true,true], - ["Land_HBarrier_Big_F",[17.3999,23.9451,-4.76837e-007],90,true,true], - ["Land_HBarrier_Big_F",[3.64941,26.885,-4.76837e-007],0,true,true], - ["Land_HBarrier_Big_F",[29.6377,37.4236,-4.76837e-007],225,true,true], - ["Land_HBarrier_Big_F",[12.1257,27.1333,-4.76837e-007],1.36604e-005,true,true], - ["Land_HBarrier_Big_F",[36.0908,34.8279,-4.76837e-007],0,true,true], - ["Land_HBarrier_Big_F",[22.8857,39.9236,-4.76837e-007],180,true,true], - ["Land_HBarrier_Big_F",[37.969,13.8748,-4.76837e-007],299.181,true,true], - ["Land_HBarrier_Big_F",[39.5908,21.3279,-4.76837e-007],270,true,true], - ["Land_HBarrier_Big_F",[39.4658,29.7029,-4.76837e-007],90,true,true], - ["Land_HBarrier_Big_F",[-4.69336,26.6685,-4.76837e-007],0,true,true], - ["Land_HBarrier_Big_F",[14.4446,39.6458,-4.76837e-007],180,true,true], - ["Land_HBarrier_5_F",[16.6345,47.3489,-4.76837e-007],180.149,true,true], - ["Land_HBarrier_5_F",[11.1445,47.3962,-4.76837e-007],180.149,true,true], - ["Land_HBarrier_5_F",[18.7251,43.8938,-4.76837e-007],269.822,true,true], - ["Land_HBarrier_5_F",[7.49487,45.4861,-4.76837e-007],124.084,true,true], - ["Land_Cargo_House_V3_F",[33.5195,22.5332,-4.76837e-007],90.6682,true,true], - ["Land_HBarrier_Big_F",[-6.20093,4.80859,-4.76837e-007],75.8618,true,true], - ["RoadCone_L_F",[9.69141,6.51465,-4.76837e-007],0,true,true], - ["Land_Cargo40_military_green_F",[-3.2334,35.5225,-4.76837e-007],45.5098,true,true], - ["Land_Cargo20_grey_F",[-7.22656,32.293,-4.76837e-007],44.3033,true,true], - ["Land_Cargo20_grey_F",[-13.3616,30.4897,-4.76837e-007],0,true,true], - ["Land_Cargo20_grey_F",[26.2278,-12.2869,-4.76837e-007],6.20739,true,true], - ["Land_Cargo20_grey_F",[39.1899,4.03271,-4.76837e-007],272.936,true,true], - ["Land_Canteen_F",[36.6631,46.6692,-4.76837e-007],0,true,true], - ["Land_PaperBox_01_open_boxes_F",[30.7021,49.6111,-4.76837e-007],0,true,true] -]; - -_simpleObjects = [ - -]; - -_missionLootVehicles = [ - -]; - -_missionPatrolVehicles = [ - ["O_LSV_02_armed_F",[24.1306,-41.168,0],87.1292,75,75], - ["O_LSV_02_armed_F",[12.8894,74.8223,-4.76837e-007],87.7224,75,75] -]; - -_submarinePatrolParameters = [ - -]; - -_airPatrols = [ - -]; - -_missionEmplacedWeapons = [ - ["O_HMG_01_high_F",[9.55957,44.0073,-4.76837e-007],0], - ["O_HMG_01_high_F",[21.7991,15.363,-4.76837e-007],0] -]; - -_missionGroups = [ - [[16.9512,1.75757,0.00143862],3,6,"Blue",30,45], - [[8.01904,18.9385,3.12796],3,6,"Blue",30,45], - [[23.6782,30.5142,0.00143862],3,6,"Blue",30,45], - [[30.0935,9.90186,0.00143862],3,6,"Blue",30,45], - [[-0.340576,10.3516,0.00143862],3,6,"Blue",30,45] -]; - -_scubaGroupParameters = [ - -]; - -_missionLootBoxes = [ - ["Land_Pallet_MilBoxes_F",[-3.88013,11.6785,-4.76837e-007],_crateLoot,_lootCounts,0] -]; - -/* - Use the parameters below to customize your mission - see the template or blck_configs.sqf for details about each them -*/ -_chanceHeliPatrol = blck_chanceHeliPatrolBlue; -_noChoppers = blck_noPatrolHelisBlue; -_missionHelis = blck_patrolHelisBlue; -_chancePara = blck_chanceParaBlue; -_noPara = blck_noParaBlue; -_paraTriggerDistance = 400; -_paraSkill = 'Blue'; -_chanceLoot = 0.0; -_paraLoot = blck_BoxLoot_Blue; -_paraLootCounts = blck_lootCountsBlue; -_missionLandscapeMode = "precise"; -_uniforms = blck_SkinList; -_headgear = blck_headgear; -_vests = blck_vests; -_backpacks = blck_backpacks; -_sideArms = blck_Pistols; -_spawnCratesTiming = "atMissionSpawnGround"; -_loadCratesTiming = "atMissionSpawn"; -_endCondition = "allKilledOrPlayerNear"; -_minNoAI = blck_MinAI_Blue; -_maxNoAI = blck_MaxAI_Blue; -_noAIGroups = blck_AIGrps_Blue; -_noVehiclePatrols = blck_SpawnVeh_Blue; -_noEmplacedWeapons = blck_SpawnEmplaced_Blue; -_minNoAI = blck_MinAI_Blue; -_maxNoAI = blck_MaxAI_Blue; -_noAIGroups = blck_AIGrps_Blue; -_noVehiclePatrols = blck_SpawnVeh_Blue; -_noEmplacedWeapons = blck_SpawnEmplaced_Blue; - -#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; \ No newline at end of file +all3DENEntities params ["_objects"]; +{ + diag_log format [ + "classname %1 | position %2 | direction %3 | isSimple = %4", + (_x get3DENAttribute "ItemClass") select 0, + (_x get3DENAttribute "position") select 0, + ((_x get3DENAttribute "rotation") select 0) select 2, + (_x get3DENAttribute "objectIsSimple") select 0 + ]; +} forEach _objects; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf index 56d1a5b..48fedeb 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf @@ -67,8 +67,8 @@ if (isNil "blck_missionEndCondition") then Look for an object defined in CfgBlck3DEN \ configs \ that marks the center of the mission and set the coords of the center if such an object is found */ - -private _centerMarkers = allMissionObjects objectAtMissionCenter; +all3DENEntities params ["_objects","_groups","_triggers","_systems","_waypoints","_markers","_layers","_comments"]; +private _centerMarkers = _objects select {(typeOf _x) isEqualTo objectAtMissionCenter}; diag_log format["_centerMarkers = %1",_centerMarkers]; if !(_centerMarkers isEqualTo []) then { @@ -79,13 +79,6 @@ if !(_centerMarkers isEqualTo []) then diag_log format["Place such an object or a marker to ensure the mission is accurately stored and spawned"]; }; -all3DENEntities params ["_objects","_groups","_triggers","_systems","_waypoints","_markers","_layers","_comments"]; -private _units = []; -{ - { - if (vehicle _x isEqualTo _x) then {_units pushBack _x}; - } forEach (units _x); -} forEach _groups; private["_m1","_markerPos","_markerType","_markerShape","_markerColor","_markerText","_markerBrush","_markerSize","_markerAlpha"]; /* @@ -141,7 +134,7 @@ private _garisonedStatics = []; private _garisonedUnits = []; private _landscape = _objects select{ - !(isSimpleObject _x) && + !((_x get3DENAttribute "objectIsSimple") select 0) && ((typeOf _x) isKindOf "Static" || ( (typeOf _x) isKindOf "ThingX")) && !((typeOf _x) isKindOf "ReammoBox_F") && !(_x getVariable["isLootContainer",false]) && @@ -149,22 +142,24 @@ private _landscape = _objects select{ }; private _garisonedPos = []; - -diag_log format["_exportDynamic (174): count _landscape = %1",count _landscape]; +diag_log format["_exportDynamic (152): count _landscape = %1",count _landscape]; for "_i" from 1 to (count _landscape) do { if (isNull _building) exitWith {}; private _building = _landscape deleteAt 0; - diag_log format ["_garrisonedPos: evaluating _building %1 | ;garrisoned = %2'",_building,_building getVariable["garrisoned",false]]; if (_building getVariable["garrisoned",false]) then { - _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true',oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; + private _allowDamage = (_building get3DENAttribute "allowDamage") select 0; + private _enableSimulation = (_building get3DENAttribute "enableSimulation") select 0; + diag_log format["_exportDynamic-garisonedPos: _building %1 | damage %2 | simulation %3",_building,_allowDamage,_enableSimulation]; + _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building,_allowDamage,_enableSimulation,oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; } else { _landscape pushBack _building; }; }; private _garrisonATL = []; +diag_log format["_exportDynamic (169): count _landscape = %1",count _landscape]; for "_i" from 1 to (count _landscape) do { if (isNull _building) exitWith {}; @@ -179,25 +174,34 @@ for "_i" from 1 to (count _landscape) do _garisonedUnits append (_atl select 2); }; }; -diag_log format["_garrisonATL = %1",_garrisonATL]; +diag_log format["_garrisonATL = %1",_garrisonATL]; +diag_log format["_exportDynamic (185): count _landscape = %1",count _landscape]; private _missionLandscape = []; for "_i" from 1 to (count _landscape) do { private _building = _landscape deleteAt 0; if (isNull _building) exitWith {}; - diag_log format["typeOf _x = %1 | _x isMarker = %2",typeOf _building,_building getVariable["marker",false]]; if !(_building getVariable["marker",false]) then { - _missionLandscape pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true']; + private _allowDamage = (_building get3DENAttribute "allowDamage") select 0; + private _enableSimulation = (_building get3DENAttribute "enableSimulation") select 0; + diag_log format["typeOf _x = %1 | damage = %2 | simulation = %3",typeOf _building,_allowDamage,_enableSimulatoin]; + _missionLandscape pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, _allowDamage,_enableSimulation]; }; }; -private _simpleObjects = _objects select {isSimpleObject _x}; +private _simpleObjects = _objects select {(_x get3DENAttribute "objectIsSimple") select 0}; diag_log format["_simpleObjects = %1",_simpleObjects]; private _missionSimpleObjects = []; { - _missionSimpleObjects pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true']; + private _object = format[' ["%1",%2,%3]', + (_x get3DENAttribute "ItemClass") select 0, + ((_x get3DENAttribute "position") select 0) vectorDiff CENTER, + ((_x get3DENAttribute "rotation") select 0) select 2 + ]; + diag_log format["_object = %1",_object]; + _missionSimpleObjects pushBack _object; } forEach _simpleObjects; private _missionLootVehicles = []; @@ -258,6 +262,12 @@ private _infantry = _units select { }; diag_log format["_garisonedUnits = %1",_garisonedUnits]; diag_log format["_infantry = %1",_infantry]; +private _units = []; +{ + { + if (vehicle _x isEqualTo _x) then {_units pushBack _x}; + } forEach (units _x); +} forEach _groups; _infantryGroups = []; { _infantryGroups pushBack format[' [%1,%2,%3,"%4",%5,%6]',(getPosATL _x) vectorDiff CENTER,blck_minAI,blck_maxAI,blck_MissionDifficulty,minPatrolRadius,maxPatrolRadius]; @@ -322,7 +332,7 @@ _lines pushback (_missionLandscape joinString (format [",%1", _lineBreak])); _lines pushBack "];"; _lines pushBack ""; _lines pushBack "_simpleObjects = ["; -_lines pushback (_simpleObjects joinString (format [",%1", _lineBreak])); +_lines pushback (_missionSimpleObjects joinString (format [",%1", _lineBreak])); _lines pushBack "];"; _lines pushBack ""; _lines pushBack "_missionLootVehicles = ["; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf index 84e9d94..8e0d600 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf @@ -116,7 +116,7 @@ private _garisonedStatics = []; private _garisonedUnits = []; private _landscape = _objects select{ - !(isSimpleObject _x) && + !((_x get3DENAttribute "objectIsSimple") select 0) && ((typeOf _x) isKindOf "Static") && !((typeOf _x) isKindOf "Helper") }; @@ -124,14 +124,20 @@ private _landscape = _objects select{ diag_log format["CENTER = %1 | _landscape = %2","ignored",_landscape]; private _missionLandscape = []; { - _missionLandscape pushBack format[' ["%1",%2,%3,%4]',typeOf _x,(getPosATL _x),[vectorDir _x,vectorUp _x], [true,true]]; + private _allowDamage = (_x get3DENAttribute "allowDamage") select 0; + private _enableSimulation = (_x get3DENAttribute "enableSimulation") select 0; + _missionLandscape pushBack format[' ["%1",%2,%3,%4]',typeOf _x,(getPosATL _x),[vectorDir _x,vectorUp _x], [_allowDamage,_enableSimulation]]; }forEach _landscape; -private _simpleObjects = _objects select {isSimpleObject _x}; +private _simpleObjects = _objects select {(_x get3DENAttribute "objectIsSimple") select 0}; diag_log format["_simpleObjects = %1",_simpleObjects]; private _missionSimpleObjects = []; { - _missionSimpleObjects pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x),[vectorDir _x,vectorUp _x], 'true','true']; + _missionSimpleObjects pushBack format[' ["%1",%2,%3]', + (_x get3DENAttribute "ItemClass") select 0, + ((_x get3DENAttribute "position") select 0), + ((_x get3DENAttribute "rotation") select 0) select 2 + ]; } forEach _simpleObjects; private _missionLootVehicles = []; @@ -247,7 +253,7 @@ _lines pushback (_missionLandscape joinString (format [",%1", _lineBreak])); _lines pushBack "];"; _lines pushBack ""; _lines pushBack "_simpleObjects = ["; -_lines pushback (_simpleObjects joinString (format [",%1", _lineBreak])); +_lines pushback (_missionSimpleObjects joinString (format [",%1", _lineBreak])); _lines pushBack "];"; _lines pushBack ""; _lines pushBack "_missionLootVehicles = ["; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp index 9c2ece5..72a2777 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp @@ -52,8 +52,8 @@ class CfgBlck3DEN class CfgVersion { version = 1.0; - build = 5; - date = "09/19/20"; + build = 7; + date = "09/21/20"; }; }; From b4f51cb2d9a106c30e580fbfa2ef50732ae11ce8 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 22 Sep 2020 21:58:53 -0400 Subject: [PATCH 09/67] Build 220 Added the ability to spawn simple objects. Added an optional feature to hide trees and bushes under enterable buildings. --- .../GMS_fnc_restoreHiddenObjects.sqf | 27 +++ .../Compiles/Missions/GMS_fnc_endMission.sqf | 18 +- .../Missions/GMS_fnc_initializeMission.sqf | 1 + .../Missions/GMS_fnc_missionSpawner.sqf | 4 +- .../GMS_fnc_monitorInitializedMissions.sqf | 191 +++++++++++------- .../Compiles/Missions/GMS_fnc_signalEnd.sqf | 3 +- .../Missions/GMS_fnc_spawnBaseObjects.sqf | 48 ----- .../GMS_fnc_spawnCompositionObjects.sqf | 63 ++++++ ...fnc_spawnGarrisonInsideBuilding_relPos.sqf | 28 ++- .../Missions/GMS_fnc_spawnSimpleObjects.sqf | 23 +++ .../custom_server/Compiles/blck_functions.sqf | 3 +- .../custom_server/Configs/blck_configs.sqf | 9 +- 12 files changed, 280 insertions(+), 138 deletions(-) create mode 100644 @GMS/addons/custom_server/Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf delete mode 100644 @GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnBaseObjects.sqf create mode 100644 @GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf create mode 100644 @GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnSimpleObjects.sqf diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf new file mode 100644 index 0000000..4a3b2e6 --- /dev/null +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf @@ -0,0 +1,27 @@ +/* + By Ghostrider [GRG] + Copyright 2016 + -------------------------- + License + -------------------------- + All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License. + + http://creativecommons.org/licenses/by-nc-sa/4.0/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + +for "_i" from 1 to (count blck_hiddenTerrainObjects) do +{ + if (_i > (count blck_hiddenTerrainObjects)) exitWith {}; + private _el = blck_hiddenTerrainObjects deleteAt 0; + diag_log format["_restoreHiddenObjects: _el = %1 | blck_hiddenTerrainObjects = %2",_el,blck_hiddenTerrainObjects]; + _el params["_obj","_timeout"]; + diag_log format["_restoreHiddenObjects: _timeOut = %1 | _obj = %2",_timeout,_obj]; + if (diag_tickTime > _timeOut) then + { + {_x hideObjectGlobal false} forEach _obj; + } else { + blck_hiddenTerrainObjects pushBack _el; + }; +}; \ No newline at end of file diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf index 841b52c..5186a8c 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf @@ -56,6 +56,22 @@ params[ ["_isScubaMission",false] ]; +/* +{ + diag_log format["_endMission: %1 = %2",_x, _this select _forEachIndex]; +} forEach [ "_coords", + "_mines", + "_objects", + "_hiddenObjects", + "_crates", + "_blck_AllMissionAI", + "_endMsg", + "_markers", + "_markerPos", + "_markerName", + "_markerLabel" + ]; +*/ { [_x] call blck_fnc_deleteMarker; }forEach (_markers); @@ -70,7 +86,7 @@ switch (_endCondition) do if (local _x) then {deleteVehicle _x}; }forEach _crates; - [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; + [_coords,_mines,_objects,_simpleObjects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; [format["Mission | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log; }; case 1: { // Normal End diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 3693cef..2592e51 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -50,6 +50,7 @@ _missionParameters params[ "_garrisonedBuildings_BuildingPosnSystem", "_garrisonedBuilding_ATLsystem", "_missionLandscape", + "_simpleObjects", "_missionLootBoxes", "_missionLootVehicles", "_missionPatrolVehicles", 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 130baa9..755076a 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf @@ -15,7 +15,7 @@ #define delayTime 1 private ["_abort","_crates","_aiGroup","_objects","_groupPatrolRadius","_missionLandscape","_mines","_blck_AllMissionAI","_assetKilledMsg","_enemyLeaderConfig", "_AI_Vehicles","_timeOut","_aiDifficultyLevel","_missionPatrolVehicles","_missionGroups","_loadCratesTiming","_spawnCratesTiming","_assetSpawned","_hostageConfig", - "_chanceHeliPatrol","_noPara","_chanceLoot","_heliCrew","_loadCratesTiming","_useMines","_blck_AllMissionAI","_delayTime","_groupPatrolRadius", + "_chanceHeliPatrol","_noPara","_chanceLoot","_heliCrew","_loadCratesTiming","_useMines","_blck_AllMissionAI","_delayTime","_groupPatrolRadius","_simpleObjects", "_wait","_missionStartTime","_playerInRange","_missionTimedOut","_temp","_patrolVehicles","_vehToSpawn","_noChoppers","_chancePara","_paraSkill","_marker","_vehicleCrewCount", "_defaultMissionLocations","_garrisonedbuildings_buildingposnsystem","_garrisonedBuilding_ATLsystem", "_isScubaMission","_markerlabel","_missionLootBoxes","_airpatrols"]; @@ -66,6 +66,7 @@ if (isNil "_lootCratePositions") then {_lootCratePositions = []}; if (isNil "_isScubaMission") then {_isScubaMission = false}; if (isNil "_missionLootBoxes") then {_missionLootBoxes = []}; if (isNil "_defaultMissionLocations") then {_defaultMissionLocations = []}; +if (isNil "_simpleObjects") then {_simpleObjects = []}; if !(_defaultMissionLocations isEqualTo []) then { _coords = selectRandom _defaultMissionLocations; @@ -106,6 +107,7 @@ private _table = [ _garrisonedBuildings_BuildingPosnSystem, _garrisonedBuilding_ATLsystem, _missionLandscape, + _simpleObjects, _missionLootBoxes, _missionLootVehicles, _missionPatrolVehicles, diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index a42d191..8aad41b 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -3,6 +3,11 @@ by Ghostrider-GRG- */ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +#define missionData 4 +#define noActive 2 +#define waitTime 5 + for "_i" from 1 to (count blck_activeMissionsList) do { @@ -16,14 +21,10 @@ for "_i" from 1 to (count blck_activeMissionsList) do "_missionTimeoutAt", // 1 "_triggered", // 2 "_spawnPara", // 3 - "_missionData", // 6 - "_missionParameters" // 7 + "_missionData", // 4 + "_missionParameters" // 5 ]; - #define noActive 2 - #define waitTime 5 - #define missionData 6 - _missionCategoryDescriptors params [ "_difficulty", "_noMissions", // Max no missions of this category @@ -33,64 +34,75 @@ for "_i" from 1 to (count blck_activeMissionsList) do "_waitTime", // time at which a mission should be spawned "_missionsData" // ]; - - _missionData params ["_coords","_mines","_objects","_hiddenObjects","_crates","_blck_AllMissionAI","_assetSpawned","_missionAIVehicles","_markers"]; + //_missionData = [_coords,_mines,_objects,_hiddenObjects,_crates,_blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; + _missionData params [ + "_coords", + "_mines", + "_objects", + "_hiddenObjects", + "_crates", + "_blck_AllMissionAI", + "_assetSpawned", + "_missionAIVehicles", + "_markers" + ]; -_missionParameters params[ - "_markerName", - "_markerMissionName", - "_endMsg", - "_startMsg", - "_defaultMissionLocations", - "_crateLoot", - "_lootCounts", - "_markerType", - "_markerColor", - "_markerSize", - "_markerBrush", - "_missionLandscapeMode", - "_garrisonedBuildings_BuildingPosnSystem", - "_garrisonedBuilding_ATLsystem", - "_missionLandscape", - "_missionLootBoxes", - "_missionLootVehicles", - "_missionPatrolVehicles", - "_submarinePatrolParameters", - "_airPatrols", - "_noVehiclePatrols", - "_vehicleCrewCount", - "_missionEmplacedWeapons", - "_noEmplacedWeapons", - "_useMines", - "_minNoAI", - "_maxNoAI", - "_noAIGroups", - "_missionGroups", - "_scubaGroupParameters", - "_hostageConfig", - "_enemyLeaderConfig", - "_assetKilledMsg", - "_uniforms", - "_headgear", - "_vests", - "_backpacks", - "_weaponList", - "_sideArms", - "_chanceHeliPatrol", - "_noChoppers", - "_missionHelis", - "_chancePara", - "_noPara", - "_paraTriggerDistance", - "_paraSkill", - "_chanceLoot", - "_paraLoot", - "_paraLootCounts", - "_spawnCratesTiming", - "_loadCratesTiming", - "_endCondition", - "_isScubaMission" -]; + _missionParameters params[ + "_markerName", + "_markerMissionName", + "_endMsg", + "_startMsg", + "_defaultMissionLocations", + "_crateLoot", + "_lootCounts", + "_markerType", + "_markerColor", + "_markerSize", + "_markerBrush", + "_missionLandscapeMode", + "_garrisonedBuildings_BuildingPosnSystem", + "_garrisonedBuilding_ATLsystem", + "_missionLandscape", + "_simpleObjects", + "_missionLootBoxes", + "_missionLootVehicles", + "_missionPatrolVehicles", + "_submarinePatrolParameters", + "_airPatrols", + "_noVehiclePatrols", + "_vehicleCrewCount", + "_missionEmplacedWeapons", + "_noEmplacedWeapons", + "_useMines", + "_minNoAI", + "_maxNoAI", + "_noAIGroups", + "_missionGroups", + "_scubaGroupParameters", + "_hostageConfig", + "_enemyLeaderConfig", + "_assetKilledMsg", + "_uniforms", + "_headgear", + "_vests", + "_backpacks", + "_weaponList", + "_sideArms", + "_chanceHeliPatrol", + "_noChoppers", + "_missionHelis", + "_chancePara", + "_noPara", + "_paraTriggerDistance", + "_paraSkill", + "_chanceLoot", + "_paraLoot", + "_paraLootCounts", + "_spawnCratesTiming", + "_loadCratesTiming", + "_endCondition", + "_isScubaMission" + ]; private _playerInRange = [_coords, blck_TriggerDistance, false] call blck_fnc_playerInRange; #define delayTime 1 @@ -161,6 +173,9 @@ _missionParameters params[ _hiddenObjects append [_temp select 1]; uiSleep delayTime; + _temp = [_coords,_simpleObjects,true] call blck_fnc_spawnSimpleObjects; + _objects append _temp; + try { _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_missionGroups,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionAI; _temp params["_ai","_abort"]; @@ -174,7 +189,6 @@ _missionParameters params[ if (_temp isEqualTo grpNull) then {throw 1} else { _assetSpawned = _temp select 0; - _missionData set[5,_assetSpawned]; _objects pushBack (_temp select 1); _blck_AllMissionAI pushBack _assetSpawned; }; @@ -186,7 +200,6 @@ _missionParameters params[ if (_temp isEqualTo grpNull) then {throw 1} else { _assetSpawned = _temp select 0; - _missiondata set[5,_assetSpawned]; _objects pushBack (_temp select 1); _blck_AllMissionAI pushBack _assetSpawned; }; @@ -207,7 +220,10 @@ _missionParameters params[ if (typeName _temp isEqualTo "ARRAY") then { blck_monitoredVehicles pushBack (_temp select 0); + _missionAIVehicles append (_temp select 0); _blck_AllMissionAI append (_temp select 1); + //diag_log format["_monitorInitializeMissions(238): _temp select 0 = %1",_temp select 0]; + //diag_log format["_monitorInitializedMissions(239): _temp select 1 = %1",_temp select 1]; } else { if (typeName _temp isEqualTo "GROUP") then { @@ -267,7 +283,9 @@ _missionParameters params[ // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) then {throw 1} else { - _patrolVehicles = _temp select 0; + //diag_log format["_monitorInitializeMissions(299): _temp select 0 = %1",_temp select 0]; + //diag_log format["_monitorInitializedMissions(300): _temp select 1 = %1",_temp select 1]; + _missionAIVehicles = _temp select 0; _blck_AllMissionAI append (_temp select 1); }; }; @@ -284,7 +302,7 @@ _missionParameters params[ { _crates = [_coords,_missionLootBoxes,_loadCratesTiming, _spawnCratesTiming, "start", _difficulty] call blck_fnc_spawnMissionCrates; }; - + //diag_log format["_monitorInitializeMissions (318): crates spawned = %1",_crates]; if (blck_cleanUpLootChests) then { _objects append _crates; @@ -297,8 +315,6 @@ _missionParameters params[ } forEach _crates; }; }; - _missionData set[2,_objects]; - _missionData set[3,_crates]; uiSleep delayTime; @@ -311,8 +327,20 @@ _missionParameters params[ _x setVariable["crateSpawnPos", (getPos _x)]; } forEach _crates; private _spawnPara = if (random(1) < _chancePara) then {true} else {false}; - _missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; + /* + private _vars = ["_objects","_hiddenObjects","_crates"]; + { + diag_log format["_monitorInitializedMissions(322): %1 = %2",_vars select _forEachIndex,_x]; + } forEach [_objects,_hiddenObjects,_crates]; + */ // 0 1 2 3 4 5 + _missionData = [_coords,_mines,_objects,_hiddenObjects,_crates,_blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; + + /* + { + diag_log format["_monitorInitializedMission (327): _missionData %1 = %2",_vars select _foreachIndex,_missionData select _x]; + } forEach [2,3,4,5]; + */ _el set[missionData, _missionData]; // Everything spawned withouth serious errors so lets keep the mission active for future monitoring @@ -325,7 +353,7 @@ _missionParameters params[ if (_exception isEqualTo 1) then { _missionCategoryDescriptors set[noActive, _noActive - 1]; - [_coords,_mines,_objects,_hiddenObjects,_crates, _blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, 1] call blck_fnc_endMission; + [_coords,_mines,_objects,_hiddenObjects,_crates,_blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, 1] call blck_fnc_endMission; ["Critial Error returned by one or more critical functions, mission spawning aborted!",'error'] call blck_fnc_log; }; }; @@ -356,6 +384,16 @@ _missionParameters params[ private _minNoAliveForCompletion = (count _blck_AllMissionAI) - (round(blck_killPercentage * (count _blck_AllMissionAI))); private _aiKilled = if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then {true} else {false}; // mission complete + /* + private _vars = ["_objects","_hiddenObjects","_crates"]; + { + diag_log format["_monitorInitializedMissions (363): %1 = %2",_vars select _forEachIndex,_x]; + } forEach [_objects,_hiddenObjects,_crates]; + { + diag_log format["_monitorInitializedMission (369): _missionData %1 = %2",_vars select _foreachIndex,_missionData select _x]; + } forEach [2,3,4,5]; + */ + //_el set[missionData, _missionData]; if (_endIfPlayerNear) then { if (_playerIsNear) throw 1; // mission complete @@ -423,7 +461,16 @@ _missionParameters params[ } forEach _crates; }; - _missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; + _missionData = [_coords,_mines,_objects,_hiddenObjects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; + + /* + { + diag_log format["_monitorInitializedMissions (363): %1 = %2",_vars select _forEachIndex,_x]; + } forEach [_objects,_hiddenObjects,_crates]; + { + diag_log format["_monitorInitializedMission (369): _missionData %1 = %2",_vars select _foreachIndex,_missionData select _x]; + } forEach [2,3,4,5]; + */ _el set[missionData, _missionData]; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf index cd6e4ff..e7eaf28 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf @@ -14,8 +14,7 @@ private ["_start","_maxHeight","_smokeShell","_light","_lightSource"]; params[["_crate",objNull],["_time",60]]; -if (isNull _crate) exitWith {}; -_start = diag_tickTime; +//diag_log format["_signalEnd: _crate = %1 | _time = %2",_crate,_time]; _smokeShell = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"]; _lightSource = selectRandom ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"]; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnBaseObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnBaseObjects.sqf deleted file mode 100644 index 46d0548..0000000 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnBaseObjects.sqf +++ /dev/null @@ -1,48 +0,0 @@ -/* - Spawn objects from an array using offsects from a central location. - The code provided by M3Editor EDEN has been addapted to add checks for vehicles, should they be present. - Returns an array of spawned objects. - - -------------------------- - License - -------------------------- - All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License. - - http://creativecommons.org/licenses/by-nc-sa/4.0/ -*/ -#include "\q\addons\custom_server\Configs\blck_defines.hpp"; - -params["_center","_objects"]; -if (count _center == 2) then {_center pushBack 0}; -private ["_newObjs","_sim","_dam","_obj","_spawnPos"]; -_newObjs = []; -_obj = createVehicle ["RoadCone_L_F", _coords]; // To designate the mission center -_obj allowDamage true; -_obj enableSimulation false; -_obj enableSimulationGlobal false; -_obj enableDynamicSimulation false; -_newObjs pushBack _obj; -{ - if (typeName (_x select 3) isEqualTo "ARRAY") then // assum simulation and damage settings are defined in the old way as [bool,bool] - { - _sim = (_x select 3) select 0; - _dam = (_x select 3) select 1; - }; - if (typeName (_x select 3) isEqualTo "BOOL") then // assume simulation and damage settings are defined in the new way as , bool, bool, ... - { - _sim = _x select 3; - _dam = _x select 4; - }; - - _obj = createVehicle[(_x select 0),_center vectorAdd (_x select 1),[],0,"CAN_COLLIDE"]; - _newObjs pushback _obj; - [_obj, (_x select 2)] call blck_fnc_setDirUp; - _obj enableDynamicSimulation _sim; - _obj allowDamage _dam; - if ((typeOf _obj) isKindOf "LandVehicle" || (typeOf _obj) isKindOf "Air" || (typeOf _obj) isKindOf "Sea") then - { - [_obj] call blck_fnc_configureMissionVehicle; - }; -} forEach _objects; -_newObjs - diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf new file mode 100644 index 0000000..d79316c --- /dev/null +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf @@ -0,0 +1,63 @@ +/* + -------------------------- + License + -------------------------- + All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License. + + http://creativecommons.org/licenses/by-nc-sa/4.0/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_center","_objects"]; +private ["_dam","_sim"]; +if (count _center == 2) then {_center pushBack 0}; +private _newObjs = []; +private _hiddenObjs = []; + +{ + // ["Land_Bunker_01_blocks_3_F",[-13.762,17.5518,-0.00143909],270.35,true,true], + _x params["_className","_relPos","_dir","_booleans"]; + + //diag_log format["_spawnCompsitionObjects: _x = %1",_x]; + //diag_log format["_spawnCompositionObjects: _className = %1 | _relPos = %2 | _dir = %3 | _booleans",_className,_relPos,_dir,_booleans]; + if (typeName (_booleans) isEqualTo "ARRAY") then // assum simulation and damage settings are defined in the old way as [bool,bool] + { + _dam = (_booleans) select 0; + _sim = (_booleans) select 1; + }; + if ((typeName _booleans) isEqualTo "BOOL") then // assume simulation and damage settings are defined in the new way as , bool, bool, ... + { + _sim = _x select 4; + _dam = _x select 3; + }; + + private _objPos = _center vectorAdd _relPos; + + //diag_log format["_spawnCompositionObjects: _sim = %1 | _dam = %2",_sim,_dam]; + //diag_log format["_spawnCompsitionObjects: _relPos = %1 | _objPos = %2",_relPos, _objPos]; + if (_className isKindOf "House" && blck_hideRocksAndPlants) then + { + private _shrubs = nearestTerrainObjects[_objPos,["TREE", "SMALL TREE", "BUSH","FENCE", "WALL","ROCK"], sizeOf _className]; + if !(_shrubs isEqualTo []) then + { + _hiddenObjs append _shrubs; + diag_log format["_spawnCompositionObjects: _hiddenObjs = %1",_hiddenObjs]; + {_x hideObjectGlobal true} forEach _shrubs; + }; + }; + _obj = createVehicle[_className,[0,0,0],[],0,"CAN_COLLIDE"]; + _obj setPosATL _objPos; + _newObjs pushback _obj; + [_obj, _dir] call blck_fnc_setDirUp; + _obj setVectorUp [0,0,1]; + _obj enableDynamicSimulation _sim; + _obj allowDamage _dam; + if ((typeOf _obj) isKindOf "LandVehicle" || (typeOf _obj) isKindOf "Air" || (typeOf _obj) isKindOf "Ship") then + { + [_obj] call blck_fnc_configureMissionVehicle; + }; +} forEach _objects; +diag_log format["_spawnCompositionObjects: _objects = %1",_objects]; +diag_log format["_spawnCompositionObjects: _hiddenObjs = %1",_hiddenObjs]; +[_newObjs,_hiddenObjs]; + diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf index 7d17a2e..5a8e53a 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf @@ -19,18 +19,20 @@ if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call blck_fnc_ if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call blck_fnc_selectAIBackpacks}; private["_unit","_obj","_staticClassName","_usedBldPsn","_pos","_obj"]; -private _allBldPsn = [_building] call BIS_fnc_buildingPositions; -private _usedBldPsn = []; -private _floor = floor((count _allBldPsn)/2); -private _ceil = ceil((count _allBldPsn)/2); +private _allBldPsn = [[_building] call BIS_fnc_buildingPositions] call BIS_fnc_arrayShuffle; +private _countBldPsn = count _allBldPsn; +private _floor = floor(_countBldPsn/2); +private _ceil = ceil(_countBldPsn/2); private _statics = if (_ceil > _noStatics) then {_noStatics} else {_ceil}; private _units = if (_floor > _noUnits) then {_noUnits} else {_floor}; private _staticsSpawned = []; +private _locsUsed = []; uiSleep 1; for "_i" from 1 to _statics do { - _pos = selectRandom _allBldPsn; - _allBldPsn = _allBldPsn - [_pos]; + if (_allBldPsn isEqualTo []) exitWith {}; + _pos = _allBldPsn deleteAt 0; + _locsUsed pushBack _pos; _staticClassName = selectRandom _typesStatics; _obj = [_staticClassName, [0,0,0]] call blck_fnc_spawnVehicle; _obj setVariable["GRG_vehType","emplaced"]; @@ -39,12 +41,20 @@ for "_i" from 1 to _statics do _unit = [[0,0,0],_group,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_launcher,_weaponList,_sideArms,false,true] call blck_fnc_spawnUnit; _unit moveInGunner _obj; }; - +private _infantryPos = _allBldPsn; for "_i" from 1 to _units do { - _pos = selectRandom _allBldPsn; - _allBldPsn = _allBldPsn - [_pos]; + if (_allBldPsn isEqualTo []) exitWith {}; + _pos = _allBldPsn deleteAt 0; _unit = [[0,0,0],_group,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_launcher,_weaponList,_sideArms,false,true] call blck_fnc_spawnUnit; _unit setPosATL _pos; + { + _wp = _group addWaypoint [_x, 0]; + _wp setWaypointType "MOVE"; + _wp setWaypointCompletionRadius 0; + _wp waypointAttachObject _building; + _wp setWaypointHousePosition _foreachindex; + _wp setWaypointTimeout [15, 20, 30]; + } forEach (_building buildingPos -1); }; _staticsSpawned diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnSimpleObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnSimpleObjects.sqf new file mode 100644 index 0000000..dfd11e0 --- /dev/null +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnSimpleObjects.sqf @@ -0,0 +1,23 @@ +/* + by Ghostrider [GRG] + Copyright 2016 + -------------------------- + License + -------------------------- + All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License. + + http://creativecommons.org/licenses/by-nc-sa/4.0/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_center","_objects","_relative"]; +private _spawnedObjects = []; +{ + _x params["_className","_relPos","_dir","_booleans"]; + private _objPos = _center vectorAdd _relPos; + private _obj = createSimpleObject [_className,ATLToASL _objPos]; + _obj setDir _dir; + _obj setVectorUp [0,0,1]; + _spawnedObjects pushBack _obj; +} forEach _objects; +_spawnedObjects \ No newline at end of file diff --git a/@GMS/addons/custom_server/Compiles/blck_functions.sqf b/@GMS/addons/custom_server/Compiles/blck_functions.sqf index 71faa96..9ddbca8 100644 --- a/@GMS/addons/custom_server/Compiles/blck_functions.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_functions.sqf @@ -118,7 +118,8 @@ private _functions = [ ["blck_fnc_sm_AddGroupToArray", "\q\addons\custom_server\Compiles\Missions\GMS_fnc_sm_AddGroupToArray.sqf"], ["blck_fnc_initializeMission", "\q\addons\custom_server\Compiles\Missions\GMS_fnc_initializeMission.sqf"], ["blck_fnc_monitorInitializedMissions","\q\addons\custom_server\Compiles\Missions\GMS_fnc_monitorInitializedMissions.sqf"], - + ["blck_fnc_spawnSimpleObjects","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnSimpleObjects.sqf"], + // Group-related functions ["blck_fnc_spawnGroup","\q\addons\custom_server\Compiles\Groups\GMS_fnc_spawnGroup.sqf"], // Spawn a single group and populate it with AI units] ["blck_fnc_setupWaypoints","\q\addons\custom_server\Compiles\Groups\GMS_fnc_setupWaypoints.sqf"], // Set default waypoints for a group diff --git a/@GMS/addons/custom_server/Configs/blck_configs.sqf b/@GMS/addons/custom_server/Configs/blck_configs.sqf index 3962068..8fb3a3e 100644 --- a/@GMS/addons/custom_server/Configs/blck_configs.sqf +++ b/@GMS/addons/custom_server/Configs/blck_configs.sqf @@ -14,11 +14,11 @@ #include "\q\addons\custom_server\Configs\blck_defines.hpp" #include "\q\addons\custom_server\init\build.sqf" /* - changing any of these variables may break the mission systemChat + changing any of these variables may break the mission system */ blck_locationBlackList = []; // Do not touch ... - blck_debugON = false; // Do not touch ... - blck_debugLevel = 0; // Do not touch ... + blck_debugON = false; // should be set to false; ... + blck_debugLevel = 0; // should be set to 0 ... #ifdef blck_milServer if (true) exitWith { @@ -45,7 +45,8 @@ blck_spawnMapAddons = false; // When true map addons will be spawned based on parameters define in custum_server\MapAddons\MapAddons_init.sqf blck_spawnStaticLootCrates = false; // 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_useBlckeaglsSimulationManager; - //diag_log format["[blckeagls] blck_configs: blck_simulationManager = %1",blck_simulationManager]; + blck_hideRocksAndPlants = true; // When true, any rocks, trees or bushes under enterable buildings will be 'hidden' + /* 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 From 1d2696926cf9738454073948366e96b8bc5884f5 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Fri, 25 Sep 2020 07:26:28 -0400 Subject: [PATCH 10/67] Small bug fix --- .../Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 8aad41b..a045f53 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -220,7 +220,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do if (typeName _temp isEqualTo "ARRAY") then { blck_monitoredVehicles pushBack (_temp select 0); - _missionAIVehicles append (_temp select 0); + _missionAIVehicles pushBack (_temp select 0); _blck_AllMissionAI append (_temp select 1); //diag_log format["_monitorInitializeMissions(238): _temp select 0 = %1",_temp select 0]; //diag_log format["_monitorInitializedMissions(239): _temp select 1 = %1",_temp select 1]; From ef2128afcdbd14ed30c60da59b4fcaf9e03aaacd Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 26 Sep 2020 00:41:26 -0400 Subject: [PATCH 11/67] Add checks for invalid marker types and colors --- .../Missions/GMS_fnc_initializeMission.sqf | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 2592e51..3b95484 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -144,6 +144,23 @@ if (blck_debugLevel >= 3) then "_markerBrush" ]; }; +if !(toLower (_markerType) in ["ellipse","rectangle"] || isClass(configFile >> "CfgMarkers" >> _markerType)) then +{ + [format["_markerType set to 'ELLIPSE': Illegal marker type %1 used for mission %2 of difficulty %3",_markerType,_markerMissionName,_difficulty],"warning"] call blck_fnc_log; + _markerType = "ELLIPSE"; + _markerSize = [200,200]; + _markerBrush = "SOLID"; + _markerMissionName = "Invalid Marker Parameters"; + _missionParameters set [1,_markerMissionName]; +}; +if !(isClass(configFile >> "CfgMarkerColors" >> _markerColor)) then +{ + [format["_markerColor set to 'default': Illegal color %1 used for mission %2 of difficulty %3",_markerColor,_markerMissionName,_difficulty],"warning"] call blck_fnc_log; + _markerColor = "DEFAULT"; + _markerMissionName = "Invalid Marker Parameters"; + _missionParameters set [1,_markerMissionName]; +}; + private _markers = [_markerName,_markerPos,_markerMissionName,_markerColor,_markerType,_markerSize,_markerBrush] call blck_fnc_createMissionMarkers; /* @@ -167,5 +184,8 @@ private _missionData = [_coords,_mines,_objects,_hiddenObjects,_crates, _blck_Al blck_activeMissionsList pushBack [_missionCategoryDescriptors,_missionTimeoutAt,_triggered,_spawnPara,_missionData,_missionParameters]; [format["Initialized Mission %1 | description %2 | difficulty %3 at %4",_markerName, _markerMissionName, _difficulty, diag_tickTime]] call blck_fnc_log; - +if (blck_debugON) then +{ + [format["Mission Marker = %1 | Marker Position = %2 | _coords = %3",_markers,_markerPos,_coords]] call blck_fnc_log; +}; true From 1f2097041ae0fff3bb38daa680f1b84f611ec127 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 26 Sep 2020 00:41:56 -0400 Subject: [PATCH 12/67] Add missing setting (blck_hideRocksAndPlants) --- @GMS/addons/custom_server/Configs/blck_configs_mil.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf b/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf index f8fe0b1..8f0a2aa 100644 --- a/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf +++ b/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf @@ -27,7 +27,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]; + blck_hideRocksAndPlants = true; // When true, any rocks, trees or bushes under enterable buildings will be 'hidden' + // 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 From 5f34fae51f3fe785b981a205b9429676b79ea12e Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 26 Sep 2020 00:43:13 -0400 Subject: [PATCH 13/67] remove debug commands --- .../Missions/GMS_fnc_spawnCompositionObjects.sqf | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf index d79316c..a82beda 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf @@ -15,11 +15,7 @@ private _newObjs = []; private _hiddenObjs = []; { - // ["Land_Bunker_01_blocks_3_F",[-13.762,17.5518,-0.00143909],270.35,true,true], _x params["_className","_relPos","_dir","_booleans"]; - - //diag_log format["_spawnCompsitionObjects: _x = %1",_x]; - //diag_log format["_spawnCompositionObjects: _className = %1 | _relPos = %2 | _dir = %3 | _booleans",_className,_relPos,_dir,_booleans]; if (typeName (_booleans) isEqualTo "ARRAY") then // assum simulation and damage settings are defined in the old way as [bool,bool] { _dam = (_booleans) select 0; @@ -33,15 +29,13 @@ private _hiddenObjs = []; private _objPos = _center vectorAdd _relPos; - //diag_log format["_spawnCompositionObjects: _sim = %1 | _dam = %2",_sim,_dam]; - //diag_log format["_spawnCompsitionObjects: _relPos = %1 | _objPos = %2",_relPos, _objPos]; if (_className isKindOf "House" && blck_hideRocksAndPlants) then { private _shrubs = nearestTerrainObjects[_objPos,["TREE", "SMALL TREE", "BUSH","FENCE", "WALL","ROCK"], sizeOf _className]; if !(_shrubs isEqualTo []) then { _hiddenObjs append _shrubs; - diag_log format["_spawnCompositionObjects: _hiddenObjs = %1",_hiddenObjs]; + //diag_log format["_spawnCompositionObjects: _hiddenObjs = %1",_hiddenObjs]; {_x hideObjectGlobal true} forEach _shrubs; }; }; @@ -57,7 +51,6 @@ private _hiddenObjs = []; [_obj] call blck_fnc_configureMissionVehicle; }; } forEach _objects; -diag_log format["_spawnCompositionObjects: _objects = %1",_objects]; -diag_log format["_spawnCompositionObjects: _hiddenObjs = %1",_hiddenObjs]; + [_newObjs,_hiddenObjs]; From 37af0b1325cdc2c3af13a3e8cb27a311beb0642e Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 26 Sep 2020 00:43:25 -0400 Subject: [PATCH 14/67] fixed a typo --- .../Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf index 3ff61d0..d666355 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf @@ -28,7 +28,7 @@ private _hiddenObjs = []; private _shrubs = nearestTerrainObjects[_spawnPos,["TREE", "SMALL TREE", "BUSH","FENCE", "WALL","ROCK"], sizeOf _objClassName]; if !(_shrubs isEqualTo []) then { - _hiddenOjbs append _shrubs; + _hiddenObjs append _shrubs; {_x hideObjectGlobal true} forEach _shrubs; }; }; From 760acb06dfead9f0a0bd63cf4533dd8e2270f593 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 26 Sep 2020 00:43:44 -0400 Subject: [PATCH 15/67] build 222 --- @GMS/addons/custom_server/init/build.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index eb96444..21151e8 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 219 -#define blck_versionNumber 7.01 -#define blck_buildDate "9-9-20" +#define blck_buildNumber 220 +#define blck_versionNumber 7.02 +#define blck_buildDate "9-22-20" From 3ce58656c5557aad6caa18f105846a4bd3a52a28 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 27 Sep 2020 08:12:04 -0400 Subject: [PATCH 16/67] Fixed Error with mission timouts. --- .../custom_server/Compiles/Missions/GMS_fnc_endMission.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf index 5186a8c..d09832a 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf @@ -86,7 +86,7 @@ switch (_endCondition) do if (local _x) then {deleteVehicle _x}; }forEach _crates; - [_coords,_mines,_objects,_simpleObjects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; + [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; [format["Mission | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log; }; case 1: { // Normal End From 6233e8a9a85e908bcd3ccdafee3f5a33b761dae5 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 27 Sep 2020 08:30:50 -0400 Subject: [PATCH 17/67] Fixed Typo that caused erors restoring hidden objects --- .../Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf | 5 +++-- .../custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index a045f53..60d19ed 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -169,8 +169,9 @@ for "_i" from 1 to (count blck_activeMissionsList) do _temp = [_coords, _missionLandscape] call blck_fnc_spawnCompositionObjects; }; - _objects append [_temp select 0]; - _hiddenObjects append [_temp select 1]; + _objects append (_temp select 0); + _hiddenObjects append (_temp select 1); + uiSleep delayTime; _temp = [_coords,_simpleObjects,true] call blck_fnc_spawnSimpleObjects; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf index e7eaf28..defb32e 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf @@ -14,7 +14,6 @@ private ["_start","_maxHeight","_smokeShell","_light","_lightSource"]; params[["_crate",objNull],["_time",60]]; -//diag_log format["_signalEnd: _crate = %1 | _time = %2",_crate,_time]; _smokeShell = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"]; _lightSource = selectRandom ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"]; @@ -28,4 +27,5 @@ if(sunOrMoon < 0.2) then _light setPosATL (getPosATL _crate); _light attachTo [_crate,[0,0,(0.55)]]; }; + blck_illuminatedCrates pushBack [_crate,_smoke,_light,_smokeShell,_lightSource,diag_tickTime + 120, diag_tickTime + 300]; From 6a9f8a993fcd6c9a39ae1956405891dc53dcd37e Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 27 Sep 2020 11:15:34 -0400 Subject: [PATCH 18/67] Removed some loggimng used for debugging. --- .../Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf | 4 +--- .../Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf index 4a3b2e6..e99fa33 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_restoreHiddenObjects.sqf @@ -15,13 +15,11 @@ for "_i" from 1 to (count blck_hiddenTerrainObjects) do { if (_i > (count blck_hiddenTerrainObjects)) exitWith {}; private _el = blck_hiddenTerrainObjects deleteAt 0; - diag_log format["_restoreHiddenObjects: _el = %1 | blck_hiddenTerrainObjects = %2",_el,blck_hiddenTerrainObjects]; _el params["_obj","_timeout"]; - diag_log format["_restoreHiddenObjects: _timeOut = %1 | _obj = %2",_timeout,_obj]; if (diag_tickTime > _timeOut) then { {_x hideObjectGlobal false} forEach _obj; } else { blck_hiddenTerrainObjects pushBack _el; }; -}; \ No newline at end of file +}; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf index a82beda..4cb2403 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf @@ -35,7 +35,6 @@ private _hiddenObjs = []; if !(_shrubs isEqualTo []) then { _hiddenObjs append _shrubs; - //diag_log format["_spawnCompositionObjects: _hiddenObjs = %1",_hiddenObjs]; {_x hideObjectGlobal true} forEach _shrubs; }; }; From 2660495c0189da9a56892642def98d0cf4ccdb4f Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Mon, 28 Sep 2020 17:20:48 -0400 Subject: [PATCH 19/67] Small formating change --- .../custom_server/Compiles/Units/GMS_fnc_cleanupDeadAI.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_cleanupDeadAI.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_cleanupDeadAI.sqf index d2dd75c..f7c3c75 100644 --- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_cleanupDeadAI.sqf +++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_cleanupDeadAI.sqf @@ -18,7 +18,8 @@ if (diag_tickTime > _unit getVariable ["blck_cleanupAt",0]) then { - if (_nearplayer isequalto []) then { + if (_nearplayer isequalto []) then + { { deleteVehicle _x; }forEach nearestObjects [getPos _unit,["WeaponHolderSimulated","GroundWeapoonHolder"],3]; From 70e0a34d28aa2eb979cd13ad51a083afd39493f3 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Mon, 28 Sep 2020 17:29:39 -0400 Subject: [PATCH 20/67] Update build.sqf --- @GMS/addons/custom_server/init/build.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 21151e8..125f70e 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 220 +#define blck_buildNumber 222 #define blck_versionNumber 7.02 -#define blck_buildDate "9-22-20" +#define blck_buildDate "9-28-20" From 0e4198f05bcb9e26d4ee0b7d314530569bb26119 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 29 Sep 2020 18:56:25 -0400 Subject: [PATCH 21/67] Start pf Biuild 223 Addresses issues with missing subs and divers at underwater missions. Adds logging when no safe spot for a mission found. Addresses some issues with missing info for some maps. --- @GMS/addons/custom_server/init/build.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 125f70e..5543e9f 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 222 +#define blck_buildNumber 223 #define blck_versionNumber 7.02 #define blck_buildDate "9-28-20" From 7afa108cba232425f33ab278d2988f91eba45a88 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 29 Sep 2020 18:56:49 -0400 Subject: [PATCH 22/67] Add logging when non safe position found for a mission. --- .../Compiles/Missions/GMS_fnc_initializeMission.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 3b95484..730ce02 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -107,6 +107,7 @@ if !(_defaultMissionLocations isEqualTo []) then if (_coords isEqualTo []) exitWith { + [format["No Safe Mission Spawn Position Found to spawn Mission %1",_markerMissionName],'warning'] call blck_fnc_log; false; }; From 9d061e7e407a607b458f045882cb77a7eee3f54a Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 29 Sep 2020 18:57:42 -0400 Subject: [PATCH 23/67] Add logging for thread count (for dev/exp only for now) Thomas-TKO reported a large number of threads running with build 219 - trying to keep an eye on this here. --- .../Compiles/Functions/GMS_fnc_mainThread.sqf | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) 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 2303de1..124e41f 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf @@ -68,14 +68,19 @@ while {true} do }; if (diag_tickTime > _timer5min) then { - [format["Timstamp %8 |Dynamic Missions Running %1 | UMS Running %2 | Vehicles %3 | Groups %4 | Server FPS %5 | Server Uptime %6 Min | Missions Run %7", - blck_missionsRunning, - blck_dynamicUMS_MissionsRuning, - count blck_monitoredVehicles, - count blck_monitoredMissionAIGroups, - diag_FPS,floor(diag_tickTime/60), - blck_missionsRun, - diag_tickTime] + _activeScripts = diag_activeScripts; + [ + format["Timstamp %8 |Dynamic Missions Running %1 | UMS Running %2 | Vehicles %3 | Groups %4 | Server FPS %5 | Server Uptime %6 Min | Missions Run %7 | Threads [spawned %8, execVM %9]", + blck_missionsRunning, + blck_dynamicUMS_MissionsRuning, + count blck_monitoredVehicles, + count blck_monitoredMissionAIGroups, + diag_FPS,floor(diag_tickTime/60), + blck_missionsRun, + diag_tickTime, + _activeScripts select 0, + _activeScripts select 1 + ] ] call blck_fnc_log; [] call blck_fnc_cleanEmptyGroups; _timer5min = diag_tickTime + 300; From ca4ec19ddf8632508e5ea5ffb637b2b8d0e27bdb Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 29 Sep 2020 18:58:05 -0400 Subject: [PATCH 24/67] Add code needed to spawn subs and divers that was previously missing. --- .../GMS_fnc_monitorInitializedMissions.sqf | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 60d19ed..50c568d 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -126,9 +126,11 @@ for "_i" from 1 to (count blck_activeMissionsList) do _monitorAction = 1; }; }; - + + switch (_monitorAction) do { + // Handle Timeout case -1: { @@ -178,11 +180,20 @@ for "_i" from 1 to (count blck_activeMissionsList) do _objects append _temp; try { - _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_missionGroups,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionAI; + _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_missionGroups,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission] call blck_fnc_spawnMissionAI; _temp params["_ai","_abort"]; if (_abort) throw 1; _blck_AllMissionAI append (_ai); - uiSleep delayTime; + uiSleep delayTime; + + if !(_scubaGroupParameters isEqualTo []) then + { + _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_scubaGroupParameters,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission] call blck_fnc_spawnMissionAI; + _temp params["_ai","_abort"]; + if (_abort) throw 1; + _blck_AllMissionAI append (_ai); + }; + uiSleep delayTime; if !(_hostageConfig isEqualTo []) then { @@ -278,19 +289,26 @@ for "_i" from 1 to (count blck_activeMissionsList) do uisleep 10; private _noVehiclePatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; - if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || count _missionPatrolVehicles > 0)) then + if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then { _temp = [_coords,_noVehiclePatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner - if (_temp isEqualTo grpNull) then {throw 1} else - { - //diag_log format["_monitorInitializeMissions(299): _temp select 0 = %1",_temp select 0]; - //diag_log format["_monitorInitializedMissions(300): _temp select 1 = %1",_temp select 1]; - _missionAIVehicles = _temp select 0; - _blck_AllMissionAI append (_temp select 1); - }; + if (_temp isEqualTo grpNull) throw 1; + _missionAIVehicles append (_temp select 0); + _blck_AllMissionAI append (_temp select 1); }; uiSleep delayTime; + if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then + { + //params["_coords","_noVehiclePatrols","_skillAI","_missionPatrolVehicles",["_useRelativePos",true],["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_isScubaGroup",false],["_crewCount",4]]; + _temp = [_coords,_noVehiclePatrols,_difficulty,_submarinePatrolParameters,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; + // TODO: add grpNull checks to missionVehicleSpawner + if (_temp isEqualTo grpNull) throw 1; + _missionAIVehicles append (_temp select 0); + _blck_AllMissionAI append (_temp select 1); + }; + uiSleep delayTime; + if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _spawnCrateTiming = %1 _loadCratesTiming = %2 | _markerMissionName = %3",_spawnCratesTiming,_loadCratesTiming, _markerMissionName]}; if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _missionLootBoxes = %1",_missionLootBoxes]}; if (_spawnCratesTiming in ["atMissionSpawnGround","atMissionSpawnAir"]) then From fef589f94c5ff42176e12a764ae21c7b0cc21513 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 29 Sep 2020 23:29:35 -0400 Subject: [PATCH 25/67] Fix for missing mission markers when multiple missions of a type are desired. --- .../Compiles/Missions/GMS_fnc_initializeMission.sqf | 5 +++-- .../Compiles/Missions/GMS_fnc_spawnPendingMissions.sqf | 4 ++-- @GMS/addons/custom_server/Compiles/blck_variables.sqf | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 3b95484..6e42e9f 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -7,7 +7,7 @@ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; private ["_coords","_coordArray","_return"]; -params["_missionCategoryDescriptors","_missionParameters"]; +params["_missionCategoryDescriptors","_missionParameters","_missionCount"]; _missionCategoryDescriptors params [ "_difficulty", "_noMissions", // Max no missions of this category @@ -107,6 +107,7 @@ if !(_defaultMissionLocations isEqualTo []) then if (_coords isEqualTo []) exitWith { + [format["No Safe Mission Spawn Position Found to spawn Mission %1",_markerMissionName],'warning'] call blck_fnc_log; false; }; @@ -161,7 +162,7 @@ if !(isClass(configFile >> "CfgMarkerColors" >> _markerColor)) then _missionParameters set [1,_markerMissionName]; }; -private _markers = [_markerName,_markerPos,_markerMissionName,_markerColor,_markerType,_markerSize,_markerBrush] call blck_fnc_createMissionMarkers; +private _markers = [format["%1:%2",_markerName,_missionCount],_markerPos,_markerMissionName,_markerColor,_markerType,_markerSize,_markerBrush] call blck_fnc_createMissionMarkers; /* Send a message to players. diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnPendingMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnPendingMissions.sqf index 77be5fd..7f0802d 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnPendingMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnPendingMissions.sqf @@ -17,10 +17,10 @@ if (blck_missionsRunning >= blck_maxSpawnedMissions) exitWith {}; if (_noActiveMissions < _maxNoMissions && diag_tickTime > _waitTime && blck_missionsRunning < blck_maxSpawnedMissions) then { - + blck_dynamicMissionsSpawned = blck_dynamicMissionsSpawned + 1; // time to reset timers and spawn something. private _wt = diag_tickTime + _tmin + (random(_tMax - _tMin)); - private _missionInitialized = [_x,selectRandom _missionsData] call blck_fnc_initializeMission; + private _missionInitialized = [_x,selectRandom _missionsData,blck_dynamicMissionsSpawned] call blck_fnc_initializeMission; if (blck_debugLevel >= 3) then { if !(_missionInitialized) then diff --git a/@GMS/addons/custom_server/Compiles/blck_variables.sqf b/@GMS/addons/custom_server/Compiles/blck_variables.sqf index 45b631b..e470a8e 100644 --- a/@GMS/addons/custom_server/Compiles/blck_variables.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_variables.sqf @@ -46,7 +46,7 @@ blck_temporaryMarkers = []; blck_illuminatedCrates = []; // [crate,duration,freq of replacement] blck_mainThreadUpdateInterval = 60; blck_revealMode = "detailed"; //""basic" /*group or vehicle level reveals*/,detailed /*unit by unit reveals*/"; - +blck_dynamicMissionsSpawned = 0; blck_spawnerMode = 1; blck_missionData = []; blck_activeMissionsList = []; From b077b803372da9b5eb4dc6f794b966ec599f7c5e Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 29 Sep 2020 23:32:59 -0400 Subject: [PATCH 26/67] Subs now spawned at pirate missions. --- .../GMS_fnc_monitorInitializedMissions.sqf | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 60d19ed..76a1af3 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -178,11 +178,20 @@ for "_i" from 1 to (count blck_activeMissionsList) do _objects append _temp; try { - _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_missionGroups,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionAI; + _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_missionGroups,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission] call blck_fnc_spawnMissionAI; _temp params["_ai","_abort"]; if (_abort) throw 1; _blck_AllMissionAI append (_ai); - uiSleep delayTime; + uiSleep delayTime; + + if !(_scubaGroupParameters isEqualTo []) then + { + _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_scubaGroupParameters,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission] call blck_fnc_spawnMissionAI; + _temp params["_ai","_abort"]; + if (_abort) throw 1; + _blck_AllMissionAI append (_ai); + }; + uiSleep delayTime; if !(_hostageConfig isEqualTo []) then { @@ -278,19 +287,26 @@ for "_i" from 1 to (count blck_activeMissionsList) do uisleep 10; private _noVehiclePatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; - if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || count _missionPatrolVehicles > 0)) then + if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then { _temp = [_coords,_noVehiclePatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner - if (_temp isEqualTo grpNull) then {throw 1} else - { - //diag_log format["_monitorInitializeMissions(299): _temp select 0 = %1",_temp select 0]; - //diag_log format["_monitorInitializedMissions(300): _temp select 1 = %1",_temp select 1]; - _missionAIVehicles = _temp select 0; - _blck_AllMissionAI append (_temp select 1); - }; + if (_temp isEqualTo grpNull) throw 1; + _missionAIVehicles append (_temp select 0); + _blck_AllMissionAI append (_temp select 1); }; uiSleep delayTime; + if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then + { + //params["_coords","_noVehiclePatrols","_skillAI","_missionPatrolVehicles",["_useRelativePos",true],["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_isScubaGroup",false],["_crewCount",4]]; + _temp = [_coords,_noVehiclePatrols,_difficulty,_submarinePatrolParameters,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; + // TODO: add grpNull checks to missionVehicleSpawner + if (_temp isEqualTo grpNull) throw 1; + _missionAIVehicles append (_temp select 0); + _blck_AllMissionAI append (_temp select 1); + }; + uiSleep delayTime; + if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _spawnCrateTiming = %1 _loadCratesTiming = %2 | _markerMissionName = %3",_spawnCratesTiming,_loadCratesTiming, _markerMissionName]}; if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _missionLootBoxes = %1",_missionLootBoxes]}; if (_spawnCratesTiming in ["atMissionSpawnGround","atMissionSpawnAir"]) then From d7ff9bc275e1d1c65883e8c54253b0d1dba4a145 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 29 Sep 2020 23:33:14 -0400 Subject: [PATCH 27/67] slightly reduced the frequency of some updates --- .../Compiles/Functions/GMS_fnc_mainThread.sqf | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) 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 2303de1..31519b4 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf @@ -11,7 +11,7 @@ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; private["_timer1sec","_timer5sec","_timer10Sec","_timer20sec","_timer5min","_timer5min"]; -_timer1sec = diag_tickTime; +_timer2sec = diag_tickTime; _timer5sec = diag_tickTime; _timer10Sec = diag_tickTime; _timer20sec = diag_tickTime; @@ -21,17 +21,22 @@ _timer5min = diag_tickTime; while {true} do { uiSleep 1; - if (diag_tickTime > _timer1sec) then + + if (diag_tickTime > _timer2sec) then { - [] spawn blck_fnc_monitorInitializedMissions; + //if !(blck_initializationInProgress) then + + [] spawn blck_fnc_monitorInitializedMissions; + if (blck_showCountAliveAI) then { { _x call blck_fnc_updateMarkerAliveCount; } forEach blck_missionLabelMarkers; }; - _timer1sec = diag_tickTime + 1; + _timer2sec = diag_tickTime + 2; }; + if (diag_tickTime > _timer5sec) then { _timer5sec = diag_tickTime + 5; @@ -47,6 +52,7 @@ while {true} do [] call blck_fnc_spawnPendingMissions; _timer10Sec = diag_tickTime; }; + if (diag_tickTime > _timer20sec) then { [] call blck_fnc_scanForPlayersNearVehicles; @@ -54,6 +60,7 @@ while {true} do [] call GMS_fnc_updateCrateSignals; _timer20sec = diag_tickTime + 20; }; + if ((diag_tickTime > _timer1min)) then { _timer1min = diag_tickTime + 60; @@ -68,15 +75,22 @@ while {true} do }; if (diag_tickTime > _timer5min) then { - [format["Timstamp %8 |Dynamic Missions Running %1 | UMS Running %2 | Vehicles %3 | Groups %4 | Server FPS %5 | Server Uptime %6 Min | Missions Run %7", - blck_missionsRunning, - blck_dynamicUMS_MissionsRuning, - count blck_monitoredVehicles, - count blck_monitoredMissionAIGroups, - diag_FPS,floor(diag_tickTime/60), - blck_missionsRun, - diag_tickTime] + _activeScripts = diag_activeScripts; + + [ + format["Timstamp %8 |Dynamic Missions Running %1 | UMS Running %2 | Vehicles %3 | Groups %4 | Server FPS %5 | Server Uptime %6 Min | Missions Run %7 | Threads [spawned %8, execVM %9]", + blck_missionsRunning, + blck_dynamicUMS_MissionsRuning, + count blck_monitoredVehicles, + count blck_monitoredMissionAIGroups, + diag_FPS,floor(diag_tickTime/60), + blck_missionsRun, + diag_tickTime, + _activeScripts select 0, + _activeScripts select 1 + ] ] call blck_fnc_log; + [] call blck_fnc_cleanEmptyGroups; _timer5min = diag_tickTime + 300; }; From a23a9aad3ced4a06ea042296265aa630636c9512 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Tue, 29 Sep 2020 23:58:24 -0400 Subject: [PATCH 28/67] Units on / under water spawn with proper gear. --- .../Missions/GMS_fnc_monitorInitializedMissions.sqf | 7 ++++++- .../custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 76a1af3..80ab0ca 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -186,7 +186,12 @@ for "_i" from 1 to (count blck_activeMissionsList) do if !(_scubaGroupParameters isEqualTo []) then { - _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_scubaGroupParameters,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission] call blck_fnc_spawnMissionAI; + //_umsUniforms = blck_UMS_uniforms; + //_umsHeadgear = blck_UMS_headgear; + //_umsWeapons = blck_UMS_weapons; + //_umsVests = blck_UMS_vests; + + _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_scubaGroupParameters,_difficulty,blck_UMS_uniforms,blck_UMS_headgear,blck_UMS_vests,_backpacks,blck_UMS_weapons,_sideArms,true] call blck_fnc_spawnMissionAI; _temp params["_ai","_abort"]; if (_abort) throw 1; _blck_AllMissionAI append (_ai); diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf index cff28fd..4aabac8 100644 --- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf +++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf @@ -63,7 +63,13 @@ if (_scuba) then _skin = ""; _counter = 1; -_unit forceAddUniform (selectRandom _uniforms); +if (surfaceIsWater (getPos _unit)) then +{ + _uniforms = blck_UMS_uniforms; + _headGear = blck_UMS_headgear; + _weaponList = blck_UMS_weapons; + _vests = blck_UMS_vests; +}; //Sets AI Tactics _unit enableAI "ALL"; From 959c4da4d777957b2ccc4101620cbd5aec1e2494 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 08:03:23 -0400 Subject: [PATCH 29/67] Fixed missing uniforms and added checks for units spawned on water. --- .../GMS_UMS_fnc_findShoreLocation.sqf | 32 ++++--------------- .../Compiles/Units/GMS_fnc_spawnUnit.sqf | 21 ++++++------ .../custom_server/Compiles/blck_variables.sqf | 2 +- 3 files changed, 17 insertions(+), 38 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_UMS_fnc_findShoreLocation.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_UMS_fnc_findShoreLocation.sqf index 07863cf..cf286ae 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_UMS_fnc_findShoreLocation.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_UMS_fnc_findShoreLocation.sqf @@ -21,10 +21,11 @@ switch (toLower worldName) do case "taviana": {_mapCenter = [12000,12000,0];_maxDistance = 12000}; case "napf" : {_mapCenter = getArray(configFile >> "CfgWorlds" >> worldName >> "centerPosition");_maxDistance = 12000}; case "lythium": {_mapCenter = [10000,10000,0]; _maxDistance = 6000;}; + case "vt7": {_mapCenter = [9000,9000,0]; _maxDistance = 9000}; default {_mapCenter = [6000,6000,0]; _maxDistance = 6000;}; }; -_evaluate = true; +private _evaluate = true; while {_evaluate} do { _waterPos = [ @@ -35,33 +36,14 @@ _evaluate = true; 2, // water mode [2 = water only] 25, // max gradient 0 // shoreMode [0 = anywhere] - ] call BIS_fnc_findSafePos; - /* - _priorUMSpositions = +blck_priorDynamicUMS_Missions; + ] call BIS_fnc_findSafePos; + + if (((getTerrainHeightASL _waterPos) < -4) && (getTerrainHeightASL _waterPos) > -10) then { - if (diag_tickTime > ((_x select 1) + 1800) then - { - blck_priorDynamicUMS_Missions = blck_priorDynamicUMS_Missions - _x; - } else { - if (_waterPos distance2D (_x select 0) < 2000) exitWith {_evaluate = false}; - }; - } forEach _priorUMSpositions; - */ - if (_evaluate) then - { - if (abs(getTerrainHeightASL _waterPos) < 30) then - { - if (abs(getTerrainHeightASL _waterPos) > 1) then - { - //_waterMarker = createMarker [format["water mission %1",getTerrainHeightASL _waterPos],_waterPos]; - //_waterMarker setMarkerColor "ColorRed"; - //_waterMarker setMarkerType "mil_triangle"; - //_waterMarker setMarkerText format["Depth %1",getTerrainHeightASL _waterPos]; - _evaluate = false; - }; - }; + _evaluate = false; }; }; +//diag_log format["_findShoreLocation: _waterPos = %1",_waterPos]; _waterPos diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf index 4aabac8..2390f85 100644 --- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf +++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf @@ -12,7 +12,7 @@ */ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; -private ["_i","_weap","_skin","_unit","_skillLevel","_aiSkills","_launcherRound","_index","_ammoChoices","_optics","_pointers","_muzzles","_underbarrel","_legalOptics"]; +private ["_i","_weap","_unit","_skillLevel","_aiSkills","_launcherRound","_index","_ammoChoices","_optics","_pointers","_muzzles","_underbarrel","_legalOptics"]; params["_pos","_aiGroup",["_skillLevel","red"],["_uniforms", []],["_headGear",[]],["_vests",[]],["_backpacks",[]],["_Launcher","none"],["_weaponList",[]],["_sideArms",[]],["_scuba",false],["_garrison",false]]; if (_weaponList isEqualTo []) then {_weaponList = [_skillLevel] call blck_fnc_selectAILoadout}; @@ -60,17 +60,6 @@ if (_scuba) then _unit swiminDepth (([_pos] call blck_fnc_findWaterDepth) / 2); }; -_skin = ""; -_counter = 1; - -if (surfaceIsWater (getPos _unit)) then -{ - _uniforms = blck_UMS_uniforms; - _headGear = blck_UMS_headgear; - _weaponList = blck_UMS_weapons; - _vests = blck_UMS_vests; -}; - //Sets AI Tactics _unit enableAI "ALL"; if(_garrison) then @@ -81,6 +70,14 @@ _unit allowDammage true; _unit setBehaviour "COMBAT"; _unit setunitpos "AUTO"; +if (surfaceIsWater (getPos _unit)) then +{ + _uniforms = blck_UMS_uniforms; + _headGear = blck_UMS_headgear; + _weaponList = blck_UMS_weapons; + _vests = blck_UMS_vests; +}; +_unit forceAddUniform (selectRandom _uniforms); if !(_headGear isEqualTo []) then { _unit addHeadgear (selectRandom _headGear); diff --git a/@GMS/addons/custom_server/Compiles/blck_variables.sqf b/@GMS/addons/custom_server/Compiles/blck_variables.sqf index e470a8e..1846230 100644 --- a/@GMS/addons/custom_server/Compiles/blck_variables.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_variables.sqf @@ -52,7 +52,7 @@ blck_missionData = []; blck_activeMissionsList = []; blck_initializedMissionsList = []; blck_blackListedLocations = []; // [ [marker, time]] - +blck_activeMonitorThreads = 0; blck_validEndStates = ["allUnitsKilled", "playerNear", "allKilledOrPlayerNear","assetSecured"]; blck_validLootSpawnTimings = ["atMissionSpawnGround","atMissionSpawnAir","atMissionEndGround","atMissionEndAir"]; blck_validLootLoadTimings = ["atMissionCompletion", "atMissionSpawn"]; From e92ac2a1bc9fe8d117ea2509c12a4e014658cd7a Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 10:48:03 -0400 Subject: [PATCH 30/67] Fixed problem with missing statics on mission respawn. --- .../Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf index 265c65c..cab3ef4 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf @@ -27,14 +27,15 @@ _units = []; _abort = false; _pos = []; -// Define _missionEmplacedWeapons if not already configured. -if (_missionEmplacedWeapons isEqualTo []) then +private _emplacedWepData = +_missionEmplacedWeapons; +// Define _emplacedWepData if not already configured. +if (_emplacedWepData isEqualTo []) then { _missionEmplacedWeaponPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius; { _static = selectRandom blck_staticWeapons; - _missionEmplacedWeapons pushback [_static,_x]; + _emplacedWepData pushback [_static,_x]; } forEach _missionEmplacedWeaponPositions; _useRelativePos = false; }; @@ -77,7 +78,7 @@ if (_missionEmplacedWeapons isEqualTo []) then _return = grpNull; ["createGroup returned grpNull","warning"] call blck_fnc_log; }; -} forEach _missionEmplacedWeapons; +} forEach _emplacedWepData; if !(_abort) then { blck_monitoredVehicles append _emplacedWeps; From 37a370bea779dcbb87b08a0f90a1f6afa1781cb2 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 11:02:22 -0400 Subject: [PATCH 31/67] Fixed issues with vehicles not spawning on mission respawn This was caused by overwriting of missing data and solved by making a local copy of _missionPatrolVehicles. --- .../GMS_fnc_spawnMissionVehiclePatrols.sqf | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf index dc2d07a..7f8820b 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf @@ -22,22 +22,22 @@ if (_backpacks isEqualTo []) then {_backpacks = [_skillAI] call blck_fnc_sele if (_weaponList isEqualTo []) then {_weaponList = [_skillAI] call blck_fnc_selectAILoadout}; if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms}; +private["_vehGroup","_vehiclePatrolSpawns""_missiongroups","_vehiclePatrolSpawns","_vehicle","_spawnPos","_return"]; +private _vehicles = []; +private _missionAI = []; +private _abort = false; +private _patrolsThisMission = +_missionPatrolVehicles; - -private["_vehGroup","_vehiclePatrolSpawns","_missionAI","_missiongroups","_vehicles","_return","_vehiclePatrolSpawns","_vehicle","_return","_abort","_spawnPos","_v"]; -_vehicles = []; -_missionAI = []; -_abort = false; - -if (_missionPatrolVehicles isEqualTo []) then +if (_patrolsThisMission isEqualTo []) then { _useRelativePos = false; _vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius; { - _v = [_skillAI] call blck_fnc_selectPatrolVehicle; - _missionPatrolVehicles pushBack [_v, _x]; + private _v = [_skillAI] call blck_fnc_selectPatrolVehicle; + _patrolsThisMission pushBack [_v, _x]; }forEach _vehiclePatrolSpawns; }; + #define configureWaypoints false { if (_useRelativePos) then @@ -46,7 +46,7 @@ if (_missionPatrolVehicles isEqualTo []) then } else { _spawnPos = _x select 1; }; - _vehicle = _x select 0; + private _vehicle = _x select 0; _vehGroup = [blck_AI_Side,true] call blck_fnc_createGroup; _patrolVehicle = objNull; @@ -67,7 +67,8 @@ if (_missionPatrolVehicles isEqualTo []) then } else { _abort = true; }; -} forEach _missionPatrolVehicles; +} forEach _patrolsThisMission; + if !(_abort) then { blck_monitoredVehicles append _vehicles; From 242d1ab23c23937a21b3aef70c74ee3ad0191e2c Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 20:34:17 -0400 Subject: [PATCH 32/67] Rmoved logging --- .../Compiles/Functions/GMS_fnc_addMoneyToObject.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_addMoneyToObject.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_addMoneyToObject.sqf index 2c17267..1561e52 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_addMoneyToObject.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_addMoneyToObject.sqf @@ -15,7 +15,7 @@ if (toLower(blck_modType) isEqualTo "default") exitWith {}; params["_obj",["_money",-1]]; _money = ([_money] call blck_fnc_getNumberFromRange); -if (blck_debugLevel >= 3) then {[format["_fnc_addmoneyToObject: _money = %1 _obj = %2",_money,_obj]] call blck_fnc_log}; +//if (blck_debugLevel >= 3) then {[format["_fnc_addmoneyToObject: _money = %1 _obj = %2",_money,_obj]] call blck_fnc_log}; if !(_money <= 0) then { switch(toLower(blck_modType)) do From d2d0325498c4444acb4fc2145fcd1c4dca076adf Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 20:34:44 -0400 Subject: [PATCH 33/67] Added some logging / counting --- .../Compiles/Functions/GMS_fnc_mainThread.sqf | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) 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 6204839..b0a0c11 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf @@ -76,20 +76,28 @@ while {true} do if (diag_tickTime > _timer5min) then { _activeScripts = diag_activeScripts; + [ - format["Timstamp %8 |Dynamic Missions Running %1 | UMS Running %2 | Vehicles %3 | Groups %4 | Server FPS %5 | Server Uptime %6 Min | Missions Run %7 | Threads [spawned %8, execVM %9]", + format["Timstamp %8 |Dynamic Missions Running %1 | Vehicles %2 | Groups %3 | Missions Run %4 | Server FPS %5 | Server Uptime %6 Min", blck_missionsRunning, - blck_dynamicUMS_MissionsRuning, count blck_monitoredVehicles, count blck_monitoredMissionAIGroups, + blck_missionsRun, diag_FPS,floor(diag_tickTime/60), - blck_missionsRun, - diag_tickTime, - _activeScripts select 0, - _activeScripts select 1 + diag_tickTime ] ] call blck_fnc_log; - + [ + format["count diag_activeSQFScripts %1 | Threads [spawned %2, execVM %3] | monitorThreads %4", + count diag_activeSQFScripts, + _activeScripts select 0, + _activeScripts select 1, + blck_activeMonitorThreads + ] + ] call blck_fnc_log; + { + [format["file %1 | running %2",(_x select 1),(_x select 2)]] call blck_fnc_log; + } forEach diag_activeSQFScripts; [] call blck_fnc_cleanEmptyGroups; _timer5min = diag_tickTime + 300; }; From a1a39799e411cc51a6503e8d972219c14a0be47f Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 20:35:00 -0400 Subject: [PATCH 34/67] bug fixes --- .../GMS_fnc_monitorInitializedMissions.sqf | 62 +++++++------------ 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 50c568d..c98c7e6 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -8,6 +8,8 @@ #define noActive 2 #define waitTime 5 +blck_activeMonitorThreads = blck_activeMonitorThreads + 1; + for "_i" from 1 to (count blck_activeMissionsList) do { @@ -127,7 +129,6 @@ for "_i" from 1 to (count blck_activeMissionsList) do }; }; - switch (_monitorAction) do { @@ -188,7 +189,12 @@ for "_i" from 1 to (count blck_activeMissionsList) do if !(_scubaGroupParameters isEqualTo []) then { - _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_scubaGroupParameters,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission] call blck_fnc_spawnMissionAI; + //_umsUniforms = blck_UMS_uniforms; + //_umsHeadgear = blck_UMS_headgear; + //_umsWeapons = blck_UMS_weapons; + //_umsVests = blck_UMS_vests; + + _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_scubaGroupParameters,_difficulty,blck_UMS_uniforms,blck_UMS_headgear,blck_UMS_vests,_backpacks,blck_UMS_weapons,_sideArms,true] call blck_fnc_spawnMissionAI; _temp params["_ai","_abort"]; if (_abort) throw 1; _blck_AllMissionAI append (_ai); @@ -247,7 +253,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do }; uisleep 3; - if (count _garrisonedBuilding_ATLsystem > 0) then // Note that there is no error checking here for nulGroups + if !(_garrisonedBuilding_ATLsystem isEqualTo []) then // Note that there is no error checking here for nulGroups { private _temp = [_coords, _garrisonedBuilding_ATLsystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_ATLsystem; if (_temp isEqualTo grpNull) then {throw 1} else @@ -260,7 +266,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do }; uiSleep 3; - if (count _garrisonedBuildings_BuildingPosnSystem > 0) then + if !(_garrisonedBuildings_BuildingPosnSystem isEqualTo []) then { private _temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_RelPosSystem; if (_temp isEqualTo grpNull) then {throw 1} else @@ -274,12 +280,13 @@ for "_i" from 1 to (count blck_activeMissionsList) do uiSleep 15; private _userelativepos = true; - private _noEmplacedWeapons = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange; - if (blck_useStatic && ((_noEmplacedWeapons > 0) || count _missionEmplacedWeapons > 0)) then + private _emplacedWeaponsThisMission = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange; + [format["_monitorInitializedMissions(284): _noEmplacedWeapons = %1 | _emplacedWeaponsThisMission = %2 | _missionEmplacedWeapons = %3",_noEmplacedWeapons,_emplacedWeaponsThisMission,_missionEmplacedWeapons]] call blck_fnc_log; + if (blck_useStatic && ((_emplacedWeaponsThisMission > 0) || !(_missionEmplacedWeapons isEqualTo []))) then // TODO: add error checks for grpNull to the emplaced weapon spawner { - private _temp = [_coords,_missionEmplacedWeapons,_userelativepos,_noEmplacedWeapons,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnEmplacedWeaponArray; + private _temp = [_coords,_missionEmplacedWeapons,_userelativepos,_emplacedWeaponsThisMission,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnEmplacedWeaponArray; if (_temp isEqualTo grpNull) then {throw 1} else { _objects append (_temp select 0); @@ -288,29 +295,29 @@ for "_i" from 1 to (count blck_activeMissionsList) do }; uisleep 10; - private _noVehiclePatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; - if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then + private _noPatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; + diag_log format["_monitorInitializeMissions(299): __noVehiclePatrols %1 | _noPatrols %2 | _missionPatrolVehicles %3",_noVehiclePatrols,_noPatrols,_missionPatrolVehicles]; + if (blck_useVehiclePatrols && ((_noPatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then { - _temp = [_coords,_noVehiclePatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; + _temp = [_coords,_noPatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) throw 1; _missionAIVehicles append (_temp select 0); _blck_AllMissionAI append (_temp select 1); }; uiSleep delayTime; - if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then + + if (blck_useVehiclePatrols && ((_noPatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then { - //params["_coords","_noVehiclePatrols","_skillAI","_missionPatrolVehicles",["_useRelativePos",true],["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_isScubaGroup",false],["_crewCount",4]]; - _temp = [_coords,_noVehiclePatrols,_difficulty,_submarinePatrolParameters,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; + _temp = [_coords,_noPatrols,_difficulty,_submarinePatrolParameters,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) throw 1; _missionAIVehicles append (_temp select 0); _blck_AllMissionAI append (_temp select 1); }; + uiSleep delayTime; - if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _spawnCrateTiming = %1 _loadCratesTiming = %2 | _markerMissionName = %3",_spawnCratesTiming,_loadCratesTiming, _markerMissionName]}; - if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _missionLootBoxes = %1",_missionLootBoxes]}; if (_spawnCratesTiming in ["atMissionSpawnGround","atMissionSpawnAir"]) then { if (_missionLootBoxes isEqualTo []) then @@ -346,20 +353,9 @@ for "_i" from 1 to (count blck_activeMissionsList) do _x setVariable["crateSpawnPos", (getPos _x)]; } forEach _crates; private _spawnPara = if (random(1) < _chancePara) then {true} else {false}; - - /* - private _vars = ["_objects","_hiddenObjects","_crates"]; - { - diag_log format["_monitorInitializedMissions(322): %1 = %2",_vars select _forEachIndex,_x]; - } forEach [_objects,_hiddenObjects,_crates]; - */ // 0 1 2 3 4 5 + _missionData = [_coords,_mines,_objects,_hiddenObjects,_crates,_blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; - /* - { - diag_log format["_monitorInitializedMission (327): _missionData %1 = %2",_vars select _foreachIndex,_missionData select _x]; - } forEach [2,3,4,5]; - */ _el set[missionData, _missionData]; // Everything spawned withouth serious errors so lets keep the mission active for future monitoring @@ -402,17 +398,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do private _playerIsNear = [_crates,20,true] call blck_fnc_playerInRangeArray; private _minNoAliveForCompletion = (count _blck_AllMissionAI) - (round(blck_killPercentage * (count _blck_AllMissionAI))); private _aiKilled = if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then {true} else {false}; // mission complete - - /* - private _vars = ["_objects","_hiddenObjects","_crates"]; - { - diag_log format["_monitorInitializedMissions (363): %1 = %2",_vars select _forEachIndex,_x]; - } forEach [_objects,_hiddenObjects,_crates]; - { - diag_log format["_monitorInitializedMission (369): _missionData %1 = %2",_vars select _foreachIndex,_missionData select _x]; - } forEach [2,3,4,5]; - */ - //_el set[missionData, _missionData]; + if (_endIfPlayerNear) then { if (_playerIsNear) throw 1; // mission complete From bbbd73a18e0a2bac760f233836ddd7bf40af6e55 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 20:35:17 -0400 Subject: [PATCH 35/67] bug fixes --- .../Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf | 4 ++-- .../GMS_fnc_spawnMissionVehiclePatrols.sqf | 14 ++++++++------ .../Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf index cab3ef4..5ed218a 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf @@ -31,12 +31,12 @@ private _emplacedWepData = +_missionEmplacedWeapons; // Define _emplacedWepData if not already configured. if (_emplacedWepData isEqualTo []) then { - _missionEmplacedWeaponPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius; + private _wepPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius; { _static = selectRandom blck_staticWeapons; _emplacedWepData pushback [_static,_x]; - } forEach _missionEmplacedWeaponPositions; + } forEach _wepPositions; _useRelativePos = false; }; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf index 7f8820b..0596899 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf @@ -22,7 +22,7 @@ if (_backpacks isEqualTo []) then {_backpacks = [_skillAI] call blck_fnc_sele if (_weaponList isEqualTo []) then {_weaponList = [_skillAI] call blck_fnc_selectAILoadout}; if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms}; -private["_vehGroup","_vehiclePatrolSpawns""_missiongroups","_vehiclePatrolSpawns","_vehicle","_spawnPos","_return"]; +private["_spawnPos","_return"]; private _vehicles = []; private _missionAI = []; private _abort = false; @@ -31,13 +31,16 @@ private _patrolsThisMission = +_missionPatrolVehicles; if (_patrolsThisMission isEqualTo []) then { _useRelativePos = false; - _vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius; + private _spawnLocations = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius; + //diag_log format["_spawnMissionVehiclePatrols (35): _spawnLocations = %1",_spawnLocations]; { + private _v = [_skillAI] call blck_fnc_selectPatrolVehicle; _patrolsThisMission pushBack [_v, _x]; - }forEach _vehiclePatrolSpawns; + diag_log format["_spawnMissionVehiclePatrols(36): _v = %1 | _patrolsThisMission = %2",_v,_patrolsThisMission]; + }forEach _spawnLocations; }; - +//diag_log format["_spawnMissionVehiclePatrols(42): _patrolsThisMission = %1",_patrolsThisMission]; #define configureWaypoints false { if (_useRelativePos) then @@ -47,9 +50,8 @@ if (_patrolsThisMission isEqualTo []) then _spawnPos = _x select 1; }; private _vehicle = _x select 0; - _vehGroup = [blck_AI_Side,true] call blck_fnc_createGroup; + private _vehGroup = [blck_AI_Side,true] call blck_fnc_createGroup; _patrolVehicle = objNull; - if !(isNull _vehGroup) then { _vehGroup setVariable["soldierType","vehicle"]; diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf index a1c2f10..684a631 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf @@ -12,8 +12,8 @@ */ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; -params["_vehType","_pos",["_special","NONE"],["_radius",30]]; -//diag_log format["_spawnVehicle: _vehType = %1 | _special = %2 | _radiu = %3",_vehType,_special,_radius]; +params["_vehType",["_pos",[]],["_special","NONE"],["_radius",30]]; + private _veh = createVehicle[_vehType, _pos, [], _radius, _special]; _veh setVectorUp surfaceNormal position _veh; _veh allowDamage true; From 507530f5a12a92a2949246106b0a643320ba6de3 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 20:35:30 -0400 Subject: [PATCH 36/67] Build 224 --- @GMS/addons/custom_server/init/build.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 5543e9f..7a32b31 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 223 +#define blck_buildNumber 224 #define blck_versionNumber 7.02 -#define blck_buildDate "9-28-20" +#define blck_buildDate "10-1-20" From c86375c4d4934cae8f94d0cdb191b2b23daf4d20 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Thu, 1 Oct 2020 20:35:45 -0400 Subject: [PATCH 37/67] Fix issue with vt7 --- @GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf b/@GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf index ea86e51..99487cd 100644 --- a/@GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf +++ b/@GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf @@ -43,6 +43,6 @@ switch (toLower worldName) do case "lingor":{blck_mapCenter = [4400, 4400, 0];blck_mapRange = 4400;}; case "takistan":{blck_mapCenter = [5500, 6500, 0];blck_mapRange = 5000;}; case "lythium":{blck_mapCenter = [10000,10000,0];blck_mapRange = 8500;}; - case "vt7": {_mapCenter = [9000,9000,0]; _maxDistance = 9000}; + case "vt7": {blck_mapCenter = [9000,9000,0]; blck_mapRange = 9000}; default {blck_mapCenter = [6322,7801,0]; blck_mapRange = 6000}; }; From 93f71b0779305e32664dad06f2eacfa3f92fba4f Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:05:56 -0400 Subject: [PATCH 38/67] Removed logging --- .../Compiles/Functions/GMS_fnc_addMoneyToObject.sqf | 2 +- .../Compiles/Functions/GMS_fnc_cleanupTemporaryMarkers.sqf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_addMoneyToObject.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_addMoneyToObject.sqf index 2c17267..1561e52 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_addMoneyToObject.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_addMoneyToObject.sqf @@ -15,7 +15,7 @@ if (toLower(blck_modType) isEqualTo "default") exitWith {}; params["_obj",["_money",-1]]; _money = ([_money] call blck_fnc_getNumberFromRange); -if (blck_debugLevel >= 3) then {[format["_fnc_addmoneyToObject: _money = %1 _obj = %2",_money,_obj]] call blck_fnc_log}; +//if (blck_debugLevel >= 3) then {[format["_fnc_addmoneyToObject: _money = %1 _obj = %2",_money,_obj]] call blck_fnc_log}; if !(_money <= 0) then { switch(toLower(blck_modType)) do diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanupTemporaryMarkers.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanupTemporaryMarkers.sqf index 47a3d8d..f049b0b 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanupTemporaryMarkers.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanupTemporaryMarkers.sqf @@ -12,11 +12,11 @@ for "_i" from 1 to (count blck_temporaryMarkers) do { if (_i > (count blck_temporaryMarkers)) exitWith {}; private _m = blck_temporaryMarkers deleteAt 0; - _m params["_marker","_deleteAt"]; + _m params[["_marker",""],["_deleteAt",0]]; if (diag_tickTime > _deleteAt) then { deleteMarker _marker; } else { blck_temporaryMarkers pushBack _m; }; -}; \ No newline at end of file +}; From c5bacb2a357400c3110162b6a6ef41cea65a614e Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:06:29 -0400 Subject: [PATCH 39/67] Add counter for number of instances; added logging of active scripts --- .../Compiles/Functions/GMS_fnc_mainThread.sqf | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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 31519b4..b0a0c11 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf @@ -78,19 +78,26 @@ while {true} do _activeScripts = diag_activeScripts; [ - format["Timstamp %8 |Dynamic Missions Running %1 | UMS Running %2 | Vehicles %3 | Groups %4 | Server FPS %5 | Server Uptime %6 Min | Missions Run %7 | Threads [spawned %8, execVM %9]", + format["Timstamp %8 |Dynamic Missions Running %1 | Vehicles %2 | Groups %3 | Missions Run %4 | Server FPS %5 | Server Uptime %6 Min", blck_missionsRunning, - blck_dynamicUMS_MissionsRuning, count blck_monitoredVehicles, count blck_monitoredMissionAIGroups, + blck_missionsRun, diag_FPS,floor(diag_tickTime/60), - blck_missionsRun, - diag_tickTime, - _activeScripts select 0, - _activeScripts select 1 + diag_tickTime ] ] call blck_fnc_log; - + [ + format["count diag_activeSQFScripts %1 | Threads [spawned %2, execVM %3] | monitorThreads %4", + count diag_activeSQFScripts, + _activeScripts select 0, + _activeScripts select 1, + blck_activeMonitorThreads + ] + ] call blck_fnc_log; + { + [format["file %1 | running %2",(_x select 1),(_x select 2)]] call blck_fnc_log; + } forEach diag_activeSQFScripts; [] call blck_fnc_cleanEmptyGroups; _timer5min = diag_tickTime + 300; }; From ceec5c2af4d526c49cfcb6aed015a261ba06fd51 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:08:24 -0400 Subject: [PATCH 40/67] tried to prevent case that throws an error sometimes --- .../Compiles/Missions/GMS_fnc_cleanUpObjects.sqf | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf index 9e85083..4539468 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf @@ -19,13 +19,22 @@ for "_i" from 1 to (count blck_oldMissionObjects) do { if (_i <= count blck_oldMissionObjects) then { private _oldObjs = blck_oldMissionObjects deleteAt 0; - _oldObjs params ["_missionCenter","_objarr","_timer"]; + _oldObjs params [["_missionCenter",[0,0,0]],["_objarr",[]],["_timer",0]]; if (diag_tickTime > _timer) then { private _nearplayer = [_missionCenter,800] call blck_fnc_nearestPlayers; if (_nearPlayer isEqualTo []) then { - {deleteVehicle _x}forEach _objarr; + { + if (typeName _x isEqualTo "OBJECT") then {deleteVehicle _x}; + if (_x isEqualType []) then + { + //[format["_fnc_cleanUpObjects: case of _x is array: %1",_x]] call blck_fnc_log; + { + if (typeName _x isEqualTo "OBJECT") then {deleteVehicle _x}; + } forEach _x; + }; + } forEach _objarr; } else { blck_oldMissionObjects pushback _oldObjs; }; From 2de977392b41a5ea5b726cfc806eaf9c3320e487 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:09:20 -0400 Subject: [PATCH 41/67] add counter for instance number; coding tweaks --- .../GMS_fnc_monitorInitializedMissions.sqf | 69 +++++++------------ 1 file changed, 23 insertions(+), 46 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 80ab0ca..e2957e6 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -8,6 +8,8 @@ #define noActive 2 #define waitTime 5 +blck_activeMonitorThreads = blck_activeMonitorThreads + 1; + for "_i" from 1 to (count blck_activeMissionsList) do { @@ -126,9 +128,10 @@ for "_i" from 1 to (count blck_activeMissionsList) do _monitorAction = 1; }; }; - + switch (_monitorAction) do { + // Handle Timeout case -1: { @@ -250,7 +253,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do }; uisleep 3; - if (count _garrisonedBuilding_ATLsystem > 0) then // Note that there is no error checking here for nulGroups + if !(_garrisonedBuilding_ATLsystem isEqualTo []) then // Note that there is no error checking here for nulGroups { private _temp = [_coords, _garrisonedBuilding_ATLsystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_ATLsystem; if (_temp isEqualTo grpNull) then {throw 1} else @@ -263,7 +266,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do }; uiSleep 3; - if (count _garrisonedBuildings_BuildingPosnSystem > 0) then + if !(_garrisonedBuildings_BuildingPosnSystem isEqualTo []) then { private _temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_RelPosSystem; if (_temp isEqualTo grpNull) then {throw 1} else @@ -277,12 +280,13 @@ for "_i" from 1 to (count blck_activeMissionsList) do uiSleep 15; private _userelativepos = true; - private _noEmplacedWeapons = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange; - if (blck_useStatic && ((_noEmplacedWeapons > 0) || count _missionEmplacedWeapons > 0)) then + private _emplacedWeaponsThisMission = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange; + //[format["_monitorInitializedMissions(284): _noEmplacedWeapons = %1 | _emplacedWeaponsThisMission = %2 | _missionEmplacedWeapons = %3",_noEmplacedWeapons,_emplacedWeaponsThisMission,_missionEmplacedWeapons]] call blck_fnc_log; + if (blck_useStatic && ((_emplacedWeaponsThisMission > 0) || !(_missionEmplacedWeapons isEqualTo []))) then // TODO: add error checks for grpNull to the emplaced weapon spawner { - private _temp = [_coords,_missionEmplacedWeapons,_userelativepos,_noEmplacedWeapons,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnEmplacedWeaponArray; + private _temp = [_coords,_missionEmplacedWeapons,_userelativepos,_emplacedWeaponsThisMission,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnEmplacedWeaponArray; if (_temp isEqualTo grpNull) then {throw 1} else { _objects append (_temp select 0); @@ -291,29 +295,29 @@ for "_i" from 1 to (count blck_activeMissionsList) do }; uisleep 10; - private _noVehiclePatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; - if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then + private _noPatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; + //diag_log format["_monitorInitializeMissions(299): __noVehiclePatrols %1 | _noPatrols %2 | _missionPatrolVehicles %3",_noVehiclePatrols,_noPatrols,_missionPatrolVehicles]; + if (blck_useVehiclePatrols && ((_noPatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then { - _temp = [_coords,_noVehiclePatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; + _temp = [_coords,_noPatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) throw 1; _missionAIVehicles append (_temp select 0); _blck_AllMissionAI append (_temp select 1); }; uiSleep delayTime; - if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then + + if (blck_useVehiclePatrols && ((_noPatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then { - //params["_coords","_noVehiclePatrols","_skillAI","_missionPatrolVehicles",["_useRelativePos",true],["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_isScubaGroup",false],["_crewCount",4]]; - _temp = [_coords,_noVehiclePatrols,_difficulty,_submarinePatrolParameters,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; + _temp = [_coords,_noPatrols,_difficulty,_submarinePatrolParameters,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) throw 1; _missionAIVehicles append (_temp select 0); _blck_AllMissionAI append (_temp select 1); }; + uiSleep delayTime; - if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _spawnCrateTiming = %1 _loadCratesTiming = %2 | _markerMissionName = %3",_spawnCratesTiming,_loadCratesTiming, _markerMissionName]}; - if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _missionLootBoxes = %1",_missionLootBoxes]}; if (_spawnCratesTiming in ["atMissionSpawnGround","atMissionSpawnAir"]) then { if (_missionLootBoxes isEqualTo []) then @@ -349,20 +353,9 @@ for "_i" from 1 to (count blck_activeMissionsList) do _x setVariable["crateSpawnPos", (getPos _x)]; } forEach _crates; private _spawnPara = if (random(1) < _chancePara) then {true} else {false}; - - /* - private _vars = ["_objects","_hiddenObjects","_crates"]; - { - diag_log format["_monitorInitializedMissions(322): %1 = %2",_vars select _forEachIndex,_x]; - } forEach [_objects,_hiddenObjects,_crates]; - */ // 0 1 2 3 4 5 + _missionData = [_coords,_mines,_objects,_hiddenObjects,_crates,_blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; - /* - { - diag_log format["_monitorInitializedMission (327): _missionData %1 = %2",_vars select _foreachIndex,_missionData select _x]; - } forEach [2,3,4,5]; - */ _el set[missionData, _missionData]; // Everything spawned withouth serious errors so lets keep the mission active for future monitoring @@ -405,17 +398,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do private _playerIsNear = [_crates,20,true] call blck_fnc_playerInRangeArray; private _minNoAliveForCompletion = (count _blck_AllMissionAI) - (round(blck_killPercentage * (count _blck_AllMissionAI))); private _aiKilled = if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then {true} else {false}; // mission complete - - /* - private _vars = ["_objects","_hiddenObjects","_crates"]; - { - diag_log format["_monitorInitializedMissions (363): %1 = %2",_vars select _forEachIndex,_x]; - } forEach [_objects,_hiddenObjects,_crates]; - { - diag_log format["_monitorInitializedMission (369): _missionData %1 = %2",_vars select _foreachIndex,_missionData select _x]; - } forEach [2,3,4,5]; - */ - //_el set[missionData, _missionData]; + if (_endIfPlayerNear) then { if (_playerIsNear) throw 1; // mission complete @@ -485,15 +468,6 @@ for "_i" from 1 to (count blck_activeMissionsList) do _missionData = [_coords,_mines,_objects,_hiddenObjects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers]; - /* - { - diag_log format["_monitorInitializedMissions (363): %1 = %2",_vars select _forEachIndex,_x]; - } forEach [_objects,_hiddenObjects,_crates]; - { - diag_log format["_monitorInitializedMission (369): _missionData %1 = %2",_vars select _foreachIndex,_missionData select _x]; - } forEach [2,3,4,5]; - */ - _el set[missionData, _missionData]; // If there were no throws then lets check on the mission in a bit. @@ -587,4 +561,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do blck_activeMissionsList pushBack _el; }; }; + }; + +blck_activeMonitorThreads = blck_activeMonitorThreads - 1; From 4669a08061dbc342c779b7f963fbda1d8e451218 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:09:45 -0400 Subject: [PATCH 42/67] remove logging, codign fixes --- .../Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf index cab3ef4..ed28abb 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf @@ -28,18 +28,22 @@ _abort = false; _pos = []; private _emplacedWepData = +_missionEmplacedWeapons; +//diag_log format["_spawnEmplacedWeaponArray(30): _noEmplacedWeapons = %1 | _emplacedWepData = %2",_noEmplacedWeapons,_emplacedWepData]; + // Define _emplacedWepData if not already configured. if (_emplacedWepData isEqualTo []) then { - _missionEmplacedWeaponPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius; + private _wepPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius; { _static = selectRandom blck_staticWeapons; _emplacedWepData pushback [_static,_x]; - } forEach _missionEmplacedWeaponPositions; + } forEach _wepPositions; _useRelativePos = false; }; +//diag_log format["_spawnEmplacedWeaponArray(45): _noEmplacedWeapons = %1 | _emplacedWepData = %2",_noEmplacedWeapons,_emplacedWepData]; + { if (_useRelativePos) then { From e4a7950d43d6df56c78b0cb788258b5c0973d3f2 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:10:37 -0400 Subject: [PATCH 43/67] coding fixes --- .../GMS_fnc_spawnMissionVehiclePatrols.sqf | 16 +++++++++------- .../Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf index 7f8820b..decb967 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf @@ -22,22 +22,25 @@ if (_backpacks isEqualTo []) then {_backpacks = [_skillAI] call blck_fnc_sele if (_weaponList isEqualTo []) then {_weaponList = [_skillAI] call blck_fnc_selectAILoadout}; if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms}; -private["_vehGroup","_vehiclePatrolSpawns""_missiongroups","_vehiclePatrolSpawns","_vehicle","_spawnPos","_return"]; +private["_spawnPos","_return"]; private _vehicles = []; private _missionAI = []; private _abort = false; private _patrolsThisMission = +_missionPatrolVehicles; - +//diag_log format["_spawnMissionVehiclePatrols(30): _noVehiclePatrols = %1 | _patrolsThisMission = %2",_noVehiclePatrols,_patrolsThisMission]; if (_patrolsThisMission isEqualTo []) then { _useRelativePos = false; - _vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius; + private _spawnLocations = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius; + //diag_log format["_spawnMissionVehiclePatrols (35): _spawnLocations = %1",_spawnLocations]; { + private _v = [_skillAI] call blck_fnc_selectPatrolVehicle; _patrolsThisMission pushBack [_v, _x]; - }forEach _vehiclePatrolSpawns; + //diag_log format["_spawnMissionVehiclePatrols(36): _v = %1 | _patrolsThisMission = %2",_v,_patrolsThisMission]; + }forEach _spawnLocations; }; - +//diag_log format["_spawnMissionVehiclePatrols(42): _patrolsThisMission = %1",_patrolsThisMission]; #define configureWaypoints false { if (_useRelativePos) then @@ -47,9 +50,8 @@ if (_patrolsThisMission isEqualTo []) then _spawnPos = _x select 1; }; private _vehicle = _x select 0; - _vehGroup = [blck_AI_Side,true] call blck_fnc_createGroup; + private _vehGroup = [blck_AI_Side,true] call blck_fnc_createGroup; _patrolVehicle = objNull; - if !(isNull _vehGroup) then { _vehGroup setVariable["soldierType","vehicle"]; diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf index a1c2f10..684a631 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf @@ -12,8 +12,8 @@ */ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; -params["_vehType","_pos",["_special","NONE"],["_radius",30]]; -//diag_log format["_spawnVehicle: _vehType = %1 | _special = %2 | _radiu = %3",_vehType,_special,_radius]; +params["_vehType",["_pos",[]],["_special","NONE"],["_radius",30]]; + private _veh = createVehicle[_vehType, _pos, [], _radius, _special]; _veh setVectorUp surfaceNormal position _veh; _veh allowDamage true; From 87b739cbbeb795db4d916ff82c0c15a6809f22dd Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:10:54 -0400 Subject: [PATCH 44/67] fix info for vt7 --- @GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf b/@GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf index ea86e51..99487cd 100644 --- a/@GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf +++ b/@GMS/addons/custom_server/init/GMS_fnc_findWorld.sqf @@ -43,6 +43,6 @@ switch (toLower worldName) do case "lingor":{blck_mapCenter = [4400, 4400, 0];blck_mapRange = 4400;}; case "takistan":{blck_mapCenter = [5500, 6500, 0];blck_mapRange = 5000;}; case "lythium":{blck_mapCenter = [10000,10000,0];blck_mapRange = 8500;}; - case "vt7": {_mapCenter = [9000,9000,0]; _maxDistance = 9000}; + case "vt7": {blck_mapCenter = [9000,9000,0]; blck_mapRange = 9000}; default {blck_mapCenter = [6322,7801,0]; blck_mapRange = 6000}; }; From 06c4faac888cbda8e196b64b4e78295be320aa87 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:11:03 -0400 Subject: [PATCH 45/67] Build 225 --- @GMS/addons/custom_server/init/build.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 125f70e..90449be 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 222 +#define blck_buildNumber 225 #define blck_versionNumber 7.02 -#define blck_buildDate "9-28-20" +#define blck_buildDate "10-3-20" From bd0165360cb3f6f4ea45461b3a81a334c54ae119 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 3 Oct 2020 08:20:32 -0400 Subject: [PATCH 46/67] remove some logging --- .../custom_server/Compiles/Missions/GMS_fnc_endMission.sqf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf index d09832a..a8be680 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf @@ -16,6 +16,12 @@ _fn_missionCleanup = { params["_coords","_mines","_objects","_hiddenObjects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]]; + /* + private _vars = ["_coords","_mines","_objects","_hiddenObjects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer"]; + { + diag_log format["_endMission:_missionCleanup: %1 = %2",_x,_this select _forEachIndex]; + } forEach _vars; + */ [_mines] call blck_fnc_clearMines; blck_oldMissionObjects pushback [_coords,_objects, (diag_tickTime + _cleanupCompositionTimer)]; blck_hiddenTerrainObjects pushBack[_hiddenObjects,(diag_tickTime + _cleanupCompositionTimer)]; From ef2423996eeafff0a2f0f93a930863f1583a48ca Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 09:52:36 -0400 Subject: [PATCH 47/67] Fix for duplication of vehicle patrols at missions. --- .../Missions/GMS_fnc_initializeMission.sqf | 2 + .../Missions/GMS_fnc_missionSpawner.sqf | 7 +- .../GMS_fnc_monitorInitializedMissions.sqf | 118 +++++++++--------- 3 files changed, 68 insertions(+), 59 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 6e42e9f..34a584b 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -54,6 +54,7 @@ _missionParameters params[ "_missionLootBoxes", "_missionLootVehicles", "_missionPatrolVehicles", + "_submarinePatrols", "_submarinePatrolParameters", "_airPatrols", "_noVehiclePatrols", @@ -65,6 +66,7 @@ _missionParameters params[ "_maxNoAI", "_noAIGroups", "_missionGroups", + "_scubaPatrols", "_scubaGroupParameters", "_hostageConfig", "_enemyLeaderConfig", 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 755076a..b5a5104 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf @@ -17,7 +17,8 @@ private ["_abort","_crates","_aiGroup","_objects","_groupPatrolRadius","_mission "_AI_Vehicles","_timeOut","_aiDifficultyLevel","_missionPatrolVehicles","_missionGroups","_loadCratesTiming","_spawnCratesTiming","_assetSpawned","_hostageConfig", "_chanceHeliPatrol","_noPara","_chanceLoot","_heliCrew","_loadCratesTiming","_useMines","_blck_AllMissionAI","_delayTime","_groupPatrolRadius","_simpleObjects", "_wait","_missionStartTime","_playerInRange","_missionTimedOut","_temp","_patrolVehicles","_vehToSpawn","_noChoppers","_chancePara","_paraSkill","_marker","_vehicleCrewCount", - "_defaultMissionLocations","_garrisonedbuildings_buildingposnsystem","_garrisonedBuilding_ATLsystem", "_isScubaMission","_markerlabel","_missionLootBoxes","_airpatrols"]; + "_defaultMissionLocations","_garrisonedbuildings_buildingposnsystem","_garrisonedBuilding_ATLsystem", "_isScubaMission","_markerlabel","_missionLootBoxes","_airpatrols", + "_submarinePatrols","_scubaPatrols"]; params["_markerName",["_aiDifficultyLevel","Red"]]; if (isNil "_markerLabel") then {_markerLabel = _markerMissionName}; @@ -54,7 +55,9 @@ if (isNil "_garrisonedBuilding_ATLsystem") then {_garrisonedBuilding_ATLsystem = if (isNil "_garrisonedBuildings_BuildingPosnSystem") then {_garrisonedBuildings_BuildingPosnSystem = []}; if (isNil "_vehicleCrewCount") then {_vehicleCrewCount = [_aiDifficultyLevel] call GMS_fnc_selectVehicleCrewCount}; if (isNil "_airpatrols") then {_airpatrols = []}; +if (isNil "_submarinePatrols") then {_submarinePatrols = 0}; if (isNil "_submarinePatrolParameters") then {_submarinePatrolParameters = []}; +if (isNil "_scubaPatrols") then {_scubaPatrols = 0}; if (isNil "_scubagroupparameters") then {_scubagroupparameters = []}; if (isNil "_markerMissionName") then { diag_log format["_fnc_missionSpawner: _markerMissionName not defined, using default value"]; @@ -111,6 +114,7 @@ private _table = [ _missionLootBoxes, _missionLootVehicles, _missionPatrolVehicles, + _submarinePatrols, // Added Build 227 _submarinePatrolParameters, _airPatrols, _noVehiclePatrols, @@ -122,6 +126,7 @@ private _table = [ _maxNoAI, _noAIGroups, _missionGroups, + _scubaPatrols, // Added Build 227 _scubaGroupParameters, _hostageConfig, _enemyLeaderConfig, diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index e2957e6..d82eefc 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -50,60 +50,62 @@ for "_i" from 1 to (count blck_activeMissionsList) do ]; _missionParameters params[ - "_markerName", - "_markerMissionName", - "_endMsg", - "_startMsg", - "_defaultMissionLocations", - "_crateLoot", - "_lootCounts", - "_markerType", - "_markerColor", - "_markerSize", - "_markerBrush", - "_missionLandscapeMode", - "_garrisonedBuildings_BuildingPosnSystem", - "_garrisonedBuilding_ATLsystem", - "_missionLandscape", - "_simpleObjects", - "_missionLootBoxes", - "_missionLootVehicles", - "_missionPatrolVehicles", - "_submarinePatrolParameters", - "_airPatrols", - "_noVehiclePatrols", - "_vehicleCrewCount", - "_missionEmplacedWeapons", - "_noEmplacedWeapons", - "_useMines", - "_minNoAI", - "_maxNoAI", - "_noAIGroups", - "_missionGroups", - "_scubaGroupParameters", - "_hostageConfig", - "_enemyLeaderConfig", - "_assetKilledMsg", - "_uniforms", - "_headgear", - "_vests", - "_backpacks", - "_weaponList", - "_sideArms", - "_chanceHeliPatrol", - "_noChoppers", - "_missionHelis", - "_chancePara", - "_noPara", - "_paraTriggerDistance", - "_paraSkill", - "_chanceLoot", - "_paraLoot", - "_paraLootCounts", - "_spawnCratesTiming", - "_loadCratesTiming", - "_endCondition", - "_isScubaMission" + "_markerName", + "_markerMissionName", + "_endMsg", + "_startMsg", + "_defaultMissionLocations", + "_crateLoot", + "_lootCounts", + "_markerType", + "_markerColor", + "_markerSize", + "_markerBrush", + "_missionLandscapeMode", + "_garrisonedBuildings_BuildingPosnSystem", + "_garrisonedBuilding_ATLsystem", + "_missionLandscape", + "_simpleObjects", + "_missionLootBoxes", + "_missionLootVehicles", + "_missionPatrolVehicles", + "_submarinePatrols", + "_submarinePatrolParameters", + "_airPatrols", + "_noVehiclePatrols", + "_vehicleCrewCount", + "_missionEmplacedWeapons", + "_noEmplacedWeapons", + "_useMines", + "_minNoAI", + "_maxNoAI", + "_noAIGroups", + "_missionGroups", + "_scubaPatrols", + "_scubaGroupParameters", + "_hostageConfig", + "_enemyLeaderConfig", + "_assetKilledMsg", + "_uniforms", + "_headgear", + "_vests", + "_backpacks", + "_weaponList", + "_sideArms", + "_chanceHeliPatrol", + "_noChoppers", + "_missionHelis", + "_chancePara", + "_noPara", + "_paraTriggerDistance", + "_paraSkill", + "_chanceLoot", + "_paraLoot", + "_paraLootCounts", + "_spawnCratesTiming", + "_loadCratesTiming", + "_endCondition", + "_isScubaMission" ]; private _playerInRange = [_coords, blck_TriggerDistance, false] call blck_fnc_playerInRange; @@ -187,14 +189,14 @@ for "_i" from 1 to (count blck_activeMissionsList) do _blck_AllMissionAI append (_ai); uiSleep delayTime; - if !(_scubaGroupParameters isEqualTo []) then + if !(_scubaGroupParameters isEqualTo [] || _scubaPatrols > 0) then { //_umsUniforms = blck_UMS_uniforms; //_umsHeadgear = blck_UMS_headgear; //_umsWeapons = blck_UMS_weapons; //_umsVests = blck_UMS_vests; - _temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_scubaGroupParameters,_difficulty,blck_UMS_uniforms,blck_UMS_headgear,blck_UMS_vests,_backpacks,blck_UMS_weapons,_sideArms,true] call blck_fnc_spawnMissionAI; + _temp = [_coords, _minNoAI,_maxNoAI,_scubaPatrols,_scubaGroupParameters,_difficulty,blck_UMS_uniforms,blck_UMS_headgear,blck_UMS_vests,_backpacks,blck_UMS_weapons,_sideArms,true] call blck_fnc_spawnMissionAI; _temp params["_ai","_abort"]; if (_abort) throw 1; _blck_AllMissionAI append (_ai); @@ -277,7 +279,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do _blck_AllMissionAI append (units (_temp select 0)); }; }; - uiSleep 15; + uiSleep 5; private _userelativepos = true; private _emplacedWeaponsThisMission = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange; @@ -293,7 +295,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do _blck_AllMissionAI append (_temp select 1); }; }; - uisleep 10; + uisleep 5; private _noPatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; //diag_log format["_monitorInitializeMissions(299): __noVehiclePatrols %1 | _noPatrols %2 | _missionPatrolVehicles %3",_noVehiclePatrols,_noPatrols,_missionPatrolVehicles]; From 2687933505f3095d7e201e57144630dfc3777090 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 09:52:45 -0400 Subject: [PATCH 48/67] update build information. --- @GMS/addons/custom_server/init/build.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 90449be..29c6560 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 225 +#define blck_buildNumber 226 #define blck_versionNumber 7.02 #define blck_buildDate "10-3-20" From 4747500f82bd658e8d8aa4bcb86df5db376e984b Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 12:30:49 -0400 Subject: [PATCH 49/67] Update Build Info --- ...afePosn.sqf => GMS_fnc_findSafePosn_3.sqf} | 0 .../Functions/GMS_fnc_findSafePosn_4.sqf | 178 ++++++++++++++++++ .../GMS_fnc_monitorInitializedMissions.sqf | 4 +- .../custom_server/Compiles/blck_functions.sqf | 3 +- .../custom_server/Compiles/blck_variables.sqf | 1 + @GMS/addons/custom_server/init/build.sqf | 4 +- 6 files changed, 184 insertions(+), 6 deletions(-) rename @GMS/addons/custom_server/Compiles/Functions/{GMS_fnc_findSafePosn.sqf => GMS_fnc_findSafePosn_3.sqf} (100%) create mode 100644 @GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_3.sqf similarity index 100% rename from @GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf rename to @GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_3.sqf diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf new file mode 100644 index 0000000..e908ed4 --- /dev/null +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf @@ -0,0 +1,178 @@ +// self explanatory. Checks to see if the position is in either a black listed location or near a player spawn. +// As written this relies on BIS_fnc_findSafePos to ensure that the spawn point is not on water or an excessively steep slope. +// +/* + for ghostridergaming + By Ghostrider [GRG] + Copyright 2016 + -------------------------- + License + -------------------------- + All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License. + + http://creativecommons.org/licenses/by-nc-sa/4.0/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private _minDistFromBases = blck_minDistanceToBases; +private _minDistFromMission = blck_MinDistanceFromMission; +private _minDistanceFromTowns = blck_minDistanceFromTowns; +private _minDistanceFromPlayers = blck_minDistanceToPlayer; +//private _blacklistedLocations = +blck_minDistanceFromTowns; +private _weightBlckList = 0.95; +private _weightBases = 0.9; +private _weightMissions = 0.8; +private _weightTowns = 0.7; +private _weightPlayers = 0.6; +private _weightRecentMissions = 0.6; +private _minDistanceRecentMissions = 500; + +private _pole = ""; +if (blck_modType isEqualTo "Epoch") then {_pole = "PlotPole_EPOCH"}; +if (blck_modType isEqualTo "Exile") then {_pole = "Exile_Construction_Flag_Static"}; + +// remove any recent mission locations that have timed out +for "_i" from 1 to (count blck_recentMissionCoords) do +{ + if (_i > (count blck_recentMissionCoords)) exitWith {}; + if (diag_tickTime < ((_x select 1) + 900)) then + { + blck_recentMissionCoords pushBack _x; + }; +}; + +private _waterMode = 0; +private _shoreMode = 0; +private _maxGrad = 0.20; +private _minObjDist = 30; +private _searchDist = blck_mapRange / 2; +private _coords = []; +private _findNew = true; +private _tries = 0; + +while {_coords isEqualTo []} do +{ + _findNew = false; + _coords = []; + // [center, minDist, maxDist, objDist, waterMode, maxGrad, shoreMode, blacklistPos, defaultPos] call BIS_fnc_findSafePos + while {_coords isEqualTo [] && _tries < 500} do + { + private _searchCenter = blck_mapCenter getPos[_searchDist, random(359)]; + _coords = [_searchCenter,0,_searchDist,_minObjDist,_waterMode,_maxGrad,_shoreMode] call BIS_fnc_findSafePos; + _tries = _tries + 1; + [format["_fnc_findSafePosn(57): _tries = %1 | _coords = %2",_tries,_coords]] call blck_fnc_log; + }; + + { + if (((_x select 0) distance2D _coords) < _minDistanceRecentMissions) then + { + _findNew = true; + if (blck_debugLevel >= 3) then {[format["_findSafePosn(68): too close to recent missions"]] call blck_fnc_log}; + }; + }forEach blck_recentMissionCoords; + + //diag_log format["_fnc_findSafePosn (61): _coords = %1 | _tries = %2 | count blck_locationBlackList = %1",_coords,_tries, count blck_locationBlackList]; + { + + diag_log format["_fnc_findSafePosn (77): location _x = %1",_x]; + if ( ((_x select 0) distance2D _coords) < (_x select 1)) exitWith + { + _findNew = true; + if (blck_debugLevel >= 3) then {[format["_findSafePosn(77): too close to blacklisted position _coords = %1 | blacklisted pos = %2 | dist to blacklisted pos = %3",_coords,_x select 0, _x select 1]] call blck_fnc_log}; + }; + } forEach blck_locationBlackList; + + if !(_findNew) then + { + { + if ( (_x distance2D _coords) < _minDistFromMission) exitWith + { + _findNew = true; + if (blck_debugLevel >= 3) then {[format["_findSafePosn(87): too close to active mission"]] call blck_fnc_log}; + }; + } forEach blck_ActiveMissionCoords; + }; + + if !(_findNew) then + { + { + if ((_x distance2D _coords) < blck_minDistanceToBases) then + { + _findNew = true; + if (blck_debugLevel >= 3) then {[format["_findSafePosn(98): too close to bases"]] call blck_fnc_log}; + }; + }forEach (allmissionobjects _pole); + }; + + if !(_findNew) then + { + { + _townPos = [((locationPosition _x) select 0), ((locationPosition _x) select 1), 0]; + if (_townPos distance2D _coords < blck_minDistanceFromTowns) exitWith { + _findNew = true; + if (blck_debugLevel >= 3) then {[format["_findSafePosn(109): too close to towns/cities"]] call blck_fnc_log}; + }; + } forEach blck_townLocations; + }; + + if !(_findNew) then + { + { + if (isPlayer _x && (_x distance2D _coords) < blck_minDistanceToPlayer) then + { + _findNew = true; + if (blck_debugLevel >= 3) then {[format["_findSafePosn(120): too close to player"]] call blck_fnc_log}; + }; + }forEach playableUnits; + }; + + if !(_findNew) then + { + // test for water nearby + for [{_i=0}, {_i<360}, {_i=_i+20}] do + { + //_xpos = (_coords select 0) + sin (_i) * _dist; + //_ypos = (_coords select 1) + cos (_i) * _dist; + //_newPos = [_xpos,_ypos,0]; + if (surfaceIsWater (_coords getPos[50,_i])) exitWith + { + _findNew = true; + if (blck_debugLevel >= 3) then {[format["_findSafePosn(137): too close to water"]] call blck_fnc_log}; + }; + }; + }; + + if !(_findNew) then { + _isflat = _coords isFlatEmpty [20,0,0.5,100,0,false]; + if (_isflat isequalto []) then { + _findNew = true; + if (blck_debugLevel >= 3) then {[format["_findSafePosn(146): position NOT flat"]] call blck_fnc_log}; + } else { + if (blck_debugLevel >= 3) then {[format["_findSafePosn(150): _coords changed from %1 to %2 (the flattest)",_coords,_isFlat]] call blck_fnc_log}; + _coords = ASLToATL _isFlat; + }; + }; + + if (_findNew) then + { + _minDistFromMission = _minDistFromMission * _weightMissions; + _minDistFromBases = _minDistFromBases * _weightBases; + _minDistanceFromPlayers = _minDistanceFromPlayers * _weightPlayers; + _minDistanceFromTowns = _minDistanceFromTowns * _weightTowns; + _minDistanceRecentMissions = _minDistanceRecentMissions * _weightRecentMissions; + _coords = []; + }; + + [format["_fnc_findSafePosn(140) end of cycle logging: _tries = %1 | _coords = %2 | _findNew = %3",_tries,_coords,_findNew]] call blck_fnc_log; +}; + +if ((count _coords) > 2) then +{ + private["_temp"]; + _temp = [_coords select 0, _coords select 1]; + _coords = _temp; +}; +[format["_fnc_findSafePosn(148) final logging: _tries = %1 | _coords = %2",_tries,_coords]] call blck_fnc_log; +_coords; + + diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index d82eefc..0d516fb 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -308,8 +308,8 @@ for "_i" from 1 to (count blck_activeMissionsList) do _blck_AllMissionAI append (_temp select 1); }; uiSleep delayTime; - - if (blck_useVehiclePatrols && ((_noPatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then + //diag_log format["_monitorInitializedMissions(320): count _submarinePatrolParameters = %1 | _submarinePatrolParameters = %2",count _submarinePatrolParameters,_submarinePatrolParameters]; + if (blck_useVehiclePatrols && ((_submarinePatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then { _temp = [_coords,_noPatrols,_difficulty,_submarinePatrolParameters,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner diff --git a/@GMS/addons/custom_server/Compiles/blck_functions.sqf b/@GMS/addons/custom_server/Compiles/blck_functions.sqf index 9ddbca8..da25751 100644 --- a/@GMS/addons/custom_server/Compiles/blck_functions.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_functions.sqf @@ -16,8 +16,7 @@ private _functions = [ // General functions ["blck_fnc_waitTimer","\q\addons\custom_server\Compiles\Functions\GMS_fnc_waitTimer.sqf"], ["blck_fnc_restoreHiddenObjects","\q\addons\custom_server\Compiles\Functions\GMS_fnc_restoreHiddenObjects.sqf"], - ["blck_fnc_FindSafePosn","\q\addons\custom_server\Compiles\Functions\GMS_fnc_findSafePosn.sqf"], - ["blck_fnc_findSafePosn_2","\q\addons\custom_server\Compiles\Functions\GMS_fnc_findSafePosn_2.sqf"], + ["blck_fnc_FindSafePosn","\q\addons\custom_server\Compiles\Functions\GMS_fnc_findSafePosn_4.sqf"], ["blck_fnc_randomPosition","\q\addons\custom_server\Compiles\Functions\GMS_fnc_randomPosn.sqf"], // find a randomPosn. see script for details. ["blck_fnc_findPositionsAlongARadius","\q\addons\custom_server\Compiles\Functions\GMS_fnc_findPositionsAlongARadius.sqf"], ["blck_fnc_giveTakeCrypto","\q\addons\custom_server\Compiles\Functions\GMS_fnc_giveTakeCrypto.sqf"], diff --git a/@GMS/addons/custom_server/Compiles/blck_variables.sqf b/@GMS/addons/custom_server/Compiles/blck_variables.sqf index 1846230..a129c60 100644 --- a/@GMS/addons/custom_server/Compiles/blck_variables.sqf +++ b/@GMS/addons/custom_server/Compiles/blck_variables.sqf @@ -26,6 +26,7 @@ blck_TriggerDistance = 1500; //////////////////////////////////////////////// // Do Not Touch Anything Below This Line /////////////////////////////////////////////// + blck_townLocations = []; //nearestLocations [blck_mapCenter, ["NameCity","NameCityCapital"], 30000]; blck_ActiveMissionCoords = []; blck_recentMissionCoords = []; diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 29c6560..61585c4 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 226 +#define blck_buildNumber 227 #define blck_versionNumber 7.02 -#define blck_buildDate "10-3-20" +#define blck_buildDate "10-4-20" From 1cd405566281c6e275cd9715666105ef698eb5a4 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 13:36:25 -0400 Subject: [PATCH 50/67] Fix issue with tracking old mission locations --- .../Compiles/Functions/GMS_fnc_findSafePosn_4.sqf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf index e908ed4..a86baf8 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf @@ -35,9 +35,10 @@ if (blck_modType isEqualTo "Exile") then {_pole = "Exile_Construction_Flag_Stati for "_i" from 1 to (count blck_recentMissionCoords) do { if (_i > (count blck_recentMissionCoords)) exitWith {}; - if (diag_tickTime < ((_x select 1) + 900)) then + private _oldMission = blck_recentMissionCoords deleteAt 0; + if (diag_tickTime < ((_oldMission select 1) + 900)) then { - blck_recentMissionCoords pushBack _x; + blck_recentMissionCoords pushBack _oldMission; }; }; From 62fa9184bf9523f5f804b80596d024eba146f864 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 15:49:31 -0400 Subject: [PATCH 51/67] Addressed minor scripting issues; added logging of time spent on searching for new posn. --- .../Functions/GMS_fnc_findSafePosn_4.sqf | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf index a86baf8..98e1a23 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn_4.sqf @@ -13,12 +13,12 @@ http://creativecommons.org/licenses/by-nc-sa/4.0/ */ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; - +private _startTime = diag_tickTime; private _minDistFromBases = blck_minDistanceToBases; private _minDistFromMission = blck_MinDistanceFromMission; private _minDistanceFromTowns = blck_minDistanceFromTowns; private _minDistanceFromPlayers = blck_minDistanceToPlayer; -//private _blacklistedLocations = +blck_minDistanceFromTowns; + private _weightBlckList = 0.95; private _weightBases = 0.9; private _weightMissions = 0.8; @@ -27,10 +27,6 @@ private _weightPlayers = 0.6; private _weightRecentMissions = 0.6; private _minDistanceRecentMissions = 500; -private _pole = ""; -if (blck_modType isEqualTo "Epoch") then {_pole = "PlotPole_EPOCH"}; -if (blck_modType isEqualTo "Exile") then {_pole = "Exile_Construction_Flag_Static"}; - // remove any recent mission locations that have timed out for "_i" from 1 to (count blck_recentMissionCoords) do { @@ -61,10 +57,11 @@ while {_coords isEqualTo []} do private _searchCenter = blck_mapCenter getPos[_searchDist, random(359)]; _coords = [_searchCenter,0,_searchDist,_minObjDist,_waterMode,_maxGrad,_shoreMode] call BIS_fnc_findSafePos; _tries = _tries + 1; - [format["_fnc_findSafePosn(57): _tries = %1 | _coords = %2",_tries,_coords]] call blck_fnc_log; + //[format["_fnc_findSafePosn(57): _tries = %1 | _coords = %2",_tries,_coords]] call blck_fnc_log; }; { + //diag_log format["_fnc_findSafePosn(67): _recentMissionCoords %1 = %2",_forEachIndex,_x]; if (((_x select 0) distance2D _coords) < _minDistanceRecentMissions) then { _findNew = true; @@ -75,7 +72,7 @@ while {_coords isEqualTo []} do //diag_log format["_fnc_findSafePosn (61): _coords = %1 | _tries = %2 | count blck_locationBlackList = %1",_coords,_tries, count blck_locationBlackList]; { - diag_log format["_fnc_findSafePosn (77): location _x = %1",_x]; + //diag_log format["_fnc_findSafePosn (77): location _x = %1",_x]; if ( ((_x select 0) distance2D _coords) < (_x select 1)) exitWith { _findNew = true; @@ -96,13 +93,17 @@ while {_coords isEqualTo []} do if !(_findNew) then { + private _poles = []; + if (blck_modType isEqualTo "Epoch") then {_poles = allMissionObjects "PlotPole_EPOCH"}; + if (blck_modType isEqualTo "Exile") then {_poles = allMissionObjects "Exile_Construction_Flag_Static"}; + //diag_log format["_fnc_findSafePosn: count _poles = %1 | _poles = %2",count _poles,_poles]; { if ((_x distance2D _coords) < blck_minDistanceToBases) then { _findNew = true; if (blck_debugLevel >= 3) then {[format["_findSafePosn(98): too close to bases"]] call blck_fnc_log}; }; - }forEach (allmissionobjects _pole); + }forEach _poles; }; if !(_findNew) then @@ -163,7 +164,6 @@ while {_coords isEqualTo []} do _minDistanceRecentMissions = _minDistanceRecentMissions * _weightRecentMissions; _coords = []; }; - [format["_fnc_findSafePosn(140) end of cycle logging: _tries = %1 | _coords = %2 | _findNew = %3",_tries,_coords,_findNew]] call blck_fnc_log; }; @@ -173,7 +173,7 @@ if ((count _coords) > 2) then _temp = [_coords select 0, _coords select 1]; _coords = _temp; }; -[format["_fnc_findSafePosn(148) final logging: _tries = %1 | _coords = %2",_tries,_coords]] call blck_fnc_log; +[format["_fnc_findSafePosn(148) final logging: _elapsedTime %3 | _tries = %1 | _coords = %2",_tries,_coords,diag_tickTime - _startTime]] call blck_fnc_log; _coords; From 69316952955c74fa86e84b25eaf1887374a2c407 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 15:50:13 -0400 Subject: [PATCH 52/67] Bug fixes. Added check for unexpected case where the thing to be deleted is stored as an object rather than netID --- .../Compiles/Missions/GMS_fnc_cleanUpObjects.sqf | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf index 4539468..5f3f125 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf @@ -27,13 +27,7 @@ for "_i" from 1 to (count blck_oldMissionObjects) do { { { if (typeName _x isEqualTo "OBJECT") then {deleteVehicle _x}; - if (_x isEqualType []) then - { - //[format["_fnc_cleanUpObjects: case of _x is array: %1",_x]] call blck_fnc_log; - { - if (typeName _x isEqualTo "OBJECT") then {deleteVehicle _x}; - } forEach _x; - }; + if (typeName _x isEqualTo "STRING") then {deleteVehicle (objectFromNetId _x)}; } forEach _objarr; } else { blck_oldMissionObjects pushback _oldObjs; From 34204ccdc67e4a06601d6ba0a371b3f84f89f3fd Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 15:50:48 -0400 Subject: [PATCH 53/67] Added Case for debugging with forced completion of spawned mission. --- .../Compiles/Missions/GMS_fnc_endMission.sqf | 10 ++++++++++ .../Missions/GMS_fnc_monitorInitializedMissions.sqf | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf index a8be680..7950fa9 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf @@ -161,6 +161,16 @@ switch (_endCondition) do [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; }; + case 5: { + #define cleanupCompositionTimer 0 + #define cleanupAliveAITimer 0 + + { + if (local _x) then {deleteVehicle _x}; + }forEach _crates; + + [_coords,_mines,_objects,_hiddenObjects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup; + }; }; blck_missionsRun = blck_missionsRun + 1; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 0d516fb..0dee976 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -397,6 +397,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do }; try { + if (blck_debugLevel >= 4) throw 5; private _playerIsNear = [_crates,20,true] call blck_fnc_playerInRangeArray; private _minNoAliveForCompletion = (count _blck_AllMissionAI) - (round(blck_killPercentage * (count _blck_AllMissionAI))); private _aiKilled = if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then {true} else {false}; // mission complete @@ -555,6 +556,9 @@ for "_i" from 1 to (count blck_activeMissionsList) do case 4: { // Reserved for grpNull errors in the future }; + case 5: { + [_coords,_mines,_objects,_hiddenObjects,_crates,_blck_AllMissionAI,_assetKilledMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission; + } }; }; }; From ca8105c492a4543124256f66f7a04e31a77d284e Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 15:51:28 -0400 Subject: [PATCH 54/67] store spawned objects as netID This is to try to make sure damaged buildings and other damaged objects are deleted upon mission completion. --- .../Compiles/Missions/GMS_fnc_garrisonBuilding_ATLsystem.sqf | 2 +- .../Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf | 2 +- .../custom_server/Compiles/Missions/GMS_fnc_smokeAtCrates.sqf | 2 +- .../Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf | 3 ++- .../Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) 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 b7daa0c..052fd6f 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 @@ -40,7 +40,7 @@ if !(isNull _group) then _building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"]; _building setPosATL (_bldRelPos vectorAdd _center); _building setDir _bldDir; - _buildingsSpawned pushBack _building; + _buildingsSpawned pushBack (netID _building); _staticsSpawned = [_building,_group,_statics,_men,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_ATL; }forEach _garrisonedBuilding_ATLsystem; }; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf index 2969fbc..a792b95 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf @@ -43,7 +43,7 @@ if !(isNull _group) then _x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_p","_noStatics","_typesStatics","_noUnits"]; if (_typesStatics isEqualTo []) then {_typesStatics = ["B_HMG_01_high_F"]}; _building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"]; - _buildingsSpawned pushBack _building; + _buildingsSpawned pushBack (netID _building); _building setPosATL (_bldRelPos vectorAdd _center); [_building, _bldDir] call blck_fnc_setDirUp; _staticsSpawned = [_building,_group,_noStatics,_typesStatics,_noUnits,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_relPos; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_smokeAtCrates.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_smokeAtCrates.sqf index c76f6c3..d463c34 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_smokeAtCrates.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_smokeAtCrates.sqf @@ -40,5 +40,5 @@ _smoke setVariable ["LAST_CHECK", (diag_tickTime + 14400)]; _smoke setPos _posWreck; _smoke attachto [_fire, [0,0,1.5]]; -_objs = [_fire,_smoke]; +_objs = [netID _fire,netID _smoke]; _objs diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf index 4cb2403..56f2841 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf @@ -40,7 +40,8 @@ private _hiddenObjs = []; }; _obj = createVehicle[_className,[0,0,0],[],0,"CAN_COLLIDE"]; _obj setPosATL _objPos; - _newObjs pushback _obj; + + _newObjs pushback (netID _obj); [_obj, _dir] call blck_fnc_setDirUp; _obj setVectorUp [0,0,1]; _obj enableDynamicSimulation _sim; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf index d666355..42ef8a1 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf @@ -38,7 +38,7 @@ private _hiddenObjs = []; _obj enableSimulationGlobal false; _obj enableDynamicSimulation false; _obj setDir (_obj getRelDir _coords); - _newObjs pushback _obj; + _newObjs pushback (netID _obj); sleep 0.1; } forEach _missionLandscape; From e12d256057ec61f1a093889d12403eca89028f6f Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sun, 4 Oct 2020 15:51:37 -0400 Subject: [PATCH 55/67] Build 228 --- @GMS/addons/custom_server/init/build.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 61585c4..0e1ad01 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 227 +#define blck_buildNumber 228 // Address issues with cleanup of objects #define blck_versionNumber 7.02 #define blck_buildDate "10-4-20" From 60bf05e69521def4fb84249d0172e1ea0a7db556 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Mon, 5 Oct 2020 07:25:11 -0400 Subject: [PATCH 56/67] Build 228 Final. --- .../Compiles/Functions/GMS_fnc_mainThread.sqf | 18 +++++------ .../Missions/GMS_fnc_initializeMission.sqf | 5 +++- .../GMS_fnc_monitorInitializedMissions.sqf | 30 +++++++++++++++++-- .../Vehicles/GMS_fnc_spawnVehicle.sqf | 8 +++++ .../custom_server/init/blck_init_server.sqf | 5 +--- 5 files changed, 48 insertions(+), 18 deletions(-) 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 b0a0c11..7a5161b 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf @@ -11,12 +11,12 @@ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; private["_timer1sec","_timer5sec","_timer10Sec","_timer20sec","_timer5min","_timer5min"]; -_timer2sec = diag_tickTime; -_timer5sec = diag_tickTime; -_timer10Sec = diag_tickTime; -_timer20sec = diag_tickTime; -_timer1min = diag_tickTime; -_timer5min = diag_tickTime; +_timer2sec = diag_tickTime + 2; +_timer5sec = diag_tickTime + 5; +_timer10Sec = diag_tickTime + 10; +_timer20sec = diag_tickTime + 20; +_timer1min = diag_tickTime + 10; +_timer5min = diag_tickTime + 300; while {true} do { @@ -51,10 +51,6 @@ while {true} do { [] call blck_fnc_spawnPendingMissions; _timer10Sec = diag_tickTime; - }; - - if (diag_tickTime > _timer20sec) then - { [] call blck_fnc_scanForPlayersNearVehicles; [] call GMS_fnc_cleanupTemporaryMarkers; [] call GMS_fnc_updateCrateSignals; @@ -63,7 +59,7 @@ while {true} do if ((diag_tickTime > _timer1min)) then { - _timer1min = diag_tickTime + 60; + _timer1min = diag_tickTime + 10; [] call blck_fnc_restoreHiddenObjects; [] call blck_fnc_groupWaypointMonitor; [] call blck_fnc_cleanupAliveAI; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 34a584b..067ac7f 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -101,9 +101,10 @@ if !(_defaultMissionLocations isEqualTo []) then if (_isScubaMission) then { _coords = [] call blck_fnc_findShoreLocation; + diag_log format["_initializeMission (102): _coords = %1",_coords]; } else { _coords = [] call blck_fnc_findSafePosn; - + diag_log format["_initializeMission (105): _coords = %1",_coords]; }; }; @@ -165,10 +166,12 @@ if !(isClass(configFile >> "CfgMarkerColors" >> _markerColor)) then }; private _markers = [format["%1:%2",_markerName,_missionCount],_markerPos,_markerMissionName,_markerColor,_markerType,_markerSize,_markerBrush] call blck_fnc_createMissionMarkers; +if (blck_debugLevel >= 3) then {[format["_initializeMissions (167): _marker = %1 | _markerMissionName = %2 | _difficulty = %3",_markers,_markerMissionName,_difficulty]] call blck_fnc_log}; /* Send a message to players. */ + [["start",_startMsg,_markerMissionName]] call blck_fnc_messageplayers; private _missionTimeoutAt = diag_tickTime + blck_MissionTimeout; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 0dee976..306123c 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -298,15 +298,35 @@ for "_i" from 1 to (count blck_activeMissionsList) do uisleep 5; private _noPatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; +<<<<<<< Updated upstream //diag_log format["_monitorInitializeMissions(299): __noVehiclePatrols %1 | _noPatrols %2 | _missionPatrolVehicles %3",_noVehiclePatrols,_noPatrols,_missionPatrolVehicles]; +======= + //diag_log format["_monitorInitializedMissions(299): _markerMissionName = %2 | count _missionAIVehicles = %1",count _missionAIVehicles,_markerMissionName]; + /* + diag_log format[ + "_monitorInitializeMissions(300): __noVehiclePatrols %1 | _noPatrols %2 | count _missionPatrolVehicles %3 | _missionPatrolVehicles = %4", + _noVehiclePatrols, + _noPatrols, + count _missionPatrolVehicles, + _missionPatrolVehicles + ]; + */ +>>>>>>> Stashed changes if (blck_useVehiclePatrols && ((_noPatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then { _temp = [_coords,_noPatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) throw 1; _missionAIVehicles append (_temp select 0); + //diag_log format ["_monitorInitializedMissions(306): count (_temp select 0)/no mission vehicles spawned = %1",count (_temp select 0)]; _blck_AllMissionAI append (_temp select 1); - }; + }; + //diag_log format["_monitorInitializedMissions(310): _count _missionAIVehicles = %1",count _missionAIVehicles]; + /* + { + diag_log format["_monitorInitializedMissions(318): spawned vehicle %1 of type %2 object %2",_forEachIndex,typeOf _x, _x]; + } forEach _missionAIVehicles; + */ uiSleep delayTime; //diag_log format["_monitorInitializedMissions(320): count _submarinePatrolParameters = %1 | _submarinePatrolParameters = %2",count _submarinePatrolParameters,_submarinePatrolParameters]; if (blck_useVehiclePatrols && ((_submarinePatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then @@ -315,9 +335,15 @@ for "_i" from 1 to (count blck_activeMissionsList) do // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) throw 1; _missionAIVehicles append (_temp select 0); + //diag_log format ["_monitorInitializedMissions(327): count (_temp select 0)/no mission vehicles spawned = %1",count (_temp select 0)]; _blck_AllMissionAI append (_temp select 1); }; - + //diag_log format["_monitorInitializedMissions(330): count _missionAIVehicles = %1",count _missionAIVehicles]; + /* + { + diag_log format["_monitorInitializedMissions(332): spawned vehicle %1 of type %2 object %2",_forEachIndex,typeOf _x, _x]; + } forEach _missionAIVehicles; + */ uiSleep delayTime; if (_spawnCratesTiming in ["atMissionSpawnGround","atMissionSpawnAir"]) then diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf index 684a631..7df0e73 100644 --- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf +++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf @@ -15,6 +15,14 @@ params["_vehType",["_pos",[]],["_special","NONE"],["_radius",30]]; private _veh = createVehicle[_vehType, _pos, [], _radius, _special]; +if (count _pos == 2) then { + _pos pushBack 0; + [format["_fnc_spawnVehicle(20): _pos had only 2 parameters, new value = %1",_pos],'warning'] call blck_fnc_log; +}; +if (_pos isEqualTo []) then +{ + [format["_fnc_spawnVehicle(20): _pos undefined, now set to [0,0,0]"],'warning'] call blck_fnc_log; +}; _veh setVectorUp surfaceNormal position _veh; _veh allowDamage true; _veh enableRopeAttach true; diff --git a/@GMS/addons/custom_server/init/blck_init_server.sqf b/@GMS/addons/custom_server/init/blck_init_server.sqf index 50d8bd1..5f834b1 100644 --- a/@GMS/addons/custom_server/init/blck_init_server.sqf +++ b/@GMS/addons/custom_server/init/blck_init_server.sqf @@ -107,7 +107,7 @@ switch (blck_simulationManager) do if ( !(blck_debugON) && (blck_debugLevel isEqualTo 0)) then { waitUntil{{isPlayer _x}count allPlayers > 0}; - ["]Player Connected, spawning missions"] call blck_fnc_log; + ["Player Connected, spawning missions"] call blck_fnc_log; } else { ["Debug mode ON, proceding without players"] call blck_fnc_log; }; @@ -163,9 +163,6 @@ private _other = ["NameLocal"] call _fn_setupLocationType; private _airport = ["Airport"] call _fn_setupLocationType; blck_townLocations = _villages + _cites + _capitals + _marine + _other + _airport; -{ - blck_locationBlackList pushBack [locationPosition _x, blck_minDistanceFromTowns]; -} forEach blck_townLocations; //Start the mission timers if (blck_enableOrangeMissions > 0) then From 6b3a295a2a433b2a29474c20e17e3eab2446b732 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Mon, 5 Oct 2020 18:47:06 -0400 Subject: [PATCH 57/67] A few small updates Support for new settings for pirate missions. --- @blckeagls_EDEN/addons/3EDEN_plugin.pbo | Bin 137360 -> 137888 bytes .../3EDEN_plugin/Export/fn_exportDynamic.sqf | 18 +++++++++++++++++- .../3EDEN_plugin/Export/fn_exportStatic.sqf | 1 - .../addons/3EDEN_plugin/config.cpp | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin.pbo b/@blckeagls_EDEN/addons/3EDEN_plugin.pbo index 3d7074220714d3dc2c6544f2122304901d075fb8..1068d5221b0469a044945c373c3d762314aa7113 100644 GIT binary patch delta 684 zcmaJ;J!lj`6n6Zv$wP7nEg3+W;JJo zE5s&Mz+$x!YyuVr45EjP7WRUbeFWRHu(=}Q?%s;pzb;~JQ_~) zhZErR>byFYG*uPV1K&la(^@rbuVu7J5HRk0S3~Al%xfFV)LHWRN|y`j=EqPL@!TjP zV*t+fibh?=jY3gZs+HLiE|h1Ki_H}PLp zV-0mkKwRFC4b!o%IfV0@#HBJ$>(MG%QDZ@J;z_DlN$w=c^H&5Btd-)T+oAlQ+VgLF zOmMlG8Z)Iv$2P$A@x%w1P#0}vnAyAItzfjLfb-F>=iumc%4t&(-}*lXLW4Mtf4@dt z(x&OuEft)>(6=nUXwPSMCJhK(vi1kawo38n^#?G15W@b?4Iri?whK;N;qjMgb13$? zMr{&00(qfp(g683;-Tr1fO#}_O9Z~d5fP}vg5;xJ#yRsn9_d>^y1`qaNtQCwK7t7i wS?pe{zmMdXEpVa#@ExF9|J!%)Og}aJI9c!Y9v^x2>E-*o%U?h5KKSwUHwTH=-~a#s delta 199 zcmZ3mm1Dw2jtRQVGSZnF4H(7v?z%I8!FHL<_`B|t?Zp&%*Be5F?ki@-uiu<2R>>i3 zZq3WZ$(fQ^lB!^AKyFF4HGZWb~T;x|31PLMJ~ZrPx2s zJ+Y`Lvp7FbCpWPI#ttq?EXhnR)+wnhNG(Pe+-}#ySfV}MU^%16_P!mAsRr9WzF?ef bC^CCz(Zh1PQ}%Z3x;9%b#|s{Ja=!%tf2c*w diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf index 48fedeb..b392993 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf @@ -152,7 +152,21 @@ for "_i" from 1 to (count _landscape) do private _allowDamage = (_building get3DENAttribute "allowDamage") select 0; private _enableSimulation = (_building get3DENAttribute "enableSimulation") select 0; diag_log format["_exportDynamic-garisonedPos: _building %1 | damage %2 | simulation %3",_building,_allowDamage,_enableSimulation]; - _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building,_allowDamage,_enableSimulation,oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; + /* + // From blck_fnc_garrisonBuilding_RelPosSystem + // ["Land_Unfinished_Building_02_F",[-21.8763,-45.978,-0.00213432],0,true,true,0.67,3,[],4], + _x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_p","_noStatics","_typesStatics","_noUnits"]; + */ + _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]', + typeOf _building, + (getPosATL _building) vectorDiff CENTER, + getDir _building, + _allowDamage, + _enableSimulation, + oddsOfGarrison, + maxGarrisonStatics, + typesGarrisonStatics, + maxGarrisonUnits]; } else { _landscape pushBack _building; }; @@ -400,6 +414,8 @@ _lines pushBack format["_maxNoAI = blck_MaxAI_%1;",blck_MissionDifficulty]; _lines pushBack format["_noAIGroups = blck_AIGrps_%1;",blck_MissionDifficulty]; _lines pushBack format["_noVehiclePatrols = blck_SpawnVeh_%1;",blck_MissionDifficulty]; _lines pushBack format["_noEmplacedWeapons = blck_SpawnEmplaced_%1;",blck_MissionDifficulty]; +_lines pushBack "_submarinePatrols = 0; // Default number of submarine patrols at pirate missions"; +_lines pushBack "_scubaPatrols = 0; // Default number of scuba diver patrols at pirate missions"; _lines pushBack ""; _lines pushBack '#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";'; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf index 8e0d600..b4aef16 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf @@ -291,7 +291,6 @@ _lines pushBack ""; _lines pushBack "/*"; _lines pushBack " Use the parameters below to customize your mission - see the template or blck_configs.sqf for details about each them"; _lines pushBack "*/"; - _linse pushBack "_useMines = blck_useMines;"; _lines pushBack "_uniforms = blck_SkinList;"; _lines pushBack "_headgear = blck_headgear;"; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp index 72a2777..295f753 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp @@ -52,8 +52,8 @@ class CfgBlck3DEN class CfgVersion { version = 1.0; - build = 7; - date = "09/21/20"; + build = 8; + date = "10/05/20"; }; }; From eb683730b53e7b019318fd43a3bde4b9859bc7f6 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Mon, 5 Oct 2020 22:41:56 -0400 Subject: [PATCH 58/67] Fixed Issues with relPos unit spawning, removed some logging --- .../GMS_fnc_garrisonBuilding_relPosSystem.sqf | 20 ++++++-- .../Missions/GMS_fnc_initializeMission.sqf | 2 - .../GMS_fnc_monitorInitializedMissions.sqf | 14 +++++- .../GMS_fnc_spawnCompositionObjects.sqf | 2 +- ...fnc_spawnGarrisonInsideBuilding_relPos.sqf | 46 ++++++++++++++++--- 5 files changed, 70 insertions(+), 14 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf index a792b95..66add31 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf @@ -40,13 +40,27 @@ if !(isNull _group) then { { // ["Land_Unfinished_Building_02_F",[-21.8763,-45.978,-0.00213432],0,true,true,0.67,3,[],4], - _x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_p","_noStatics","_typesStatics","_noUnits"]; - if (_typesStatics isEqualTo []) then {_typesStatics = ["B_HMG_01_high_F"]}; + _x params["_bldClassName","_bldRelPos","_bldDir","_allowDamage","_enableSimulation","_probabilityOfGarrision","_noStatics","_typesStatics","_noUnits"]; + if (_typesStatics isEqualTo []) then {_typesStatics = blck_staticWeapons}; _building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"]; _buildingsSpawned pushBack (netID _building); _building setPosATL (_bldRelPos vectorAdd _center); [_building, _bldDir] call blck_fnc_setDirUp; - _staticsSpawned = [_building,_group,_noStatics,_typesStatics,_noUnits,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_relPos; + _staticsSpawned = [ + _building, + _group, + _noStatics, + _typesStatics, + _noUnits, + _aiDifficultyLevel, + _uniforms, + _headGear, + _vests, + _backpacks, + "none", + _weaponList, + _sideArms + ] call blck_fnc_spawnGarrisonInsideBuilding_relPos; }forEach _garrisonedBuilding_relPosSystem; }; _return = [_group,_buildingsSpawned,_staticsSpawned]; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 067ac7f..657434b 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -101,10 +101,8 @@ if !(_defaultMissionLocations isEqualTo []) then if (_isScubaMission) then { _coords = [] call blck_fnc_findShoreLocation; - diag_log format["_initializeMission (102): _coords = %1",_coords]; } else { _coords = [] call blck_fnc_findSafePosn; - diag_log format["_initializeMission (105): _coords = %1",_coords]; }; }; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index f7c0e6c..4a6af2d 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -270,6 +270,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do if !(_garrisonedBuildings_BuildingPosnSystem isEqualTo []) then { + // params["_building","_group",["_noStatics",0],["_typesStatics",blck_staticWeapons],["_noUnits",0],["_aiDifficultyLevel","Red"], ["_uniforms",[]],["_headGear",[]],["_vests",[]],["_backpacks",[]],["_launcher","none"],["_weaponList",[]],["_sideArms",[]]]; private _temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_RelPosSystem; if (_temp isEqualTo grpNull) then {throw 1} else // TODO: add error checks for grpNull to the RelPosSystem @@ -283,7 +284,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do private _userelativepos = true; private _emplacedWeaponsThisMission = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange; - [format["_monitorInitializedMissions(284): _noEmplacedWeapons = %1 | _emplacedWeaponsThisMission = %2 | _missionEmplacedWeapons = %3",_noEmplacedWeapons,_emplacedWeaponsThisMission,_missionEmplacedWeapons]] call blck_fnc_log; + //[format["_monitorInitializedMissions(284): _noEmplacedWeapons = %1 | _emplacedWeaponsThisMission = %2 | _missionEmplacedWeapons = %3",_noEmplacedWeapons,_emplacedWeaponsThisMission,_missionEmplacedWeapons]] call blck_fnc_log; if (blck_useStatic && ((_emplacedWeaponsThisMission > 0) || !(_missionEmplacedWeapons isEqualTo []))) then // TODO: add error checks for grpNull to the emplaced weapon spawner { @@ -298,7 +299,16 @@ for "_i" from 1 to (count blck_activeMissionsList) do uisleep 5; private _noPatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; - + //diag_log format["_monitorInitializedMissions(299): _markerMissionName = %2 | count _missionAIVehicles = %1",count _missionAIVehicles,_markerMissionName]; + /* + diag_log format[ + "_monitorInitializeMissions(300): __noVehiclePatrols %1 | _noPatrols %2 | count _missionPatrolVehicles %3 | _missionPatrolVehicles = %4", + _noVehiclePatrols, + _noPatrols, + count _missionPatrolVehicles, + _missionPatrolVehicles + ]; + */ if (blck_useVehiclePatrols && ((_noPatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then { _temp = [_coords,_noPatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf index 56f2841..c2c79f6 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf @@ -40,7 +40,7 @@ private _hiddenObjs = []; }; _obj = createVehicle[_className,[0,0,0],[],0,"CAN_COLLIDE"]; _obj setPosATL _objPos; - + //diag_log format["_spawnCompositionObjects: _obj = %1 | netID _obj = %2",_obj,netID _obj]; _newObjs pushback (netID _obj); [_obj, _dir] call blck_fnc_setDirUp; _obj setVectorUp [0,0,1]; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf index 5a8e53a..4f6f4e8 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf @@ -10,7 +10,41 @@ */ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; -params["_building","_group",["_noStatics",0],["_typesStatics",blck_staticWeapons],["_noUnits",0],["_aiDifficultyLevel","Red"], ["_uniforms",[]],["_headGear",[]],["_vests",[]],["_backpacks",[]],["_launcher","none"],["_weaponList",[]],["_sideArms",[]]]; +/* + _building, + _group, + _noStatics, + _typesStatics, + _noUnits, + _aiDifficultyLevel, + _uniforms, + _headGear, + _vests, + _backpacks, + "none", + _weaponList, + _sideArms +*/ +params[ + "_building", + "_group", + ["_noStatics",0], + ["_typesStatics",blck_staticWeapons], + ["_noUnits",0], + ["_aiDifficultyLevel","Red"], + ["_uniforms",[]], + ["_headGear",[]], + ["_vests",[]], + ["_backpacks",[]], + ["_launcher","none"], + ["_weaponList",[]], + ["_sideArms",[]] +]; + +{ + diag_log format["_fnc_spawnGarrisonInsideBuilding_relPos: _this %1 = %2",_forEachIndex,_x]; +} forEach _this; + if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout}; if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call blck_fnc_selectAISidearms}; if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call blck_fnc_selectAIUniforms}; @@ -19,12 +53,11 @@ if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call blck_fnc_ if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call blck_fnc_selectAIBackpacks}; private["_unit","_obj","_staticClassName","_usedBldPsn","_pos","_obj"]; -private _allBldPsn = [[_building] call BIS_fnc_buildingPositions] call BIS_fnc_arrayShuffle; +private _allBldPsn = ([_building] call BIS_fnc_buildingPositions) call BIS_fnc_arrayShuffle; private _countBldPsn = count _allBldPsn; -private _floor = floor(_countBldPsn/2); -private _ceil = ceil(_countBldPsn/2); -private _statics = if (_ceil > _noStatics) then {_noStatics} else {_ceil}; -private _units = if (_floor > _noUnits) then {_noUnits} else {_floor}; +private _statics = _noStatics min ceil(_countBldPsn/2); +private _units = _countBldPsn - _statics; +diag_log format["_fnc_spawnGarrisonInsideBuilding_relPos: _statics = %1 | _units = %2 | count _allBldPsn = %3 | _allBldPsn %4",_statics,_units,count _allBldPsn,_allBldPsn]; private _staticsSpawned = []; private _locsUsed = []; uiSleep 1; @@ -32,6 +65,7 @@ for "_i" from 1 to _statics do { if (_allBldPsn isEqualTo []) exitWith {}; _pos = _allBldPsn deleteAt 0; + //diag_log format["_fnc_spawnGarrisonInsideBuilding_relPos: _pos = %1",_pos]; _locsUsed pushBack _pos; _staticClassName = selectRandom _typesStatics; _obj = [_staticClassName, [0,0,0]] call blck_fnc_spawnVehicle; From 2447c309c095637848f558f631c56850e915067e Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Mon, 5 Oct 2020 22:42:04 -0400 Subject: [PATCH 59/67] Build 229 --- @GMS/addons/custom_server/init/build.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 0e1ad01..47addea 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 228 // Address issues with cleanup of objects +#define blck_buildNumber 229 // Address issues with cleanup of objects #define blck_versionNumber 7.02 -#define blck_buildDate "10-4-20" +#define blck_buildDate "10-5-20" From 76226152134bb20c9eef7b579f398adaaeca90dc Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 10 Oct 2020 08:27:33 -0400 Subject: [PATCH 60/67] Update changelog --- @GMS/addons/custom_server/init/build.sqf | 4 +-- changeLog.sqf | 37 +++++++++++++----------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf index 0e1ad01..ab28d2b 100644 --- a/@GMS/addons/custom_server/init/build.sqf +++ b/@GMS/addons/custom_server/init/build.sqf @@ -1,4 +1,4 @@ -#define blck_buildNumber 228 // Address issues with cleanup of objects +#define blck_buildNumber 230 // Address issues with cleanup of objects #define blck_versionNumber 7.02 -#define blck_buildDate "10-4-20" +#define blck_buildDate "10-5-20" diff --git a/changeLog.sqf b/changeLog.sqf index 8f7ceba..954edf7 100644 --- a/changeLog.sqf +++ b/changeLog.sqf @@ -9,17 +9,24 @@ Many thanks for new Coding and ideas from Grahame. Significant Changes: - ===================== -7.00 Build 218 +7.02 Build 230 + +New: Option to hide bushes and trees that happen to be under the location in which an enterable building is spawned + blck_hideRocksAndPlants = true; // When true, any rocks, trees or bushes under enterable buildings will be 'hidden' + +New: Added support for simple objects. Note that these can be exported by the editor tool now. + New: Option to drop crates on a parachute at mission spawn which adds some randomness to where crates end up. blck_spawnCratesTiming = "atMissionSpawnAir"; New: You can now add money to crates at static missions by defining the following parameter in your .sqf for the mission. _crateMoney = 10000; - // this can be a value or a range such as [1000,10000]; + this can be a value or a range such as [1000,10000]; a random amount of money from 0 to the maximum defined will be added. +New: Added checks and logging for invalid marker types and colors; default values are now provided. + New: Added some basic error checking and logging for incorrect entries for some key settings. New: 3DEN Editor plugin exports missions as .sqf formated text ready to paste into a file. @@ -27,16 +34,20 @@ New: 3DEN Editor plugin exports missions as .sqf formated text ready to paste in Fixed: Don and Hostage missions could not be completed Fixed: Missions tended to spawn all at once -Fixed: vehicles are spawned at a safe spot which should reduce unintended explosions +Fixed: Vehicles sometimes blew up on spawn. vehicles are spawned at a safe spot which should reduce unintended explosions Fixed: Missions sometimes spawned on steep hillsides. -Fixed: Vehicles sometimes blew up on spawn. +Fixed: Missions were not distributed over the entire map. The scripts now pick a random quadrant to search thus ensuring broader distribution of mission locations. Fixed: Money was not added to crates at dynamic missions +Fixed: Markers were not shown if more than once instance of a mission was spawned. +Fixed: No subs or scuba units were spawned at dynamic UMS missions. +Fixed: Jets crashed at spawn in. Changed: Timers for spawning missions adjusted a bit to space out spawn/timeouts a bit more. -Changed: The system has been upgreaded to a state-based system, meaning only one script (GMS_fnc_mainThread)is running once all missions are initialized. -Changed: a lot of debugging was removed. +Changed: The system has been upgraded to a state-based system, meaning only one script (GMS_fnc_mainThread)is running once all missions are initialized. +Changed: a lot of debugging code was removed. Changed: List of missions for dynamic Underwater missions was moved to \Missions\GMS_missionLIsts.sqf - +Changed: Units spawned where the surface is water are spawned with UMS gear now. +Changed: Added some CBA compatability (Thanks to porkeid for the fixes) 6.98 Build 206 FIXED: few minor bug fixes. @@ -59,12 +70,6 @@ Removed: some debugging and map sepcific settings from blck_custom_config.sqf Changed: some code for finding locations for a new mission. Added: all blckeagls map markers have the same prefix: "blckeagls_marker" - - - - - - 6.96 Build 199 Added support for Arma servers not running Epoch or Exile @@ -117,8 +122,6 @@ Added offloading of AI to clients // TODO: set to false before release blck_limit_ai_offload_to_blckeagls = true; // when true, only groups spawned by blckeagls are evaluated. - - Fixed - Vehicle unlock when empty of crew through adding a getOut event handler. Code for spawning vehicles redone to reduced redundancy. Monitoring of groups refined to route mission groups that have left the mission area back to it. @@ -241,7 +244,7 @@ Added: A new mission completion condition for hostage and captive missions. Added: Mission crates can now be spawned on the ground or in the air at mission completion. blck_spawnCratesTiming sets the default for all missions. - blck_spawnCratesTiming = "atMissionEndAir"; // Choices: "atMissionSpawnGround","atMissionStartAir","atMissionEndGround","atMissionEndAir". + blck_spawnCratesTiming = "atMissionEndAir"; // Choices: "atMissionSpawnGround","atMissionSpawnAir","atMissionEndGround","atMissionEndAir". Define _spawnCratesTiming to set this parameter for a particular mission. _spawnCratesTiming = "atMissionEndAir"; See the hostage1.sqf mission as an example. From 43ad4ea1a2af0707a345b170a9e34b6fba6132cf Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 10 Oct 2020 08:28:21 -0400 Subject: [PATCH 61/67] Fix scripts for spawning units/statics using Arma building posns --- .../GMS_fnc_garrisonBuilding_relPosSystem.sqf | 20 +++++++-- ...fnc_spawnGarrisonInsideBuilding_relPos.sqf | 42 ++++++++++++++++--- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf index a792b95..66add31 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf @@ -40,13 +40,27 @@ if !(isNull _group) then { { // ["Land_Unfinished_Building_02_F",[-21.8763,-45.978,-0.00213432],0,true,true,0.67,3,[],4], - _x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_p","_noStatics","_typesStatics","_noUnits"]; - if (_typesStatics isEqualTo []) then {_typesStatics = ["B_HMG_01_high_F"]}; + _x params["_bldClassName","_bldRelPos","_bldDir","_allowDamage","_enableSimulation","_probabilityOfGarrision","_noStatics","_typesStatics","_noUnits"]; + if (_typesStatics isEqualTo []) then {_typesStatics = blck_staticWeapons}; _building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"]; _buildingsSpawned pushBack (netID _building); _building setPosATL (_bldRelPos vectorAdd _center); [_building, _bldDir] call blck_fnc_setDirUp; - _staticsSpawned = [_building,_group,_noStatics,_typesStatics,_noUnits,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_relPos; + _staticsSpawned = [ + _building, + _group, + _noStatics, + _typesStatics, + _noUnits, + _aiDifficultyLevel, + _uniforms, + _headGear, + _vests, + _backpacks, + "none", + _weaponList, + _sideArms + ] call blck_fnc_spawnGarrisonInsideBuilding_relPos; }forEach _garrisonedBuilding_relPosSystem; }; _return = [_group,_buildingsSpawned,_staticsSpawned]; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf index 5a8e53a..547c5c7 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf @@ -10,7 +10,37 @@ */ #include "\q\addons\custom_server\Configs\blck_defines.hpp"; -params["_building","_group",["_noStatics",0],["_typesStatics",blck_staticWeapons],["_noUnits",0],["_aiDifficultyLevel","Red"], ["_uniforms",[]],["_headGear",[]],["_vests",[]],["_backpacks",[]],["_launcher","none"],["_weaponList",[]],["_sideArms",[]]]; +/* + _building, + _group, + _noStatics, + _typesStatics, + _noUnits, + _aiDifficultyLevel, + _uniforms, + _headGear, + _vests, + _backpacks, + "none", + _weaponList, + _sideArms +*/ +params[ + "_building", + "_group", + ["_noStatics",0], + ["_typesStatics",blck_staticWeapons], + ["_noUnits",0], + ["_aiDifficultyLevel","Red"], + ["_uniforms",[]], + ["_headGear",[]], + ["_vests",[]], + ["_backpacks",[]], + ["_launcher","none"], + ["_weaponList",[]], + ["_sideArms",[]] +]; + if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout}; if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call blck_fnc_selectAISidearms}; if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call blck_fnc_selectAIUniforms}; @@ -19,12 +49,11 @@ if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call blck_fnc_ if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call blck_fnc_selectAIBackpacks}; private["_unit","_obj","_staticClassName","_usedBldPsn","_pos","_obj"]; -private _allBldPsn = [[_building] call BIS_fnc_buildingPositions] call BIS_fnc_arrayShuffle; +private _allBldPsn = ([_building] call BIS_fnc_buildingPositions) call BIS_fnc_arrayShuffle; private _countBldPsn = count _allBldPsn; -private _floor = floor(_countBldPsn/2); -private _ceil = ceil(_countBldPsn/2); -private _statics = if (_ceil > _noStatics) then {_noStatics} else {_ceil}; -private _units = if (_floor > _noUnits) then {_noUnits} else {_floor}; +private _statics = _noStatics min ceil(_countBldPsn/2); +private _units = _countBldPsn - _statics; +diag_log format["_fnc_spawnGarrisonInsideBuilding_relPos: _statics = %1 | _units = %2 | count _allBldPsn = %3 | _allBldPsn %4",_statics,_units,count _allBldPsn,_allBldPsn]; private _staticsSpawned = []; private _locsUsed = []; uiSleep 1; @@ -32,6 +61,7 @@ for "_i" from 1 to _statics do { if (_allBldPsn isEqualTo []) exitWith {}; _pos = _allBldPsn deleteAt 0; + diag_log format["_fnc_spawnGarrisonInsideBuilding_relPos: _pos = %1",_pos]; _locsUsed pushBack _pos; _staticClassName = selectRandom _typesStatics; _obj = [_staticClassName, [0,0,0]] call blck_fnc_spawnVehicle; From 0e01267f18c01bc0c5404b7983c0e2a36b622476 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 10 Oct 2020 08:28:38 -0400 Subject: [PATCH 62/67] removed needless spaces --- .../Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf index 56f2841..dff8b3e 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCompositionObjects.sqf @@ -40,7 +40,6 @@ private _hiddenObjs = []; }; _obj = createVehicle[_className,[0,0,0],[],0,"CAN_COLLIDE"]; _obj setPosATL _objPos; - _newObjs pushback (netID _obj); [_obj, _dir] call blck_fnc_setDirUp; _obj setVectorUp [0,0,1]; From 6bd59ea1a46d97f96710b753220f7e4d217273ab Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 10 Oct 2020 08:28:57 -0400 Subject: [PATCH 63/67] removed logging --- .../Compiles/Missions/GMS_fnc_initializeMission.sqf | 2 -- 1 file changed, 2 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf index 067ac7f..657434b 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_initializeMission.sqf @@ -101,10 +101,8 @@ if !(_defaultMissionLocations isEqualTo []) then if (_isScubaMission) then { _coords = [] call blck_fnc_findShoreLocation; - diag_log format["_initializeMission (102): _coords = %1",_coords]; } else { _coords = [] call blck_fnc_findSafePosn; - diag_log format["_initializeMission (105): _coords = %1",_coords]; }; }; From 7b98a99491a4882c917f6b70966527d781e161f0 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 10 Oct 2020 08:30:15 -0400 Subject: [PATCH 64/67] Added missing support for subs/scubba --- @blckeagls_EDEN/addons/3EDEN_plugin.pbo | Bin 137360 -> 137888 bytes .../3EDEN_plugin/Export/fn_exportDynamic.sqf | 18 +++++++++++++++++- .../3EDEN_plugin/Export/fn_exportStatic.sqf | 1 - .../addons/3EDEN_plugin/config.cpp | 4 ++-- .../addons/{3EDEN_plugin => }/Guidelines.txt | 0 5 files changed, 19 insertions(+), 4 deletions(-) rename @blckeagls_EDEN/addons/{3EDEN_plugin => }/Guidelines.txt (100%) diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin.pbo b/@blckeagls_EDEN/addons/3EDEN_plugin.pbo index 3d7074220714d3dc2c6544f2122304901d075fb8..1068d5221b0469a044945c373c3d762314aa7113 100644 GIT binary patch delta 684 zcmaJ;J!lj`6n6Zv$wP7nEg3+W;JJo zE5s&Mz+$x!YyuVr45EjP7WRUbeFWRHu(=}Q?%s;pzb;~JQ_~) zhZErR>byFYG*uPV1K&la(^@rbuVu7J5HRk0S3~Al%xfFV)LHWRN|y`j=EqPL@!TjP zV*t+fibh?=jY3gZs+HLiE|h1Ki_H}PLp zV-0mkKwRFC4b!o%IfV0@#HBJ$>(MG%QDZ@J;z_DlN$w=c^H&5Btd-)T+oAlQ+VgLF zOmMlG8Z)Iv$2P$A@x%w1P#0}vnAyAItzfjLfb-F>=iumc%4t&(-}*lXLW4Mtf4@dt z(x&OuEft)>(6=nUXwPSMCJhK(vi1kawo38n^#?G15W@b?4Iri?whK;N;qjMgb13$? zMr{&00(qfp(g683;-Tr1fO#}_O9Z~d5fP}vg5;xJ#yRsn9_d>^y1`qaNtQCwK7t7i wS?pe{zmMdXEpVa#@ExF9|J!%)Og}aJI9c!Y9v^x2>E-*o%U?h5KKSwUHwTH=-~a#s delta 199 zcmZ3mm1Dw2jtRQVGSZnF4H(7v?z%I8!FHL<_`B|t?Zp&%*Be5F?ki@-uiu<2R>>i3 zZq3WZ$(fQ^lB!^AKyFF4HGZWb~T;x|31PLMJ~ZrPx2s zJ+Y`Lvp7FbCpWPI#ttq?EXhnR)+wnhNG(Pe+-}#ySfV}MU^%16_P!mAsRr9WzF?ef bC^CCz(Zh1PQ}%Z3x;9%b#|s{Ja=!%tf2c*w diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf index 48fedeb..b392993 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf @@ -152,7 +152,21 @@ for "_i" from 1 to (count _landscape) do private _allowDamage = (_building get3DENAttribute "allowDamage") select 0; private _enableSimulation = (_building get3DENAttribute "enableSimulation") select 0; diag_log format["_exportDynamic-garisonedPos: _building %1 | damage %2 | simulation %3",_building,_allowDamage,_enableSimulation]; - _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building,_allowDamage,_enableSimulation,oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; + /* + // From blck_fnc_garrisonBuilding_RelPosSystem + // ["Land_Unfinished_Building_02_F",[-21.8763,-45.978,-0.00213432],0,true,true,0.67,3,[],4], + _x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_p","_noStatics","_typesStatics","_noUnits"]; + */ + _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]', + typeOf _building, + (getPosATL _building) vectorDiff CENTER, + getDir _building, + _allowDamage, + _enableSimulation, + oddsOfGarrison, + maxGarrisonStatics, + typesGarrisonStatics, + maxGarrisonUnits]; } else { _landscape pushBack _building; }; @@ -400,6 +414,8 @@ _lines pushBack format["_maxNoAI = blck_MaxAI_%1;",blck_MissionDifficulty]; _lines pushBack format["_noAIGroups = blck_AIGrps_%1;",blck_MissionDifficulty]; _lines pushBack format["_noVehiclePatrols = blck_SpawnVeh_%1;",blck_MissionDifficulty]; _lines pushBack format["_noEmplacedWeapons = blck_SpawnEmplaced_%1;",blck_MissionDifficulty]; +_lines pushBack "_submarinePatrols = 0; // Default number of submarine patrols at pirate missions"; +_lines pushBack "_scubaPatrols = 0; // Default number of scuba diver patrols at pirate missions"; _lines pushBack ""; _lines pushBack '#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";'; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf index 8e0d600..b4aef16 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf @@ -291,7 +291,6 @@ _lines pushBack ""; _lines pushBack "/*"; _lines pushBack " Use the parameters below to customize your mission - see the template or blck_configs.sqf for details about each them"; _lines pushBack "*/"; - _linse pushBack "_useMines = blck_useMines;"; _lines pushBack "_uniforms = blck_SkinList;"; _lines pushBack "_headgear = blck_headgear;"; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp index 72a2777..295f753 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp @@ -52,8 +52,8 @@ class CfgBlck3DEN class CfgVersion { version = 1.0; - build = 7; - date = "09/21/20"; + build = 8; + date = "10/05/20"; }; }; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Guidelines.txt b/@blckeagls_EDEN/addons/Guidelines.txt similarity index 100% rename from @blckeagls_EDEN/addons/3EDEN_plugin/Guidelines.txt rename to @blckeagls_EDEN/addons/Guidelines.txt From 726e834dca07bf8cc2706dedeb239d78adf97ea4 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 10 Oct 2020 08:30:34 -0400 Subject: [PATCH 65/67] removed commented out code for debugging --- .../Compiles/Missions/GMS_fnc_endMission.sqf | 23 +------------------ 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf index 7950fa9..45a5476 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf @@ -16,12 +16,7 @@ _fn_missionCleanup = { params["_coords","_mines","_objects","_hiddenObjects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]]; - /* - private _vars = ["_coords","_mines","_objects","_hiddenObjects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer"]; - { - diag_log format["_endMission:_missionCleanup: %1 = %2",_x,_this select _forEachIndex]; - } forEach _vars; - */ + [_mines] call blck_fnc_clearMines; blck_oldMissionObjects pushback [_coords,_objects, (diag_tickTime + _cleanupCompositionTimer)]; blck_hiddenTerrainObjects pushBack[_hiddenObjects,(diag_tickTime + _cleanupCompositionTimer)]; @@ -62,22 +57,6 @@ params[ ["_isScubaMission",false] ]; -/* -{ - diag_log format["_endMission: %1 = %2",_x, _this select _forEachIndex]; -} forEach [ "_coords", - "_mines", - "_objects", - "_hiddenObjects", - "_crates", - "_blck_AllMissionAI", - "_endMsg", - "_markers", - "_markerPos", - "_markerName", - "_markerLabel" - ]; -*/ { [_x] call blck_fnc_deleteMarker; }forEach (_markers); From ebc85dac96832cc648fa1097b54711c750f66d0e Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 10 Oct 2020 08:32:42 -0400 Subject: [PATCH 66/67] Removed some debugging code that was commented out --- .../GMS_fnc_monitorInitializedMissions.sqf | 35 +++---------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf index 306123c..4d5128b 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_monitorInitializedMissions.sqf @@ -283,7 +283,6 @@ for "_i" from 1 to (count blck_activeMissionsList) do private _userelativepos = true; private _emplacedWeaponsThisMission = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange; - //[format["_monitorInitializedMissions(284): _noEmplacedWeapons = %1 | _emplacedWeaponsThisMission = %2 | _missionEmplacedWeapons = %3",_noEmplacedWeapons,_emplacedWeaponsThisMission,_missionEmplacedWeapons]] call blck_fnc_log; if (blck_useStatic && ((_emplacedWeaponsThisMission > 0) || !(_missionEmplacedWeapons isEqualTo []))) then // TODO: add error checks for grpNull to the emplaced weapon spawner { @@ -298,52 +297,26 @@ for "_i" from 1 to (count blck_activeMissionsList) do uisleep 5; private _noPatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange; -<<<<<<< Updated upstream - //diag_log format["_monitorInitializeMissions(299): __noVehiclePatrols %1 | _noPatrols %2 | _missionPatrolVehicles %3",_noVehiclePatrols,_noPatrols,_missionPatrolVehicles]; -======= - //diag_log format["_monitorInitializedMissions(299): _markerMissionName = %2 | count _missionAIVehicles = %1",count _missionAIVehicles,_markerMissionName]; - /* - diag_log format[ - "_monitorInitializeMissions(300): __noVehiclePatrols %1 | _noPatrols %2 | count _missionPatrolVehicles %3 | _missionPatrolVehicles = %4", - _noVehiclePatrols, - _noPatrols, - count _missionPatrolVehicles, - _missionPatrolVehicles - ]; - */ ->>>>>>> Stashed changes + if (blck_useVehiclePatrols && ((_noPatrols > 0) || !(_missionPatrolVehicles isEqualTo []))) then { _temp = [_coords,_noPatrols,_difficulty,_missionPatrolVehicles,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) throw 1; _missionAIVehicles append (_temp select 0); - //diag_log format ["_monitorInitializedMissions(306): count (_temp select 0)/no mission vehicles spawned = %1",count (_temp select 0)]; _blck_AllMissionAI append (_temp select 1); }; - //diag_log format["_monitorInitializedMissions(310): _count _missionAIVehicles = %1",count _missionAIVehicles]; - /* - { - diag_log format["_monitorInitializedMissions(318): spawned vehicle %1 of type %2 object %2",_forEachIndex,typeOf _x, _x]; - } forEach _missionAIVehicles; - */ + uiSleep delayTime; - //diag_log format["_monitorInitializedMissions(320): count _submarinePatrolParameters = %1 | _submarinePatrolParameters = %2",count _submarinePatrolParameters,_submarinePatrolParameters]; if (blck_useVehiclePatrols && ((_submarinePatrols > 0) || !(_submarinePatrolParameters isEqualTo []))) then { _temp = [_coords,_noPatrols,_difficulty,_submarinePatrolParameters,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaMission,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols; // TODO: add grpNull checks to missionVehicleSpawner if (_temp isEqualTo grpNull) throw 1; _missionAIVehicles append (_temp select 0); - //diag_log format ["_monitorInitializedMissions(327): count (_temp select 0)/no mission vehicles spawned = %1",count (_temp select 0)]; _blck_AllMissionAI append (_temp select 1); }; - //diag_log format["_monitorInitializedMissions(330): count _missionAIVehicles = %1",count _missionAIVehicles]; - /* - { - diag_log format["_monitorInitializedMissions(332): spawned vehicle %1 of type %2 object %2",_forEachIndex,typeOf _x, _x]; - } forEach _missionAIVehicles; - */ + uiSleep delayTime; if (_spawnCratesTiming in ["atMissionSpawnGround","atMissionSpawnAir"]) then @@ -356,7 +329,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do { _crates = [_coords,_missionLootBoxes,_loadCratesTiming, _spawnCratesTiming, "start", _difficulty] call blck_fnc_spawnMissionCrates; }; - //diag_log format["_monitorInitializeMissions (318): crates spawned = %1",_crates]; + if (blck_cleanUpLootChests) then { _objects append _crates; From 7c88d1fead8263a4ce7d5f2c3b405c1f8f10af85 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 10 Oct 2020 08:39:09 -0400 Subject: [PATCH 67/67] Update Guidelines.txt --- @blckeagls_EDEN/addons/Guidelines.txt | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/@blckeagls_EDEN/addons/Guidelines.txt b/@blckeagls_EDEN/addons/Guidelines.txt index 31f573d..90afcfc 100644 --- a/@blckeagls_EDEN/addons/Guidelines.txt +++ b/@blckeagls_EDEN/addons/Guidelines.txt @@ -1,21 +1,7 @@ -Variables to define -marker parameters -Marker Text +Features: -Mission start message -Mission end message -Mission level - -To pull units: -private _units = allUnits; +Exports static or dynamic missions preformated in .sqf code. Simply paste the output of the editor into a new .sqf file, edit entires to refine mission parameters and add the name of the mission file to GMS_missionLists. +Captures simple objects, sets allow dammage and allow similation according to editor settings, and captures marker configurations. -To pull objects: -_center = allMissionObejcts "RoadCone_L_F"; -_buildings = allMissionObjects "Building"; -_things = allMissionObjects "ThingX"; -_baseObjects = _buildings append _things; -_static = allMissionObejcts "StaticWeapon"; -_vehicles = allMissionObejcts "Car" + allMissionObejcts "Tank" + allMissionObejcts "Ship"; -_air = allMissionObejcts "Air";