From c5cfb0feeebaefa032799a666c924c1ff90dfdfd Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 15 Aug 2020 16:48:46 -0400 Subject: [PATCH] Updates to How Tos for using the 3DEN plugin. --- Adding New Dynamic Missions-HowTo.txt | 51 ++ ...txt => Adding New StaticMissions-HowTo.txt | 11 +- .../Dynamic Missions-How To.txt | 47 -- .../pullDynamicMission.VR/blck_defines.hpp | 38 -- .../pullDynamicMission.VR/directions.txt | 61 --- .../pullDynamicMission.VR/init.sqf | 4 - .../pullDynamicMission.VR/mission.sqm | Bin 13679 -> 0 bytes .../pullDynamicMission.sqf | 479 ------------------ .../pullDynamicMission.VR/pullMarkerInfo.sqf | 62 --- .../setCenterAtPlayer.sqf | 1 - .../pullDynamicMission.VR/template.sqf | 81 --- .../Static Missions/StaticMissions-HowTo.txt | 38 -- .../blck_defines.hpp | 38 -- .../directions.txt | 60 --- .../pullStaticMissionInfo.Altis/init.sqf | 3 - .../pullStaticMissionInfo.Altis/mission.sqm | Bin 16486 -> 0 bytes .../pullMarkerInfo.sqf | 60 --- .../pullStaticMission.sqf | 414 --------------- .../pullStaticMissionInfo.Altis/template.sqf | 97 ---- 19 files changed, 57 insertions(+), 1488 deletions(-) create mode 100644 Adding New Dynamic Missions-HowTo.txt rename StaticMissions-HowTo.txt => Adding New StaticMissions-HowTo.txt (84%) delete mode 100644 Tools/Dynamic Missions/Dynamic Missions-How To.txt delete mode 100644 Tools/Dynamic Missions/pullDynamicMission.VR/blck_defines.hpp delete mode 100644 Tools/Dynamic Missions/pullDynamicMission.VR/directions.txt delete mode 100644 Tools/Dynamic Missions/pullDynamicMission.VR/init.sqf delete mode 100644 Tools/Dynamic Missions/pullDynamicMission.VR/mission.sqm delete mode 100644 Tools/Dynamic Missions/pullDynamicMission.VR/pullDynamicMission.sqf delete mode 100644 Tools/Dynamic Missions/pullDynamicMission.VR/pullMarkerInfo.sqf delete mode 100644 Tools/Dynamic Missions/pullDynamicMission.VR/setCenterAtPlayer.sqf delete mode 100644 Tools/Dynamic Missions/pullDynamicMission.VR/template.sqf delete mode 100644 Tools/Static Missions/StaticMissions-HowTo.txt delete mode 100644 Tools/Static Missions/pullStaticMissionInfo.Altis/blck_defines.hpp delete mode 100644 Tools/Static Missions/pullStaticMissionInfo.Altis/directions.txt delete mode 100644 Tools/Static Missions/pullStaticMissionInfo.Altis/init.sqf delete mode 100644 Tools/Static Missions/pullStaticMissionInfo.Altis/mission.sqm delete mode 100644 Tools/Static Missions/pullStaticMissionInfo.Altis/pullMarkerInfo.sqf delete mode 100644 Tools/Static Missions/pullStaticMissionInfo.Altis/pullStaticMission.sqf delete mode 100644 Tools/Static Missions/pullStaticMissionInfo.Altis/template.sqf diff --git a/Adding New Dynamic Missions-HowTo.txt b/Adding New Dynamic Missions-HowTo.txt new file mode 100644 index 0000000..ea9f37f --- /dev/null +++ b/Adding New Dynamic Missions-HowTo.txt @@ -0,0 +1,51 @@ + + +This update includes a plugin for the 3DEN Editor that simplifies creation the .sqf files that code a mission. + +My approach to doing this as follows: + +1) Start Arma with the following mods: + @epoch;@exile;@blckeagls_3DEN. + (adjust to meet your specific needs; obviously any additional mods such as those from CUP can be included). + +2) Start the Eden Editor. +3) Lay out your static mission. You should: + place a marker that will be displayed when the mission is initialized (save your work) + Set the icon/shape, color and any text for your marker + + Recommended: place a road cone with a flasher at the center of your mission + Note, you can comment this out later. + It is used to calculate positions of everything else. + + Place all buldings, sandbags, etc (save your work) + Place any vehicle or air patrols - + Note that they will patrol using the postion at which you place them as the centerpoint of their patrol. + (save your work). + + Place any static weapons. + Note, you can place these inside or on top of buildings. + (save your work). + + Place a unit at each location you wish to have a group patrol. + Note: The mission spawner will attempt to spawn an entire group at these locations using the weapons, uniforms, + etc defined in blck_config.sqf or its derivatives. + Note: you can spawn this inside or on top of buildings. + + Place some sort of ammo box, cardboard box, or other loot container. + Save your work. + + Set Difficulty level as desired using the dropdown menu at the right of the toolbar. + Set any other mission parameters including: + loot crate spawn timing, + loot crate fill timing, + mission end criteria + + Select Export Dynamic Mission from the blckeagls dropdown menu. + Select Copy, then paste the text into a text editor. + Change any settings including numbers of AI, AI respawn times, or patrol radii. + + Save the file based on difficulty level. + For a Blue difficulty mission, save the file to the custom_server\Missions\Blue directory. + Add filename for your new mission to custom_server\Missions\GMS_missionLists.sqf + +Pbo custom_server and test your new mission. diff --git a/StaticMissions-HowTo.txt b/Adding New StaticMissions-HowTo.txt similarity index 84% rename from StaticMissions-HowTo.txt rename to Adding New StaticMissions-HowTo.txt index 981d447..c613042 100644 --- a/StaticMissions-HowTo.txt +++ b/Adding New StaticMissions-HowTo.txt @@ -1,15 +1,13 @@ -This update includes an optional ability to spawn static missions. +This update includes an 3DEN plugin to make it easy to export static missions. This can be done by laying out everything for your static mission in the 3DEN editor, -then using a an editor plugin. +then using the @blckeagls_3DEN editor plugin. -I have provided one example editor mission (staticMissionExamples.Altis) -which I have used to configure a static mission ( ). My approach to doing this as follows: 1) Start Arma with the following mods: - @epoch;@exile;@m3eden editor. + @epoch;@exile;@blckeagls_3DEN. (adjust to meet your specific needs; obviously any additional mods such as those from CUP can be included). 2) Start the Eden Editor. @@ -22,10 +20,13 @@ My approach to doing this as follows: Note that they will patrol using the postion at which you place them as the centerpoint of their patrol. (save your work). Place any static weapons. + Note: these can be inside or on top of buildings. + (save your work). Place a unit at each location you wish to have a group patrol. Note: The mission spawner will attempt to spawn an entire group at these locations using the weapons, uniforms, etc defined in blck_config.sqf or its derivatives. + Note: groups can be spawned inside or on top of buildings; just place on unit whereever you want a groupl Place some sort of ammo box, cardboard box, or other loot container. Save your work. diff --git a/Tools/Dynamic Missions/Dynamic Missions-How To.txt b/Tools/Dynamic Missions/Dynamic Missions-How To.txt deleted file mode 100644 index 68b6807..0000000 --- a/Tools/Dynamic Missions/Dynamic Missions-How To.txt +++ /dev/null @@ -1,47 +0,0 @@ -This tool formats most of the data required for dynamic missions based on what is present in your mission. -This include the layout of buildings, loot crates, markers, static weapons, and garrisons in buildings. -I recommend that you lay out dynamically spawned missions in the virtual reality map which minimizes confounding influences. - -A minimal mission would include: - A marker. - A way to define the mission center, which is a reference point relative to which everything is spawned. - The mission system will spawn AI, loot chests, emplaced weapons, vehicles and aircraft according to the defaults for the mission difficulty. - -The basic blckeagls missions have a bit more defined, usually some buildings to provide cover and make things more interesting. - -Now, you can add more detail including defining where infantry and statics spawn, where the one or more loot crates spawn, where vehicle patrols spawn and so forth. - To do this just place the representative objects where you want the mission to spawn them and the script should do the rest. - For infantry patrols, put one unit where you want the group to spawn. - Note: uniforms, weapons and other AI gear are not captured. You can however define _uniforms, _weapons and other AI gear for that mission. see the template and default2 missions for examples. - -You can also have infantry and/or static weapons garrison buildings using either of two approaches. - 1. place an object fo type garrisonMarkerObject inside the building you want to garrison. - I use a 100 cm sphere which is the default because it is easy to see and not used for much else. - The script will ensure that this building is identified for a garrison which will be spawned at the Arma pre-defined buildingPositions. - - 2. Manualy place statics and units inside buildings where you want them to spawn. - Infantry will change position (crouch, prone, stand) and turn but will not move which prevents their normal behavior to leave the buliding and look for players. - The position of statics (e.g., HMG, GMG) will be recorded accurately. - By default, the script looks for arrows. this is so that if you pull mission data as a player the locations are recorded acccurately (more on that below). - You can of course just place the units where you want them. - Regardless, be sure that unitMarkerObject is set to the classname of the object you use to demarcate the position of infantry units. - If you do use AI units to designate positions for your infantry, be sure to pull the data while in the editor rather than when playing the mission (see below). - - 3. You are now almost ready to pull the mission data. - I recommend that you use a road cone with a flashing light to define the mission center. - This is the approach I have taken for all blckeagles missions to date. - You could also use a loot crate. - The actual mission center will be offset 3 meters from this position for technical reasons. - -Once all that is done you are ready to pull the mission information. -To do that, from the EDEN Editor, - 1. go to tools\debug console. - 2. type execVM "pullDynamicMission.sqf"; in the box. - 3. hit Local exec - 4. hit Esc - 5. The script should run as indicated by text appearing in the lower left corner of your screen. - 6. When the text stops being updated, alt-tab out to your editor and paste the clipboard into it. - 7. You can now copy/past from that output into the relevant sections of the dynamic mission template, - after making a copy of course. - - diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/blck_defines.hpp b/Tools/Dynamic Missions/pullDynamicMission.VR/blck_defines.hpp deleted file mode 100644 index 00f0b7b..0000000 --- a/Tools/Dynamic Missions/pullDynamicMission.VR/blck_defines.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - for ghostridergaming - By Ghostrider [GRG] - Copyright 2016 - - -------------------------- - License - -------------------------- - All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License. - - http://creativecommons.org/licenses/by-nc-sa/4.0/ -*/ - -#define GRGserver -#define useAPEX -//#define useDynamicSimulation -#define blck_debugMode -#define blck_triggerLoopCompleteTime 40*60 -//#define blck_milServer -//#define GRG_TestServer -//#define blck_useCUP -//#define blck_useRHS - -//////////////////////////// -// Do not touch anything below this line -/////////////////////////// -#define onFoot 1 -#define inVehicle 2 - -// defines for static group spawners -#define staticPatrolTriggerRange 2000 -#define groupParameters 0 -#define patrolGroup 1 -#define groupSpawned 2 -#define timesSpawned 3 -#define respawnAt 4 - - diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/directions.txt b/Tools/Dynamic Missions/pullDynamicMission.VR/directions.txt deleted file mode 100644 index bc896c2..0000000 --- a/Tools/Dynamic Missions/pullDynamicMission.VR/directions.txt +++ /dev/null @@ -1,61 +0,0 @@ -This tool formats most of the data required for dynamic missions based on what is present in your mission. -This include the layout of buildings, loot crates, markers, static weapons, and garrisons in buildings. -I recommend that you lay out dynamically spawned missions in the virtual reality map which minimizes confounding influences. - -A minimal mission would include: - A marker. You may use any marker you like. The new pullMarker script will format scripting needed to spawn that marker at the center of your mission. - A way to define the mission center, which is a reference point relative to which everything is spawned. - The mission system will spawn AI, loot chests, emplaced weapons, vehicles and aircraft according to the defaults for the mission difficulty. - -The basic blckeagls missions have a bit more defined, usually some buildings to provide cover and make things more interesting. - -Now, you can add more detail including defining where infantry and statics spawn, where the one or more loot crates spawn, where vehicle patrols spawn and so forth. -Loot crates, AI, static weapons or autonomous turrets can be spawned inside or on top of buildings. Even vehicles could be spawned on buildings in principle. - To do this just place the representative objects where you want the mission to spawn them and the script should do the rest. - For infantry patrols, put one unit where you want the group to spawn. - Note: uniforms, weapons and other AI gear are not captured. You can however define _uniforms, _weapons and other AI gear for that mission. see the template and default2 missions for examples. - -You can also have infantry and/or static weapons garrison buildings using either of two approaches. - 1. place an object fo type garrisonMarkerObject inside the building you want to garrison. - I use a 100 cm sphere which is the default because it is easy to see and not used for much else. - The script will ensure that this building is identified for a garrison which will be spawned at the Arma pre-defined buildingPositions. - - 2. Manualy place statics and units inside buildings where you want them to spawn. - Infantry will change position (crouch, prone, stand) and turn but will not move which prevents their normal behavior to leave the buliding and look for players. - The position of statics (e.g., HMG, GMG) will be recorded accurately. - By default, the script looks for arrows. this is so that if you pull mission data as a player the locations are recorded acccurately (more on that below). - You can of course just place the units where you want them. - Regardless, be sure that unitMarkerObject is set to the classname of the object you use to demarcate the position of infantry units. - If you do use AI units to designate positions for your infantry, be sure to pull the data while in the editor rather than when playing the mission (see below). - - 3. You are now almost ready to pull the mission data. - I recommend that you use a road cone with a flashing light to define the mission center. - This is the approach I have taken for all blckeagles missions to date. - You could also use a loot crate. - The actual mission center will be offset 3 meters from this position for technical reasons. - -Once all that is done you are ready to pull the mission information. -To do that, from the EDEN Editor, - - Preparation: copy all files from the tools\dynamicMissions\pullDynamicMissions folder into the folder containing the mission.sqm for your new mission. - Rename template.sqf to reflect the nature of your mission. - - Pulling Marker data. Start Arma, and select Editor. Load your new mission in the editor and hit Play. - Using the mouse wheel, select pull marker data. - Alt-tab out and paste into the appropriate spot in your new mission.sqf. - - Pulling all other mission data. - 1. go to tools\debug console. - 2. type execVM "pullDynamicMission.sqf"; in the box. - 3. hit Local exec - 4. hit Esc - 5. The script should run as indicated by text appearing in the lower left corner of your screen. - 6. When the text stops being updated, alt-tab out to your editor. - 7. You can now copy/past from that output into the relevant sections of the dynamic mission template. - - Final touchups. - The tools will pull all objects including any spheres, arrows or other aids. - Be sure to remove these or comment them out or they will show up in your final mission on your server. - Adjust the remaining settings in the template such as difficulty level to suit your needs. - Add the name of the mission to the list of missions to be spawned for that difficulty level. - Test everything to be sure diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/init.sqf b/Tools/Dynamic Missions/pullDynamicMission.VR/init.sqf deleted file mode 100644 index ae3be0e..0000000 --- a/Tools/Dynamic Missions/pullDynamicMission.VR/init.sqf +++ /dev/null @@ -1,4 +0,0 @@ - -player addAction["Pull MARKER Info","pullMarkerInfo.sqf"]; -player addAction["Set Mission Center @ Player Pos","setCenterAtPlayer.sqf"]; -player addAction["Pull DYNAMIC mission","pullDynamicMission.sqf"]; diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/mission.sqm b/Tools/Dynamic Missions/pullDynamicMission.VR/mission.sqm deleted file mode 100644 index 9b0c7c0ff81bc16dde68d0a70c339edd9c2639a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13679 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 diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/pullDynamicMission.sqf b/Tools/Dynamic Missions/pullDynamicMission.VR/pullDynamicMission.sqf deleted file mode 100644 index 6fd2134..0000000 --- a/Tools/Dynamic Missions/pullDynamicMission.VR/pullDynamicMission.sqf +++ /dev/null @@ -1,479 +0,0 @@ -_fn_isInside = { // returns true if an object is inside, underneath or on top of a building otherwise returns false. - ////////////////////// - // Determin if a unit is inside a building using two separate checkVisibility - ////////////////////// - // lineIntersects [ eyePos player, aimPos chopper, player, chopper] - params["_u",["_category","House"]]; - private ["_u","_pos","_above","_below"]; - _pos = getPosASL _u; - _above = lineIntersects [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u]; - _below = lineintersects [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 2],_u]; - diag_log format["_fn_isInside: _u %1 | _category = %5 | typeOf _u %4 | _above %2 | _below %3 ",_u,_above,_below,typeOf _u, _category]; - // If there is something above or below the object do a quick double-check to make sure there is a building there and not something else. - if (_above) then // test if any surfaces above are from buildingPos - { - _surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,100]; - _above = false; - { - //diag_log format["_fn_isInside: _x-2 = %2 | typeOf _x = %3",_x,_x select 2,typeOf (_x select 2)]; - if ((_x select 2) isKindOf _category) then {_above = true}; - }forEach _surfacesAbove; - }; - if (_below) then - { - _surfacesBelow = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 10],_u,_u,true,100]; - _above = false; - { - //diag_log format["_fn_isInside: _x-2 = %2 | typeOf _x = %3",_x,_x select 2,typeOf (_x select 2)]; - if ((_x select 2) isKindOf _category) then {_above = true}; - }forEach _surfacesBelow; - }; - - _isInside = if (_above || _below) then {true} else {false}; - //diag_log format["_fn_isInside: _isInside = %1",_isInside]; - _isInside -}; - -_fn_buildingContainer = { // returns the builing containing an object or objNull - private["_u","_pos","_building","_surfacesAbove","_surfacesBelow"]; - params["_u",["_category","House"]]; - _pos = getPosASL _u; - private _building = objNull; - // lineIntersectsSurfaces [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2, returnUnique] - _surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,10]; - diag_log format["_surfacesAbove = %1",_surfacesAbove]; - { - if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; - } forEach _surfacesAbove; - if (_building isEqualTo objNull) then - { - _surfacesBelow = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 10],_u,_u,true,100]; - diag_log format["_surfacesBelow = %1",_surfacesBelow]; - { - if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; - } forEach _surfacesBelow; - }; - diag_log format["_fn_buildingContainer: _u = %1 | _building = %2",_u,_building]; - _building -}; - -_fn_isInfantry = { // returns true if a unit is on foot otherwise returns false. - ////////////////////// - // Determine if a unit isinfantry rather than a unit manning a turret or vehicle - ////////////////////// - _u = _this select 0; - private _isInfantry = if ((_u isKindOf "Man") && (vehicle _u) isEqualTo _u) then {true} else {false}; - //diag_log format["_fn_isInfantry: _isInfantry = %1",_isInfantry]; - _isInfantry -}; - -diag_log "========== =========================="; - -/////////////////// -// Define some values for our AI -// Change values of these variables to suit your needs -/////////////////// -#define aiDifficulty "Red" -#define minAI 3 -#define maxAI 6 -#define minPatrolRadius 30 -#define maxPatrolRadius 45 -#define AI_respawnTime 600 -#define aiVehiclePatrolRadius 75 -#define vehiclePatrolRespawnTime 600 -#define staticWeaponRespawnTime 600 -#define aiAircraftPatrolRespawnTime 600 -#define aiAircraftPatrolRadius 1700 -#define oddsOfGarrison 0.67 -#define maxGarrisonStatics 3 -#define maxGarrisonUnits 4 -#define typesGarrisonStatics [] // When empty a static will be randomly chosen from the defaults for blckeagls -#define garrisonMarkerObject "Sign_Sphere100cm_F" // This can be anything you like. I find this large sphere easy to see and convenient. -#define unitMarkerObject "Sign_Arrow_Direction_Green_F" // This can be anything. I chose this arrow type because it allows you to easily indicate direction. -#define objectAtMissionCenter "RoadCone_L_F" -#define lootVehicleMarker "Sign_Arrow_F" -#define landVehicles "LandVehicle" - -/////////////////// -// Define the coordinates of the center of the mission. -/////////////////// -if (isNil "CENTER") then -{ - CENTER = [0,0,0]; -}; -if (CENTER isEqualTo [0,0,0]) then -{ - hint "Please define a center point for your mission"; - _obj = allMissionObjects objectAtMissionCenter; - _obj1 = _obj select 0; - diag_log format["Determining position of first roadcone found which is located at %1 with player found at %2",getPos _obj1,position Player]; - if (count _obj > 0) then - { - CENTER = [3,3,0] vectorAdd (getPosATL _obj1); - }; - hint format["Position of Road Cone at %1 used to define mission center",CENTER]; - diag_log format["Position of Road Cone at %1 used to define mission center",CENTER]; - diag_log format["Player located at position %1",position player]; -}; -diag_log format["CENTER Set to %1",CENTER]; - -/////////////////// -// Identify any buildings in which a garrison should be spawned using the Arma building positions. -// Tell the script which buildings to garrison by placing an object inside that designates them as such. -// I use a large yellow sphere for this purpose. -// The function below assembles a list of such buildings for use in defining the data for mission buildings. -/////////////////// - -_cb = ""; - -////////////////// -// *** OPTIONAL **** -// Place a marker over your mission and configure it as you would like to to appear in the tame. -// The marker configuration will be included in the output of this script. -// Note ** Only the first marker placed will be processed ** -// Configure Marker -///////////////// - -diag_log format["<< ---- pullDynamicMision: START %1 ---- >>",diag_tickTime]; - -//////////////////////// -// Begin pulling data here -/////////////////////// - -_cb = _cb + format["_garrisonedBuildings_BuildingPosnSystem = [",endl]; -private _garrisonedBuildings = []; -private _allStatics = []; -_helpers = allMissionObjects garrisonMarkerObject; -//diag_log format["_helpers = %1",_helpers]; -{ - if ( (typeOf _x) isEqualTo garrisonMarkerObject) then - { - private _isInside = [_x] call _fn_isInside; - if (_isInside) then - { - _building = [_x] call _fn_buildingContainer; - _garrisonedBuildings pushbackunique _building; - _garrisonedBuildings pushbackunique _x; - // data structure ["building Classname",[/*building pos*/],/*building dir*/,/*odds of garrison*/, /*Max Statics*/,/*types statics*/,/*max units*/], - // 1 2 3 4 5 6 7 8 9 - _line = format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true',oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; - systemChat _line; - //diag_log _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; - }; -} forEach _helpers; -_cb = _cb + format["%1];%1%1",endl]; - -_logging = format["_garrisonedBuildings = %1",_garrisonedBuildings]; -diag_log _logging; -systemChat _logging; -//diag_log format["_cb = %1%2",endl,_cb]; - -_configuredStatics = []; -_configuredStaticsPositions = []; -_configuredUnits = []; -/* - This bit will set up the garrison for each building having units and / or statics inside it or on top. - Coding must ensure that nothing is repeated but everything is captured. -*/ - -_fn_configureGarrisonForBuildingATL = { - private["_b","_staticsInBuilding","_unitsInBuilding","_staticsText","_unitsText","_buildingGarrisonATL","_staticsInBuilding","_unitsInBuilding","_count"]; - _b = _this select 0; - _count = 0; - if (_b in _garrisonedBuildings) exitWith {""}; - _staticsText = ""; - _unitsText = ""; - _buildingGarrisonATL = ""; - _staticsInBuilding = nearestObjects[getPosATL _building,["StaticWeapon"],sizeOf (typeOf _building)]; - { - if !(_x in _configuredStatics) then - { - _isInside = [_x] call _fn_isInside; - if (_isInside) then {_building = [_x] call _fn_buildingContainer}; - if (_b isEqualTo _building) then - { - _configuredStatics pushBackUnique _x; - //_configuredStaticsPositions pushBack (getPosATL _x) vectorDiff CENTER; - if (_staticsText isEqualTo "") then - { - _staticsText = format['["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff (getPosATL _b),getDir _x]; - } else { - _staticsText = _staticsText + format[',["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff (getPosATL _b),getDir _x]; - }; - }; - }; - } forEach _staticsInBuilding; - _unitsInBuilding = nearestObjects[getPosATL _building,[unitMarkerObject],sizeOf (typeOf _building)]; - - { - if !(_x in _configuredUnits) then - { - _isInside = [_x] call _fn_isInside; - if (_isInside) then {_building = [_x] call _fn_buildingContainer}; - if (_b isEqualTo _building) then - { - _configuredUnits pushBackUnique _x; - - if (_unitsText isEqualTo "") then - { - _unitsText = format["[%1,%2]",(getPosATL _x) vectorDiff (getPosATL _b),getDir _x]; - } else { - _unitsText = _unitsText + format[",[%1,%2]",(getPosATL _x) vectorDiff (getPosATL _b),getDir _x]; - }; - _count = _count + 1; - }; - }; - } forEach _unitsInBuilding; - if ( !(_staticsText isEqualTo "") || !(_unitsText isEqualTo "")) then - { - _buildingGarrisonATL = format[' ["%1",%2,%3,%4,%5,[%6],[%7]]',typeOf _b,(getPosATL _b) vectorDiff CENTER,getDir _b,'true','true',_staticsText,_unitsText]; - _garrisonedBuildings pushBackUnique _b; - }; - _buildingGarrisonATL -}; - -private _count = 0; -_cb = _cb + "_garrisonedBuilding_ATLsystem = ["; -{ - private _isInside = [_x] call _fn_isInside; - if (_isInside) then - { - private _building = [_x] call _fn_buildingContainer; - private _include = if ( !(_building in _garrisonedBuildings) && !((typeOf _building) isEqualTo unitMarkerObject) && !((typeOf _building) isEqualTo garrisonMarkerObject)) then {true} else {false}; - if (_include) then - { - //diag_log format["_x = %1 | _building = %1",_x,_building]; - private _buildingGarrisonInformation = [_building] call _fn_configureGarrisonForBuildingATL; - diag_log format["_buildingGarrisonInformation = %1",_buildingGarrisonInformation]; - if !(_buildingGarrisonInformation isEqualTo "") then - { - if (_count == 0) then - { - _cb = _cb + format["%1%2",endl,_buildingGarrisonInformation]; - } else { - _cb = _cb + format[",%1%2",endl,_buildingGarrisonInformation]; - }; - _count = _count + 1; - }; - }; - }; - -} forEach ((allMissionObjects "StaticWeapon") + (allMissionObjects "Man") + (allMissionObjects unitMarkerObject)); -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Configure info remaining mission landscape -/////////////////// -_land = allMissionObjects "Static"; -_count = 0; -_cb = _cb + format["_missionLandscape = [",endl]; -{ - diag_log format["evaluating mission landscape: _x = %1 | typeOf _x = %1",_x, typeOf _x]; - //diag_log format["evaluating mission landscape: _x %1 | typeOf _x %1",_x, _x isKindOf "Helper_Base_F"]; - if !(_x in _garrisonedBuildings && !((typeOf _x) isEqualTo unitMarkerObject) && !((typeOf _x) isEqualTo garrisonMarkerObject)) then - { - _line = format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true']; - systemChat _line; - if (_count == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - _count = _count + 1; - }; -}forEach allMissionObjects "Static"; -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Configure loot boxes -/////////////////// -_cb = _cb + "_missionLootBoxes = ["; -{ - _line = format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff CENTER, '_crateLoot','_lootCounts',getDir _x]; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; -}forEach ((allMissionObjects "ReammoBox") + (allMissionObjects "ReammoBox_F")); -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Setup Info for loot vehicles -/////////////////// -_missionLootVehicles = []; -_missionVehicles = ((allMissionObjects "Car") + (allMissionObjects "Tank") + allMissionObjects "Ship"); -_lootVehicleMarkers = allMissionObjects lootVehicleMarker; -diag_log format["_lootVehicleMarkers = %1",_lootVehicleMarkers]; -_cb = _cb + format["_missionLootVehicles = ["]; -{ - _kindOf = "nothing"; - _isInside = [_x,"Car"] call _fn_isInside; - if (_isInside) then {_kindOf = "Car"}; - if !(_isInside) then {_isInside = [_x,"Ship"] call _fn_isInside}; - if (_isInside) then {_kindOf = "Ship"}; - if (_isInside) then - { - - _object = [_x,_kindOf] call _fn_buildingContainer; - diag_log format["object %1 is inside object %2",_x,_object]; - _missionLootVehicles pushBack _object; - _line = format[' ["%1",%2,%3,%4,%5]',typeOf _object,(getPosATL _x) vectorDiff CENTER, '_crateLoot','_lootCounts',getDir _x]; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; -} forEach allMissionObjects lootVehicleMarker; -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Setup Info for vehicle patrols -/////////////////// -_cb = _cb + format["_missionPatrolVehicles = ["]; -{ - if ( !((typeOf _x) isKindOf "SDV_01_base_F") && !(_x in _missionLootVehicles) ) then - { - _line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x]; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; -}forEach ((allMissionObjects "Car") + (allMissionObjects "Tank") + allMissionObjects "Ship"); -_cb = _cb + format["%1];%1%1",endl]; - -_cb = _cb + "_submarinePatrolParameters = ["; -{ - if ((typeOf _x) isKindOf "SDV_01_base_F") then - { - _line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x]; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; -}forEach allMissionObjects "Ship"; -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Configs for Air Patrols -/////////////////// -_cb = _cb + "_airPatrols = ["; - //[selectRandom _aircraftTypes,[22830.2,16618.1,11.4549],"blue",1000,60] -{ - _line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true']; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; -}forEach allMissionObjects "Air"; -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Setup info for remaining static/emplaced weapons -/////////////////// -_count = 0; -_cb = _cb + format["_missionEmplacedWeapons = ["]; -{ - - //if !(_x in _configuredStatics) then - private _isInside = [_x] call _fn_isInside; - if !(_isInside) then - { - // ["B_HMG_01_high_F",[22883.5,16757.6,6.31652],"blue",0,10] - _line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true']; - systemChat _line; - if (_count == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - _count = _count + 1; - }; - -}forEach allMissionObjects "StaticWeapon"; -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Setup information for infantry groups spawning outside buildings -/////////////////// -_cb = _cb + format["_missionGroups = ["]; -{ - //[[22920.4,16887.3,3.19144],"red",[1,2], 75,120], - _isInside = [_x] call _fn_isInside; - _isInfantry = [_x] call _fn_isInfantry; - //diag_log format["_missionGroups: _unit %1 | _isInside %2 _isInfantry %3",_x,_isInside,_isInfantry]; - if (_isInfantry) then - { - if (!(surfaceIsWater (getPos _x)) && !(_isInside) && !(isPlayer _x)) then - { - _line = format[' [%1,%2,%3,"%4",%5,%6]',(getPosATL _x) vectorDiff CENTER,minAI,maxAI,aiDifficulty,minPatrolRadius,maxPatrolRadius]; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; - }; -}forEach allMissionObjects "Man"; -_cb = _cb + format["%1];%1%1",endl]; - -_cb = _cb + "_scubaGroupParameters = ["; -{ - //[[22920.4,16887.3,3.19144],"red",[1,2], 75,120], - _isInside = [_x] call _fn_isInside; - _isInfantry = [_x] call _fn_isInfantry; - //diag_log format["_missionGroups: _unit %1 | _isInside %2 _isInfantry %3",_x,_isInside,_isInfantry]; - if (_isInfantry) then - { - if ((surfaceIsWater (getPos _x)) && !(_isInside) && !(isPlayer _x)) then - { - _line = format[' [%1,%2,%3,"%4",%5,%6]',(getPosATL _x) vectorDiff CENTER,minAI,maxAI,aiDifficulty,minPatrolRadius,maxPatrolRadius]; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; - }; -}forEach allMissionObjects "Man"; -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// All done, notify the user and copy the output to the clipboard -/////////////////// -_msg = "All Objects organzied, formated and copied to the Clipboard"; -hint _msg; -systemChat _msg; -systemChat format["_cb has %1 characters",count _cb]; -copyToClipboard _cb; -diag_log "DONE"; - diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/pullMarkerInfo.sqf b/Tools/Dynamic Missions/pullDynamicMission.VR/pullMarkerInfo.sqf deleted file mode 100644 index 442a5b1..0000000 --- a/Tools/Dynamic Missions/pullDynamicMission.VR/pullMarkerInfo.sqf +++ /dev/null @@ -1,62 +0,0 @@ - -_cb = ""; - -////////////////// -// *** OPTIONAL **** -// Place a marker over your mission and configure it as you would like to to appear in the tame. -// The marker configuration will be included in the output of this script. -// Note ** Only the first marker placed will be processed ** -// Configure Marker -///////////////// -/* - _markerType = ["ELIPSE",[175,175],"GRID"]; - _markerType = ["mil_triangle",[0,0]]; -*/ - -diag_log format["<< ---- START %1 ---- >>",diag_tickTime]; - -_allmkr = allMapMarkers; -diag_log format["_allmkr = %1",_allmkr]; -if (count _allmkr == 0) then -//if !(typeName _mk isEqualTo "STRING") then -{ - hint "No Marker Found, no Marker Definitions Will Be generated"; - uiSleep 5; -} else { - - _mk = _allmkr select 0; - diag_log format["_mk = %1",_mk]; - systemChat format["marker shape = %1",markerShape _mk]; - systemChat format["marker type = %1",markerType _mk]; - systemChat format["marker size = %1",markerSize _mk]; - systemChat format["markerColor = %1",markerColor _mk]; - systemChat format["marker brush = %1",markerBrush _mk]; - //systemChat - switch (toUpper(markerShape _mk)) do - { - case "ELLIPSE": { - _cb = _cb + format['_markerType = ["%1",%2,"%3"];%4',toUpper(MarkerShape _mk),getMarkerSize _mk,toUpper(markerBrush _mk),endl]; - }; - case "RECTANGLE": { - _cb = _cb + format['_markerType = ["%1",%2,"%3"];%4',toUpper(MarkerShape _mk),getMarkerSize _mk,toUpper(markerBrush _mk),endl]; - }; - case "ICON": { - _cb = _cb + format['_markerType = ["%1"];%2',getMarkerType _mk,endl]; - }; - }; - - _cb = _cb + format['_markerColor = "%1";%2',markerColor _mk,endl]; - _cb = _cb + format['_markerLabel = "%1";%2',MarkerText _mk,endl]; - _cb = _cb + format["%1%1",endl]; -}; - -/////////////////// -// All done, notify the user and copy the output to the clipboard -/////////////////// -_msg = "Marker Data organzied, formated and copied to the Clipboard"; -hint _msg; -systemChat _msg; -systemChat format["_cb has %1 characters",count _cb]; -copyToClipboard _cb; -diag_log "DONE"; - diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/setCenterAtPlayer.sqf b/Tools/Dynamic Missions/pullDynamicMission.VR/setCenterAtPlayer.sqf deleted file mode 100644 index 6db9def..0000000 --- a/Tools/Dynamic Missions/pullDynamicMission.VR/setCenterAtPlayer.sqf +++ /dev/null @@ -1 +0,0 @@ -CENTER = getPos player; \ No newline at end of file diff --git a/Tools/Dynamic Missions/pullDynamicMission.VR/template.sqf b/Tools/Dynamic Missions/pullDynamicMission.VR/template.sqf deleted file mode 100644 index c1d11ca..0000000 --- a/Tools/Dynamic Missions/pullDynamicMission.VR/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 = blck_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 = blck_lootCountsRed; // Throw in something more exotic than found at a normal blue mission. - -_spawnCratesTiming = blck_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 = blck_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 blck_spawnCratesTiming = "atMissionSpawnGround" && blck_loadCratesTiming = "atMissionSpawn" - // To spawn crates at mission start but load gear only after the mission is completed set blck_spawnCratesTiming = "atMissionSpawnGround" && blck_loadCratesTiming = "atMissionCompletion" - // To spawn crates on the ground at mission completion set blck_spawnCratesTiming = "atMissionEndGround" // Note that a loaded crate will be spawned. - // To spawn crates in the air and drop them by chutes set blck_spawnCratesTiming = "atMissionEndAir" // Note that a loaded crate will be spawned. -_endCondition = blck_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/Tools/Static Missions/StaticMissions-HowTo.txt b/Tools/Static Missions/StaticMissions-HowTo.txt deleted file mode 100644 index 5a9b5a9..0000000 --- a/Tools/Static Missions/StaticMissions-HowTo.txt +++ /dev/null @@ -1,38 +0,0 @@ - - -You can spawn static missions over land or on water. -This can be done by laying out everything for your static mission in the editor, -then exporting the data from your mission using a simple script and a copy - paste - edit strategy. - -My approach to doing this as follows: - -1) Start the Eden Editor. -2) Lay out your static mission. You should: - [Optional] place a marker indicating where it will spawn (save your work) - Place all buldings, sandbags, etc (save your work) - Place any vehicle, navel, sub or air patrols - note that they will patrol using the postion at which you place them as the centerpoint of their patrol. - (save your work). - Place any static weapons. These can be outside, on top of or inside buildings. - (save your work). - Place a unit at each location you wish to have a group patrol OUTSIDE buildings. These will spawn as infantry on land and scuba units over water. - Place a unit inside buildings as appropriate. - Place some sort of ammo box, cardboard box, or other loot container if you wish to have one. You can have as many as you like. - Save your work. - - ** NOTES ** - Uniforms, weapons and any other customization to units will not be preserved. - The defaults for blckeagls, or any specific definitions for _uniforms, _weapons, etc provided when the mission is spawned, will be used for these AI properties. - -3) Export the mission data using the tools provided. - In the EDEN editor, go to tools\debug console - in the box type execVM "pullStaticMission.sqf"; - Click 'local exec' - Hit Esc and wait for the script to run. You will see a notification in the lower left corner when it is done. - Alt-Tab out and past the output into your text editor. - Make a copy of the stati mission template. - Copy relevant information from the text you just grabbed with the clipboard to the template. - Make any edits or other adjustments needed. - - Once you have done this, add the file to the custom_server\Missions\Static\missions directory then - add an entry for your static mission to GMS_StaticMissionLists.sqf - diff --git a/Tools/Static Missions/pullStaticMissionInfo.Altis/blck_defines.hpp b/Tools/Static Missions/pullStaticMissionInfo.Altis/blck_defines.hpp deleted file mode 100644 index 00f0b7b..0000000 --- a/Tools/Static Missions/pullStaticMissionInfo.Altis/blck_defines.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - for ghostridergaming - By Ghostrider [GRG] - Copyright 2016 - - -------------------------- - License - -------------------------- - All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License. - - http://creativecommons.org/licenses/by-nc-sa/4.0/ -*/ - -#define GRGserver -#define useAPEX -//#define useDynamicSimulation -#define blck_debugMode -#define blck_triggerLoopCompleteTime 40*60 -//#define blck_milServer -//#define GRG_TestServer -//#define blck_useCUP -//#define blck_useRHS - -//////////////////////////// -// Do not touch anything below this line -/////////////////////////// -#define onFoot 1 -#define inVehicle 2 - -// defines for static group spawners -#define staticPatrolTriggerRange 2000 -#define groupParameters 0 -#define patrolGroup 1 -#define groupSpawned 2 -#define timesSpawned 3 -#define respawnAt 4 - - diff --git a/Tools/Static Missions/pullStaticMissionInfo.Altis/directions.txt b/Tools/Static Missions/pullStaticMissionInfo.Altis/directions.txt deleted file mode 100644 index 2667f79..0000000 --- a/Tools/Static Missions/pullStaticMissionInfo.Altis/directions.txt +++ /dev/null @@ -1,60 +0,0 @@ -This tool formats most of the data required for STATIC missions based on what is present in your mission. -This include the layout of buildings, loot crates, markers, static weapons, and garrisons in buildings. - -A minimal mission would include: - A marker. You may use any marker you like. The new pullMarker script will format scripting needed to spawn that marker at the center of your mission. - The mission system will spawn AI, loot chests, emplaced weapons, vehicles and aircraft according to the defaults for the mission difficulty. - -The basic blckeagls static missions provided as examples have a bit more defined, usually some buildings to provide cover and make things more interesting. -I have added a new example mission, 'garrison.sqf', to illustrate technques you can use to tell the script which buildings to spawn AI in and where to spawn them. - -Note that you can add more detail including defining where infantry and statics spawn, where the one or more loot crates spawn, where vehicle patrols spawn and so forth. -Loot crates, AI, static weapons or autonomous turrets can be spawned inside or on top of buildings. Even vehicles could be spawned on buildings in principle. - To do this just place the representative objects where you want the mission to spawn them and the script should do the rest. - For infantry patrols, put one unit where you want the group to spawn. - Note: uniforms, weapons and other AI gear are not captured. You can however define _uniforms, _weapons and other AI gear for that mission. - See the template and default2 missions for examples. - -You can also have infantry and/or static weapons garrison buildings using either of two approaches. - 1. place an object of type garrisonMarkerObject inside the building you want to garrison. - I use a 100 cm sphere which is the default because it is easy to see and not used for much else. - The script will ensure that this building is identified for a garrison which will be spawned at the Arma pre-defined buildingPositions. - You can define the number of infantry and statics to spawn in these buildings. Their positions should be different each time the garrison is spawned. - Just like the other static AI, garrisons respawn. - - 2. Manualy place statics and units inside buildings where you want them to spawn. - Infantry will change position (crouch, prone, stand) and turn but will not move which prevents their normal behavior to leave the buliding and look for players. - The position of statics (e.g., HMG, GMG) will be recorded accurately. - To tell the script where you want units, turrets (HMG or anything else in the turret category) just place the units where you want them. - This can include some of the new, autonomous turrets. - -Once all that is done you are ready to pull the mission information. -To do that, from the EDEN Editor, - - 1. Preparation: copy all files from the tools\dynamicMissions\pullDynamicMissions folder into the folder containing the mission.sqm for your new mission. - Rename template.sqf to reflect the nature of your mission. - Open 'pullStaticMission.sqf' and check the preset definitions, all of which are set by #define. - Adjust these values as appropriate. - - 2. Pulling Marker data. Start Arma, and select Editor. Load your new mission in the editor and hit Play. - Using the mouse wheel, select pull marker data. - Alt-tab out and paste into the appropriate spot in your new mission.sqf. - - - 3. Pulling all other mission data. - Return to the editor. - Select 'tools' with then 'debug console'. - A window will pop up with a zone toward the center in which you can enter text. - 2. type execVM "pullDynamicMission.sqf"; in the box. - 3. hit Local exec - 4. hit Esc - 5. The script should run as indicated by text appearing in the lower left corner of your screen. - 6. When the text stops being updated, alt-tab out to your editor. - 7. You can now copy/past from that output into the relevant sections of the dynamic mission template. - - 4. Final touchups. - The tools will pull all objects including any spheres, arrows or other aids. - Be sure to remove these or comment them out or they will show up in your final mission on your server. - Adjust the remaining settings in the template such as difficulty level to suit your needs. - Add the name of the mission to the list of missions to be spawned for that difficulty level. - Test everything to be sure diff --git a/Tools/Static Missions/pullStaticMissionInfo.Altis/init.sqf b/Tools/Static Missions/pullStaticMissionInfo.Altis/init.sqf deleted file mode 100644 index 3240b7a..0000000 --- a/Tools/Static Missions/pullStaticMissionInfo.Altis/init.sqf +++ /dev/null @@ -1,3 +0,0 @@ - -player addAction["Pull MARKER Info","pullMarkerInfo.sqf"]; - diff --git a/Tools/Static Missions/pullStaticMissionInfo.Altis/mission.sqm b/Tools/Static Missions/pullStaticMissionInfo.Altis/mission.sqm deleted file mode 100644 index f490b1fcf6efc77ffbedb051a9a3d19b47e5cd07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16486 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 H@bCWtn9*XN diff --git a/Tools/Static Missions/pullStaticMissionInfo.Altis/pullMarkerInfo.sqf b/Tools/Static Missions/pullStaticMissionInfo.Altis/pullMarkerInfo.sqf deleted file mode 100644 index da92aca..0000000 --- a/Tools/Static Missions/pullStaticMissionInfo.Altis/pullMarkerInfo.sqf +++ /dev/null @@ -1,60 +0,0 @@ - -_cb = ""; - -////////////////// -// *** OPTIONAL **** -// Place a marker over your mission and configure it as you would like to to appear in the tame. -// The marker configuration will be included in the output of this script. -// Note ** Only the first marker placed will be processed ** -// Configure Marker -///////////////// -/* - _markerType = ["ELIPSE",[175,175],"GRID"]; - _markerType = ["mil_triangle",[0,0]]; -*/ - -diag_log format["<< ---- START %1 ---- >>",diag_tickTime]; - -_allmkr = allMapMarkers; -diag_log format["_allmkr = %1",_allmkr]; -if (count _allmkr == 0) then -//if !(typeName _mk isEqualTo "STRING") then -{ - hint "No Marker Found, no Marker Definitions Will Be generated"; - uiSleep 5; -} else { - - _mk = _allmkr select 0; - diag_log format["_mk = %1",_mk]; - systemChat format["marker shape = %1",markerShape _mk]; - systemChat format["marker type = %1",markerType _mk]; - _cb = _cb + format['_missionCenter = %1;%2',MarkerPos _mk,endl]; - //systemChat - switch (markerShape _mk) do - { - case "ELLIPSE": { - _cb = _cb + format['_markerType = ["%1",%2,"%3"];%4',toUpper(MarkerShape _mk),getMarkerSize _mk,toUpper(markerBrush _mk),endl]; - }; - case "RECTANGLE": { - _cb = _cb + format['_markerType = ["%1",%2,"%3"];%4',toUpper(MarkerShape _mk),getMarkerSize _mk,toUpper(markerBrush _mk),endl]; - }; - case "ICON": { - _cb = _cb + format['_markerType = ["%1",[0,0]];%2',getMarkerType _mk,endl]; - }; - }; - _cb = _cb + format['_markerColor = "%1";%2',markerColor _mk,endl]; - _cb = _cb + format['_markerMissionName = "%1";%2',MarkerText _mk,endl]; - _cb = _cb + format['_markerLabel = "%1";%2',"",endl]; - _cb = _cb + format["%1%1",endl]; -}; - -/////////////////// -// All done, notify the user and copy the output to the clipboard -/////////////////// -_msg = "Marker Data organzied, formated and copied to the Clipboard"; -hint _msg; -systemChat _msg; -systemChat format["_cb has %1 characters",count _cb]; -copyToClipboard _cb; -diag_log "DONE"; - diff --git a/Tools/Static Missions/pullStaticMissionInfo.Altis/pullStaticMission.sqf b/Tools/Static Missions/pullStaticMissionInfo.Altis/pullStaticMission.sqf deleted file mode 100644 index 38487ab..0000000 --- a/Tools/Static Missions/pullStaticMissionInfo.Altis/pullStaticMission.sqf +++ /dev/null @@ -1,414 +0,0 @@ - -_fn_isInside = { // returns true if an object is inside, underneath or on top of a building otherwise returns false. - ////////////////////// - // Determine if a unit is inside a building using two separate checkVisibility - ////////////////////// - // lineIntersects [ eyePos player, aimPos chopper, player, chopper] - _u = _this select 0; - private ["_u","_pos","_above","_below"]; - _pos = getPosASL _u; - _above = lineIntersects [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u]; - _below = lineintersects [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 2],_u]; - //diag_log format["_fn_isInside: _u %1 (%8)| typeOf _u %4 | _above %2 | _below %3 ",_u,_above,_below,typeOf _u]; - // If there is something above or below the object do a quick double-check to make sure there is a building there and not something else. - if (_above) then // test if any surfaces above are from buildingPos - { - _surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,100]; - _above = false; - { - //diag_log format["_fn_isInside: _x-2 = %2 | typeOf _x = %3",_x,_x select 2,typeOf (_x select 2)]; - if ((_x select 2) isKindOf "House") then {_above = true}; - }forEach _surfacesAbove; - }; - if (_below) then - { - _surfacesBelow = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 10],_u,_u,true,100]; - _above = false; - { - //diag_log format["_fn_isInside: _x-2 = %2 | typeOf _x = %3",_x,_x select 2,typeOf (_x select 2)]; - if ((_x select 2) isKindOf "House") then {_above = true}; - }forEach _surfacesBelow; - }; - - _isInside = if (_above || _below) then {true} else {false}; - //diag_log format["_fn_isInside: _isInside = %1",_isInside]; - _isInside -}; - -_fn_buildingContainer = { // returns the builing containing an object or objNull - private["_u","_pos","_building","_surfacesAbove","_surfacesBelow"]; - _u = _this select 0; - _pos = getPosASL _u; - private _building = objNull; - // lineIntersectsSurfaces [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2, returnUnique] - _surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,10]; - { - if ((_x select 2) isKindOf "House" && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; - } forEach _surfacesAbove; - if (_building isEqualTo objNull) then - { - _surfacesBelow = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 10],_u,_u,true,100]; - { - if ((_x select 2) isKindOf "House" && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; - } forEach _surfacesBelow; - }; - //diag_log format["_fn_buildingContainer: _u = %1 | _building = %2",_u,_building]; - _building -}; - -_fn_isInfantry = { // returns true if a unit is on foot otherwise returns false. - ////////////////////// - // Determine if a unit isinfantry rather than a unit manning a turret or vehicle - ////////////////////// - _u = _this select 0; - private _isInfantry = if ((_u isKindOf "Man") && (vehicle _u) isEqualTo _u) then {true} else {false}; - //diag_log format["_fn_isInfantry: _isInfantry = %1",_isInfantry]; - _isInfantry -}; - -diag_log "========== =========================="; -_msg = "starting script, please wait"; -systemChat _msg; -hint _msg; -/////////////////// -// Identify any buildings in which a garrison should be spawned using the Arma building positions. -// Tell the script which buildings to garrison by placing an object inside that designates them as such. -// I use a large yellow sphere for this purpose. -// The function below assembles a list of such buildings for use in defining the data for mission buildings. -/////////////////// - -private _cb = ""; - - -/////////////////// -// Change values of these constants to suit your needs -/////////////////// -#define aiDifficulty "Red" -#define minAI 3 -#define maxAI 6 -#define patrolRadius 45 -#define AI_respawnTime 600 -#define AI_timesToRespawn -1 -#define aiVehiclePatrolRadius 75 -#define vehiclePatrolRespawnTime 600 -#define vehiclePatrolTimesToRespawn -1 -#define staticWeaponRespawnTime 600 -#define staticWeaponTimesToRespawn -1 -#define aiAircraftPatrolRespawnTime 600 -#define aiAircraftPatrolRadius 1700 -#define aircraftPatrolTimesToRespawn -1 -#define oddsOfGarrison 0.67 -#define maxGarrisonStatics 3 -#define maxGarrisonUnits 4 -#define typesGarrisonStatics [] // When empty a static will be randomly chosen from the defaults for blckeagls -#define garrisionsTimesToRespawn -1 -#define garrisonMarkerObject "Sign_Sphere100cm_F" // This can be anything you like. I find this large sphere easy to see and convenient. -#define unitMarkerObject "Man" //"Sign_Arrow_Direction_Green_F" // This can be anything. I chose this arrow type because it allows you to easily indicate direction. - -//////////////////////// -// Begin pulling data here -/////////////////////// - -_cb = _cb + format["_garrisonedBuildings_BuildingPosnSystem = [",endl]; -private _garrisonedBuildings = []; -_helpers = allMissionObjects garrisonMarkerObject; -//diag_log format["_helpers = %1",_helpers]; -{ - if ( (typeOf _x) isEqualTo garrisonMarkerObject) then - { - private _isInside = [_x] call _fn_isInside; - if (_isInside) then - { - _building = [_x] call _fn_buildingContainer; - _garrisonedBuildings pushbackunique _building; - _garrisonedBuildings pushbackunique _x; - // data structure ["building Classname",[/*building pos*/],/*building dir*/,/*odds of garrison*/, /*Max Statics*/,/*types statics*/,/*max units*/], - // 1 2 3 4 5 6 7 8 9 10 11 12 13 - _line = format[' ["%1",%2,[%3,%4],[%5,%6],"%7",%8,%9,10,%11,%12,%13]',typeOf _building,getPosASL _building,vectorDir _building, vectorUp _building, 'true','true',aiDifficulty,oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits,AI_respawnTime,garrisionsTimesToRespawn]; - systemChat _line; - //diag_log _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; - }; -} forEach _helpers; -_cb = _cb + format["%1];%1%1",endl]; -//diag_log format["line (165): _cb = %1",_cb]; -_configuredStatics = []; -_configuredUnits = []; - -_fn_configureGarrisonForBuildingASL = { - private["_b","_staticsInBuilding","_unitsInBuilding","_staticsText","_unitsText","_buildingGarrisonASL","_staticsInBuilding","_unitsInBuilding","_count"]; - _b = _this select 0; - _count = 0; - if (_b in _garrisonedBuildings) exitWith {""}; - _staticsText = ""; - _unitsText = ""; - _buildingGarrisonASL = ""; - _staticsInBuilding = nearestObjects[getPosASL _building,["StaticWeapon"],sizeOf (typeOf _building)]; - { - if !(_x in _configuredStatics) then - { - _isInside = [_x] call _fn_isInside; - if (_isInside) then {_building = [_x] call _fn_buildingContainer}; - if (_b isEqualTo _building) then - { - _configuredStatics pushBackUnique _x; - - if (_staticsText isEqualTo "") then - { - _staticsText = format['["%1",%2,%3]',typeOf _x,(getPosASL _x) vectorDiff (getPosASL _b),getDir _x]; - } else { - _staticsText = _staticsText + format[',["%1",%2,%3]',typeOf _x,(getPosASL _x) vectorDiff (getPosASL _b),getDir _x]; - }; - }; - }; - } forEach _staticsInBuilding; - _unitsInBuilding = nearestObjects[getPosASL _building,[unitMarkerObject],sizeOf (typeOf _building)]; - - { - if !(_x in _configuredUnits) then - { - _isInside = [_x] call _fn_isInside; - if (_isInside) then {_building = [_x] call _fn_buildingContainer}; - if (_b isEqualTo _building) then - { - _configuredUnits pushBackUnique _x; - - if (_unitsText isEqualTo "") then - { - _unitsText = format["[%1,%2]",(getPosASL _x) vectorDiff (getPosASL _b),getDir _x]; - } else { - _unitsText = _unitsText + format[",[%1,%2]",(getPosASL _x) vectorDiff (getPosASL _b),getDir _x]; - }; - _count = _count + 1; - }; - }; - } forEach _unitsInBuilding; - if ( !(_staticsText isEqualTo "") || !(_unitsText isEqualTo "")) then - { // 1 2 3 4 5 6 7 8 9 10 11 - _buildingGarrisonASL = format[' ["%1",%2,[%3,%4],[%5,%6],"%7",[%8],[%9],%10,%11]',typeOf _b,getPosASL _b,vectorDir _b,vectorUp _b,'true','true',aiDifficulty,_staticsText,_unitsText,AI_respawnTime,garrisionsTimesToRespawn]; - _garrisonedBuildings pushBackUnique _b; - }; - _buildingGarrisonASL -}; - -private _count = 0; -private _buildingCount = 0; -_cb = _cb + "_garrisonedBuilding_ASLsystem = ["; -{ - private _isInside = [_x] call _fn_isInside; - if (_isInside) then - { - private _building = [_x] call _fn_buildingContainer; - private _include = if ( !(_building in _garrisonedBuildings) && !((typeOf _building) isEqualTo unitMarkerObject) && !((typeOf _building) isEqualTo garrisonMarkerObject)) then {true} else {false}; - if (_include) then - { - //diag_log format["building info for garrisonedBuilding_ATL: _x = %1 | _building = %1",_x,_building]; - private _buildingGarrisonInformation = [_building] call _fn_configureGarrisonForBuildingASL; - //diag_log format["_buildingGarrisonInformation(ATL) = %1",_buildingGarrisonInformation]; - //diag_log format["_buildingGarrisonInformation(ATL) = %1",_buildingGarrisonInformation]; - //diag_log format["typeName _buildingGarrisonInformation(ATL) = %1",typeName _buildingGarrisonInformation]; - //if (typeName _buildingGarrisonInformation isEqualTo "STRING") then - //{ - //diag_log format["length _buildingGarrisonInformation(ATL) = %1",count (toArray(_buildingGarrisonInformation))]; - //}; - private _strLength = count(toArray(_buildingGarrisonInformation)); - if (_strLength > 0) then - { - if (_count == 0) then - { - _cb = _cb + format["%1%2",endl,_buildingGarrisonInformation]; - } else { - _cb = _cb + format[",%1%2",endl,_buildingGarrisonInformation]; - }; - - _count = _count + 1; - }; - }; - }; - -} forEach ((allMissionObjects "StaticWeapon") + (allMissionObjects unitMarkerObject)); -_cb = _cb + format["%1];%1%1",endl]; -diag_log format["line (227): _cb = %1",_cb]; -uiSleep 1; -/////////////////// -// Configure info remaining mission landscape -/////////////////// -_land = allMissionObjects "Static"; - -_count = 0; -_cb = _cb + format["_missionLandscape = [",endl]; -{ - diag_log format["evaluating mission landscape: _x = %1 | typeOf _x = %1",_x, typeOf _x]; - //diag_log format["evaluating mission landscape: _x %1 | typeOf _x %1",_x, _x isKindOf "Helper_Base_F"]; - if !(_x in _garrisonedBuildings && !((typeOf _x) isEqualTo unitMarkerObject) && !((typeOf _x) isEqualTo garrisonMarkerObject)) then - { - _line = format[' ["%1",%2,[%3,%4],[%5,%6]]',typeOf _x,getPosASL _x,vectorDir _x, vectorUp _x, 'true','true']; - - systemChat _line; - if (_count == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - _count = _count + 1; - }; -}forEach allMissionObjects "Static"; -_cb = _cb + format["%1];%1%1",endl]; -diag_log format["line (276): _cb = %1",_cb]; - -/////////////////// -// Setup information for any remaining infantry groups -/////////////////// -_count = 0; -_cb = _cb + format["_aiGroupParameters = ["]; -{ - //[[22920.4,16887.3,3.19144],"red",[1,2], 75,120], - _isInside = [_x] call _fn_isInside; - _isInfantry = [_x] call _fn_isInfantry; - - diag_log format["_missionGroups: _unit %1 | _isInside %2 _isInfantry %3",_x,_isInside,_isInfantry]; - if (_isInfantry) then - { - if (!(surfaceIsWater (getPos _x)) && !(_isInside) && !(isPlayer _x) && !(_x in _configuredUnits)) then - { // 1 2 3 4 5 6 7 - _line = format[' [%1,"%2",[%3,%4],%5,%6,%7]',getPosASL _x,aiDifficulty,minAI,maxAI,patrolRadius,AI_respawnTime,AI_timesToRespawn]; - systemChat _line; - if (_count == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - _count = _count + 1; - }; - }; -}forEach allMissionObjects "Man"; -_cb = _cb + format["%1];%1%1",endl]; -diag_log format["line (303): _cb = %1",_cb]; - -_count = 0; -_cb = _cb+ format["_aiScubaGroupParameters = ["]; -{ - //[[22920.4,16887.3,3.19144],"red",[1,2], 75,120], - if (surfaceIsWater (getPos _x)) then - { // 1 2 3 4 5 6 7 - _line = format[' [%1,"%2",[%3,%4],%5,%6,%7]',getPosASL _x,aiDifficulty,minAI,maxAI,patrolRadius,AI_respawnTime,AI_timesToRespawn]; - systemChat _line; - if (_count == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - _count = _count + 1; - }; -}forEach allMissionObjects "Man"; -_cb = _cb + format["%1];%1%1",endl]; -diag_log format["line (321)): _cb = %1",_cb]; - -/////////////////// -// Setup Info for vehicle patrols -/////////////////// -_cb = _cb + format["_vehiclePatrolParameters = ["]; -{ - if !((typeOf _x) isKindOf "SDV_01_base_F") then - { - _line = format[' ["%1",%2,"%3",%4,%5,%6]',typeOf _x, getPosASL _x, aiDifficulty,aiVehiclePatrolRadius,vehiclePatrolRespawnTime,vehiclePatrolTimesToRespawn]; //["B_G_Offroad_01_armed_F",[22809.5,16699.2,0],"blue",600,10] - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; -}forEach ((allMissionObjects "Car") + (allMissionObjects "Tank") + allMissionObjects "Ship"); -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Configs for Air Patrols -/////////////////// -_cb = _cb + "_airPatrols = ["; - //[selectRandom _aircraftTypes,[22830.2,16618.1,11.4549],"blue",1000,60] -{ - _line = format[' ["%1",%2,"%3",%4,%5,%6]',typeOf _x, getPosASL _x, aiDifficulty,aiAircraftPatrolRadius,aiAircraftPatrolRespawnTime,aircraftPatrolTimesToRespawn]; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; -}forEach allMissionObjects "Air"; -_cb = _cb + format["%1];%1%1",endl]; - -/////////////////// -// Setup info for static/emplaced weapons -/////////////////// -_count = 0; -_cb = _cb + format["_missionEmplacedWeapons = ["]; -{ - if !(_x in _configuredStatics) then - { - // ["B_HMG_01_high_F",[22883.5,16757.6,6.31652],"blue",0,10] - // 1 2 3 4 5 6 - _line = format[' ["%1",%2,"%3",%4,%5,%6]',typeOf _x,getPosASL _x,aiDifficulty,0,staticWeaponRespawnTime,staticWeaponTimesToRespawn]; - systemChat _line; - if (_count == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - _count = _count + 1; - }; -}forEach allMissionObjects "StaticWeapon"; -_cb = _cb + format["%1];%1%1",endl]; - -_cb = _cb + "_submarinePatrolParameters = ["; -{ - if ((typeOf _x) isKindOf "SDV_01_base_F") then - { // 1 2 3 4 5 6 - _line = format[' ["%1",%2,"%3",%4,%5,%6]',typeOf _x, getPosASL _x, aiDifficulty,aiSubmarinePatrolRadius,vehicleSubmarineRespawnTime,vehiclePatrolTimesToRespawn]; //["B_G_Offroad_01_armed_F",[22809.5,16699.2,0],"blue",600,10] - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; - }; -}forEach allMissionObjects "Ship"; -_cb = _cb + format["%1];%1%1",endl]; - -_cb = _cb + "_missionLootBoxes = ["; -{ - // [selectRandom blck_crateTypes,[22904.8,16742.5,6.30195],[[0,1,0],[0,0,1]],[true,false], _crateLoot, _lootCounts] - _line = format[' ["%1",%2,%3,[true,false],_crateLoot,_lootCounts]',typeOf _x,getPosASL _x,[VectorDir _x, VectorUp _x]]; - systemChat _line; - if (_forEachIndex == 0) then - { - _cb = _cb + format["%1%2",endl,_line]; - } else { - _cb = _cb + format[",%1%2",endl,_line]; - }; -}forEach (allMissionObjects "ReammoBox") + (allMissionObjects "ReammoBox_F"); -_cb = _cb + format["%1];%1%1",endl]; - - -/////////////////// -// All done, notify the user and copy the output to the clipboard -/////////////////// -_msg = "All Objects organzied, formated and copied to the Clipboard"; -hint _msg; -systemChat _msg; -systemChat format["_cb has %1 characters",count _cb]; -copyToClipboard _cb; -//if (true) exitWith{diag_log _cb}; \ No newline at end of file diff --git a/Tools/Static Missions/pullStaticMissionInfo.Altis/template.sqf b/Tools/Static Missions/pullStaticMissionInfo.Altis/template.sqf deleted file mode 100644 index d719e41..0000000 --- a/Tools/Static Missions/pullStaticMissionInfo.Altis/template.sqf +++ /dev/null @@ -1,97 +0,0 @@ - - -/* - This is a simple mission using precisely placed loot crates and infantry, static weapons and vehicle patrols. - See the accompanying example mission in the exampleMission folder to get an idea how I laid this out. - Note that I exported the mission using the exportAll function of M3EDEN editor. -*/ - -#include "privateVars.sqf"; - -_mission = "static mission template"; // Included for additional documentation. Not intended to be spawned as a mission per se. - -_difficulty = "red"; // Skill level of AI (blue, red, green etc) -diag_log format["[blckeagls static missions] STARTED initializing middions %1 position at %2 difficulty %3",_mission,_missionCenter,_difficulty]; -_crateLoot = blck_BoxLoot_Orange; // You can use a customized _crateLoot configuration by defining an array here. It must follow the following format shown for a hypothetical loot array called _customLootArray - /* - _customLootArray = - // Loot is grouped as [weapons],[magazines],[items] in order to be able to use the correct function to load the item into the crate later on. - // Each item consist of the following information ["ItemName",minNum, maxNum] where min is the smallest number added and min+max is the largest number added. - - [ - [// Weapons - - ["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"] - ], - [//Magazines - ["10Rnd_93x64_DMR_05_Mag" ,1,5] - ], - [ // Optics - ["optic_KHS_tan",1,3] - ], - [// Materials and supplies - ["Exile_Item_MetalScrews",3,10] - // - ], - [//Items - ["Exile_Item_MountainDupe",1,3] - ], - [ // Backpacks - ["B_OutdoorPack_tan",1,2] - ] - ]; - */ - -_lootCounts = blck_lootCountsRed; // You can use a customized set of loot counts or one that is predefined but it must follow the following format: - // values are: number of things from the weapons, magazines, optics, materials(cinder etc), items (food etc) and backpacks arrays to add, respectively. - // blck_lootCountsOrange = [[6,8],[24,32],[5,10],[25,35],16,1]; // Orange - -/**************************************************** - - PLACE MARKER DEFINITIONS PULLED FROM YOUR MISSION BELOW - -*****************************************************/ - - - -/**************************************************** - - PLACE THE DATA DEFININING THE BUILDINGS, VEHICLES ETC. PULLED FROM YOUR MISSION BELOW - -*****************************************************/ - - - -/**************************************************** - - ENABLE ANY SETTINGS YOU LIKE FROM THE LIST BELOW. - iF THESE ARE NOT ENABLED THEN THE DEFAULTS DEFINED IN BLCK_CONFIG.SQF - AND THE MOD-SPECIFIC CONFIGURATIONS WILL BE USED. - -*****************************************************/ - -/* -_missionLandscapeMode = "precise"; // acceptable values are "random","precise" - // In precise mode objects will be spawned at the relative positions specified. - // In the random mode, objects will be randomly spawned within the mission area. - -_aircraftTypes = blck_patrolHelisRed; // You can use one of the pre-defined lists in blck_configs or your own custom array. -_noAirPatrols = blck_noPatrolHelisRed; // You can use one of the pre-defined values or a custom one. acceptable values are integers (1,2,3) or a range such as [2,4]; - // Note: this value is ignored if you specify air patrols in the array below. -// Change _useMines to true/false below to enable mission-specific settings. -_useMines = blck_useMines; // Set to false if you have vehicles patrolling nearby. -_uniforms = blck_SkinList; // You can replace this list with a custom list of uniforms if you like. -_headgear = blck_headgear; // You can replace this list with a custom list of headgear. -_vests = blck_vests; // You can replace this list with a custom list of vests. -_backpacks = blck_backpacks; // You can replace this list with a custom list of backpacks. -_weapons = blck_WeaponList_Orange; // You can replace this list with a customized list of weapons, or another predifined list from blck_configs_epoch or blck_configs_exile as appropriate. -_sideArms = blck_pistols; // You can replace this list with a custom list of sidearms. -*/ - - -//******************************************************** -// Do not modify anything below this line. -//******************************************************** -#include "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_initializeMission.sqf"; - -diag_log format["[blckeagls static missions] COMPLETED initializing middions %1 position at %2 difficulty %3",_mission,_missionCenter,_difficulty]; \ No newline at end of file