From 5afa70d0c40e3083e7848b7dab63ebdda1778d78 Mon Sep 17 00:00:00 2001 From: "Ghostrider [GRG]" Date: Wed, 27 Sep 2023 22:06:45 -0400 Subject: [PATCH] 3DEN Plugin Sorted Plugin Build 18 --- @GMS_3EDEN/addons/3DEN_plugin.pbo | Bin 199725 -> 167559 bytes .../addons/3DEN_plugin/Cfggms3DENDisplay-1.h | 265 --------- .../3DEN_plugin/Core/fn_buildingContainer.sqf | 45 +- .../Core/fn_exportDynamic copy.sqf | 558 ------------------ .../3DEN_plugin/Core/fn_exportDynamic.sqf | 357 +++++------ .../Core/fn_initializeAttributes.sqf | 7 +- .../addons/3DEN_plugin/Core/fn_isInside.sqf | 3 +- .../Core/fn_toggleStaticSpawns.sqf | 7 +- .../3DEN_plugin/Static/pullMarkerInfo.sqf | 45 -- .../3DEN_plugin/Static/scanAttributes.sqf | 9 - .../3DEN_plugin/Static/setCenterAtPlayer.sqf | 1 - .../addons/3DEN_plugin/Static/template.sqf | 81 --- @GMS_3EDEN/addons/3DEN_plugin/To Do List | 39 -- @GMS_3EDEN/addons/3DEN_plugin/To Do List copy | 6 - @GMS_3EDEN/addons/3DEN_plugin/changlog.txt | 1 + .../addons/3DEN_plugin/gmsCfg3DEN copy 2.h | 56 -- .../addons/3DEN_plugin/gmsCfg3DEN copy.h | 149 ----- .../addons/3DEN_plugin/gmsCfg3DENDisplay.h | 359 ++++++----- .../addons/3DEN_plugin/gmsCfg3DENVersion.h | 6 +- .../addons/3DEN_plugin/gmsCfg3DENsettings.h | 26 - .../addons/3DEN_plugin/gmsCfgFunctions.h | 8 +- .../addons/3DEN_plugin/helperscripts.sqf | 21 - .../addons/3DEN_plugin/testIntersects.sqf | 15 - .../addons/3DEN_plugin/testingscripts.sqf | 20 - 24 files changed, 385 insertions(+), 1699 deletions(-) delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/Cfggms3DENDisplay-1.h delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/Core/fn_exportDynamic copy.sqf delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/Static/pullMarkerInfo.sqf delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/Static/scanAttributes.sqf delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/Static/setCenterAtPlayer.sqf delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/Static/template.sqf delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/To Do List delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/To Do List copy delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DEN copy 2.h delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DEN copy.h delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/helperscripts.sqf delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/testIntersects.sqf delete mode 100644 @GMS_3EDEN/addons/3DEN_plugin/testingscripts.sqf diff --git a/@GMS_3EDEN/addons/3DEN_plugin.pbo b/@GMS_3EDEN/addons/3DEN_plugin.pbo index 9efded29eeb08dd18a509c268dee2f939af94304..ca60465b05406d7144a10bf8b54d3c79ed68163e 100644 GIT binary patch delta 25141 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 U^SR&qop+Ug@XucO(ygEVH}lbh#sB~S diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Cfggms3DENDisplay-1.h b/@GMS_3EDEN/addons/3DEN_plugin/Cfggms3DENDisplay-1.h deleted file mode 100644 index 05792eb..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/Cfggms3DENDisplay-1.h +++ /dev/null @@ -1,265 +0,0 @@ -#include "Core\gms3DEN_defines.hpp" - -// Include Eden Editor UI macros -// For attributes, you'll be interested in these: -// ATTRIBUTE_TITLE_W - title width -// ATTRIBUTE_CONTENT_W - content width -#include "\a3\3DEN\UI\macros.inc" - - -#include "Core\gms3DEN_defines.hpp" - -// Include Eden Editor UI macros -// For attributes, you'll be interested in these: -// ATTRIBUTE_TITLE_W - title width -// ATTRIBUTE_CONTENT_W - content width -#include "\a3\3DEN\UI\macros.inc" - -class Default; -class Title: Default; -{ - class Controls - { - class Title; - }; -}; -class Checkbox; -class ctrlMenuStrip; -class ctrlMenu; - -class display3DEN -{ - class Controls - { - class MenuStrip: ctrlMenuStrip - { - class Items - { - // Additions to the menu strip to export missions and seek help - // ************************************************************ - items[] += {"GMS_configure","GMS_export","GMS_support"}; - - /* - The menu for exporting missions is defined here - */ - class GMS_export { - items[]= { - "GMS_exportDynamic" - }; - text = "Export Mission"; - toolTip = "Export GMS Missions"; - }; - class GMS_exportDynamic { - text = "Export Mission"; - //toolTip = "Export Dynamic Mission"; - action = "call gms3DEN_fnc_exportDynamic"; - picture = "\a3\3DEN\Data\Displays\Display3DEN\ToolBar\save_ca.paa"; - }; - - /* - menus for those seeking support are here - */ - class GMS_support { - items[] = { - "GMS_help", - "GMS_about" - }; - text = "Plugin Support"; - }; - class GMS_help { - text = "Help"; - action = "call gms3DEN_fnc_Help"; - //picture = "\a3\3DEN\Data\Displays\Display3DEN\ToolBar\save_ca.paa"; - }; - class GMS_about { - text = "3EDEN Plugin Version 1.0 for GMS by Ghostrider-GRG-"; - action = "call blck3EDEN_fnc_about"; - }; - - - /* - All menus for configuring a GMS mission are defined here - */ - - class GMS_configure { - items[] = { - "GMS_difficulty", - "GMS_crateSpawn", - "GMS_lootSpawn", - "GMS_location_Respawns", - "GMS_MissionCompletionMode" - //"GMS_editMissionSettings" - }; - text = "Configure Mission"; - toolTip = "Adjust Mission Settings"; - }; - - class GMS_difficulty { - text = "Difficulty"; - toolTip = "Set Mission Difficulty"; - items[] = { - "GMS_difficultyBlue", - "GMS_difficultyRed", - "GMS_difficultyGreen", - "GMS_difficultyOrange" - }; - }; - class GMS_difficultyBlue - { - text = "Set Mission Difficutly to EASY (Blue)"; - action = "['Blue'] call gms3DEN_fnc_setDifficulty;"; - value = GMS_blue; - }; - class GMS_difficultyRed - { - text = "Set Mission Difficulty to MEDIUM (Red)"; - action = "['Red'] call gms3DEN_fnc_setDifficulty;"; - value = GMS_red; - }; - class GMS_difficultyGreen - { - text = "Set Mission Difficult To HARD (Green)"; - action = "['Green'] call gms3DEN_fnc_setDifficulty;"; - value = GMS_green; - }; - class GMS_difficultyOrange - { - text = "Set Mission Difficulty to Very HARD (Orange)"; - action = "['Orange'] call gms3DEN_fnc_setDifficulty;"; - value = GMS_orange; - }; - - class GMS_MissionCompletionMode - { - text = "Set the Criterial for Mission Completion"; - items[] = { - "GMS_playerNear", - "GMS_allUnitsKilled", - "GMS_allKilledOrPlayerNear", - "GMS_assetSecured" - }; - }; - class GMS_allUnitsKilled - { - text = "All AI Dead"; - toolTip = "Mission is complete only when All AI are Dead"; - action = "['allUnitsKilled'] call gms3DEN_fnc_setCompletionMode;"; - value = allUnitsKilled; - }; - class GMS_playerNear - { - text = "Player near mission center"; - toolTip = "MIssion is Complete when a player reaches the mission center"; - action = "['playerNear'] call gms3DEN_fnc_setCompletionMode;"; - value = playerNear; - }; - class GMS_allKilledOrPlayerNear - { - text = "Units Dead / Player @ Center"; - toolTip = "Mission is Complete when all units are dead or a player reaches mission center"; - action = "['allKilledOrPlayerNear'] call gms3DEN_fnc_setCompletionMode;"; - value = allKilledOrPlayerNear; - }; - class GMS_assetSecured - { - text = "Asset Secured"; - toolTip = "Mission is Complete when the asset is secured"; - action = "[assetSecured] call gms3DEN_fnc_setCompletionMode;"; - value = allKilledOrPlayerNear; - }; - class GMS_location_Respawns - { - text = "Set Mission Spawns (static vs random)"; - //action = "edit3DENMissionAttributes 'setAsStaticMission'"; - items[] = { - "GMS_dynamicMission", - "GMS_staticMission" - }; - }; - class GMS_dynamicMission - { - text = "Configure as Dynamic Mission"; - action = "['dynamic'] call gms3DEN_fnc_setSpawnLocations"; - }; - class GMS_staticMission - { - text = "Configure Static Mission"; - action = "['static'] call gms3DEN_fnc_setSpawnLocations"; - }; - class GMS_crateSpawn { - text = "Set When Crates Spawn"; - toolTip = "Set when crates are spawned"; - items[] = { - "GMS_atMissionSpawnGround", - "GMS_atMissionSpawnAir", - "GMS_atMissionEndGround", - "GMS_atMissionEndAir" - }; - }; - class GMS_atMissionSpawnGround - { - text = "At Spawn Ground"; - toolTip = "Crates are spawned on the ground at mission startup"; - action = "['atMissionSpawnGround'] call gms3DEN_fnc_spawnCratesTiming;"; - }; - class GMS_atMissionSpawnAir - { - text = "At Spawn Air"; - toolTip = "Crates are spawned in the air at mission startup"; - action = "['atMissionSpawnAir'] call gms3DEN_fnc_spawnCratesTiming;"; - }; - class GMS_atMissionEndGround - { - text = "At End Ground"; - toolTip = "Crates are spawned on the ground at mission completion"; - action = "['atMissionEndGround'] call gms3DEN_fnc_spawnCratesTiming;"; - }; - class GMS_atMissionEndAir - { - text = "At End Air"; - toodTip = "Crates are spawned in the air at mission completion"; - action = "['atMissionEndAir'] call gms3DEN_fnc_spawnCratesTiming;"; - }; - - class GMS_lootSpawn { - text = "Set timing for loading crates"; - items[] = { - "GMS_atMissionSpawn", - "GMS_atMissionCompletion" - }; - }; - class GMS_atMissionSpawn - { - text = "At Spawn"; - toolTip = "Load crates when the mission spawns"; - action = "['atMissionSpawn'] call gms3DEN_fnc_setLoadCratesTiming"; - }; - class GMS_atMissionCompletion - { - text = "At Completion"; - toolTip = "Load crates when the mission is complete"; - action = "['atMissionCompletion'] call gms3DEN_fnc_setLoadCratesTiming"; - }; - - class GMS_static { - text = "Set if Mission is Static/Dynamic"; - toolTip = "Toggle between static and random mission locations"; - items[] = { - "GMS_setToDynamic", - "GMS_setToStatic" - }; - }; - class GMS_setToDynamic { - text = "Dynamic"; - toolType = "Set mission to be spawned at random location"; - action = "['dynamic'] call gms3DEN_fnc_toggleStaticSpawns"; - }; - class GMS_setToStatic { - text = "Static"; - toolTip = "Set mission to respawn at the same location each time"; - action = "['static'] call gms3DEN_fnc_toggleStaticSpawns"; - }; - }; - }; - }; -}; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_buildingContainer.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_buildingContainer.sqf index 41f360b..66f120e 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_buildingContainer.sqf +++ b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_buildingContainer.sqf @@ -3,13 +3,38 @@ By Ghostrider-GRG- Copyright 2020 */ -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]; -private _surfacesBelow = lineIntersectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 100],_u,_u,true,10]; -{ - if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; -} forEach _surfacesAbove + _surfacesbelow; -diag_log format["_buildingContainer: _u = %1| _buildig = %2",_u,_building]; -_building + params["_u",["_category","House"]]; + + diag_log format["_fn_buildingContainer: typeOf _u = %1", typeOf _u]; + private _pos = getPosASL _u; + private _building = objNull; + // lineIntersectsSurfaces [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2, returnUnique] + /* + Wiki page: https://community.bistudio.com/wiki/lineIntersectsSurfaces + + Return Value + Array of intersections in format [[intersectPosASL, surfaceNormal, intersectObj, parentObject, selectionNames, pathToBisurf], ...] where: + + intersectPosASL: PositionASL - the actual position where line intersects surface + surfaceNormal: Vector - a normal to the intersected surface + intersectObject: Object - the object the surface belongs to (could be proxy object) - objNull if terrain + parentObject: Object - the object proxy object belongs to (not always the same as intersect object) - objNull if terrain + Arma 3 logo black.png + 2.10 + selectionNames: Array of Strings - Names of the intersected selections (bones). Returns [] if there is no intersection with a selection. + Arma 3 logo black.png + 2.10 + pathToBisurf: String - path to intersected surface properties (.bisurf) file. Returns "" if surface has no special properties. Terrain surface properties begin with #, and the surface properties are defined in CfgSurfaces. For example, if it returns #GdtVRsurface01, properties are defined in: configFile >> "CfgSurfaces" >> "GdtVRsurface01" + */ + private _surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,10,"VIEW","FIRE",true]; + private _surfacesBelow = lineIntersectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 100],_u,_u,true,10,"VIEW","FIRE",true]; + diag_log format["fn_buildingContainer: _surfacesAbove = %1", _surfacesAbove]; + diag_log format["fn_buildingContainer: _surfacesBelow = %1", _surfacesBelow]; + private _buildingAbove = if !(_surfacesAbove isEqualTo []) then {_surfacesAbove select 0 select 2} else {objNull}; + private _buildingBelow = if !(_surfacesBelow isEqualTo []) then {_surfacesBelow select 0 select 2} else {objNull}; + diag_log format["fn_buildingContainer: _buildingAbove = %1",_buildingAbove]; + diag_log format["fn_buildingContainer: _buildingBelow = %1",_buildingBelow]; + + if (!(isNull _buildingAbove) && _buildingAbove isKindOf "Building") then {_building = _buildingAbove} else {if (!(isNull _buildingBelow) && _buildingBelow isKindOf "Building") then {_building = _buildingBelow}}; + diag_log format["fn_buldingContainer: _building = %1",_building]; + _building \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_exportDynamic copy.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_exportDynamic copy.sqf deleted file mode 100644 index a25182d..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_exportDynamic copy.sqf +++ /dev/null @@ -1,558 +0,0 @@ -/* - GMS 3DEN Editor Plugin - by Ghostrider-GRG- - Copyright 2020 - -*/ -#include "gms3DEN_defines.hpp" -private _m = "Staring exportDynamic.sqf"; -systemChat _m; -diag_log _m; -Mission_CENTER = [0,0,0]; -#define oddsOfGarrison 0.67 -#define maxGarrisonUnits 4 -GMS_objectAtMissionCenter = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "objectAtMissionCenter"); -GMS_minAI = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "minAI"); -GMS_maxAI = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxAI"); -GMS_minPatrolRadius = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "minPatroRadius"); -GMS_maxPatrolRadius = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxPatrolRadius"); -GMS_maxVehiclePatrolRadius = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxVehiclePatrolRadius"); -GMS_aircraftPatrolRadius = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "aircraftPatrolRadius"); -GMS_garisonMarkerObject = "Sign_Sphere100cm_F"; -GMS_oddsOfGarison = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "oddsOfGarison"); -GMS_maxGarrisonStatics = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxGarrisonStatics"); -GMS_typesGarrisonStatics = getArray(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "typesGarrisonStatics"); -GMS_lootVehicleVariableName = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "lootVehicleVariableName"); -GMS_buildingPosGarrisonVariableName = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "buildingPosGarrisonVariableName"); -GMS_buildingATLGarrisionVariableName = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "buildingATLGarrisionVariableName"); - -/* - Set Default Values Where not Defined using Menu Commands -*/ -if (isNil "GMS_missionLocations") then -{ - GMS_missionLocations = "random"; -}; -if (isNil "GMS_difficulty") then -{ - GMS_difficulty = "Red"; -} else { - diag_log format["Line 36: typeName GMS_difficulty = %1 | GMS_difficulty = %2",typeName GMS_difficulty, GMS_difficulty]; - if (GMS_difficulty in [1,2,3,4]) then - { - GMS_difficulty = ["Blue","Red","Green","Orange"] select GMS_difficulty; - }; - diag_log format["Line 41: typeName GMS_difficulty = %1 | GMS_difficulty = %2",typeName GMS_difficulty, GMS_difficulty]; -}; -if (isNil "GMS_dynamicStartMessage") then -{ - GMS_dynamicStartMessage = "TODO: Change approiately"; -}; -if (isNil "GMS_dynamicEndMessage") then -{ - GMS_dynamicEndMessage = "TODO: Change Appropriately"; -}; -if (isNil "GMS_dynamicCrateLoot") then -{ - GMS_dynamicCrateLoot = format["_crateLoot = blck_BoxLoot_%1;",GMS_difficulty]; -}; -if (isNil "GMS_dynamicCrateLootCounts") then { - GMS_dynamicCrateLootCounts = format["_lootCounts = bGMS_lootCounts%1;",GMS_difficulty]; -}; -if (isNil "GMS_dynamicmarkerMissionNamet") then -{ - GMS_dynamicmarkerMissionName = "TODO: Update appropriately"; -}; -if (isNil "GMS_spawnCratesTiming") then -{ - GMS_spawnCratesTiming = "atMissionStartGround"; -}; -if (isNil "GMS_loadCratesTiming") then -{ - GMS_loadCratesTiming = "atMissionStart"; -}; -if (isNil "GMS_missionEndCondition") then -{ - GMS_missionEndCondition = "allUnitsKilled"; -}; -switch (GMS_missionEndCondition) do -{ - case "GMS_playerNear": {GMS_missionEndCondition = playerNear}; - case "GMS_allUnitsKilled": {GMS_missionEndCondition = allUnitsKilled}; - case "GMS_allKilledOrPlayerNear": {GMS_missionEndCondition = allKilledOrPlayerNear}; - case "GMS_assetSecured": {GMS_missionEndCondition = assetSecured}; -}; - -/* - Look for an object defined in Cfggms3DEN \ configs \ that marks the center of the mission - and set the coords of the center if such an object is found -*/ -all3DENEntities params ["_objects","_groups","_triggers","_systems","_waypoints","_markers","_layers","_comments"]; - -// Relax what is an object at mission center somehow? -// Maybe using inheritsFrom? -diag_log format["exportDynamic line 90: GMS_objectAtMissionCenter = %1",GMS_objectAtMissionCenter]; -private _centerMarkerObject = objNull; -{ - diag_log format["exportDynamic: evaluating objects for one that is to set mission center where the object is of typeOf %1", typeOf _x]; - if ((typeOf _x) isEqualTo GMS_objectAtMissionCenter) exitwith - { - _centerMarkerObject = _x; - diag_log format["exportDynamic Line 97: _x = %1 | _centerMarkerObject = %2", _x, _centerMarkerObject]; - }; -} forEach _objects; - -diag_log format["Line 100: _centerMarkerObject = %1 | GMS_objectAtMissionCenter = %2",_centerMarkerObject, GMS_objectAtMissionCenter]; - -if !(isNull _centerMarkerObject) then -{ - private _objPos = (_centerMarkerObject get3DENAttribute "position") select 0; - private _objType = typeOf _centerMarkerObject; - Mission_CENTER = _objPos; - diag_log format["CENTER defined by object %1 typeOf %2 located at %3",_obj,_objType,_objPos]; -} else { - diag_log format[" No object marking the center of the mission was found: using an object defined in 'objectAtMissionCenter' is recommended",getText(configFile >> "CfgVehicles" >> objectAtMissionCenter >> "displayName")]; - diag_log format["Place such an object or a marker to ensure the mission is accurately stored and spawned"]; -}; - -private["_m1","_markerPos","_markerType","_markerShape","_markerColor","_markerText","_markerBrush","_markerSize","_markerAlpha"]; -/* - pull info on the first marker found - If Mission_CENTER was not set above then try to set it based on the first marker identified. -*/ - -if (_markers isEqualTo []) then -{ - diag_log "No Marker Found, no Marker Definitions Will Be generated"; -} else { - private _m1 = _markers select 0; - _markerPosition = (_m1 get3DENAttribute "Position") select 0; // Returns expected value - _markerText = (_m1 get3DENAttribute "Text") select 0; // Returns expected value - _markerColor = (_m1 get3DENAttribute "baseColor") select 0; //Returns Null - _markerShape = (_m1 get3DENAttribute "markerType") select 0; // Returns [-1] if not a rectangular or elipsoid marker] - _markerAlpha = _m1 get3DENAttribute "alpha"; - _markerType = (_m1 get3DENAttribute "itemClass") select 0; // Returns "" if not an icon type marker - _markerBrush = (_m1 get3DENAttribute "brush") select 0; - _markerSize = (_m1 get3DENAttribute "size2") select 0; - _markerRotation = (_m1 get3DENAttribute "rotation") select 0; - - /* - use the coordinates of that marker as mission center of no object demarkating the center is found - */ - if (Mission_CENTER isEqualTo [0,0,0]) then { - Mission_CENTER = _markerPosition; - diag_log format["Position of marker %1 used for position of CENTER = %2",_m,Mission_CENTER]; - }; - if (count _markers > 1) then - { - diag_log format[" More than one marker was found; only the first marker was processed"]; - }; -}; - -_m = format["Line 152: Mission_CENTER = %1",Mission_CENTER]; -systemChat _m; -diag_log _m; - -diag_log format["Line 156: _objects = %1",_objects]; -GMS_defaultMissionLocations = if (toLower(missionNameSpace getVariable["GMS_missionSpawnMode","dynamic"]) isEqualTo "StaticWeapon") then {Mission_Center} else {[]}; -diag_log format["Line 161: GMS_defaultMissionLocations = %1",GMS_defaultMissionLocations]; -GMS_simpleObjects = []; -GMS_uavs = []; -GMS_ugvs = []; -_tanks = []; -GMS_carsTrucks = []; -GMS_submersibles = []; -GMS_aircraft = []; -GMS_boats = []; -GMS_carsTrucks = []; -GMS_turrets = []; -GMS_buildings = []; -GMS_landscape = []; -GMS_crates = []; -GMS_garrisonGroups = []; -GMS_infantryGroups = []; -GMS_garrisonATL = []; -GMS_missionLandscape = []; - -// Remove any groups that were assigned to vehicles or turrets as the mission system will add these. - -private _countGroups = count _groups; -private _totalGroups = count _groups; -private _groupsProcessed = 0; -private _totalObjectsCount = count _objects; -private _objectsProcessed = 0; - -// Run through objects and move any turrents to a separate array. -for "_i" from 1 to (count _objects) do -{ - if (_i > (count _objects)) exitWith {}; - private _obj = _objects deleteAt 0; - if (_obj isKindOf "StaticWeapon") then - { - GMS_turrets pushBack _obj; - diag_log format["exportDynamic Line 197: adding object %1 to GMS_turrets",_obj]; - } else { - _objects pushBack _obj; - }; -}; - -// Run through Objects and remove any vehicles (land, air or sea), ammo crates or simple objects -for "_i" from 1 to (count _objects) do -{ - if (_i > (count _objects)) exitWith {}; - private _obj = _objects deleteAt 0; - private _processed = false; - if ((_obj get3DENAttribute "objectIsSimple") select 0 && !_processed) then { - GMS_simpleObjects pushBack _obj; - diag_log format["exportDynamic Line 242: adding %1 to _simpleObjects | _simpleObjects = %2",typeOf _obj, GMS_simpleObjects]; - _processed = true; - }; - private _vehicleClass = getText(configFile >> "CfgVehicles" >> typeOf _obj >> "vehicleclass"); - diag_log format["exportDynamic Line 210: typeOf _obj %1 | _vehicleClass %1",typeOf _obj, _vehicleclass]; - if ((_obj isKindOf "Car" || _obj isKindOf "Tank") && !_processed) then - { - // vehicleClass = "Autonomous"; - if (_vehicleClass isEqualTo "Autonomous") then - { - diag_log format["exportDynamic Line 211: object %1 added to GMS_ugvs",_obj]; - GMS_ugvs pushBack _obj; - } else { - diag_log format["exportDynamic Line 213: object %1 added to GMS_carsTrucks",_obj]; - GMS_carsTrucks pushBack _obj; - }; - _processed = true; - }; - if (_obj isKindOf "Air" && !_processed) then - { - if (_vehicleClass isEqualTo "Autonomous") then - { - diag_log format["exportDynamic Line 228: object %1 added to GMS_uavs",_obj]; - GMS_uavs pushBack _obj; - } else { - GMS_aircraft pushBack _obj; - }; - _processed = true; - }; - if (_obj isKindOf "Ship" && !_processed) then - { - if (toLower (_vehicleClass) isEqualTo "submarine") then - { - diag_log format["exportDynamice Line 237: object %1 added to GMS_submersibles",_obj]; - GMS_submersibles pushBack _obj; - } else { - diag_log format["exportDynamic Line 240: object %1 added to GMS_carsTrucks",_obj]; - GMS_carsTrucks pushBack _obj; - }; - _processed = true; - }; - if (_obj isKindOf "FloatingStructure_F" && !_processed) then { - GMS_landscape pushBack _obj; - diag_log format["exportDynnamic case of FloatingStructure Line 247: adding %1 | type of %2 to GMS_landscape",_obj, typeOf _obj]; - _processed = true; - }; - if (_obj isKindOf "Items_base_F" && !_processed) then { - diag_log format["exportDynamic case of thing isKindOf Items_base_F line 253 - adding object %1 to GMS_landscape",_obj]; - GMS_landscape pushBack _obj; - _processed = true; - }; - if (_obj isKindOf "ReammoBox_F" && !_processed) then { - if (_obj isKindOf "VirtualReammoBox_F") then { - diag_log format["exportDynamic case of thing isKindOf VirtualReammoBox_F line 258 - adding object %1 to GMS_landscape",_obj]; - GMS_landscape pushBack _obj; - _processed = true; - } else { - diag_log format["exportDynamic case of thing isKindOf ReammoBox line 263 - adding object %1 to GMS_crates",_obj]; - GMS_crates pushBack _obj; - _processed = true; - }; - }; - if (_obj isKindOf "Static" && !_processed) then { - diag_log format["exportDynamic case of static is typeOf %1 line 282 - adding object to GMS_landscape",typeOf _obj]; - GMS_landscape pushBack _obj; - _processed = true; - }; - - // if !_process then the object did not qualify for any of these and should be added back to the list for further processing - if !(_processed) then {_objects pushBack _obj}; -}; - -// Run through the buildings first to pull out and properly position any groups or turrets inside them. -for "_i" from 1 to (count _objects) do -{ - if (_i > (count _objects)) exitWith {}; - if (_obj isKindOf "Building") then - { - diag_log format["exportDynamic case of Building with _obj = %1 | typeOf _obj = %2",_obj, typeOf _obj]; - private _isGarrisoned = false; - // Search for any turrets located within the building - private _turretsATL = []; - for "_i" from 1 to (count GMS_turrets) do - { - if (_i > (count GMS_turrets)) exitWith {}; - private _tur = GMS_turrets deleteAt 0; - if [_tur] call gms3DEN_fnc_isInside then - { - _isGarrisoned = true; - _turretsATL pushBack _tur; - }; - }; - diag_log format["exportDynamic %1 turrets found in _obj %2",count _turretsATL,_obj]; - - private _groupsATL = []; - for "_i" from 1 to (count _groups) do - { - if (_i > (count _groups)) exitWith {}; - private _grp = _groups deleteAt 0; - private _inside = false; - { - if ([_x] call gms3DEN_fnc_isInside) then {_inside = true}; - if (_inside) exitWith {}; - } forEach (units _grp); - if (_inside) then {_groupsATL pushBack _grp}; - }; - diag_log format["exportDynamic %1 groups found in _obj %2",count _groupsATL,_obj]; - - if (_turretsATL isEqualTo [] && _groupsATL isEqualTo []) then - { - diag_log format["exportDynamic: no garrison found for %1, addiing it to GMS_buildings",_obj]; - GMS_buildings pushBack _obj; - } else { - private _gar = [_obj, _turretsATL, _groupsATL] call gms3DEN_fnc_configureGarrisonATL; - diag_log format["exportDynamic: garrison found for %1, adding configs for it to GMS_garrisonATL",_obj]; - diag_log format["exportDynamice: usiing the folloing config: %1",_gar]; - GMS_garrisonATL pushBack _gar; - }; - _objectsProcessed = _objectsProcessed + 1; - }; -}; - -// setup an array with any static weapons not placed in buildings -for "_i" from 1 to (count _objects) do -{ - if (_objects isEqualTo []) exitWith {}; - private _obj = _objects deleteAt 0; - if (_obj isKindOf "StaticWeapon") then { - GMS_turrets pushBack _obj; - diag_log format["exportDynamic case of StaticWeapon Line 241: adding %1 to GMS_turrets", typeOf _obj]; - } else { - _objects pushBack _obj; - }; -}; - -// At this point we can assume that any groups left in _groups is neither in a vehicle nor inside a building so just do the assignment of the global variable -// without scanning for where each group is. - -GMS_groups = _groups; -_groupsProcess = _groupsProcessed + (count _groups); - -// Do some housekeeping - logging the output so far. -{ - private _var = missionNameSpace getVariable[_x,[]]; - diag_log format["Line 364: _var %1 | count %2 | values %3",_x,count _var,_var]; -} forEach["GMS_crates","GMS_landscape","GMS_buildings","GMS_turrets","GMS_carsTrucks","GMS_boats","GMS_aircraft","GMS_simpleObjects","GMS_groups","GMS_uavs","GMS_ugvs"]; - -GMS_missionSimpleObjects = []; -{ - GMS_missionSimpleObjects pushBack format[' ["%1",%2,%3]', - (_x get3DENAttribute "ItemClass") select 0, - ((_x get3DENAttribute "position") select 0) vectorDiff Mission_CENTER, - ((_x get3DENAttribute "rotation") select 0) select 2 - ]; - diag_log format["_object = %1",_object]; -} forEach GMS_simpleObjects; -diag_log format["Line 425: GMS_simpleObjects -> count %1 | contents %2",count GMS_simpleObjects,GMS_simpleObjects]; - -/* -private _missionLootVehicles = []; -private _lootVehicles = _objects select { - ((typeOf _x) isKindOf "AllVehicles") && - !((typeOf _x) isKindOf "Man") && - (_x getVariable["lootvehicle",false]) -}; - -diag_log format["_lootVehicles = %1",_lootVehicles]; -{ - _missionLootVehicles pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff CENTER, '_crateLoot','_lootCounts',getDir _x]; -} forEach _lootVehicles; -*/ - - -GMS_missionPatrolVehicles = []; -{ - GMS_missionPatrolVehicles pushBack format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER,getDir _x]; -}forEach GMS_carsTrucks + GMS_ugvs; -diag_log format["Line 446: GMS_missionPatrolVehicles -> count %1 | contents %2",count GMS_missionPatrolVehicles,GMS_missionPatrolVehicles]; - -GMS_subPatrols = []; -{ - GMS_subPatrols pushBack format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER,getDir _x]; -} forEach GMS_submersibles; -diag_log format["Line 452: count GMS_submersibles = %1 | GMS_submersibles = %2",count GMS_submersibles, GMS_submersibles]; - -GMS_airPatrols = []; -{ - GMS_airPatrols pushBack format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER,getDir _x]; -} forEach GMS_aircraft + GMS_uavs; -diag_log format["Line 452: count GMS_airPatrols = %1 | GMS_airPatrols = %2",count GMS_airPatrols, GMS_airPatrols]; - -GMS_staticWeapons = []; -{ - GMS_staticWeapons pushBack format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER,getDir _x]; -} forEach GMS_turrets; -diag_log format["Line 375: GMS_staticWeapons -> count %1 | contents %2",count GMS_staticWeapons,GMS_staticWeapons]; - -diag_log format["Line 392: count GMS_groups = %1 | GMS_groups = %2",count GMS_groups,GMS_groups]; -GMS_infantryGroups = []; -GMS_scubaGroups = []; -{ - _unit = leader _x; - if (_surfaceIsWater) then { - diag_log format["Line 472: adding group %1 to GMS_scubaGroups",_x]; - GMS_scubaGroups pushBack format[' [%1,%2,%3,"%4"]',(getPosATL _unit) vectorDiff Mission_CENTER,blck_minAI,blck_maxAI,GMS_difficulty]; - } else { - diag_log format["Line 475: adding group %1 to GMS_infantryGroups",_x]; - GMS_infantryGroups pushBack format[' [%1,%2,%3,"%4"]',(getPosATL _unit) vectorDiff Mission_CENTER,blck_minAI,blck_maxAI,GMS_difficulty]; - }; -} forEach GMS_groups; -diag_log format["Line 479: GMS_infantryGroups -> count %1 | contents %2",count GMS_infantryGroups,GMS_infantryGroups]; -diag_log format["Line 480: GMS_scubaGroups -> count %1 | contents %2",count GMS_scubaGroups,GMS_scubaGroups]; - -GMS_lootContainers = []; -{ - diag_log format["Line 484: adding %1 to GMS_lootContainers",_x]; - GMS_lootContainers pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER, '_crateLoot','_lootCounts',getDir _x]; -}forEach GMS_crates; -diag_log format["Line 487: GMS_lootContainers -> count %1 | contents %2",count GMS_lootContainers,GMS_lootContainers]; - -GMS_objectsToSpawn = []; -{ - diag_log format["Line 442: adding %1 to GMS_objectsToSpawn",_x]; - GMS_objectsToSpawn pushBack format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER,getDir _x]; -} forEach GMS_landscape; - -diag_log format["exportDynamic Line 489: all data organized, formating text output"]; -private _lines = []; -private _lineBreak = toString [10]; - -_lines pushBack "/*"; -_lines pushBack " Dynamic Mission Generated"; -_lines pushBack " Using 3DEN Plugin for blckeagls"; -_lines pushBack format[" %1",['dynamic'] call gms3DEN_fnc_versionInfo]; -_lines pushBack " By Ghostrider-GRG-"; -_lines pushBack "*/"; -_lines pushBack ""; - -//GMS_missionLocations -switch (GMS_missionLocations) do -{ - case 'random': {GMS_defaultMissionLocations = []}; - case 'fixed': {GMS_defaultMissionLocations = [Mission_CENTER]}; -}; -_lines pushBack '#include "\GMS\Compiles\Init\GMS_defines.hpp"'; -_lines pushBack '#include "\GMS\Missions\GMS_privateVars.sqf" '; -_lines pushBack ""; -_lines pushBack format["_defaultMissionLocations = %1;",GMS_defaultMissionLocations]; -_lines pushBack format["_maxMissionRespawns = -1; // Chage this to either zero for no respawns or a positive number if you want to limit the number of times a mission spawns at the same location"]; - -if (_markerType isEqualTo "") then -{ - _markerType = ["rectangle","elipse"] select _markerShape; -}; -_lines pushBack format["_markerType = %1",format['["%1",%2,"%3"];',_markerType,_markerSize,_markerBrush]]; -_lines pushBack format['_markerColor = "%1";',_markerColor]; - -_lines pushBack format['_startMsg = "%1";',GMS_dynamicStartMessage]; -_lines pushBack format['_endMsg = "%1";',GMS_dynamicEndMessage]; -_lines pushBack format['_markerMissionName = "%1";',_markerText]; -_lines pushBack format['_crateLoot = GMS_BoxLoot_%1;',GMS_difficulty]; -_lines pushBack format['_lootCounts = GMS_lootCounts%1;',GMS_difficulty]; -_lines pushBack ""; -_lines pushBack "_garrisonedBuilding_ATLsystem = ["; -_lines pushBack (GMS_garrisonATL joinString (format[",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_missionLandscape = ["; -_lines pushback (GMS_objectsToSpawn joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_simpleObjects = ["; -_lines pushback (GMS_missionSimpleObjects joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_missionLootVehicles = ["; -_lines pushBack (GMS_missionLootVehicles joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_missionPatrolVehicles = ["; -_lines pushback (GMS_missionPatrolVehicles joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_submarinePatrolParameters = ["; -_lines pushback (GMS_subPatrols joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_airPatrols = ["; -_lines pushback (GMS_airPatrols joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_missionEmplacedWeapons = ["; -_lines pushback (GMS_staticWeapons joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_missionGroups = ["; -_lines pushback (GMS_infantryGroups joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_scubaGroupParameters = ["; -_lines pushback (GMS_scubaGroups joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_lines pushBack ""; -_lines pushBack "_missionLootBoxes = ["; -_lines pushback (GMS_lootContainers joinString (format [",%1", _lineBreak])); -_lines pushBack "];"; -_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 "*/"; -_lines pushBack format["_chanceHeliPatrol = GMS_chanceHeliPatrol%1;",GMS_difficulty]; -_lines pushBack format["_noChoppers = GMS_noPatrolHelis%1;",GMS_difficulty]; -_lines pushBack format["_missionHelis = GMS_patrolHelis%1;",GMS_difficulty]; -_lines pushBack format["_chancePara = GMS_chancePara%1;",GMS_difficulty]; -_lines pushBack format["_noPara = GMS_noPara%1;",GMS_difficulty]; -_lines pushBack format["_paraTriggerDistance = 400;"]; -//_lines pushBack format["_paraSkill = '%1';",0.7]; -_lines pushBack format["_chanceLoot = 0.0;"]; -_lines pushBack format["_paraLoot = GMS_BoxLoot_%1;",GMS_difficulty]; -_lines pushBack format["_paraLootCounts = GMS_lootCounts%1;",GMS_difficulty]; -_lines pushBack format['_missionLandscapeMode = "precise";']; -_linse pushBack "_useMines = GMS_useMines;"; -_lines pushBack "_uniforms = GMS_SkinList;"; -_lines pushBack "_headgear = GMS_headgear;"; -_lines pushBack "_vests = GMS_vests;"; -_lines pushBack "_backpacks = GMS_backpacks;"; -_lines pushBack "_sideArms = GMS_Pistols;"; -_lines pushBack format['_spawnCratesTiming = "%1";',GMS_spawnCratesTiming]; -_lines pushBack format['_loadCratesTiming = "%1";',GMS_loadCratesTiming]; -diag_log format["Line 520: typeName GMS_missionEndCondition = %1 | GMS_missionEndCondition = = %2",typeName GMS_missionEndCondition,GMS_missionEndCondition]; -_lines pushBack format['_endCondition = %1;', GMS_missionEndCondition]; -_lines pushBack format["_minNoAI = GMS_MinAI_%1;",GMS_difficulty]; -_lines pushBack format["_maxNoAI = GMS_MaxAI_%1;",GMS_difficulty]; -_lines pushBack format["_noAIGroups = GMS_AIGrps_%1;",GMS_difficulty]; -_lines pushBack format["_noVehiclePatrols = GMS_SpawnVeh_%1;",GMS_difficulty]; -_lines pushBack format["_noEmplacedWeapons = GMS_SpawnEmplaced_%1;",GMS_difficulty]; -_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 "\GMS\Compiles\Missions\GMS_fnc_missionSpawner.sqf";'; - -diag_log ["dynamic"] call blck3EDEN_fnc_versionInfo; -uiNameSpace setVariable ["Display3DENCopy_data", ["dynamicMission.sqf", _lines joinString _lineBreak]]; -(findDisplay 313) createdisplay "Display3DENCopy"; - -private _m = format["exportDynamic.sqf: reached line 367"]; -systemChat _m; -diag_log _m; -_m = "Exported Mission copied to clipboard"; -systemChat _m; -diag_log _m; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_exportDynamic.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_exportDynamic.sqf index 2a26d5e..f01c6da 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_exportDynamic.sqf +++ b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_exportDynamic.sqf @@ -2,29 +2,16 @@ GMS 3DEN Editor Plugin by Ghostrider-GRG- Copyright 2020 - */ #include "gms3DEN_defines.hpp" private _m = "Staring exportDynamic.sqf"; systemChat _m; diag_log _m; Mission_CENTER = [0,0,0]; -#define oddsOfGarrison 0.67 -#define maxGarrisonUnits 4 GMS_objectAtMissionCenter = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "objectAtMissionCenter"); -GMS_minAI = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "minAI"); -GMS_maxAI = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxAI"); -GMS_minPatrolRadius = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "minPatroRadius"); -GMS_maxPatrolRadius = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxPatrolRadius"); -GMS_maxVehiclePatrolRadius = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxVehiclePatrolRadius"); -GMS_aircraftPatrolRadius = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "aircraftPatrolRadius"); -GMS_garisonMarkerObject = "Sign_Sphere100cm_F"; -GMS_oddsOfGarison = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "oddsOfGarison"); -GMS_maxGarrisonStatics = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxGarrisonStatics"); -GMS_typesGarrisonStatics = getArray(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "typesGarrisonStatics"); -GMS_lootVehicleVariableName = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "lootVehicleVariableName"); -GMS_buildingPosGarrisonVariableName = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "buildingPosGarrisonVariableName"); -GMS_buildingATLGarrisionVariableName = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "buildingATLGarrisionVariableName"); +if (isNil "GMS_minAI") then {GMS_minAI = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "minAI")}; +if (isNil "GMS_maxAI") then {GMS_maxAI = getNumber(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "maxAI")}; + /* Set Default Values Where not Defined using Menu Commands @@ -37,7 +24,6 @@ if (isNil "GMS_difficulty") then { GMS_difficulty = "Red"; } else { - diag_log format["Line 36: typeName GMS_difficulty = %1 | GMS_difficulty = %2",typeName GMS_difficulty, GMS_difficulty]; if (GMS_difficulty in [1,2,3,4]) then { GMS_difficulty = ["Blue","Red","Green","Orange"] select GMS_difficulty; @@ -45,7 +31,6 @@ if (isNil "GMS_difficulty") then if (GMS_difficulty isEqualTo "") then { GMS_difficulty isEqualTo "Red"; }; - diag_log format["Line 41: typeName GMS_difficulty = %1 | GMS_difficulty = %2",typeName GMS_difficulty, GMS_difficulty]; }; if (isNil "GMS_dynamicStartMessage") then { @@ -78,6 +63,10 @@ if (isNil "GMS_missionEndCondition") then { GMS_missionEndCondition = "allUnitsKilled"; }; +if (isNil "gms_chancemissionspawned") then +{ + gms_chancemissionspawned = 1.0; +}; switch (GMS_missionEndCondition) do { case "GMS_playerNear": {GMS_missionEndCondition = playerNear}; @@ -112,7 +101,7 @@ if !(isNull _centerMarkerObject) then private _objPos = (_centerMarkerObject get3DENAttribute "position") select 0; private _objType = typeOf _centerMarkerObject; Mission_CENTER = _objPos; - diag_log format["CENTER defined by object %1 typeOf %2 located at %3",_obj,_objType,_objPos]; + diag_log format["CENTER defined by object %1 typeOf %2 located at %3",_centerMarkerObject,_objType,_objPos]; } else { diag_log format[" No object marking the center of the mission was found: using an object defined in 'objectAtMissionCenter' is recommended",getText(configFile >> "CfgVehicles" >> objectAtMissionCenter >> "displayName")]; diag_log format["Place such an object or a marker to ensure the mission is accurately stored and spawned"]; @@ -123,7 +112,7 @@ private["_m1","_markerPos","_markerType","_markerShape","_markerColor","_markerT pull info on the first marker found If Mission_CENTER was not set above then try to set it based on the first marker identified. */ - +private _markerLabel = ""; private _centerSet = false; if !(_markers isEqualTo []) then { @@ -165,7 +154,6 @@ if (Mission_CENTER isEqualTo [0,0,0]) then { if (_markers isEqualTo []) then { _markerPosition = Mission_CENTER; - _markerLabel = ""; _markerText = ""; _markerColor = ""; _markerShape = "ELLIPSE"; @@ -177,62 +165,75 @@ if (_markers isEqualTo []) then }; private _markerMissionName = "TODO: Set this to an appropriate name"; - -diag_log format["Line 175: _markerType = %1",_markerType]; private _m = format["Line 152: Mission_CENTER = %1",Mission_CENTER]; -systemChat _m; -diag_log _m; -diag_log format["Line 156: _objects = %1",_objects]; -GMS_defaultMissionLocations = if (toLower(missionNameSpace getVariable["GMS_missionSpawnMode","dynamic"]) isEqualTo "StaticWeapon") then {Mission_Center} else {[]}; -diag_log format["Line 161: GMS_defaultMissionLocations = %1",GMS_defaultMissionLocations]; - -// Pull the list of Turrets out of _objects -GMS_staticWeapons = []; -GMS_turretsATL = []; -private _turrets = _objects select {_x isKindOf "StaticWeapon"}; -{ - private _obj = _x; - //private _isGarrison = _obj getVariable["gmsIsGarrison",false]; - private _isGarrison = _obj call gms3DEN_fnc_isInside; - diag_log format["_exportDynamic (188): for StaticWeapon _obj %` _isGarrison = %2",_obj,_isGarrison]; - if (_isGarrison) then { - GMS_turretsATL pushBack _obj; - } else { - GMS_staticWeapons pushBack format[' ["%1",%2,%3]',typeOf _obj,(getPosATL _obj) vectorDiff Mission_CENTER,getDir _obj]; - }; -} forEach _turrets; - -diag_log format["Line 181: count GMS_staticWeapons = %1 | count GMS_turretsATL = %2",count GMS_staticWeapons, count GMS_turretsATL]; -diag_log format["Line 182: count _groups = %1",count _groups]; -GMS_units = []; -GMS_unitsATL = []; -{ - private _group = _x; - private _units = units _group; - { - private _unit = _x; - if (vehicle _unit isEqualTo _unit) then - { - //private _isGarrisoned = _unit getVariable["gmsIsGarrison",false]; - private _isGarrisoned = _unit call gms3DEN_fnc_isInside; - if (_isGarrisoned) then { - GMS_unitsATL pushBack _unit; - } else { - GMS_units pushBack _unit; - }; - }; - } forEach _units; - //GMS_units pushBack (units _x); -} forEach _groups; -diag_log format["Line 198: count GMS_units = %1 | count GMS_unitsATL = %2",count GMS_units, count GMS_unitsATL]; private _props = _objects select {!(_x isKindOf "ReammoBox_F") && (_x isKindOf "FloatingStructure_F" || _x isKindOf "Items_base_F" || _x isKindOf "Thing" || _x isKindOf "Static")}; -diag_log format["Line 201: count _props = %1",count _props]; -GMS_garrisonedBuildings = []; +GMS_staticWeapons = []; GMS_objectsToSpawn = []; GMS_missionSimpleObjects = []; -// Get list of garrisoned buildings based on their attributes +GMS_garrisonedBuildings = []; +GMS_unitsATL = []; +GMS_scubaGroups = []; +GMS_infantryGroups = []; +GMS_missionPatrolVehicles = []; +GMS_lootVehicles = []; +GMS_subPatrols = []; +GMS_ugvs = []; +GMS_uavs = []; + +/* Turrets First */ +private _allTurrets = _objects select {_x isKindOf "StaticWeapon"}; +{ + GMS_staticWeapons pushBack format[" %1, %2, %3, %4",typeOf _x, (getPosATL _x) vectorDiff Mission_CENTER, getDir _x, GMS_difficulty]; +} forEach _allTurrets; + +private _vehicles = _objects select {_x isKindOf "Car" || _x isKindOf "Tank" || _x isKindOf "Ship"}; +{ + private _obj = _x; + private _vehicleClass = getText(configFile >> "CfgVehicles" >> typeOf _obj >> "vehicleclass"); + private _isLoot = _obj getVariable["gmsIsLootVehicle",false]; + if (_isLoot) then + { + GMS_lootVehicles pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _obj,(getPosATL _obj) vectorDiff CENTER, '_crateLoot','_lootCounts',getDir _obj]; + } else { + if (_obj isKindOf "SDV_01_base_F") then { + GMS_subPatrols pushBack format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER,getDir _x]; + } else { + if (_vehicleClass isEqualTo "Autonomous") then + { + GMS_ugvs pushBack format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER,getDir _x]; + } else { + GMS_missionPatrolVehicles pushBack format[' ["%1",%2,%3]',typeOf _obj,(getPosATL _obj) vectorDiff Mission_CENTER,getDir _obj]; + }; + }; + }; +} forEach _vehicles; + +private _aircraft = _objects select {_x isKindOf "Air"}; +// Run through objects and format any for output +GMS_airPatrols = []; +{ + //_objects = _objects deleteAt (_objects find _x); + private _obj = _x; + private _vehicleClass = getText(configFile >> "CfgVehicles" >> typeOf _obj >> "vehicleclass"); + if (_vehicleClass isEqualTo "Autonomous") then { + GMS_uavs pushBack format[' ["%1",%2,%3]',typeOf _obj,(getPosATL _obj) vectorDiff Mission_CENTER,getDir _obj]; + } else { + GMS_airPatrols pushBack format[' ["%1",%2,%3]',typeOf _obj,(getPosATL _obj) vectorDiff Mission_CENTER,getDir _obj]; + }; +} forEach _aircraft; + +private _lootBoxes = _objects select {_x isKindOf "ReammoBox_F"}; +// Run through objects and put any Ammo Crates in a separate array +GMS_lootContainers = []; +{ + //_objects = _objects deleteAt (_objects find _x); + private _obj = _x; + GMS_lootContainers pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _obj,(getPosATL _obj) vectorDiff Mission_CENTER, '_crateLoot','_lootCounts',getDir _obj]; +} forEach _lootBoxes; + +private _props = _objects select {(_x isKindOf "FloatingStructure_F" || _x isKindOf "Items_base_F" || _x isKindOf "Thing" || _x isKindOf "Static")}; { private _obj = _x; if (_obj get3DENAttribute "objectIsSimple" select 0) then { @@ -243,174 +244,88 @@ GMS_missionSimpleObjects = []; ((_obj get3DENAttribute "rotation") select 0) select 2 ]; } else { - private _isGarrison = _obj getVariable["gmsIsGarrison",false]; - diag_log format["_exportDynamic(207): for Object %1 typeOf %3 _isGarrison = %2",_obj,_isGarrison,getText(configFile >> "CfgVehicles" >> typeOf _obj >> "displayName")]; - private _turrets = []; - private _units = []; - { - private _building = [_x] call gms3DEN_fnc_buildingContainer; - diag_log format["Line 225: _obj = %1 | _building = %2", _obj,_building]; - if (_obj isEqualTo _building) then { - private _unit = _x; - private _pos = getPosATL _unit; - private _center = getPosATL _building; - private _offset = _pos vectorDiff _center; - private _dir = getDir _unit; - _units pushBack [_offset,_dir]; - }; - } forEach GMS_unitsATL; - diag_log format["Line 234: for building %1 located at %2 _units = %3",_building,getPos _building,_units]; - { - private _building = [_x] call gms3DEN_fnc_buildingContainer; - diag_log format["Line 225: _obj = %1 | _building = %2", _obj,_building]; - if (_obj isEqualTo _building) then { - private _tur = _x; - private _pos = getPosATL _tur; - private _dir = getDir _tur; - private _center = getPosATL _building; - private _offset = _center vectorDiff _pos; - _turrets pushBack [format['%1',typeOf _tur],_offset,_dir]; - }; - } forEach GMS_turretsATL; - diag_log format["Line 246: for building %1 located at %2 _turrets = %3",_building, getPos _building,_turrets]; - - if ((_turrets isEqualTo []) && (_units isEqualTo [])) then - { - /* - Treat this like an ordinary building - */ - private _allowDamage = (_obj get3DENAttribute "allowDamage") select 0; - private _enableSimulation = (_obj get3DENAttribute "enableSimulation") select 0; - diag_log format["_Line 278: _building %1 | _allowDamage %2 | _enableSimulation %3",_obj,_allowDamage,_enableSimulation] ; - GMS_objectsToSpawn pushBack format[' ["%1",%2,%3,[%4,%5]]', - typeOf _obj, - (getPosATL _obj) vectorDiff Mission_CENTER,getDir _obj, - _allowDamage, - _enableSimulation - ]; - } else { - /* - Treat this like a garrisoned building - */ - private _building = _obj; - private _allowDamage = (_building get3DENAttribute "allowDamage") select 0; - private _enableSimulation = (_building get3DENAttribute "enableSimulation") select 0; - diag_log format["Line 249: _building %1 | damage %2 | simulation %3",_allowDamage,_enableSimulation]; - _buildingGarrisonATL = [ - format["%1", - typeOf _building], - getPosATL _building, - getDir _building, - _allowDamage, - _enableSimulation, - _turrets, - _units - ]; - GMS_garrisonedBuildings pushBack _buildingGarrisonATL; - diag_log format["Line 274: count ", count GMS_garrisonedBuildings, [_buildingGarrisonATL,_configuredStatics,_configuredUnits]]; - }; + private _allowDamage = (_obj get3DENAttribute "allowDamage") select 0; + private _enableSimulation = (_obj get3DENAttribute "enableSimulation") select 0; + GMS_objectsToSpawn pushBack format[' ["%1",%2,%3,[%4,%5]]', + typeOf _obj, + (getPosATL _obj) vectorDiff Mission_CENTER, + getDir _obj, + _allowDamage, + _enableSimulation + ]; }; } forEach _props; -private _vehicles = _objects select {_x isKindOf "Car" || _x isKindOf "Tank" || _x isKindOf "Ship"}; -GMS_missionPatrolVehicles = []; -GMS_lootVehicles = []; -GMS_subPatrols = []; +private _men = []; +private _menInside = []; { - private _obj = _x; - private _isLoot = _obj getVariable["gmsIsLootVehicle",false]; - diag_log format["_exportDynamic (227): for LandVehicle %1 _isLoot = %2",_obj,_isLoot]; - if (_isLoot) then + private _group = _x; + private _units = units _group; + { + private _unit = _x; + private _onFoot = if (vehicle _unit isEqualTo _unit) then {true} else {false}; + private _isGarrisoned = _unit call gms3DEN_fnc_isInside; + private _isSurfaceWater = surfaceIsWater (getPosATL _unit); + if (_onFoot) then { - GMS_lootVehicles pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _obj,(getPosATL _obj) vectorDiff CENTER, '_crateLoot','_lootCounts',getDir _obj]; - } else { - if (_obj isKindOf "SDV_01_base_F") then { - GMS_subPatrols pushBack format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff Mission_CENTER,getDir _x]; + if (_isGarrisoned) then + { + GMS_unitsATL pushBack format[' [%1,%2,%3,"%4"]',(getPosATL _unit) vectorDiff Mission_CENTER, getDir _unit, GMS_difficulty]; } else { - GMS_missionPatrolVehicles pushBack format[' ["%1",%2,%3]',typeOf _obj,(getPosATL _obj) vectorDiff Mission_CENTER,getDir _obj]; + if (_isSurfaceWater) then { + GMS_scubaGroups pushBack format[' [%1,%2,%3,"%4"]',(getPosATL _unit) vectorDiff Mission_CENTER,GMS_minAI,GMS_maxAI,GMS_difficulty]; + } else { + GMS_infantryGroups pushBack format[' [%1,%2,%3,"%4"]',(getPosATL _unit) vectorDiff Mission_CENTER,GMS_minAI,GMS_maxAI,GMS_difficulty]; + }; }; }; -} forEach _vehicles; + } forEach _units; +} forEach _groups; -private _aircraft = _objects select {_x isKindOf "Air"}; -// Run through objects and format any for output -GMS_airPatrols = []; -{ - private _obj = _x; - GMS_airPatrols pushBack format[' ["%1",%2,%3]',typeOf _obj,(getPosATL _obj) vectorDiff Mission_CENTER,getDir _obj]; -} forEach _aircraft; - -diag_log format["Line 254: GMS_difficulty = %1 | GMS_minAI = %2 | GMS_maxAI = %3", GMS_difficulty, GMS_minAI, GMS_maxAI]; -// Run through groups and sort them based on whether they still have units and if they are/are not in a building. -GMS_infantryGroups = []; -GMS_scubaGroups = []; -{ - private _unit = _x; - private _isInVehicle = if (vehicle _unit isEqualTo _unit) then {false} else {true}; - private _isSurfaceWater = surfaceIsWater (position _unit); - diag_log format["Line 261: _unit = %1 | _isInVehicle = %2 | _isSurfaceWater = %3",_unit, _isInVehicle, _isSurfaceWater]; - if !(_isInVehicle) then { - if (_isSurfaceWater) then { - GMS_scubaGroups pushBack format[' [%1,%2,%3,"%4"]',(getPosATL _unit) vectorDiff Mission_CENTER,GMS_minAI,GMS_maxAI,GMS_difficulty]; - } else { - GMS_infantryGroups pushBack format[' [%1,%2,%3,"%4"]',(getPosATL _unit) vectorDiff Mission_CENTER,GMS_minAI,GMS_maxAI,GMS_difficulty]; - }; - }; -} forEach GMS_units; - -diag_log format["_exportDynamic (288): count _objects = %1",count _objects]; // are there any objects left to process ? - -private _lootBoxes = _objects select {_x isKindOf "ReammoBox_F"}; -// Run through objects and put any Ammo Crates in a separate array -GMS_lootContainers = []; -{ - private _obj = _x; - GMS_lootContainers pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _obj,(getPosATL _obj) vectorDiff Mission_CENTER, '_crateLoot','_lootCounts',getDir _obj]; -} forEach _lootBoxes; - -diag_log format["_exportDynamic (303): count _objects = %1",count _objects]; // did we capture them all? - -diag_log format["exportDynamic Line 489: all data organized, formating text output"]; private _lines = []; private _lineBreak = toString [10]; _lines pushBack "/*"; -_lines pushBack " Dynamic Mission Generated"; +_lines pushBack format[" %1 Mission Generated",GMS_missionSpawnMode]; _lines pushBack " Using 3DEN Plugin for GMS by Ghostrider"; _lines pushBack format[" %1",['dynamic'] call gms3DEN_fnc_versionInfo]; _lines pushBack " By Ghostrider-GRG-"; _lines pushBack "*/"; _lines pushBack ""; -//GMS_missionLocations -switch (GMS_missionLocations) do -{ - case 'random': {GMS_defaultMissionLocations = []}; - case 'fixed': {GMS_defaultMissionLocations = [Mission_CENTER]}; -}; +GMS_defaultMissionLocations = []; +if (GMS_missionSpawnMode isEqualTo "Static") then {GMS_defaultMissionLocations = Mission_CENTER}; + _lines pushBack '#include "\GMS\Compiles\Init\GMS_defines.hpp"'; _lines pushBack '#include "\GMS\Missions\GMS_privateVars.sqf" '; _lines pushBack ""; _lines pushBack format['_difficulty = "%1";',GMS_difficulty]; _lines pushBack format["_chanceMissionSpawned = %1;",GMS_chanceMissionSpawned]; _lines pushBack format["_defaultMissionLocations = %1;",GMS_defaultMissionLocations]; -_lines pushBack format["_maxMissionRespawns = -1; // Chage this to either zero for no respawns or a positive number if you want to limit the number of times a mission spawns at the same location"]; - -_lines pushBack format['_markerLabel = "%1";',_markerLabel]; -_lines pushBack format['_markerType = %1;',[_markerType,_markerSize,_markerBrush]]; -_lines pushBack format['_markerColor = "%1";',_markerColor]; -_lines pushBack format['_markerMissionName = "%1";',_markerMissionName]; - +_lines pushBack "_maxMissionRespawns = -1;"; _lines pushBack format['_startMsg = "%1";',GMS_dynamicStartMessage]; _lines pushBack format['_endMsg = "%1";',GMS_dynamicEndMessage]; -_lines pushBack format['_markerMissionName = "%1";',_markerText]; + +_lines pushBack format['_markerLabel = "%1";',_markerLabel]; +_lines pushBack format['_markerColor = "%1";',_markerColor]; +_lines pushBack format['_markerText = "%1";',_markerText]; +_lines pushBack format['_markerMissionName = "%1";',_markerMissionName]; + _lines pushBack format['_crateLoot = GMS_BoxLoot_%1;',GMS_difficulty]; _lines pushBack format['_lootCounts = GMS_lootCounts%1;',GMS_difficulty]; _lines pushBack ""; +_lines pushBack "/*"; +_lines pushBack " Depricated Variable Included for Backwards Compatibility with Existing Missions"; +_lines pushBack "*/"; _lines pushBack "_garrisonedBuilding_ATLsystem = ["; -_lines pushBack (GMS_garrisonedBuildings joinString (format[",%1", _lineBreak])); -_lines pushBack "];"; _lines pushBack ""; +_lines pushBack "];"; +_lines pushBack "/*"; +_lines pushBack " Depricated Variable Included for Backwards Compatibility with Existing Missions"; +_lines pushBack "*/"; +_lines pushBack "_garrisonedBuildings_BuildingPosnSystem = ["; +_lines pushBack ""; +_lines pushBack "];"; _lines pushBack "_missionLandscape = ["; _lines pushback (GMS_objectsToSpawn joinString (format [",%1", _lineBreak])); _lines pushBack "];"; @@ -427,6 +342,9 @@ _lines pushBack "_missionPatrolVehicles = ["; _lines pushback (GMS_missionPatrolVehicles joinString (format [",%1", _lineBreak])); _lines pushBack "];"; _lines pushBack ""; +_lines pushBack "_missionUGVs = ["; +_lines pushBack (GMS_ugvs joinString (format [",%1", _lineBreak])); +_lines pushBack "];"; _lines pushBack "_submarinePatrolParameters = ["; _lines pushback (GMS_subPatrols joinString (format [",%1", _lineBreak])); _lines pushBack "];"; @@ -435,6 +353,9 @@ _lines pushBack "_airPatrols = ["; _lines pushback (GMS_airPatrols joinString (format [",%1", _lineBreak])); _lines pushBack "];"; _lines pushBack ""; +_lines pushBack "_missionUAVs = ["; +_lines pushBack (GMS_uavs joinString (format [",%1", _lineBreak])); +_lines pushBack "];"; _lines pushBack "_missionEmplacedWeapons = ["; _lines pushback (GMS_staticWeapons joinString (format [",%1", _lineBreak])); _lines pushBack "];"; @@ -443,6 +364,10 @@ _lines pushBack "_missionGroups = ["; _lines pushback (GMS_infantryGroups joinString (format [",%1", _lineBreak])); _lines pushBack "];"; _lines pushBack ""; +_lines pushBack "_missionGarrisonedGroups = ["; +_lines pushBack (GMS_unitsATL joinString (format [",%1", _lineBreak])); +_lines pushBack "];"; +_lines pushBack ""; _lines pushBack "_scubaGroupParameters = ["; _lines pushback (GMS_scubaGroups joinString (format [",%1", _lineBreak])); _lines pushBack "];"; @@ -452,7 +377,7 @@ _lines pushback (GMS_lootContainers joinString (format [",%1", _lineBreak])); _lines pushBack "];"; _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 " Use the parameters below to customize your mission - see the template or GMS_configs.sqf for details about each them"; _lines pushBack "*/"; _lines pushBack format["_chanceHeliPatrol = GMS_chanceHeliPatrol%1;",GMS_difficulty]; _lines pushBack format["_noChoppers = GMS_noPatrolHelis%1;",GMS_difficulty]; @@ -460,12 +385,12 @@ _lines pushBack format["_missionHelis = GMS_patrolHelis%1;",GMS_difficulty]; _lines pushBack format["_chancePara = GMS_chancePara%1;",GMS_difficulty]; _lines pushBack format["_noPara = GMS_noPara%1;",GMS_difficulty]; _lines pushBack format["_paraTriggerDistance = 400;"]; -//_lines pushBack format["_paraSkill = '%1';",0.7]; +_lines pushBack format["_paraSkill = %1;",0.7]; _lines pushBack format["_chanceLoot = 0.0;"]; _lines pushBack format["_paraLoot = GMS_BoxLoot_%1;",GMS_difficulty]; _lines pushBack format["_paraLootCounts = GMS_lootCounts%1;",GMS_difficulty]; _lines pushBack format['_missionLandscapeMode = "precise";']; -_linse pushBack "_useMines = GMS_useMines;"; +_lines pushBack "_useMines = GMS_useMines;"; _lines pushBack "_uniforms = GMS_SkinList;"; _lines pushBack "_headgear = GMS_headgear;"; _lines pushBack "_vests = GMS_vests;"; @@ -473,26 +398,20 @@ _lines pushBack "_backpacks = GMS_backpacks;"; _lines pushBack "_sideArms = GMS_Pistols;"; _lines pushBack format['_spawnCratesTiming = "%1;"',GMS_spawnCratesTiming]; _lines pushBack format['_loadCratesTiming = "%1;"',GMS_loadCratesTiming]; -diag_log format["Line 520: typeName GMS_missionEndCondition = %1 | GMS_missionEndCondition = = %2",typeName GMS_missionEndCondition,GMS_missionEndCondition]; _lines pushBack format['_endCondition = %1;', GMS_missionEndCondition]; _lines pushBack format["_minNoAI = GMS_MinAI_%1;",GMS_difficulty]; _lines pushBack format["_maxNoAI = GMS_MaxAI_%1;",GMS_difficulty]; _lines pushBack format["_noAIGroups = GMS_AIGrps_%1;",GMS_difficulty]; _lines pushBack format["_noVehiclePatrols = GMS_SpawnVeh_%1;",GMS_difficulty]; _lines pushBack format["_noEmplacedWeapons = GMS_SpawnEmplaced_%1;",GMS_difficulty]; -_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 "_submarinePatrols = 0;"; +_lines pushBack "_scubaPatrols = 0;"; _lines pushBack ""; - _lines pushBack '#include "\GMS\Compiles\Missions\GMS_fnc_missionSpawner.sqf";'; -diag_log ["dynamic"] call blck3EDEN_fnc_versionInfo; uiNameSpace setVariable ["Display3DENCopy_data", ["dynamicMission.sqf", _lines joinString _lineBreak]]; (findDisplay 313) createdisplay "Display3DENCopy"; -private _m = format["exportDynamic.sqf: reached line 367"]; -systemChat _m; -diag_log _m; _m = "Exported Mission copied to clipboard"; systemChat _m; -diag_log _m; \ No newline at end of file +diag_log _m; diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_initializeAttributes.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_initializeAttributes.sqf index 7e3a4c6..f705314 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_initializeAttributes.sqf +++ b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_initializeAttributes.sqf @@ -4,7 +4,7 @@ Copyright 2020 */ - +diag_log format["Initializing GMS_RC 3DEN Plugin %1",call gms3DEN_fnc_versionInfo]; GMS_difficulty = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "defaultMissionDifficulty"); diag_log format["configs returned defaultMissionDifficulty = %1",GMS_difficulty]; GMS_chanceMissionSpawned = 1.0; @@ -22,4 +22,7 @@ gms3DENGarrisonTexture = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> diag_log format["configs returned %1 as the color for garrisoned objects",gms3DENGarrisonTexture]; gms3DENlootVehicleTexture = getText(configFile >> "CfgGMS3DEN" >> "CfgDefaults" >> "colorLootObject"); diag_log format["configs returned %1 as the color for loot objects such as vehicles",gms3DENlootVehicleTexture]; -diag_log format["Mission Attributes Initialized for GMS at time %1",diag_tickTime]; \ No newline at end of file +gms3DEN_useGarrisonATL = false; +diag_log format["gms3DEN_useGarrisonATL set to default value of %1",gms3DEN_useGarrisonATL]; +GMS_missionSpawnMode = "Dynamic"; +diag_log format["Mission Attributes Initialized for GMS at time %1",diag_tickTime]; diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_isInside.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_isInside.sqf index 51cfbe5..b2707a1 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_isInside.sqf +++ b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_isInside.sqf @@ -6,7 +6,6 @@ */ params["_u"]; -diag_log format["fn_isInside: _u = %1",_u]; private _pos = getPosASL _u; private _above = AGLToASL [_pos select 0, _pos select 1, (_pos select 2) + 100]; @@ -14,6 +13,6 @@ private _below = AGLtoASL [_pos select 0, _pos select 1, (_pos select 2) - 10]; private _objAbove = lineIntersects [_pos, _above, _u,_u]; private _objBelow = lineIntersects [_pos, _below, _u,_u]; private _isInside = if (_objAbove || _objBelow) then {true} else {false}; -diag_log format["fn_isInside: _u = %4 | _objAbove = %1 | _objBelow = %2 | _isInside %3",_objAbove,_objBelow,_isInside,_u]; + _isInside diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_toggleStaticSpawns.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_toggleStaticSpawns.sqf index ef436b4..6506cdb 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_toggleStaticSpawns.sqf +++ b/@GMS_3EDEN/addons/3DEN_plugin/Core/fn_toggleStaticSpawns.sqf @@ -1,6 +1,9 @@ params["_mode"]; -_m = format["GMS_missionSpawnMode set to %1",_mode]; -missionNameSpace setVariable["GMS_missionSpawnMode",_mode]; +GMS_missionSpawnMode = _mode; +_m = format["_toggleStaticSpawns: _mode = %1",_mode]; +diag_log _m; +systemChat _m; +_m = format["_toggleStaticSpawns: GMS_missionSpawnMode = %1",GMS_missionSpawnMode]; diag_log _m; systemChat _m; diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Static/pullMarkerInfo.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Static/pullMarkerInfo.sqf deleted file mode 100644 index a32417b..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/Static/pullMarkerInfo.sqf +++ /dev/null @@ -1,45 +0,0 @@ -diag_log format["<< ---- START %1 ---- >>",diag_tickTime]; - -all3DENEntities params ["_objects","_groups","_triggers","_systems","_waypoints","_markers","_layers","_comments"]; -private["_m1","_markerPos","_markerType","_markerShape","_markerColor","_markerText","_markerBrush","_markerSize","_markerAlpha"]; -if (_markers isEqualTo []) then -{ - diag_log "No Marker Found, no Marker Definitions Will Be generated"; -} else { - private _m1 = _markers select 0; - diag_log format["_m1 = %1",_m1]; - _markerPosition = _m1 get3DENAttribute "Position"; // Returns expected value - _markerText = _m1 get3DENAttribute "Text"; // Returns expected value - _markerColor = _m1 get3DENAttribute "baseColor"; //Returns Null - _markerShape = (_m1 get3DENAttribute "markerType") select 0; // Returns [-1] if not a rectangular or elipsoid marker] - _markerAlpha = _m1 get3DENAttribute "alpha"; - _markerType = (_m1 get3DENAttribute "itemClass") select 0; // Returns "" if not an icon type marker - _markerBrush = _m1 get3DENAttribute "brush"; - _markerSize = _m1 get3DENAttribute "size2"; - _markerRotation = _m1 get3DENAttribute "rotation"; - diag_log format["typeName _markerType = %1 | markerType = %2 | typeName _markerShape = %3 | markerShape = %4", typeName _markerType, _markerType, typeName _markerShape, _markerShape]; - diag_log format["typeName _markerPosition = %1 | _markerPosition = %2 | typeName _markerRotation = %3 | _markerRotation = %4",typeName _markerPosition,_markerPosition,typeName _markerRotation,_markerRotation]; -}; - - /* - if (_markerShape == -1) then - { - // The marker is an icon - - } else { - _markerSize = _m1 get3DENAttribute "size2"; // Returns Null - _markerBrush = _m1 get3DENAttribute " brush"; - }; - - /* -_lines pushBack format["_markerPosition = %1",_markerPosition]; -_lines pushBack format["_markerText = %1",_markerText]; -_lines pushBack format["_markerColor = %1",_markerColor]; -_lines pushBack format["_markerType = %1", _markerType]; -_lines pushBack format["_markerShape = %1",_markerShape]; -_lines pushBack format["_markerAlpha = %1",_markerAlpha]; -_lines pushBack format["_markerBrush = %1",_markerBrush]; -_lines pushBack format["_markerSize = %1",_markerSize]; -_lines pushBack format["_markerRotation = %1",_markerRotation]; -*/ - */ \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Static/scanAttributes.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Static/scanAttributes.sqf deleted file mode 100644 index 1530fcd..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/Static/scanAttributes.sqf +++ /dev/null @@ -1,9 +0,0 @@ - - -all3DENEntities params ["_objects"]; -{ - private _garrison = _x getVariable["gmsIsGarrison",false]; - _m = format["scanAttributes: object %1 | displayName %2 | _garrison %3",_x, getText(configFile >> "CfgVehicles" >> typeOf _x >> "displayName"), _garrison]; - systemChat _m; - diag_log _m; -} forEach _objects; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Static/setCenterAtPlayer.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Static/setCenterAtPlayer.sqf deleted file mode 100644 index 6db9def..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/Static/setCenterAtPlayer.sqf +++ /dev/null @@ -1 +0,0 @@ -CENTER = getPos player; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/Static/template.sqf b/@GMS_3EDEN/addons/3DEN_plugin/Static/template.sqf deleted file mode 100644 index a691f02..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/Static/template.sqf +++ /dev/null @@ -1,81 +0,0 @@ -/* - Mission Template by Ghostrider [GRG] - Mission Compositions by Bill prepared for ghostridergaming - Copyright 2016 - Last modified 3/20/17 - - -------------------------- - 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"; -#include "\q\addons\custom_server\Missions\privateVars.sqf"; - -//diag_log "[blckeagls] Spawning Green Mission with template = default"; -_crateLoot = blck_BoxLoot_Green; -_lootCounts = bGMS_lootCountsGreen; -_startMsg = "An enemy research center was sighted in a nearby sector! Check the Green marker on your map for the location!"; -_endMsg = "The Sector at the Green Marker is under survivor control!"; - -_markerMissionName = "Research Center"; -_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise" - -////////// -// Past the output of the script here - - -////////// -// The lines below define additional variables you may wish to configure. - - -// Change _useMines to true/false below to enable mission-specific settings. -_useMines = blck_useMines; -_minNoAI = blck_MinAI_Green; -_maxNoAI = blck_MaxAI_Green; -_noAIGroups = blck_AIGrps_Green; -_noVehiclePatrols = blck_SpawnVeh_Green; -_noEmplacedWeapons = blck_SpawnEmplaced_Green; -_minNoAI = blck_MinAI_Blue; // Setting this in the mission file overrides the defaults such as blck_MinAI_Blue -_maxNoAI = blck_MaxAI_Blue; // Setting this in the mission file overrides the defaults -_noAIGroups = blck_AIGrps_Blue; // Setting this in the mission file overrides the defaults -_noVehiclePatrols = blck_SpawnVeh_Blue; // Setting this in the mission file overrides the defaults -_noEmplacedWeapons = blck_SpawnEmplaced_Blue; // Setting this in the mission file overrides the defaults -// Change _useMines to true/false below to enable mission-specific settings. -_useMines = blck_useMines; // Setting this in the mission file overrides the defaults -_uniforms = blck_SkinList; // Setting this in the mission file overrides the defaults -_headgear = blck_headgear; // Setting this in the mission file overrides the defaults -_vests = blck_vests; -_backpacks = blck_backpacks; -_weaponList = ["blue"] call blck_fnc_selectAILoadout; -_sideArms = blck_Pistols; -_chanceHeliPatrol = blck_chanceHeliPatrolBlue; // Setting this in the mission file overrides the defaults -_noChoppers = blck_noPatrolHelisBlue; -_missionHelis = blck_patrolHelisBlue; - -_chancePara = blck_chanceParaBlue; // Setting this in the mission file overrides the defaults -_noPara = blck_noParaBlue; // Setting this in the mission file overrides the defaults -_paraTriggerDistance = 400; // Distance from mission at which a player triggers these reinforcements and any supplemental loot. // To have paras spawn at the time the mission spawns with/without accompanying loot set this to 0. -_paraSkill = "red"; // Choose any skill you like; bump up skill or add AI to justify more valuable loot. -_chanceLoot = 0.0; -_paraLoot = blck_BoxLoot_Blue; -_paraLootCounts = bGMS_lootCountsRed; // Throw in something more exotic than found at a normal blue mission. - -_spawnCratesTiming = GMS_spawnCratesTiming; // Choices: "atMissionSpawnGround","atMissionEndGround","atMissionEndAir". - // Crates spawned in the air will be spawned at mission center or the position(s) defined in the mission file and dropped under a parachute. - // This sets the default value but can be overridden by defining _spawnCrateTiming in the file defining a particular mission. -_loadCratesTiming = GMS_loadCratesTiming; // valid choices are "atMissionCompletion" and "atMissionSpawn"; - // Pertains only to crates spawned at mission spawn. - // This sets the default but can be overridden for specific missions by defining _loadCratesTiming - - // Examples: - // To spawn crates at mission start loaded with gear set GMS_spawnCratesTiming = "atMissionSpawnGround" && GMS_loadCratesTiming = "atMissionSpawn" - // To spawn crates at mission start but load gear only after the mission is completed set GMS_spawnCratesTiming = "atMissionSpawnGround" && GMS_loadCratesTiming = "atMissionCompletion" - // To spawn crates on the ground at mission completion set GMS_spawnCratesTiming = "atMissionEndGround" // Note that a loaded crate will be spawned. - // To spawn crates in the air and drop them by chutes set GMS_spawnCratesTiming = "atMissionEndAir" // Note that a loaded crate will be spawned. -_endCondition = GMS_missionEndCondition; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear" - // Setting this in the mission file overrides the defaults -//_timeOut = -1; -#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@GMS_3EDEN/addons/3DEN_plugin/To Do List b/@GMS_3EDEN/addons/3DEN_plugin/To Do List deleted file mode 100644 index 73ea1c3..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/To Do List +++ /dev/null @@ -1,39 +0,0 @@ - -Build 10 -Test that mission center is defined in the following cases: -- no marker and no object pre-identified as defining the mission center: works. -- no marker and an object pre-identified as defining the mission center: works. -- the mission marker is present with a text label -- the mission marker is present without a text label - -Build 11 -- reorganize and rename the Cfg Files in a way that makes more sense. Done. -- test that coding of static and random spawn positions is properly done: Done. -- Moved menus for mission configuration to the Attributes Menu - -Build 12. --Add option to set an attribute for loot vehicles. --Check that all necessary default configs are present and consistently spelled thorughout the code. - -Build 13 -Test that mission objects are added to proper arrays excluding units and garrisoned buildings. - -- wheeled vehicles: working -- tracked vehicles other than tanks: working -- tanks: working -- helis and planes: working -- surface vessels: working -- subs: working -- turrets - working for turrets outisde of any structure. - -- loot crates -- simple objects -- anything that is not a building (landscape) -- everything that is a building - - -Long-term TODO: - - - - diff --git a/@GMS_3EDEN/addons/3DEN_plugin/To Do List copy b/@GMS_3EDEN/addons/3DEN_plugin/To Do List copy deleted file mode 100644 index 6fb66a5..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/To Do List copy +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/@GMS_3EDEN/addons/3DEN_plugin/changlog.txt b/@GMS_3EDEN/addons/3DEN_plugin/changlog.txt index 628db0c..743e577 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/changlog.txt +++ b/@GMS_3EDEN/addons/3DEN_plugin/changlog.txt @@ -2,6 +2,7 @@ Long-term TODO: +Allow Users to Define Loot Vehicles diff --git a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DEN copy 2.h b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DEN copy 2.h deleted file mode 100644 index 3d452d1..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DEN copy 2.h +++ /dev/null @@ -1,56 +0,0 @@ - - -class cfg3DEN -{ - class EventHandlers - { - class gms3DEN - { - OnMissionLoad = "diag_log format['Mission loaded at %1',diag_tickTime]; call gms3DEN_fnc_initialize"; - OnMissionNew = "diag_log format['New Mission Created at %1',diag_tickTime]; call gms3DEN_fnc_initialize"; - //onHistoryChange = "call gms3DEN_fnc_updateObjects"; - }; - }; - - class Attributes - { - class Default; - class Title: Default - { - class Controls - { - class Title; - }; - }; - class CheckBox: default{ - class Controls - { - class Title; - class Value; - }; - }; - }; - class Object - { - class AttributeCatories - { - class gmsAttributes - { - displayName = "GMS Settings"; - collapsed = 1; - class Attributes - { - class lootVehicle - { - displayName = "Loot Vehicle"; - toolTip = "Set as Loot Vehicle"; - property = "gmsLootVehicle"; - control = "CheckBox"; - defaultValue = "false"; - condition = "objectVehicle"; - }; - }; - }; - }; - }; -}; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DEN copy.h b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DEN copy.h deleted file mode 100644 index 9419608..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DEN copy.h +++ /dev/null @@ -1,149 +0,0 @@ - - - -class cfg3DEN -{ - class EventHandlers - { - class gms3DEN - { - OnMissionLoad = "diag_log format['Mission loaded at %1',diag_tickTime]; call gms3DEN_fnc_initialize"; - OnMissionNew = "diag_log format['New Mission Created at %1',diag_tickTime]; call gms3DEN_fnc_initialize"; - //onHistoryChange = "call gms3DEN_fnc_updateObjects"; - }; - }; - class Mission - { - class gms3DENmissionSettings - { - displayName = "Mission Settings"; - // display = "Display3DENEditAttributesPreview"; // Optional - display for attributes window. Must have the same structure and IDCs as the default Display3DENEditAttributes - class AttributeCategories - { - class gms3DENCategory - { - class Attributes - { - class missionStartMessage - { - property = "gmsMissionStartMessage"; - }; - class missionEndMessage - { - property = "gmsMissionEndMessage"; - }; - class missionDifficulty - { - property = "gmsMissionDifficulty"; - }; - }; - }; - }; - }; - }; - class Attributes - { - class Default; - - class Title: Default - { - class Controls - { - class Title; - }; - }; - - class gms3DENCheckBoxGarrisonsControl: Title - { - onload = "call gms3DEN_fnc_onLoadGarrison;"; - onUnload = "diag_log 'onUnload for garrisons'"; - onCheckedChanged = "diag_log format['onCheckedChanged %1',_this];"; - attributeLoad = "(_this controlsGroupCtrl 100) ctrlSetText _value; [_this,_value] call gms3DEN_fnc_onAttributeLoadGarrison;"; - attributeSave = "[cbChecked (this controlsGroupCtrl 100)] call gms3DEN_fnc_onAttributeSaveGarrison;"; - }; - class gmsGarrisonColorControl: Title - { - onload = "call gms3DEN_fnc_onLoadGarrisonColor;"; - //onUnload = "diag_log 'onUnload for garrisons'"; - attributeLoad = "[_this,_value] call gms3DEN_fnc_onAttributeLoadGarrisonColor;"; - attributeSave = "[_this,_value] call gms3DEN_fnc_onAttributeSaveGarrisonColor;"; - }; - class gms3DENCheckboxLootVehControl: Title - { - onload = "call gms3DEN_fnc_onLoadLootVeh;"; - //onUnload = "diag_log 'onUnload for loot veh'"; - onAttributeLoad = "[_this,_value] call gms3DEN_fnc_onAttributeLoadLootVeh;"; - onAttributeSave = "[_this,_value] call gms3DEN_fnc_onAttributeSaveLootVeh;"; - }; - class gms3DENCLootVehicleColorControl: Title - { - onload = "call gms3DEN_fnc_onLoadLootVehColor;"; - //onUnload = "diag_log 'onUnload for loot veh'"; - onAttributeLoad = "[_this,_value] call gms3DEN_fnc_onAttributeLoadLootVehColor;"; - onAttributeSave = "[_this,_value] call gms3DEN_fnc_onAttributeSaveLootVeh;"; - }; - }; - - class Object - { - class AttributeCategories - { - class gms3DENgarrisonedAttribute - { - displayName = "Garrisons"; - collapsed = 1; - class Attributes - { - class GarrisonedAttribute - { - displayName = "Garrison"; - tooltip = "Mark as part of a garrison"; - property = "gmsIsGarrison"; - control = "gms3DENCheckBoxGarrisonsControl"; - //condition = ""; - expression = "_this setVariable ['%s',_value];"; - defaultValue = "false"; - }; - class GarrisonedColorAttribute - { - displayName = "Color On"; - tooltip = "Check to color this garrisoned object" - property = "gmsGarrisonColor"; - control = "CheckBox"; - //condition = ""; - expression = "_this setVariable ['%s',_value];"; - defaultValue = "false"; - }; - }; - }; - class gms3DENlootVehicles - { - displayName = "Loot Vehicle"; - collapsed = 1; - class Attributes - { - class lootVehicleAttribute - { - displayName = "Loot Vehicle"; - tooltip = "Set box to checked for loot vehicles"; - property = "gmsIsLootVehicle"; - control = "CheckBoz"; - //condition = ""; - expression = "_this setVariable ['%s',_value];"; - defaultValue = "false"; - }; - class lootVehicleColorAttribute - { - displayName = "Color On"; - tooltip = "Check box to color this loot vehicle"; - property = "gmsLootVehicleColor"; - control = "CheckBox"; - //condition = ""; - expression = "_this setVariable ['%s',_value];"; - defaultValue = "false"; - }; - }; - }; - }; - }; -}; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENDisplay.h b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENDisplay.h index 036dafb..eca79ea 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENDisplay.h +++ b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENDisplay.h @@ -16,158 +16,34 @@ class display3DEN // ************************************************************ items[] += {"GMS_configure","GMS_export","GMS_support"}; - /* - The menu for exporting missions is defined here - */ - class GMS_export { - items[]= { - "GMS_exportDynamic" - }; - text = "Export Mission"; - toolTip = "Export GMS Missions"; - }; - class GMS_exportDynamic { - text = "Export Mission"; - //toolTip = "Export Dynamic Mission"; - action = "call gms3DEN_fnc_exportDynamic"; - picture = "\a3\3DEN\Data\Displays\Display3DEN\ToolBar\save_ca.paa"; - }; - - /* - menus for those seeking support are here - */ - class GMS_support { - items[] = { - "GMS_help", - "GMS_about" - }; - text = "Plugin Support"; - }; - class GMS_help { - text = "Help"; - action = "call gms3DEN_fnc_Help"; - //picture = "\a3\3DEN\Data\Displays\Display3DEN\ToolBar\save_ca.paa"; - }; - class GMS_about { - text = "3EDEN Plugin Version 1.0 for GMS by Ghostrider-GRG-"; - action = "call blck3EDEN_fnc_about"; - }; - - /* All menus for configuring a GMS mission are defined here */ class GMS_configure { + text = "GMS Settings"; + toolTip = "Adjust Settings"; items[] = { - "GMS_difficulty", - "GMS_crateSpawn", - "GMS_lootSpawn", - "GMS_location_Respawns", - "GMS_MissionCompletionMode", - "GMS_missionSpawnChance", - "GMS_minAI", - "GMS_maxAI" - //"GMS_editMissionSettings" + "GMS_missions", + "GMS_units" + //"GMS_plugin" }; - text = "Configure Mission"; - toolTip = "Adjust Mission Settings"; }; - - class GMS_maxAI + + + class GMS_missions { - text = "Max AI per Infantry Group"; - tooltip = "set the maximum AI per Infantry Group"; + text = "Mission Settings"; + tooltip = "Adjust Mission Settings"; items[] = { - "GMS_maxThree", - "GMS_maxFour", - "GMS_maxFive", - "GMS_maxSix", - "GMS_maxEight", - "GMS_maxNine" + "GMS_static", + "GMS_missionSpawnChance", + "GMS_difficulty", + "GMS_MissionCompletionMode", + "GMS_crateSpawn", + "GMS_lootSpawn" }; }; - class GMS_maxThree - { - text = "set max AI = 3"; - action = "[3] call gms3DEN_fnc_setMaxAI"; - }; - class GMS_maxFour - { - text = "set max AI = 4"; - action = "[4] call gms3DEN_fnc_setMaxAI"; - }; - class GMS_maxFive - { - text = "set max AI = 5"; - action = "[5] call gms3DEN_fnc_setMaxAI"; - }; - class GMS_maxSix - { - text = "set max AI = 6"; - action = "[6] call gms3DEN_fnc_setMaxAI"; - }; - class GMS_maxSeven - { - text = "set max AI = 7"; - action = "[7] call gms3DEN_fnc_setMaxAI"; - }; - class GMS_maxEight - { - text = "set max AI = 8"; - action = "[8] call gms3DEN_fnc_setMaxAI"; - }; - class GMS_maxNine - { - text = "set max AI = 9"; - action = "[9] call gms3DEN_fnc_setMaxAI"; - }; - - class GMS_minAI - { - text = "Min AI per Infantry Group"; - tooltip = "Set the minimum AI per infantry group"; - items[] = { - "GMS_minOne", - "GMS_minTwo", - "GMS_minThree", - "GMS_minFour", - "GMS_minFive", - "GMS_minSix" - }; - }; - class GMS_minOne - { - text = "set min AI = 1"; - action = "[1] call gms3DEN_fnc_setMinAI"; - }; - class GMS_minTwo - { - text = "set min AI = 2"; - action = "[2] call gms3DEN_fnc_setMinAI"; - }; - class GMS_minThree - { - text = "set min AI = 3"; - action = "[3] call gms3DEN_fnc_setMinAI"; - }; - class GMS_minFour - { - text = "set min AI = 4"; - action = "[4] call gms3DEN_fnc_setMinAI"; - }; - class GMS_minFive - { - text = "set min AI = 5"; - action = "[5] call gms3DEN_fnc_setMinAI"; - }; - class GMS_minSix - { - text = "set min AI = 6"; - action = "[6] call gms3DEN_fnc_setMinAI"; - }; - - class GMS_missionSpawnChance { text = "Spawn Chance"; @@ -279,25 +155,7 @@ class display3DEN action = "[assetSecured] call gms3DEN_fnc_setCompletionMode;"; value = allKilledOrPlayerNear; }; - class GMS_location_Respawns - { - text = "Set Mission Spawns (static vs random)"; - //action = "edit3DENMissionAttributes 'setAsStaticMission'"; - items[] = { - "GMS_dynamicMission", - "GMS_staticMission" - }; - }; - class GMS_dynamicMission - { - text = "Configure as Dynamic Mission"; - action = "['dynamic'] call gms3DEN_fnc_setSpawnLocations"; - }; - class GMS_staticMission - { - text = "Configure Static Mission"; - action = "['static'] call gms3DEN_fnc_setSpawnLocations"; - }; + class GMS_crateSpawn { text = "Set When Crates Spawn"; toolTip = "Set when crates are spawned"; @@ -362,16 +220,191 @@ class display3DEN }; }; class GMS_setToDynamic { - text = "Dynamic"; + text = "Dynamic (Default)"; toolType = "Set mission to be spawned at random location"; - action = "['dynamic'] call gms3DEN_fnc_toggleStaticSpawns"; + action = "['Dynamic'] call gms3DEN_fnc_toggleStaticSpawns"; }; class GMS_setToStatic { text = "Static"; toolTip = "Set mission to respawn at the same location each time"; - action = "['static'] call gms3DEN_fnc_toggleStaticSpawns"; - }; + action = "['Static'] call gms3DEN_fnc_toggleStaticSpawns"; + }; + + class GMS_plugin + { + text = "Pluggin Settings"; + items[] = { + "GMS_garrisonATL" + }; + }; + + class GMS_units + { + text = "Adjust AI Settings" + items[] = { + "GMS_maxAI", + "GMS_minAI" + }; + }; + + class GMS_maxAI + { + text = "Max AI per Infantry Group"; + tooltip = "set the maximum AI per Infantry Group"; + items[] = { + "GMS_maxThree", + "GMS_maxFour", + "GMS_maxFive", + "GMS_maxSix", + "GMS_maxEight", + "GMS_maxNine" + }; + }; + class GMS_maxThree + { + text = "set max AI = 3"; + action = "[3] call gms3DEN_fnc_setMaxAI"; + }; + class GMS_maxFour + { + text = "set max AI = 4"; + action = "[4] call gms3DEN_fnc_setMaxAI"; + }; + class GMS_maxFive + { + text = "set max AI = 5"; + action = "[5] call gms3DEN_fnc_setMaxAI"; + }; + class GMS_maxSix + { + text = "set max AI = 6"; + action = "[6] call gms3DEN_fnc_setMaxAI"; + }; + class GMS_maxSeven + { + text = "set max AI = 7"; + action = "[7] call gms3DEN_fnc_setMaxAI"; + }; + class GMS_maxEight + { + text = "set max AI = 8"; + action = "[8] call gms3DEN_fnc_setMaxAI"; + }; + class GMS_maxNine + { + text = "set max AI = 9"; + action = "[9] call gms3DEN_fnc_setMaxAI"; + }; + + class GMS_minAI + { + text = "Min AI per Infantry Group"; + tooltip = "Set the minimum AI per infantry group"; + items[] = { + "GMS_minOne", + "GMS_minTwo", + "GMS_minThree", + "GMS_minFour", + "GMS_minFive", + "GMS_minSix" + }; + }; + class GMS_minOne + { + text = "set min AI = 1"; + action = "[1] call gms3DEN_fnc_setMinAI"; + }; + class GMS_minTwo + { + text = "set min AI = 2"; + action = "[2] call gms3DEN_fnc_setMinAI"; + }; + class GMS_minThree + { + text = "set min AI = 3"; + action = "[3] call gms3DEN_fnc_setMinAI"; + }; + class GMS_minFour + { + text = "set min AI = 4"; + action = "[4] call gms3DEN_fnc_setMinAI"; + }; + class GMS_minFive + { + text = "set min AI = 5"; + action = "[5] call gms3DEN_fnc_setMinAI"; + }; + class GMS_minSix + { + text = "set min AI = 6"; + action = "[6] call gms3DEN_fnc_setMinAI"; + }; + + class GMS_garrisonATL + { + text = "Garrison-ATL Mode"; + items[] = { + "GMS_garrisonATLoff", + "GMS_garrisonATLon", + "GMS_aboutGarrisonATL" + }; + }; + class GMS_garrisonATLoff + { + text = "Off (default)"; + action = "[false] call gms3DEN_fnc_setGarrisonATL"; + }; + class GMS_garrisonATLon + { + text = "On"; + action = "[true] call gms3DEN_fnc_setGarrisonATL"; + }; + class GMS_aboutGarrisonATL + { + text = "Help"; + action = "call gms3DEN_fnc_garissonATLhelp"; + }; + /*************************************** + The menu for exporting missions is defined here + ***************************************/ + + class GMS_export { + items[]= { + "GMS_exportDynamic" + }; + text = "Export Mission"; + toolTip = "Export GMS Missions"; + }; + class GMS_exportDynamic { + text = "Export Mission"; + //toolTip = "Export Dynamic Mission"; + action = "call gms3DEN_fnc_exportDynamic"; + picture = "\a3\3DEN\Data\Displays\Display3DEN\ToolBar\save_ca.paa"; + }; + + /*************************************** + menus for those seeking support are here + ***************************************/ + + class GMS_support { + items[] = { + "GMS_help", + "GMS_about" + }; + text = "Plugin Support"; + }; + class GMS_help { + text = "Help"; + action = "call gms3DEN_fnc_Help"; + }; + class GMS_about { + text = "3EDEN Plugin Version 1.0 for GMS by Ghostrider-GRG-"; + action = "call gms3EDEN_fnc_about"; + }; + }; + + }; }; }; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENVersion.h b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENVersion.h index d6180bf..3afc2a6 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENVersion.h +++ b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENVersion.h @@ -2,7 +2,7 @@ class CfgGMS3DENVersion { - version = 1.1; - build = 16; - date = "09/23/23"; + version = 1.21; + build = 18; + date = "09/27/23"; }; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENsettings.h b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENsettings.h index 24c4da3..b0b6322 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENsettings.h +++ b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfg3DENsettings.h @@ -7,36 +7,10 @@ class CfgGMS3DEN objectAtMissionCenter = "RoadCone_L_F"; minAI = 3; maxAI = 6; - minPatroRadius = 30; - maxPatrolRadius = 45; - maxVehiclePatrolRadius = 75; - aircraftPatrolRadius = 1000; - oddsOfGarison = 0.67; - maxGarrisonStatics = 3; - typesGarrisonStatics = []; defaultMissionDifficulty = "Blue"; defaultLootcrateSpawnTiming = "atMissionSpawnGround"; defaultLootcrateLoadTiming = "atMissionSpawn"; defaultMissionEndState = "allKilledOrPlayerNear"; - - // Enter the string shown here under Atributes\Variable Name - // to demarcate this vehicle as a loot vehicle - lootVehicleVariableName = "lootVehicle"; - - // Enter the string shown here under Atributes\Variable Name - // To indicate that a garrison should be placed at standard Arma - // building positions - buildingPosGarrisonVariableName = "pos"; - - // Enter the string shown here under Atributes\Variable Name - // To indicate that a garrison should be placed using setPosATL - // relative to the spawn position of the building - buildingATLGarrisionVariableName = "atl"; - - aiRespawnTime = 600; // respawn time for infantry - vehicleRespawnTime = 900; // respawn time for vehicle patrols - aircraftRespawnTime = 1200; // respawn time for aircraft patrols - // colors used to highlight garrison objects and loot objects colorGarrisonObject = "#(argb,8,8,3)color(0,1,0,1)"; // Lime colorLootObject = "#(argb,8,8,3)color(1,0,1,1)"; // Fucshia diff --git a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfgFunctions.h b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfgFunctions.h index fa5ba5a..565f831 100644 --- a/@GMS_3EDEN/addons/3DEN_plugin/gmsCfgFunctions.h +++ b/@GMS_3EDEN/addons/3DEN_plugin/gmsCfgFunctions.h @@ -3,13 +3,6 @@ class CfgFunctions { class gms3DEN { - class Export - { - file = "3DEN_plugin\Export"; - - //class exportStatic {}; - }; - class Core { file = "3DEN_plugin\Core"; @@ -52,6 +45,7 @@ class CfgFunctions class setSpawnChance {}; class setSpawnLocations {}; class spawnCratesTiming {}; + class toggleStaticSpawns {}; class versionInfo {}; }; }; diff --git a/@GMS_3EDEN/addons/3DEN_plugin/helperscripts.sqf b/@GMS_3EDEN/addons/3DEN_plugin/helperscripts.sqf deleted file mode 100644 index 9e31182..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/helperscripts.sqf +++ /dev/null @@ -1,21 +0,0 @@ - - -{ - _m = format["object = %1",_x]; - systemChat _m; - diag_log _m; -} forEach nearestTerrainObjects [player, [], 50]; - -_u = player; -diag_log format["fn_isInside: _u = %1",_u]; -all3DENEntities params ["_objects"]; - -private _pos = getPosASL _u; -private _above = AGLToASL [_pos select 0, _pos select 1, (_pos select 2) + 100]; -private _below = AGLtoASL [_pos select 0, _pos select 1, (_pos select 2) - 10]; -private _objAbove = lineIntersects [_pos, _above, _u,_u]; -private _objBelow = lineIntersects [_pos, _below, _u,_u]; -private _isInside = if (_objAbove || _objBelow) then {true} else {false}; -_m = format["fn_isInside: _u = %4 | _objAbove = %1 | _objBelow = %2 | _isInside %3",_objAbove,_objBelow,_isInside,_u]; -systemchat _m; -diag_log _m; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/testIntersects.sqf b/@GMS_3EDEN/addons/3DEN_plugin/testIntersects.sqf deleted file mode 100644 index fc720b4..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/testIntersects.sqf +++ /dev/null @@ -1,15 +0,0 @@ -private _obj = cursorObject; -private _pos = getPosATL _obj; -private _startPos = _pos; -private _endPos = [_pos select 0, _pos select 1, (_pos select 2) + 100]; -private _objIntersect = lineIntersectsObjs [_startPos, _endPos,_obj,_obj,true]; -private _count = count _ojbIntersect; -systemChat format["count = %1",_count]; -if !(_count isEqualTo 0) then -{ - private _firstObj = _objIntersect select 0; - private _lastObj = _objIntersect select ((count _objIntersect) - 1); - _m = format["first Obj = %1 | last Obj = %2 | cursorObj = %3",_firstObj,_lastObj, _obj]; - systemChat _m; - diag_log _m; -}; \ No newline at end of file diff --git a/@GMS_3EDEN/addons/3DEN_plugin/testingscripts.sqf b/@GMS_3EDEN/addons/3DEN_plugin/testingscripts.sqf deleted file mode 100644 index ab18051..0000000 --- a/@GMS_3EDEN/addons/3DEN_plugin/testingscripts.sqf +++ /dev/null @@ -1,20 +0,0 @@ - - -_t1 = diag_tickTime; -_v1 = 0; -for "_i" from 1 to 100000 do -{ - if (_v1 == 0) then {true}; -}: -_m = format["elapsed time integer = %1",diag_tickTime - _t1]; -systemChat _m; -diag_log _m; -_t1 = diag_tickTime; -_v1 = "thisspecialvar"; -for "_i" from 1 to 100000 do -{ - if (_v1 isEqualTo "thisspecialvar") then {}; -}; -_m = format["elapsed time string = %1",diag_tickTime - _t1]; -systemChat _m; -diag_log _m; \ No newline at end of file