3DEN Plugin Sorted

Plugin Build 18
This commit is contained in:
Ghostrider [GRG] 2023-09-27 22:06:45 -04:00
parent d4a7542d5f
commit 5afa70d0c4
24 changed files with 385 additions and 1699 deletions

Binary file not shown.

View File

@ -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";
};
};
};
};
};

View File

@ -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

View File

@ -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["<WARNING> 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["<WARNING> 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;

View File

@ -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["<WARNING> 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;
diag_log _m;

View File

@ -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];
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];

View File

@ -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

View File

@ -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;

View File

@ -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];
*/
*/

View File

@ -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;

View File

@ -1 +0,0 @@
CENTER = getPos player;

View File

@ -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";

View File

@ -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:

View File

@ -1,6 +0,0 @@

View File

@ -2,6 +2,7 @@
Long-term TODO:
Allow Users to Define Loot Vehicles

View File

@ -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";
};
};
};
};
};
};

View File

@ -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";
};
};
};
};
};
};

View File

@ -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";
};
};
};
};
};

View File

@ -2,7 +2,7 @@
class CfgGMS3DENVersion
{
version = 1.1;
build = 16;
date = "09/23/23";
version = 1.21;
build = 18;
date = "09/27/23";
};

View File

@ -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

View File

@ -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 {};
};
};

View File

@ -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;

View File

@ -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;
};

View File

@ -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;