mirror of
https://github.com/Ghostrider-DbD-/GMS_RC.git
synced 2024-08-30 16:02:11 +00:00
Build 267 - Version 7.162
REQUIRES GMSCore version = 1.053; build = 36; buildDate = "10-01-23"; Or Later
This commit is contained in:
parent
23d33c2df7
commit
315aaa67a8
@ -14,13 +14,12 @@
|
|||||||
*/
|
*/
|
||||||
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
||||||
|
|
||||||
private["_locs","_startDir","_currentDir","_Arc","_dist","_newpos"];
|
|
||||||
params["_center","_num","_minDistance","_maxDistance"];
|
params["_center","_num","_minDistance","_maxDistance"];
|
||||||
|
|
||||||
_locs = [];
|
private _locs = [];
|
||||||
_startDir = round(random(360));
|
private _startDir = round(random(360));
|
||||||
_currentDir = _startDir;
|
private _currentDir = _startDir;
|
||||||
_Arc = 360/_num;
|
private _Arc = 360/_num;
|
||||||
|
|
||||||
for "_i" from 1 to _num do
|
for "_i" from 1 to _num do
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@ while {true} do
|
|||||||
{
|
{
|
||||||
_timer10Sec = diag_tickTime + 10;
|
_timer10Sec = diag_tickTime + 10;
|
||||||
[] call GMS_fnc_spawnNewMissions;
|
[] call GMS_fnc_spawnNewMissions;
|
||||||
[] call GMS_fnc_monitorInitializedMissions;
|
[] spawn GMS_fnc_monitorInitializedMissions;
|
||||||
};
|
};
|
||||||
|
|
||||||
if ((diag_tickTime > _timer1min)) then
|
if ((diag_tickTime > _timer1min)) then
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
//////////////////////////////////////////////////////
|
|
||||||
// Test whether one object (e.g., a player) is within a certain range of any of an array of other objects
|
|
||||||
/*
|
|
||||||
GMS_fnc_playerInRange
|
|
||||||
|
|
||||||
By Ghostrider [GRG]
|
|
||||||
Copyright 2016
|
|
||||||
--------------------------
|
|
||||||
License
|
|
||||||
--------------------------
|
|
||||||
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
|
|
||||||
|
|
||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
|
||||||
params[["_coords",[0,0,0]],["_range",0],["_onFootOnly",false]];
|
|
||||||
private ["_result","_players"];
|
|
||||||
|
|
||||||
private "_players";
|
|
||||||
|
|
||||||
if (_onFootOnly) then
|
|
||||||
{
|
|
||||||
_players = allPlayers select {(vehicle _x) isEqualTo _x && {_x distance _coords < _range}};
|
|
||||||
} else {
|
|
||||||
_players = allPlayers select {(_x distance _coords) < _range};
|
|
||||||
};
|
|
||||||
|
|
||||||
private _result = if (_players isEqualTo []) then {false} else {true};
|
|
||||||
|
|
||||||
_result
|
|
@ -0,0 +1,35 @@
|
|||||||
|
///////////////////////////////////////////////////////
|
||||||
|
/// Test whether one object (e.g., a player) is within a certain range of any of an array of other objects
|
||||||
|
/*
|
||||||
|
GMS_fnc_playerInRange
|
||||||
|
|
||||||
|
By Ghostrider [GRG]
|
||||||
|
Copyright 2016
|
||||||
|
--------------------------
|
||||||
|
License
|
||||||
|
--------------------------
|
||||||
|
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
||||||
|
params[["_coords",[0,0,0]],["_range",0],["_onFootOnly",true],["_onGroundOnly",true]];
|
||||||
|
private "_players";
|
||||||
|
if (_onGroundOnly) then {
|
||||||
|
_players = allPlayers select {(((getPosATL _x) select 2) < 1)};
|
||||||
|
} else {
|
||||||
|
_players = allPlayers;
|
||||||
|
};
|
||||||
|
if (_onFootOnly) then
|
||||||
|
{
|
||||||
|
// 9/27/23 Be sure any players detected are on the ground.
|
||||||
|
private _players = _players select{((vehicle _x) isEqualTo _x) && ((_x distance _coords) < _range)};
|
||||||
|
} else {
|
||||||
|
_players = _players select {(_x distance _coords) < _range};
|
||||||
|
};
|
||||||
|
|
||||||
|
private _result = if (_players isEqualTo []) then {false} else {true};
|
||||||
|
diag_log format["_playerInRange: _onGroundOnly = %3 |_result = %1 | _players = %2",_result,_players,_onGroundOnly];
|
||||||
|
_result
|
||||||
|
|
@ -14,14 +14,8 @@
|
|||||||
*/
|
*/
|
||||||
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
||||||
|
|
||||||
params["_locations","_dist",["_onFootOnly",false]];
|
params["_locations","_dist",["_onFootOnly",true],["_onGroundOnly",true]];
|
||||||
private _nearLocations = _locations select {[_x,_dist,_onFootOnly] call GMS_fnc_playerInRange};
|
private _nearLocations = _locations select {[_x,_dist,_onFootOnly,_onGroundOnly] call GMS_fnc_playerInRange};
|
||||||
//diag_log format["_fnc_playerInRangeArray: _locations = %1 | _dist = %2 | _nearLocations = %3",_locations,_dist,_nearLocations];
|
|
||||||
private _return = if (_nearLocations isEqualTo []) then {false} else {true};
|
private _return = if (_nearLocations isEqualTo []) then {false} else {true};
|
||||||
_return
|
_return
|
||||||
/*
|
|
||||||
{
|
|
||||||
_result = [_x,_dist,_onFootOnly] call GMS_fnc_playerInRange;
|
|
||||||
if (_result) exitWith {};
|
|
||||||
} forEach _locations;
|
|
||||||
_result
|
|
@ -17,7 +17,7 @@ if (GMS_debugLevel > 0) then {diag_log "[GMS] loading variables"};
|
|||||||
GMS_minFPS = 12;
|
GMS_minFPS = 12;
|
||||||
|
|
||||||
// radius within whih missions are triggered. The trigger causes the crate and AI to spawn.
|
// radius within whih missions are triggered. The trigger causes the crate and AI to spawn.
|
||||||
GMS_TriggerDistance = 1500;
|
//GMS_TriggerDistance = 1500;
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
// Do Not Touch Anything Below This Line
|
// Do Not Touch Anything Below This Line
|
||||||
@ -39,8 +39,8 @@ GMS_mainThreadUpdateInterval = 60;
|
|||||||
GMS_monitoring = false;
|
GMS_monitoring = false;
|
||||||
GMS_monitoringInitPass = 0;
|
GMS_monitoringInitPass = 0;
|
||||||
GMS_spawnHelisPass = 0;
|
GMS_spawnHelisPass = 0;
|
||||||
GMS_playerIsNear = false;
|
//GMS_playerIsNear = false;
|
||||||
GMS_aiKilled = false;
|
//GMS_aiKilled = false;
|
||||||
GMS_triggered = false;
|
GMS_triggered = false;
|
||||||
GMS_revealMode = "detailed"; //""basic" /*group or vehicle level reveals*/,detailed /*unit by unit reveals*/";
|
GMS_revealMode = "detailed"; //""basic" /*group or vehicle level reveals*/,detailed /*unit by unit reveals*/";
|
||||||
GMS_dynamicMissionsSpawned = 0;
|
GMS_dynamicMissionsSpawned = 0;
|
||||||
|
@ -38,7 +38,9 @@ if (_vests isEqualTo []) then {_vests = [_skillLevel] call GMS_fnc_selectAIV
|
|||||||
if (_backpacks isEqualTo []) then {_backpacks = [_skillLevel] call GMS_fnc_selectAIBackpacks};
|
if (_backpacks isEqualTo []) then {_backpacks = [_skillLevel] call GMS_fnc_selectAIBackpacks};
|
||||||
|
|
||||||
private _difficultyIndex = [_skillLevel] call GMS_fnc_getIndexFromDifficulty;
|
private _difficultyIndex = [_skillLevel] call GMS_fnc_getIndexFromDifficulty;
|
||||||
private _group = [
|
|
||||||
|
private "_group";
|
||||||
|
_group = [
|
||||||
_pos,
|
_pos,
|
||||||
_numberToSpawn,
|
_numberToSpawn,
|
||||||
GMSCore_side,
|
GMSCore_side,
|
||||||
@ -57,8 +59,9 @@ private _group = [
|
|||||||
0.33, // chance garrison
|
0.33, // chance garrison
|
||||||
false // isDrone Crew
|
false // isDrone Crew
|
||||||
] call GMSCore_fnc_spawnInfantryGroup;
|
] call GMSCore_fnc_spawnInfantryGroup;
|
||||||
_group setVariable["GMS_difficulty",_skillLevel];
|
|
||||||
//[format["GMS_fnc_spawnGroup: _group = %1",_group]] call GMS_fnc_log;
|
//[format["GMS_fnc_spawnGroup: _group = %1",_group]] call GMS_fnc_log;
|
||||||
|
_group setVariable["GMS_difficulty",_skillLevel];
|
||||||
|
|
||||||
[_group] call GMSCore_fnc_setupGroupBehavior;
|
[_group] call GMSCore_fnc_setupGroupBehavior;
|
||||||
private _skills = missionNamespace getVariable[format["GMS_Skills%1",_skillLevel],GMS_SkillsRed];
|
private _skills = missionNamespace getVariable[format["GMS_Skills%1",_skillLevel],GMS_SkillsRed];
|
||||||
[_group,_skills] call GMSCore_fnc_setupGroupSkills;
|
[_group,_skills] call GMSCore_fnc_setupGroupSkills;
|
||||||
@ -93,10 +96,32 @@ private _gear = [
|
|||||||
[GMS_loot, 1.0]
|
[GMS_loot, 1.0]
|
||||||
];
|
];
|
||||||
[_group,_gear,GMS_launchersPerGroup,GMS_useNVG] call GMSCore_fnc_setupGroupGear;
|
[_group,_gear,GMS_launchersPerGroup,GMS_useNVG] call GMSCore_fnc_setupGroupGear;
|
||||||
if !(_areaDimensions isEqualTo []) then
|
|
||||||
{
|
private _veh = vehicle (leader _group);
|
||||||
[_group,[],[_pos,_areaDimensions],300,0.33] call GMSCore_fnc_initializeWaypointsAreaPatrol;
|
private _type = [_veh] call BIS_fnc_objectType;
|
||||||
|
_type params["_typeObj","_subtypeObj"];
|
||||||
|
//diag_log format["GMS_fnc_spawnGroup: _veh %3 | _typeObj %1 | _subTypeObj %2",_typeObj,_subtypeObj,_veh];
|
||||||
|
|
||||||
|
private "_waypointClass";
|
||||||
|
switch (_typeObj) do {
|
||||||
|
case "Soldier": {_waypointClass =_typeObj};
|
||||||
|
case "Vehicle": {_waypointClass = _subtypeObj};
|
||||||
|
case "VehicleAutonomous": {_waypointClass = _subtypeObj};
|
||||||
|
default {_waypointClass = "Soldier"};
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
|
params[
|
||||||
|
["_group",grpNull], // group for which to configure / initialize waypoints
|
||||||
|
["_blackListed",[]], // areas to avoid within the patrol region
|
||||||
|
["_patrolAreaMarker",""], // a marker or array defining the patrol area center, size and shape
|
||||||
|
["_timeout",300],
|
||||||
|
["_garrisonChance",0], // chance that an infantry group will garison an building of type house - ignored for vehicles.
|
||||||
|
["_type",GMS_infrantryPatrol], // "infantry","vehicle","air","submersible", "staticweapon"
|
||||||
|
["_deletemarker",false]
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
|
||||||
|
if !(_areaDimensions isEqualTo []) then {[_group,[],[_pos,_areaDimensions],-1,0,_waypointClass,true] call GMSCore_fnc_initializeWaypointsAreaPatrol};
|
||||||
|
|
||||||
_group selectLeader ((units _group) select 0);
|
_group selectLeader ((units _group) select 0);
|
||||||
//[format["GMS_fnc_spawnGroup: _group = %1",_group]] call GMS_fnc_log;
|
//[format["GMS_fnc_spawnGroup: _group = %1",_group]] call GMS_fnc_log;
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
|
|
||||||
/*
|
|
||||||
By Ghostrider-GRG-
|
|
||||||
Copyright 2016
|
|
||||||
--------------------------
|
|
||||||
License
|
|
||||||
--------------------------
|
|
||||||
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
|
|
||||||
|
|
||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
|
||||||
*/
|
|
||||||
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
|
||||||
|
|
||||||
params["_center",
|
|
||||||
"_garrisonedBuilding_relPosSystem",
|
|
||||||
["_aiDifficultyLevel","Red"],
|
|
||||||
["_uniforms",[]],
|
|
||||||
["_headGear",[]],
|
|
||||||
["_vests",[]],
|
|
||||||
["_backpacks",[]],
|
|
||||||
["_weaponList",[]],
|
|
||||||
["_sideArms",[]]
|
|
||||||
];
|
|
||||||
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_garrisonBuilding_relPosSystem: _this %1 = %2",_forEachIndex,_this select _forEachIndex];
|
|
||||||
}forEach _this;
|
|
||||||
|
|
||||||
if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call GMS_fnc_selectAILoadout};
|
|
||||||
if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call GMS_fnc_selectAISidearms};
|
|
||||||
if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call GMS_fnc_selectAIUniforms};
|
|
||||||
if (_headGear isEqualTo []) then {_headGear = [_aiDifficultyLevel] call GMS_fnc_selectAIHeadgear};
|
|
||||||
if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call GMS_fnc_selectAIVests};
|
|
||||||
if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call GMS_fnc_selectAIBackpacks};
|
|
||||||
private["_group","_buildingsSpawned","_staticsSpawned","_g","_building","_return"];
|
|
||||||
_buildingsSpawned = [];
|
|
||||||
_staticsSpawned = [];
|
|
||||||
_group = [GMSCore_side,true] call GMS_fnc_createGroup;
|
|
||||||
if !(isNull _group) then
|
|
||||||
{
|
|
||||||
{
|
|
||||||
// ["Land_Unfinished_Building_02_F",[-21.8763,-45.978,-0.00213432],0,true,true,0.67,3,[],4],
|
|
||||||
_x params["_bldClassName","_bldRelPos","_bldDir","_allowDamage","_enableSimulation","_probabilityOfGarrision","_noStatics","_typesStatics","_noUnits"];
|
|
||||||
if (_typesStatics isEqualTo []) then {_typesStatics = GMS_staticWeapons};
|
|
||||||
_building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"];
|
|
||||||
_buildingsSpawned pushBack _building;
|
|
||||||
_building setPosATL (_bldRelPos vectorAdd _center);
|
|
||||||
[_building, _bldDir] call GMS_fnc_setDirUp;
|
|
||||||
_staticsSpawned = [
|
|
||||||
_building,
|
|
||||||
_group,
|
|
||||||
_noStatics,
|
|
||||||
_typesStatics,
|
|
||||||
_noUnits,
|
|
||||||
_aiDifficultyLevel,
|
|
||||||
_uniforms,
|
|
||||||
_headGear,
|
|
||||||
_vests,
|
|
||||||
_backpacks,
|
|
||||||
"none",
|
|
||||||
_weaponList,
|
|
||||||
_sideArms
|
|
||||||
] call GMS_fnc_spawnGarrisonInsideBuilding_relPos;
|
|
||||||
}forEach _garrisonedBuilding_relPosSystem;
|
|
||||||
};
|
|
||||||
_return = [_group,_buildingsSpawned,_staticsSpawned];
|
|
||||||
_return
|
|
||||||
|
|
@ -19,7 +19,10 @@ private ["_abort","_crates","_aiGroup","_objects","_groupPatrolRadius","_mission
|
|||||||
"_wait","_missionStartTime","_playerInRange","_missionTimedOut","_temp","_patrolVehicles","_vehToSpawn","_noChoppers","_chancePara","_paraSkill","_marker","_vehicleCrewCount",
|
"_wait","_missionStartTime","_playerInRange","_missionTimedOut","_temp","_patrolVehicles","_vehToSpawn","_noChoppers","_chancePara","_paraSkill","_marker","_vehicleCrewCount",
|
||||||
"_defaultMissionLocations","_garrisonedbuildings_buildingposnsystem","_garrisonedBuilding_ATLsystem", "_isScubaMission","_markerlabel","_missionLootBoxes","_airpatrols",
|
"_defaultMissionLocations","_garrisonedbuildings_buildingposnsystem","_garrisonedBuilding_ATLsystem", "_isScubaMission","_markerlabel","_missionLootBoxes","_airpatrols",
|
||||||
"_submarinePatrols","_scubaPatrols","_maxMissionRespawns",
|
"_submarinePatrols","_scubaPatrols","_maxMissionRespawns",
|
||||||
// New private variables
|
// New private variables 09-01-23 thruough 09-27-23
|
||||||
|
"_missionUGVs",
|
||||||
|
"_missionUAVs",
|
||||||
|
"_missionGarrisonedGroups",
|
||||||
"_chanceMissionSpawned",
|
"_chanceMissionSpawned",
|
||||||
"_rewardVehicles "];
|
"_rewardVehicles "];
|
||||||
|
|
||||||
@ -34,6 +37,7 @@ if (isNil "_spawnCratesTiming") then {_spawnCratesTiming = GMS_spawnCratesTim
|
|||||||
if (isNil "_loadCratesTiming") then {_loadCratesTiming = GMS_loadCratesTiming}; // valid choices are "atMissionCompletion" and "atMissionSpawn";
|
if (isNil "_loadCratesTiming") then {_loadCratesTiming = GMS_loadCratesTiming}; // valid choices are "atMissionCompletion" and "atMissionSpawn";
|
||||||
if (isNil "_missionPatrolVehicles") then {_missionPatrolVehicles = []};
|
if (isNil "_missionPatrolVehicles") then {_missionPatrolVehicles = []};
|
||||||
if (isNil "_missionGroups") then {_missionGroups = []};
|
if (isNil "_missionGroups") then {_missionGroups = []};
|
||||||
|
if (isNil "_missionGarrisonedGroups") then {_missionGarrisonedGroups = []};
|
||||||
if (isNil "_hostageConfig") then {_hostageConfig = []};
|
if (isNil "_hostageConfig") then {_hostageConfig = []};
|
||||||
if (isNil "_enemyLeaderConfig") then {_enemyLeaderConfig = []};
|
if (isNil "_enemyLeaderConfig") then {_enemyLeaderConfig = []};
|
||||||
if (isNil "_useMines") then {_useMines = GMS_useMines;};
|
if (isNil "_useMines") then {_useMines = GMS_useMines;};
|
||||||
@ -58,6 +62,8 @@ if (isNil "_garrisonedBuilding_ATLsystem") then {_garrisonedBuilding_ATLsystem =
|
|||||||
if (isNil "_garrisonedBuildings_BuildingPosnSystem") then {_garrisonedBuildings_BuildingPosnSystem = []};
|
if (isNil "_garrisonedBuildings_BuildingPosnSystem") then {_garrisonedBuildings_BuildingPosnSystem = []};
|
||||||
if (isNil "_vehicleCrewCount") then {_vehicleCrewCount = [_aiDifficultyLevel] call GMS_fnc_selectVehicleCrewCount};
|
if (isNil "_vehicleCrewCount") then {_vehicleCrewCount = [_aiDifficultyLevel] call GMS_fnc_selectVehicleCrewCount};
|
||||||
if (isNil "_airpatrols") then {_airpatrols = []};
|
if (isNil "_airpatrols") then {_airpatrols = []};
|
||||||
|
if (isNil "_missionUGVs") then {_missionUGVs = []};
|
||||||
|
if (isNil "_missionUAVs") then {_missionUAVs = []};
|
||||||
if (isNil "_submarinePatrols") then {_submarinePatrols = 0};
|
if (isNil "_submarinePatrols") then {_submarinePatrols = 0};
|
||||||
if (isNil "_submarinePatrolParameters") then {_submarinePatrolParameters = []};
|
if (isNil "_submarinePatrolParameters") then {_submarinePatrolParameters = []};
|
||||||
if (isNil "_scubaPatrols") then {_scubaPatrols = 0};
|
if (isNil "_scubaPatrols") then {_scubaPatrols = 0};
|
||||||
@ -76,15 +82,10 @@ if (isNil "_missionLootBoxes") then {_missionLootBoxes = []};
|
|||||||
if (isNil "_rewardVehicles") then {_rewardVehicles = []};
|
if (isNil "_rewardVehicles") then {_rewardVehicles = []};
|
||||||
|
|
||||||
if (isNil "_defaultMissionLocations") then {_defaultMissionLocations = []};
|
if (isNil "_defaultMissionLocations") then {_defaultMissionLocations = []};
|
||||||
if (isNil "_chanceMissionSpawned") then {_chanceMissionSpawned = 100};
|
if (isNil "_chanceMissionSpawned") then {_chanceMissionSpawned = 1.0};
|
||||||
if (isNil "_maxMissionRespawns") then {_maxMissionRespawns = -1};
|
if (isNil "_maxMissionRespawns") then {_maxMissionRespawns = -1};
|
||||||
if (isNil "_simpleObjects") then {_simpleObjects = []};
|
if (isNil "_simpleObjects") then {_simpleObjects = []};
|
||||||
if (isNil "_missionemplacedweapons") then
|
if (isNil "_missionemplacedweapons") then {_missionemplacedweapons = []};
|
||||||
{
|
|
||||||
_missionemplacedweapons = [];
|
|
||||||
diag_log format["[GMS] _missionSpawner: setting _missionemplacedweapons to its default value of %1",_missionemplacedweapons];
|
|
||||||
};
|
|
||||||
|
|
||||||
// Allow for and capture any custom difficult setting in the mission
|
// Allow for and capture any custom difficult setting in the mission
|
||||||
if !(isNil "_difficulty") then {_aiDifficultyLevel = _difficulty};
|
if !(isNil "_difficulty") then {_aiDifficultyLevel = _difficulty};
|
||||||
|
|
||||||
@ -161,6 +162,7 @@ private _aiConfigs = [
|
|||||||
_maxNoAI,
|
_maxNoAI,
|
||||||
_noAIGroups,
|
_noAIGroups,
|
||||||
_missionGroups,
|
_missionGroups,
|
||||||
|
_missionGarrisonedGroups,
|
||||||
_scubaPatrols, // Added Build 227
|
_scubaPatrols, // Added Build 227
|
||||||
_scubaGroupParameters,
|
_scubaGroupParameters,
|
||||||
_hostageConfig,
|
_hostageConfig,
|
||||||
@ -178,19 +180,24 @@ private _missionMessages = [
|
|||||||
|
|
||||||
private _timesSpawned = 0;
|
private _timesSpawned = 0;
|
||||||
private _isSpawned = false;
|
private _isSpawned = false;
|
||||||
|
private _spawnedAt = -1;
|
||||||
|
|
||||||
|
// This table structure is directly accessed using indexes defined in Compiles\Init\GMS_defines.hpp
|
||||||
private _table = [
|
private _table = [
|
||||||
_aiDifficultyLevel,
|
_aiDifficultyLevel, // index 0
|
||||||
_markerConfigs,
|
_markerConfigs, // index 1
|
||||||
_endCondition,
|
_endCondition, // index 2
|
||||||
_isscubamission,
|
_isscubamission, // index 3
|
||||||
_missionLootConfigs,
|
_missionLootConfigs, // index 4
|
||||||
_aiConfigs,
|
_aiConfigs, // index 5
|
||||||
_missionMessages,
|
_missionMessages, // index 6
|
||||||
_paraConfigs,
|
_paraConfigs, // index 7
|
||||||
_defaultMissionLocations,
|
_defaultMissionLocations,
|
||||||
_maxMissionRespawns,
|
_maxMissionRespawns, // index 9
|
||||||
_timesSpawned,
|
_timesSpawned, // index 10
|
||||||
_isSpawned
|
_chanceMissionSpawned, // index 11
|
||||||
|
_isSpawned, // index 12
|
||||||
|
_spawnedAt // index 13
|
||||||
];
|
];
|
||||||
//[format["_missionSpawner (182): _defaultMissionLocations %1 | _maxMissionRespawns %2 | _timesSpawned %3",_defaultMissionLocations,_maxMissionRespawns,_timesSpawned]] call GMS_fnc_log;
|
//[format["_missionSpawner (182): _defaultMissionLocations %1 | _maxMissionRespawns %2 | _timesSpawned %3",_defaultMissionLocations,_maxMissionRespawns,_timesSpawned]] call GMS_fnc_log;
|
||||||
_table
|
_table
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
||||||
params[["_missionList",[]],["_path",""],["_marker",""],["_difficulty","Red"],["_tMin",60],["_tMax",120],["_noMissions",1],["_isStatic",false]];
|
params[["_missionList",[]],["_path",""],["_marker",""],["_difficulty","Red"],["_tMin",60],["_tMax",120],["_noMissions",1],["_isStatic",false]];
|
||||||
//diag_log format["_addMissionToQue: _this = %1",_this];
|
//diag_log format["_addMissionToQue: _this = %1",_this];
|
||||||
/*
|
|
||||||
{
|
//{
|
||||||
diag_log format["_addMissionToQue: _this %1 = %2",_forEachIndex, _this select _forEachIndex];
|
// diag_log format["_addMissionToQue: _this %1 = %2",_forEachIndex, _this select _forEachIndex];
|
||||||
} forEach _this;
|
//} forEach _this;
|
||||||
*/
|
|
||||||
private "_waitTime";
|
private "_waitTime";
|
||||||
if (_isStatic) then {
|
if (_isStatic) then {
|
||||||
_waitTime = 60;
|
_waitTime = 60;
|
||||||
|
@ -83,7 +83,7 @@ switch (_endCode) do
|
|||||||
//[format["_endMission (102): _exception 1 (normal ending) | _mines %1 | _crates %2 | count _objects %3 | count _missionAI %4 ",_mines,_crates,count _objects, count _missionAI]] call GMS_fnc_log;
|
//[format["_endMission (102): _exception 1 (normal ending) | _mines %1 | _crates %2 | count _objects %3 | count _missionAI %4 ",_mines,_crates,count _objects, count _missionAI]] call GMS_fnc_log;
|
||||||
if (GMS_useSignalEnd) then
|
if (GMS_useSignalEnd) then
|
||||||
{
|
{
|
||||||
[_crates select 0,150] spawn GMSCore_fnc_visibleMarker;
|
[_crates select 0,150, GMS_smokeShellAtCrates] call GMSCore_fnc_visibleMarker;
|
||||||
{
|
{
|
||||||
_x enableRopeAttach true;
|
_x enableRopeAttach true;
|
||||||
}forEach _crates;
|
}forEach _crates;
|
||||||
@ -138,7 +138,7 @@ switch (_endCode) do
|
|||||||
GMS_hiddenTerrainObjects pushBack[_hiddenObjects,(diag_tickTime)];
|
GMS_hiddenTerrainObjects pushBack[_hiddenObjects,(diag_tickTime)];
|
||||||
if (GMS_useSignalEnd) then
|
if (GMS_useSignalEnd) then
|
||||||
{
|
{
|
||||||
[_crates select 0,150] spawn GMSCore_fnc_visibleMarker;
|
[(_crates select 0),150, GMS_smokeShellAtCrates] call GMSCore_fnc_visibleMarker;
|
||||||
{
|
{
|
||||||
_x enableRopeAttach true;
|
_x enableRopeAttach true;
|
||||||
}forEach _crates;
|
}forEach _crates;
|
||||||
@ -172,7 +172,7 @@ switch (_endCode) do
|
|||||||
GMS_hiddenTerrainObjects pushBack[_hiddenObjects,(diag_tickTime)];
|
GMS_hiddenTerrainObjects pushBack[_hiddenObjects,(diag_tickTime)];
|
||||||
if (GMS_useSignalEnd) then
|
if (GMS_useSignalEnd) then
|
||||||
{
|
{
|
||||||
[_crates select 0,150] spawn GMSCore_fnc_visibleMarker;
|
[_crates select 0,150, GMS_smokeShellAtCrates] call GMSCore_fnc_visibleMarker;
|
||||||
{
|
{
|
||||||
_x enableRopeAttach true;
|
_x enableRopeAttach true;
|
||||||
}forEach _crates;
|
}forEach _crates;
|
||||||
|
@ -20,7 +20,7 @@ params["_center",
|
|||||||
["_weaponList",[]],
|
["_weaponList",[]],
|
||||||
["_sideArms",[]]
|
["_sideArms",[]]
|
||||||
];
|
];
|
||||||
|
//[format["_garrisonBuilding_ATLsystem: _this = %1",_this]] call GMS_fnc_log;
|
||||||
private["_group","_buildingsSpawned","_staticsSpawned","_g","_building","_return"];
|
private["_group","_buildingsSpawned","_staticsSpawned","_g","_building","_return"];
|
||||||
_buildingsSpawned = [];
|
_buildingsSpawned = [];
|
||||||
_staticsSpawned = [];
|
_staticsSpawned = [];
|
||||||
@ -46,6 +46,12 @@ _unitsSpawned = [];
|
|||||||
*/
|
*/
|
||||||
#define areaDimensions [] // an empty array forces the spawnGroup function to skip setup of any waypoint
|
#define areaDimensions [] // an empty array forces the spawnGroup function to skip setup of any waypoint
|
||||||
private _group = [[0,0,0],_unitsToSpwan,_aiDifficultyLevel,[],_uniforms,_headgear,_vests,_backpacks,_weaponList,_sidearms,false] call GMS_fnc_spawnGroup;
|
private _group = [[0,0,0],_unitsToSpwan,_aiDifficultyLevel,[],_uniforms,_headgear,_vests,_backpacks,_weaponList,_sidearms,false] call GMS_fnc_spawnGroup;
|
||||||
|
|
||||||
|
for "_i" from 0 to (count waypoints _group - 1) do
|
||||||
|
{
|
||||||
|
deleteWaypoint [_group, 0];
|
||||||
|
};
|
||||||
|
|
||||||
_unitsSpawned append (units _group);
|
_unitsSpawned append (units _group);
|
||||||
private _units = units _group;
|
private _units = units _group;
|
||||||
_building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"];
|
_building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"];
|
||||||
@ -76,6 +82,7 @@ _unitsSpawned = [];
|
|||||||
_unit = _units deleteAt 0;
|
_unit = _units deleteAt 0;
|
||||||
_unit setPosATL (_unitRelPos vectorAdd (getPosATL _building));
|
_unit setPosATL (_unitRelPos vectorAdd (getPosATL _building));
|
||||||
_unit setDir _unitDir;
|
_unit setDir _unitDir;
|
||||||
|
//_unit disableAI "PATH";
|
||||||
}forEach _men;
|
}forEach _men;
|
||||||
}forEach _garrisonedBuilding_ATLsystem;
|
}forEach _garrisonedBuilding_ATLsystem;
|
||||||
//[format["_garrisonBuilding_ATLSystem: _unitsspawned %1 | _staticsSpawned %2 | BuildingsSpawned %3",_unitsSpawned,_staticsSpawned,_buildingsSpawned]] call GMS_fnc_log;
|
//[format["_garrisonBuilding_ATLSystem: _unitsspawned %1 | _staticsSpawned %2 | BuildingsSpawned %3",_unitsSpawned,_staticsSpawned,_buildingsSpawned]] call GMS_fnc_log;
|
||||||
|
@ -0,0 +1,130 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
By Ghostrider-GRG-
|
||||||
|
Copyright 2016
|
||||||
|
--------------------------
|
||||||
|
License
|
||||||
|
--------------------------
|
||||||
|
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
||||||
|
if (true) exitwith {["the Garrisoned Building Relative Position System is No Longer Supported in GMS","warning"] call GMS_fnc_core;}
|
||||||
|
params["_center",
|
||||||
|
"_garrisonedBuilding_relPosSystem",
|
||||||
|
["_aiDifficultyLevel","Red"],
|
||||||
|
["_uniforms",[]],
|
||||||
|
["_headGear",[]],
|
||||||
|
["_vests",[]],
|
||||||
|
["_backpacks",[]],
|
||||||
|
["_weaponList",[]],
|
||||||
|
["_sideArms",[]]
|
||||||
|
];
|
||||||
|
|
||||||
|
{
|
||||||
|
diag_log format["_fnc_garrisonBuilding_relPosSystem: _this %1 = %2",_forEachIndex,_this select _forEachIndex];
|
||||||
|
}forEach _this;
|
||||||
|
|
||||||
|
if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call GMS_fnc_selectAILoadout};
|
||||||
|
if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call GMS_fnc_selectAISidearms};
|
||||||
|
if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call GMS_fnc_selectAIUniforms};
|
||||||
|
if (_headGear isEqualTo []) then {_headGear = [_aiDifficultyLevel] call GMS_fnc_selectAIHeadgear};
|
||||||
|
if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call GMS_fnc_selectAIVests};
|
||||||
|
if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call GMS_fnc_selectAIBackpacks};
|
||||||
|
private["_group","_buildingsSpawned","_staticsSpawned","_g","_building","_return"];
|
||||||
|
_buildingsSpawned = [];
|
||||||
|
_staticsSpawned = [];
|
||||||
|
_groupsSpawned = [];
|
||||||
|
_unitsSpawned = [];
|
||||||
|
_group = [GMSCore_side,true] call GMS_fnc_createGroup;
|
||||||
|
if !(isNull _group) then
|
||||||
|
{
|
||||||
|
{
|
||||||
|
// ["Land_Unfinished_Building_02_F",[-21.8763,-45.978,-0.00213432],0,true,true,0.67,3,[],4],
|
||||||
|
_x params["_bldClassName","_bldRelPos","_bldDir","_allowDamage","_enableSimulation","_probabilityOfGarrision","_noStatics","_typesStatics","_noUnits"];
|
||||||
|
if (_typesStatics isEqualTo []) then {_typesStatics = GMS_staticWeapons};
|
||||||
|
_building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"];
|
||||||
|
_buildingsSpawned pushBack _building;
|
||||||
|
_building setPosATL (_bldRelPos vectorAdd _center);
|
||||||
|
private _positions = [_building] call BIS_fnc_buildingPositions;
|
||||||
|
/* GMS_fnc_spawnGroup
|
||||||
|
params[
|
||||||
|
["_pos",[-1,-1,1]],
|
||||||
|
["_numbertospawn",0],
|
||||||
|
["_skillLevel","red"],
|
||||||
|
["_areaDimensions",[]],
|
||||||
|
["_uniforms",[]],
|
||||||
|
["_headGear",[]],
|
||||||
|
["_vests",[]],
|
||||||
|
["_backpacks",[]],
|
||||||
|
["_weaponList",[]],
|
||||||
|
["_sideArms",[]],
|
||||||
|
["_scuba",false]
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
private _bldgGroup = [
|
||||||
|
_center,
|
||||||
|
(count _positions),
|
||||||
|
_aiDifficultyLevelm
|
||||||
|
[],
|
||||||
|
_uniforms,
|
||||||
|
_headgear,
|
||||||
|
_vests,
|
||||||
|
_backpacks,
|
||||||
|
_weaponList,
|
||||||
|
_sideArms,
|
||||||
|
_scuba
|
||||||
|
] call GMS_fnc_spawnGroup;
|
||||||
|
|
||||||
|
#define height 0
|
||||||
|
#define removeFuel 0
|
||||||
|
#define vehHitCode []
|
||||||
|
#define vehKilledCode []
|
||||||
|
private _damage = if (GMS_killEmptyStaticWeapons) then {1} else {0};
|
||||||
|
private _releaseToPlayers = if (GMS_killEmptyStaticWeapons) then {false} else {true};
|
||||||
|
private _availUnits = units _bldgGroup;
|
||||||
|
|
||||||
|
for "_i" from 1 to (_noStatics) do
|
||||||
|
{
|
||||||
|
if (count _unitsSpawned > (count _positions)) exitWith {};
|
||||||
|
if (_availUnits isEqualTo []) exitWith {};
|
||||||
|
// private _wep = [_static,_pos,_dir,height,_damage,removeFuel,_releaseToPlayers,GMS_vehicleDeleteTimer,vehHitCode,vehKilledCode] call GMSCore_fnc_spawnPatrolVehicle;
|
||||||
|
private _spawnPos = _positions deleteAt (round(random((count _positions)-1)));
|
||||||
|
private _static = [
|
||||||
|
(selectRandom _typesStatics),
|
||||||
|
(_spawnPos vectorAdd (getPosATL _building)),
|
||||||
|
(random (359),),
|
||||||
|
height,
|
||||||
|
damage,
|
||||||
|
removeFuel,
|
||||||
|
_releaseToPlayers,
|
||||||
|
GMS_vehicleDeleteTimer,
|
||||||
|
vehHitCode,
|
||||||
|
vehKilledCode
|
||||||
|
] call GMSCore_fnc_spawnPatrolVehicle;
|
||||||
|
_staticsSpawned pushBack _static;
|
||||||
|
private _unit = _availUnits deleteAt 0;
|
||||||
|
//[_static,_empGroup] call GMSCore_fnc_loadVehicleCrew;
|
||||||
|
_unit moveInGunner _static;
|
||||||
|
};
|
||||||
|
for "_i" from 1 to _noUnits do
|
||||||
|
{
|
||||||
|
if (count _unitsSpawned > (count _positions)) exitWith {};
|
||||||
|
if (_availUnits isEqualTo []) exitWith {};
|
||||||
|
private _unit = _availUnits deleteAt 0;
|
||||||
|
private _spawnPos = _positions deleteAt (round(random((count _positions)-1)));
|
||||||
|
_unit setPosATL (_spawnPos vectorAdd (getPosATL _building));
|
||||||
|
};
|
||||||
|
private _wp = [_bldgGroup,0];
|
||||||
|
_wp setWaypointType "MOVE";
|
||||||
|
_wp setWaypointCompletionRadius 0;
|
||||||
|
_wp waypointAttachObject _building;
|
||||||
|
//_wp setWaypointHousePosition _foreachindex;
|
||||||
|
//_wp setWaypointTimeout [15, 20, 30];
|
||||||
|
_wp setWaypointStatements["true",""];
|
||||||
|
} forEach _garrisonedBuilding_relPosSystem;
|
||||||
|
};
|
||||||
|
_return = [_group,_buildingsSpawned,_staticsSpawned];
|
||||||
|
_return
|
||||||
|
|
@ -22,20 +22,48 @@ params[
|
|||||||
"_isStatic"
|
"_isStatic"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// _missionConfigs is configured as:
|
||||||
|
/*
|
||||||
|
params [
|
||||||
|
_aiDifficultyLevel, // index 0
|
||||||
|
_markerConfigs, // index 1
|
||||||
|
_endCondition, // index 2
|
||||||
|
_isscubamission, // index 3
|
||||||
|
_missionLootConfigs, // index 4
|
||||||
|
_aiConfigs, // index 5
|
||||||
|
_missionMessages, // index 6
|
||||||
|
_paraConfigs, // index 8
|
||||||
|
_defaultMissionLocations, // index 9
|
||||||
|
_maxMissionRespawns, // index 10
|
||||||
|
_timesSpawned, // index 11
|
||||||
|
_chanceMissionSpawned, // index 12
|
||||||
|
_isSpawned, // index 13
|
||||||
|
_spawnedAt // index 14
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
|
||||||
_missionConfigs params [
|
_missionConfigs params [
|
||||||
"_difficulty",
|
"_difficulty", // index 0
|
||||||
"_markerConfigs",
|
"_markerConfigs", // index 1
|
||||||
"_endCondition",
|
"_endCondition", // index 2
|
||||||
"_isscubamission",
|
"_isscubamission", // index 3
|
||||||
"_missionLootConfigs",
|
"_missionLootConfigs", // index 4
|
||||||
"_aiConfigs",
|
"_aiConfigs", // index 5
|
||||||
"_missionMessages",
|
"_missionMessages", // index 6
|
||||||
"_paraConfigs",
|
"_paraConfigs", // index 7
|
||||||
"_defaultMissionLocations",
|
"_defaultMissionLocations",
|
||||||
"_maxMissionRespawns",
|
"_maxMissionRespawns", // index 9
|
||||||
"_timesSpawned",
|
"_timesSpawned", // index 10
|
||||||
"_isSpawned"
|
"_chanceMissionSpawned", // index 11
|
||||||
];
|
"_isSpawned", // index 12
|
||||||
|
"_spawnedAt"
|
||||||
|
];
|
||||||
|
|
||||||
|
#define timesSpawnedIndex 11
|
||||||
|
|
||||||
|
//diag_log format["_fnc_initializeMission _chanceMissionRespawned = %1", _chanceMissionSpawned];
|
||||||
|
// do not initialize if the odds of spawning are not favorable.
|
||||||
|
if (random(1) > _chanceMissionSpawned) exitWith {-1};
|
||||||
|
|
||||||
_markerConfigs params[
|
_markerConfigs params[
|
||||||
"_markerName", // The unique text identifier for the marker
|
"_markerName", // The unique text identifier for the marker
|
||||||
@ -46,10 +74,10 @@ _markerConfigs params[
|
|||||||
"_markerBrush"
|
"_markerBrush"
|
||||||
];
|
];
|
||||||
|
|
||||||
[format["_initializeMission (39): _markerName %1 | _key %2 | _missionCount %3 | _maxMissionRespawns %4 | _timesSpawned %5",_markerName,_key,_missionCount,_maxMissionRespawns,_timesSpawned]] call GMS_fnc_log;
|
//[format["_initializeMission (39): _markerName %1 | _key %2 | _missionCount %3 | _maxMissionRespawns %4 | _timesSpawned %5",_markerName,_key,_missionCount,_maxMissionRespawns,_timesSpawned]] call GMS_fnc_log;
|
||||||
|
|
||||||
// If the mission is a static mission and it has been spawned but not cleared then pass back a code indicating that
|
// If the mission is a static mission and it has been spawned but not cleared then pass back a code indicating that
|
||||||
if (_isStatic &&_isSpawned) exitWith {private _initialized = 3; _initialized};
|
if (_isStatic && _isSpawned) exitWith {private _initialized = 3; _initialized};
|
||||||
|
|
||||||
private _initialized = 0;
|
private _initialized = 0;
|
||||||
/*
|
/*
|
||||||
@ -58,14 +86,7 @@ private _initialized = 0;
|
|||||||
_coordsArray = [];
|
_coordsArray = [];
|
||||||
if !(_defaultMissionLocations isEqualTo []) then
|
if !(_defaultMissionLocations isEqualTo []) then
|
||||||
{
|
{
|
||||||
if (_timesSpawned < _maxMissionRespawns || {_maxMissionRespawns == -1}) then
|
|
||||||
{
|
|
||||||
_coords = selectRandom _defaultMissionLocations;
|
_coords = selectRandom _defaultMissionLocations;
|
||||||
#define timesSpawnedIndex 10
|
|
||||||
_missionConfigs set[timesSpawnedIndex, _timesSpawned + 1];
|
|
||||||
} else {
|
|
||||||
_initialized = 2;
|
|
||||||
};
|
|
||||||
} else {
|
} else {
|
||||||
if (_isScubaMission) then
|
if (_isScubaMission) then
|
||||||
{
|
{
|
||||||
@ -76,7 +97,10 @@ if !(_defaultMissionLocations isEqualTo []) then
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_initialized == 2) exitWith {_initialized};
|
_missionConfigs set[timesSpawnedIndex, _timesSpawned + 1];
|
||||||
|
_missionConfigs set[isSpawned, true];
|
||||||
|
_missionConfigs set[spawnedAt, diag_tickTime];
|
||||||
|
|
||||||
if (_coords isEqualTo [] || {_coords isEqualTo [0,0,0]}) exitWith
|
if (_coords isEqualTo [] || {_coords isEqualTo [0,0,0]}) exitWith
|
||||||
{
|
{
|
||||||
[format["No Safe Mission Spawn Position Found to spawn Mission %1",_markerMissionName],'warning'] call GMS_fnc_log;
|
[format["No Safe Mission Spawn Position Found to spawn Mission %1",_markerMissionName],'warning'] call GMS_fnc_log;
|
||||||
@ -105,17 +129,14 @@ if !(GMS_preciseMapMarkers) then
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (GMS_debugLevel >=30) then
|
|
||||||
{
|
{
|
||||||
{
|
|
||||||
diag_log format["_initializeMission (95) %1 = %2",_x,_markerConfigs select _forEachIndex];
|
diag_log format["_initializeMission (95) %1 = %2",_x,_markerConfigs select _forEachIndex];
|
||||||
} forEach [
|
} forEach [
|
||||||
"_markerType",
|
"_markerType",
|
||||||
"_markerColor",
|
"_markerColor",
|
||||||
"_markerSize",
|
"_markerSize",
|
||||||
"_markerBrush"
|
"_markerBrush"
|
||||||
];
|
];
|
||||||
};
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private _markerError = false;
|
private _markerError = false;
|
||||||
@ -147,7 +168,7 @@ private _markers = [
|
|||||||
_markerSize,
|
_markerSize,
|
||||||
_markerBrush] call GMS_fnc_createMissionMarkers;
|
_markerBrush] call GMS_fnc_createMissionMarkers;
|
||||||
|
|
||||||
if (GMS_debugLevel >= 3) then {[format["_initializeMission (130): _marker = %1 | _markerMissionName = %2 | _difficulty = %3",_markers,_markerMissionName,_difficulty]] call GMS_fnc_log};
|
if (GMS_debugLevel >= 2) then {[format["_initializeMission (130): _marker = %1 | _markerMissionName = %2 | _difficulty = %3",_markers,_markerMissionName,_difficulty]] call GMS_fnc_log};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Send a message to players.
|
Send a message to players.
|
||||||
@ -178,8 +199,8 @@ private _missionData = [
|
|||||||
lootVehicles,
|
lootVehicles,
|
||||||
_markers
|
_markers
|
||||||
];
|
];
|
||||||
private _spawnPara = -1;
|
#define spawnPara -1
|
||||||
GMS_initializedMissionsList pushBack [_key, missionTimeoutAt, triggered, _missionData, _missionConfigs, _spawnPara,_isSpawned,_isStatic];
|
GMS_initializedMissionsList pushBack [_key, missionTimeoutAt, triggered, _missionData, _missionConfigs, spawnPara,_isStatic];
|
||||||
//[format["_initializeMission (163): count GMS_initializedMissionsList = %1",count GMS_initializedMissionsList]] call GMS_fnc_log;
|
//[format["_initializeMission (163): count GMS_initializedMissionsList = %1",count GMS_initializedMissionsList]] call GMS_fnc_log;
|
||||||
_initialized = 1;
|
_initialized = 1;
|
||||||
_initialized
|
_initialized
|
@ -24,6 +24,9 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
if (_i > (count _missionsList)) exitWith {};
|
if (_i > (count _missionsList)) exitWith {};
|
||||||
|
|
||||||
// Select a mission category (blue, red, green , etd)
|
// Select a mission category (blue, red, green , etd)
|
||||||
|
/*
|
||||||
|
GMS_initializedMissionsList pushBack [_key, missionTimeoutAt, triggered, _missionData, _missionConfigs, spawnPara,_isStatic];
|
||||||
|
*/
|
||||||
private _el = _missionsList deleteAt 0;
|
private _el = _missionsList deleteAt 0;
|
||||||
_el params [
|
_el params [
|
||||||
"_key",
|
"_key",
|
||||||
@ -31,13 +34,12 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
"_triggered", // 2 // integer - specifies if mission was triggered by a player or scripting such as debug setting
|
"_triggered", // 2 // integer - specifies if mission was triggered by a player or scripting such as debug setting
|
||||||
"_missionData", // 4 // variable containing information specific to this instance of the mission such as location and objects
|
"_missionData", // 4 // variable containing information specific to this instance of the mission such as location and objects
|
||||||
"_missionConfigs", // 5 // Variables regarding the configuration of the dynamic mission
|
"_missionConfigs", // 5 // Variables regarding the configuration of the dynamic mission
|
||||||
"_spawnPara",
|
"_spawnPara", //
|
||||||
"_spawned",
|
"_isStatic" // 7 // A flag as to whether the mission is a static or dynamically spawned mission.
|
||||||
"_isStatic"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
#define triggered 2
|
#define triggered 2
|
||||||
#define missionCoords _missionData select 0
|
#define missionCoords (_missionData select 0)
|
||||||
#define delayTime 1
|
#define delayTime 1
|
||||||
|
|
||||||
private _monitorAction = -2;
|
private _monitorAction = -2;
|
||||||
@ -50,23 +52,22 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
_monitorAction = -1;
|
_monitorAction = -1;
|
||||||
//diag_log format["_monitorInitializedMissions (37) Mission Timeout Criteria Met at %1",diag_tickTime];
|
//diag_log format["_monitorInitializedMissions (37) Mission Timeout Criteria Met at %1",diag_tickTime];
|
||||||
} else {
|
} else {
|
||||||
private _playerInRange = [missionCoords, GMS_TriggerDistance, false, true] call GMS_fnc_playerInRange;
|
_playerInRange = if ({(_x distance2d missionCoords) < GMS_TriggerDistance && ((vehicle _x == _x) || (getPosATL _x) select 2 < 5)} count allPlayers > 0) then {true} else {false};
|
||||||
|
//diag_log format["_monitorInitializedMissions(56): _playerInRange = %1",_playerInRange];
|
||||||
if (_playerInRange) then {
|
if (_playerInRange) then {
|
||||||
//diag_log format["_monitorInitializedMissions (52) Player in range criteria met at %1 for _key %2",diag_tickTime,_key];
|
//diag_log format["_monitorInitializedMissions (52) Player in range criteria met at %1 for _key %2",diag_tickTime,_key];
|
||||||
//diag_log format["_monitorInitializedMissions(53) GMS_monitoring = %1 | GMS_monitoringInitPass = %2",GMS_monitoring,GMS_monitoringInitPass];
|
|
||||||
//diag_log format["_monitorInitializedMissions(54) count of entries for _el = %1", {_x isEqualTo _el} count _missionsList];
|
|
||||||
_monitorAction = 0;
|
_monitorAction = 0;
|
||||||
} else {
|
} else {
|
||||||
if (GMS_debugLevel >= 3) then
|
if (GMS_debugLevel >= 3) then
|
||||||
{
|
{
|
||||||
_monitorAction = 0;
|
_monitorAction = 0;
|
||||||
[format["_monitorInitializedMissions (54): mission triggered for GMS_debugLeve = %1",GMS_debugLevel]] call GMS_fnc_log;
|
[format["_monitorInitializedMissions (54): mission triggered for GMS_debugLevel = %1",GMS_debugLevel]] call GMS_fnc_log;
|
||||||
}; // simulate the mission being tripped by a player
|
}; // simulate the mission being tripped by a player
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_monitorInitializedMissions: time %1 | _monitorAction %2 | _missionParameters %3",diag_tickTime,_monitorAction,_missionParameters];
|
if (GMS_debugLevel > 0) then {[format["_monitorInitializedMissions (68): time %1 | _monitorAction %2 | _missionConfigs %3",diag_tickTime,_monitorAction,_missionConfigs]] call GMS_fnc_log};
|
||||||
|
|
||||||
switch (_monitorAction) do
|
switch (_monitorAction) do
|
||||||
{
|
{
|
||||||
@ -78,35 +79,26 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
// Handle Timeout
|
// Handle Timeout
|
||||||
case -1:
|
case -1:
|
||||||
{
|
{
|
||||||
|
// _missionConfigs is configured as:
|
||||||
/*
|
/*
|
||||||
// List the full list of variables in _missionConfigs to aide in coding
|
private _table = [
|
||||||
|
_aiDifficultyLevel, // index 0
|
||||||
_missionConfigs params [
|
_markerConfigs, // index 1
|
||||||
"_difficulty", // index = 0
|
_endCondition, // index 2
|
||||||
"_markerConfigs",
|
_isscubamission, // index 3
|
||||||
"_endCondition",
|
_missionLootConfigs, // index 4
|
||||||
"_isscubamission",
|
_aiConfigs, // index 5
|
||||||
"_missionLootConfigs",
|
_missionMessages, // index 6
|
||||||
"_aiConfigs",
|
_paraConfigs, // index 7
|
||||||
"_missionMessages",
|
_defaultMissionLocations,
|
||||||
"_paraConfigs",
|
_maxMissionRespawns, // index 9
|
||||||
"_defaultMissionLocations",
|
_timesSpawned, // index 10
|
||||||
"_maxMissionRespawns",
|
_chanceMissionSpawned, // index 11
|
||||||
"_timesSpawned",
|
_isSpawned, // index 12
|
||||||
"_isSpawned" // index = 11
|
_spawnedAt // index 13
|
||||||
];
|
];
|
||||||
*/
|
*/
|
||||||
|
|
||||||
_missionConfigs params[
|
|
||||||
"_difficulty",
|
|
||||||
"_markerConfigs",
|
|
||||||
"_endCondition",
|
|
||||||
"_isscubamission",
|
|
||||||
"_missionLootConfigs",
|
|
||||||
"_aiConfigs",
|
|
||||||
"_missionMessages"
|
|
||||||
];
|
|
||||||
|
|
||||||
_missionMessages params [
|
_missionMessages params [
|
||||||
"_assetKilledMsg",
|
"_assetKilledMsg",
|
||||||
"_endMsg"
|
"_endMsg"
|
||||||
@ -131,14 +123,47 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
// Handle mission waiting to be triggerd and player is within the range to trigger
|
// Handle mission waiting to be triggerd and player is within the range to trigger
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
[_missionData,_missionConfigs,_spawnPara] spawn GMS_fnc_spawnMissionAssets;
|
[_missionData,_missionConfigs,_spawnPara] call GMS_fnc_spawnMissionAssets;
|
||||||
|
|
||||||
|
// _el is structured as:
|
||||||
|
/*
|
||||||
|
_el params [
|
||||||
|
"_key",
|
||||||
|
"_missionTimeoutAt", // 1 // server time at which the mission times out.
|
||||||
|
"_triggered", // 2 // integer - specifies if mission was triggered by a player or scripting such as debug setting
|
||||||
|
"_missionData", // 4 // variable containing information specific to this instance of the mission such as location and objects
|
||||||
|
"_missionConfigs", // 5 // Variables regarding the configuration of the dynamic mission
|
||||||
|
"_spawnPara", //
|
||||||
|
"_isStatic" // 7 // A flag as to whether the mission is a static or dynamically spawned mission.
|
||||||
|
];
|
||||||
|
*/
|
||||||
_el set[triggered,1];
|
_el set[triggered,1];
|
||||||
_missionConfigs set[isSpawned,true];
|
|
||||||
GMS_monitorTriggered = _el select triggered;
|
// _missionConfigs is configured as:
|
||||||
|
/*
|
||||||
|
private _table = [
|
||||||
|
_aiDifficultyLevel, // index 0
|
||||||
|
_markerConfigs, // index 1
|
||||||
|
_endCondition, // index 2
|
||||||
|
_isscubamission, // index 3
|
||||||
|
_missionLootConfigs, // index 4
|
||||||
|
_aiConfigs, // index 5
|
||||||
|
_missionMessages, // index 6
|
||||||
|
_paraConfigs, // index 7
|
||||||
|
_defaultMissionLocations,
|
||||||
|
_maxMissionRespawns, // index 9
|
||||||
|
_timesSpawned, // index 10
|
||||||
|
_chanceMissionSpawned, // index 11
|
||||||
|
_isSpawned, // index 12
|
||||||
|
_spawnedAt // index 13
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
|
||||||
|
_missionConfigs set[isSpawned, true];
|
||||||
|
_missionConfigs set[spawnedAt, diag_tickTime];
|
||||||
|
|
||||||
_missionsList pushBack _el;
|
_missionsList pushBack _el;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
//diag_log format["_monitorInitializedMissions (396) End of Code Block | GMS_initializedMissionsList = %1",GMS_initializedMissionsList];
|
|
||||||
};
|
};
|
||||||
GMS_monitoring = false;
|
GMS_monitoring = false;
|
||||||
//GMS_activeMonitorThreads = GMS_activeMonitorThreads - 1;
|
|
@ -50,7 +50,24 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
"_lootVehicles",
|
"_lootVehicles",
|
||||||
"_markers"
|
"_markers"
|
||||||
];
|
];
|
||||||
|
/*
|
||||||
|
private _table = [
|
||||||
|
_aiDifficultyLevel, // index 0
|
||||||
|
_markerConfigs, // index 1
|
||||||
|
_endCondition, // index 2
|
||||||
|
_isscubamission, // index 3
|
||||||
|
_missionLootConfigs, // index 4
|
||||||
|
_aiConfigs, // index 5
|
||||||
|
_missionMessages, // index 6
|
||||||
|
_paraConfigs, // index 7
|
||||||
|
_defaultMissionLocations,
|
||||||
|
_maxMissionRespawns, // index 9
|
||||||
|
_timesSpawned, // index 10
|
||||||
|
_chanceMissionSpawned, // index 11
|
||||||
|
_isSpawned, // index 12
|
||||||
|
_spawnedAt // index 13
|
||||||
|
];
|
||||||
|
*/
|
||||||
_missionConfigs params[
|
_missionConfigs params[
|
||||||
"_difficulty",
|
"_difficulty",
|
||||||
"_markerConfigs",
|
"_markerConfigs",
|
||||||
@ -63,12 +80,14 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
"_defaultMissionLocations",
|
"_defaultMissionLocations",
|
||||||
"_maxMissionRespawns",
|
"_maxMissionRespawns",
|
||||||
"_timesSpawned",
|
"_timesSpawned",
|
||||||
"_isSpawned"
|
"_chanceMissionSpawned",
|
||||||
|
"_isSpawned",
|
||||||
|
"_spawnedAt"
|
||||||
];
|
];
|
||||||
|
|
||||||
private _missionComplete = -1;
|
private _missionComplete = -1;
|
||||||
private ["_secureAsset","_endIfPlayerNear","_endIfAIKilled"];
|
private ["_secureAsset","_endIfPlayerNear","_endIfAIKilled"];
|
||||||
//[format["_monitorSpawnedMissions: (67): _endCondition = %1 | _missionMarkerName = %2",_endCondition, _markerConfigs select 1]] call GMS_fnc_log;
|
//[format["_monitorSpawnedMissions: (67): _endCondition = %1 | _missionMarkerName = %2 _spawnedAt %3 | _isSpawned %4",_endCondition, _markerConfigs select 1, _spawnedAt, _isSpawned]] call GMS_fnc_log;
|
||||||
switch (_endCondition) do
|
switch (_endCondition) do
|
||||||
{
|
{
|
||||||
case playerNear: {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = false;};
|
case playerNear: {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = false;};
|
||||||
@ -79,18 +98,20 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//[format["_monitorSpawnedMissions: (88): _spawnPara = %3 | count _missionInfantry = %1 | _crates = %2",count _missionInfantry, _crates,_spawnPara]] call GMS_fnc_log;
|
|
||||||
if (GMS_debugLevel >= 5) throw 1;
|
if (GMS_debugLevel >= 5) throw 1;
|
||||||
if (GMS_debugLevel >= 4) throw 4;
|
if (GMS_debugLevel >= 4) throw 4;
|
||||||
private _playerIsNearCrates = [_crates,20,true] call GMS_fnc_playerInRangeArray;
|
//if !(_isSpawned) throw 6;
|
||||||
private _playerIsNearCenter = [_coords,20,true] call GMS_fnc_playerInRange;
|
if (diag_tickTime - _spawnedAt < 30) throw 7; // We do not want the mission clear immediately after it is spawned.
|
||||||
private _playerIsNear = if (_playerIsNearCrates || {_playerIsNearCenter}) then {true} else {false};
|
// _spawnedAt is set only after everything is spawned so just having a small safety factor of 60 seconds should be enough to be sure no one can complete the mission
|
||||||
GMS_playerIsNear = _playerIsnear;
|
// until everything is spawned and settled.
|
||||||
|
|
||||||
|
private _playerIsNear = if ({(((_x distance2d _coords) < 10)) && ((vehicle _x == _x))} count allPlayers > 0) then {true} else {false};
|
||||||
|
//GMS_playerIsNear = _playerIsnear;
|
||||||
|
|
||||||
private _minNoAliveForCompletion = (count _missionInfantry) - (round(GMS_killPercentage * (count _missionInfantry)));
|
private _minNoAliveForCompletion = (count _missionInfantry) - (round(GMS_killPercentage * (count _missionInfantry)));
|
||||||
private _aiKilled = if (({alive _x} count _missionInfantry) <= _minNoAliveForCompletion) then {true} else {false}; // mission complete
|
private _aiKilled = if (({alive _x} count _missionInfantry) <= _minNoAliveForCompletion) then {true} else {false}; // mission complete
|
||||||
GMS_aiKilled = _aiKilled;
|
//GMS_aiKilled = _aiKilled;
|
||||||
|
if (GMS_debugLevel >= 1) then {[format["_monitorSpawnedMissions(112): _playerIsNear = %1 | _aiKilled = %2",_playerIsNear,_aiKilled]] call GMS_fnc_log};
|
||||||
if (_endIfPlayerNear && {_playerIsNear}) then {throw 1}; // mission complete
|
if (_endIfPlayerNear && {_playerIsNear}) then {throw 1}; // mission complete
|
||||||
if (_endIfAIKilled && {_aiKilled}) then {throw 1};
|
if (_endIfAIKilled && {_aiKilled}) then {throw 1};
|
||||||
if (_spawnPara isEqualType -1) then
|
if (_spawnPara isEqualType -1) then
|
||||||
@ -103,7 +124,7 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
if (_spawnPara) then
|
if (_spawnPara) then
|
||||||
{
|
{
|
||||||
#define paraTriggerDistance 1
|
#define paraTriggerDistance 1
|
||||||
if ([_coords,_paraConfigs select paraTriggerDistance,true] call GMS_fnc_playerInRange) then
|
if (({(_x distance _coords) < (_paraConfigs select paraTriggerDistance)} count allPlayers) > 0) then
|
||||||
{
|
{
|
||||||
_spawnPara = false; // The player gets one try to spawn these.
|
_spawnPara = false; // The player gets one try to spawn these.
|
||||||
_el set[spawnPara,_spawnPara];
|
_el set[spawnPara,_spawnPara];
|
||||||
@ -169,12 +190,19 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
private _moved = false;
|
//private _moved = false;
|
||||||
|
if (GMS_debugLevel >= 2) then {[format["_monitorSpawnedMissions: testing for moved crates with GMS_crateMoveAllowed = %1 and _crate = %2",GMS_crateMovedAllowed,_crates]]};
|
||||||
if (!(_crates isEqualTo []) && {GMS_crateMoveAllowed}) then
|
if (!(_crates isEqualTo []) && {GMS_crateMoveAllowed}) then
|
||||||
{
|
{
|
||||||
|
//if ( _x distance (_x getVariable ["crateSpawnPos", (getPosATL _x)]) > 100) throw 2;
|
||||||
|
private _crateMoved = false;
|
||||||
{
|
{
|
||||||
if ( _x distance (_x getVariable ["crateSpawnPos", (getPos _x)]) > max_distance_crate_moved_uncompleted_mission) throw 2;
|
if (_x distance (_x getVariable ["crateSpawnPos", (getPosATL _x)]) > 100) then {
|
||||||
|
if (GMS_debugLevel > 0) then {[format["_monitorSpawnedMissions: _crate %1 moved %2 meters",_x, (_x distance _x getVariable ["crateSpawnPos", (getPosATL _x)])]] call GMS_fnc_log};
|
||||||
|
_crateMoved = true;
|
||||||
|
};
|
||||||
} forEach _crates;
|
} forEach _crates;
|
||||||
|
if (_crateMoved) throw 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
// If there were no throws then lets add the mission parameters back to the list of active missions and check on the mission in a bit.
|
// If there were no throws then lets add the mission parameters back to the list of active missions and check on the mission in a bit.
|
||||||
@ -205,7 +233,7 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
"_assetKilledMsg",
|
"_assetKilledMsg",
|
||||||
"_endMsg"
|
"_endMsg"
|
||||||
];
|
];
|
||||||
|
if (GMS_debugLevel > 0) then {[format["_monitorSpawnedMissions(234): _exception = %1",_exception]] call GMS_fnc_log};
|
||||||
switch (_exception) do
|
switch (_exception) do
|
||||||
{
|
{
|
||||||
case 1: { // Normal Mission End
|
case 1: { // Normal Mission End
|
||||||
@ -281,24 +309,47 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
["_isScuba",false],
|
["_isScuba",false],
|
||||||
["_endCode",-1]
|
["_endCode",-1]
|
||||||
*/
|
*/
|
||||||
//[format["_monitorSpawnedMissions (case 1): _markerConfigs %1 | _endMsg %2",_markerConfigs,_endMsg]] call GMS_fnc_log;
|
//[format["_monitorSpawnedMissions: Catch case 1 - normal mission waypointCompletionRadius - at %1",diag_tickTime]] call GMS_fnc_log;
|
||||||
[_key, _missionData, _endMsg, _markerConfigs, _missionLootConfigs,_isscubamission, 1] call GMS_fnc_endMission;
|
[_key, _missionData, _endMsg, _markerConfigs, _missionLootConfigs,_isscubamission, 1] call GMS_fnc_endMission;
|
||||||
_missionConfigs set [isSpawned,false];
|
|
||||||
|
// _missionConfigs is configured as:
|
||||||
|
/*
|
||||||
|
private _table = [
|
||||||
|
_aiDifficultyLevel, // index 0
|
||||||
|
_markerConfigs, // index 1
|
||||||
|
_endCondition, // index 2
|
||||||
|
_isscubamission, // index 3
|
||||||
|
_missionLootConfigs, // index 4
|
||||||
|
_aiConfigs, // index 5
|
||||||
|
_missionMessages, // index 6
|
||||||
|
_paraConfigs, // index 7
|
||||||
|
_defaultMissionLocations,
|
||||||
|
_maxMissionRespawns, // index 9
|
||||||
|
_timesSpawned, // index 10
|
||||||
|
_chanceMissionSpawned, // index 11
|
||||||
|
_isSpawned, // index 12
|
||||||
|
_spawnedAt // index 13
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
_missionConfigs set[isSpawned,false];
|
||||||
//[format["_monitorSpawnedMissions (265): _markerMissionName %1: end of case 1 for mission completion",_markerMissionName]] call GMS_fnc_log;
|
//[format["_monitorSpawnedMissions (265): _markerMissionName %1: end of case 1 for mission completion",_markerMissionName]] call GMS_fnc_log;
|
||||||
};
|
};
|
||||||
|
|
||||||
case 2: { // Abort, crate moved.
|
case 2: { // Abort, crate moved.
|
||||||
_endMsg = "Crate Removed from Mission Site Before Mission Completion: Mission Aborted";
|
_endMsg = "Crate Removed from Mission Site Before Mission Completion: Mission Aborted";
|
||||||
|
// _el is structured as:
|
||||||
/*
|
/*
|
||||||
["_key",-1],
|
_el params [
|
||||||
["_missionData",[]],
|
"_key",
|
||||||
["_endMsg",,""],
|
"_missionTimeoutAt", // 1 // server time at which the mission times out.
|
||||||
["_markerData",[]],
|
"_triggered", // 2 // integer - specifies if mission was triggered by a player or scripting such as debug setting
|
||||||
["_missionLootConfigs",[]],
|
"_missionData", // 4 // variable containing information specific to this instance of the mission such as location and objects
|
||||||
["_isScuba",false],
|
"_missionConfigs", // 5 // Variables regarding the configuration of the dynamic mission
|
||||||
["_endCode",-1]
|
"_spawnPara", //
|
||||||
|
"_isStatic" // 7 // A flag as to whether the mission is a static or dynamically spawned mission.
|
||||||
|
];
|
||||||
*/
|
*/
|
||||||
//[format["_monitorSpawnedMissions (case 2): _markerConfigs %1 | _endMsg %2",_markerConfigs,_endMsg]] call GMS_fnc_log;
|
[format["_monitorSpawnedMissions: Catch case 2 - crate moved - at %1",diag_tickTime]] call GMS_fnc_log;
|
||||||
[_key, _missionData, _endMsg, _markerConfigs, _missionLootConfigs, _isscubamission, 2] call GMS_fnc_endMission;
|
[_key, _missionData, _endMsg, _markerConfigs, _missionLootConfigs, _isscubamission, 2] call GMS_fnc_endMission;
|
||||||
_missionConfigs set [isSpawned,false];
|
_missionConfigs set [isSpawned,false];
|
||||||
};
|
};
|
||||||
@ -313,7 +364,7 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
["_isScuba",false],
|
["_isScuba",false],
|
||||||
["_endCode",-1]
|
["_endCode",-1]
|
||||||
*/
|
*/
|
||||||
//[format["_monitorSpawnedMissions (case 3): _markerConfigs %1 | _assetKilledMsg %2",_markerConfigs,_assetKilledMsg]] call GMS_fnc_log;
|
[format["_monitorSpawnedMissions: Catch case 3 - key asset killed - at %1",diag_tickTime]] call GMS_fnc_log;
|
||||||
[_key, _missionData, _assetKilledMsg, _markerConfigs, _missionLootConfigs,_isscubamission, 3] call GMS_fnc_endMission;
|
[_key, _missionData, _assetKilledMsg, _markerConfigs, _missionLootConfigs,_isscubamission, 3] call GMS_fnc_endMission;
|
||||||
_missionConfigs set [isSpawned,false];
|
_missionConfigs set [isSpawned,false];
|
||||||
};
|
};
|
||||||
@ -336,7 +387,7 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
};
|
};
|
||||||
|
|
||||||
case 5: { // SIMULATED Normal Mission End
|
case 5: { // SIMULATED Normal Mission End
|
||||||
//diag_log format["_monitorSpawnedMissions: (291): _markerMissionName %1: Normal mission end",_markerMissionName];
|
[format["_monitorSpawnedMissions: Catch case 5 - simulated mission end based on debug settiongs - at %1",diag_tickTime]] call GMS_fnc_log;
|
||||||
|
|
||||||
if ((_spawnCratesTiming) in ["atMissionEndGround","atMissionEndAir"]) then
|
if ((_spawnCratesTiming) in ["atMissionEndGround","atMissionEndAir"]) then
|
||||||
{
|
{
|
||||||
@ -404,6 +455,16 @@ for "_i" from 1 to (count _missionsList) do
|
|||||||
_missionConfigs set [isSpawned,false];
|
_missionConfigs set [isSpawned,false];
|
||||||
//[format["_monitorSpawnedMissions (363): _markerMissionName %1: end of case 1 for mission completion",_markerMissionName]] call GMS_fnc_log;
|
//[format["_monitorSpawnedMissions (363): _markerMissionName %1: end of case 1 for mission completion",_markerMissionName]] call GMS_fnc_log;
|
||||||
};
|
};
|
||||||
|
case 6: {
|
||||||
|
// Mission not fully spawned yet for some reason. This should never happen but this case is included for completeness.
|
||||||
|
[format["_monitorSpawnedMissions: Catch case 6 - mission not fully spawned - at %1",diag_tickTime]] call GMS_fnc_log;
|
||||||
|
_missionsList pushBack _el;
|
||||||
|
};
|
||||||
|
case 7: {
|
||||||
|
// The mission only just spawned - lets give it 60 sec to settle.
|
||||||
|
//[format["_monitorSpawnedMissions: Catch case 7 - wating for mission to settle - at %1",diag_tickTime]] call GMS_fnc_log;
|
||||||
|
_missionsList pushBack _el;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
@ -20,6 +20,13 @@ _crate setVariable["chute",_chute];
|
|||||||
_chute setPos [getPos _chute select 0, getPos _chute select 1, _dropHeight];
|
_chute setPos [getPos _chute select 0, getPos _chute select 1, _dropHeight];
|
||||||
_crate setPos (getPos _chute);
|
_crate setPos (getPos _chute);
|
||||||
_crate attachTo [_chute, [0,0,0]];
|
_crate attachTo [_chute, [0,0,0]];
|
||||||
if (_crateVisualMarker) then {[_crate,150] spawn GMS_fnc_visibleMarker};
|
|
||||||
|
/*
|
||||||
|
GMSCore_fnc_visibleMarker
|
||||||
|
private _defaultSmokeShells = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
|
||||||
|
private ["_start","_maxHeight","_smokeShell","_light","_lightSource"];
|
||||||
|
params[["_crate",objNull],["_time",60],["_smokeShell", selectRandom "_defaultSmokeShells"]];
|
||||||
|
*/
|
||||||
|
if (_crateVisualMarker) then {[_crate,150, GMS_smokeShellAtCrates] call GMSCore_fnc_visibleMarker};
|
||||||
_chute
|
_chute
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@ _crate setPosATL [_coords select 0, _coords select 1, (_coords select 2) + 0.25]
|
|||||||
[_crate, _crateDir] call GMS_fnc_setDirUp;
|
[_crate, _crateDir] call GMS_fnc_setDirUp;
|
||||||
_crate setVectorUp surfaceNormal getPosATL _crate;
|
_crate setVectorUp surfaceNormal getPosATL _crate;
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Original code
|
||||||
if ((_coords select 2) < 0 || {surfaceIsWater (_coords)}) then
|
if ((_coords select 2) < 0 || {surfaceIsWater (_coords)}) then
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -37,4 +39,25 @@ if ((_coords select 2) < 0 || {surfaceIsWater (_coords)}) then
|
|||||||
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
|
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
|
||||||
_light attachTo [_crate, [0,0,(_maxHeight + 0.5)]];
|
_light attachTo [_crate, [0,0,(_maxHeight + 0.5)]];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// From GMSCOre
|
||||||
|
GMSCore_fnc_visibleMarker
|
||||||
|
|
||||||
|
Purpose: spawn a temporary visible marker above an object
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
_crate: the object above which to spawn the marker
|
||||||
|
_time: how long the marker should be displayed (optionsl)
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
|
||||||
|
Copyright 2020 by Ghostrider-GRG-
|
||||||
|
|
||||||
|
#include "\GMSCore\Init\GMSCore_defines.hpp"
|
||||||
|
private _defaultSmokeShells = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
|
||||||
|
private ["_start","_maxHeight","_smokeShell","_light","_lightSource"];
|
||||||
|
params[["_crate",objNull],["_time",60],["_smokeShel", selectRandom", _defaultSmokeShells]];
|
||||||
|
|
||||||
|
*/
|
||||||
|
[_crate, 30, GMS_smokeShellAtCrates] call GMSCore_fnc_visibleMarker;
|
||||||
_crate;
|
_crate;
|
||||||
|
@ -19,11 +19,11 @@ _abort = false;
|
|||||||
_pos = [];
|
_pos = [];
|
||||||
|
|
||||||
private _emplacedWepData = +_missionEmplacedWeapons; // So we dont overwrite this for the next instance of the mission
|
private _emplacedWepData = +_missionEmplacedWeapons; // So we dont overwrite this for the next instance of the mission
|
||||||
//diag_log format["_spawnEmplacedWeaponArray(31): _useRelativePos = %1",_useRelativePos];
|
|
||||||
//diag_log format["_spawnEmplacedWeaponArray(32): count _emplacedWepData = %1 | _emplacedWepData = %2",count _emplacedWepData,_emplacedWepData];
|
|
||||||
|
|
||||||
{
|
{
|
||||||
_x params [["_static",""],["_pos",[0,0,0]],["_dir",0]];
|
_x params [["_static",""],["_pos",[0,0,0]],["_dir",0]];
|
||||||
|
|
||||||
|
if (isClass(configFile >> "CfgVehicles" >> _static)) then {
|
||||||
if (_useRelativePos) then
|
if (_useRelativePos) then
|
||||||
{
|
{
|
||||||
_pos = _coords vectorAdd _pos;
|
_pos = _coords vectorAdd _pos;
|
||||||
@ -70,6 +70,9 @@ private _emplacedWepData = +_missionEmplacedWeapons; // So we dont overwrite t
|
|||||||
//diag_log format["_spawnEmplacedWeaponArray(91): _wep = %1 | getPos _wep = %2 | _static = %3",_wep, getPosATL _wep, _static];
|
//diag_log format["_spawnEmplacedWeaponArray(91): _wep = %1 | getPos _wep = %2 | _static = %3",_wep, getPosATL _wep, _static];
|
||||||
//_gunner setVariable["GRG_vehType","emplaced"];
|
//_gunner setVariable["GRG_vehType","emplaced"];
|
||||||
_emplacedAI append _units;
|
_emplacedAI append _units;
|
||||||
|
} else {
|
||||||
|
[format["GMS_fnc_spawnEmplacedWeaponArray: Invalid classname %1 used in _missionEmplacedWeapons", _static],"warning"] call GMS_fnc_log;
|
||||||
|
};
|
||||||
} forEach _emplacedWepData;
|
} forEach _emplacedWepData;
|
||||||
|
|
||||||
GMS_monitoredVehicles append _emplacedWeps;
|
GMS_monitoredVehicles append _emplacedWeps;
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
|
||||||
|
params[
|
||||||
|
["_coords",[]],
|
||||||
|
["_garrisonedUnits",[]],
|
||||||
|
["_difficulty","Red"],
|
||||||
|
["_uniforms",[]],
|
||||||
|
["_headGear",[]],
|
||||||
|
["_vests",[]],
|
||||||
|
["_backpacks",[]],
|
||||||
|
["_weaponList",[]],
|
||||||
|
["_sideArms",[]]
|
||||||
|
];
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
diag_log format["_spawnGarrisonedUnits: _this %1 = %2",_forEachIndex, _x];
|
||||||
|
} forEach _this;
|
||||||
|
*/
|
||||||
|
if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call GMS_fnc_selectAILoadout};
|
||||||
|
if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call GMS_fnc_selectAISidearms};
|
||||||
|
if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call GMS_fnc_selectAIUniforms};
|
||||||
|
if (_headGear isEqualTo []) then {_headGear = [_aiDifficultyLevel] call GMS_fnc_selectAIHeadgear};
|
||||||
|
if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call GMS_fnc_selectAIVests};
|
||||||
|
if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call GMS_fnc_selectAIBackpacks};
|
||||||
|
#define unitsToSpawn 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
params[
|
||||||
|
["_pos",[-1,-1,1]],
|
||||||
|
["_numbertospawn",0],
|
||||||
|
["_skillLevel","red"],
|
||||||
|
["_areaDimensions",[]],
|
||||||
|
["_uniforms",[]],
|
||||||
|
["_headGear",[]],
|
||||||
|
["_vests",[]],
|
||||||
|
["_backpacks",[]],
|
||||||
|
["_weaponList",[]],
|
||||||
|
["_sideArms",[]],
|
||||||
|
["_scuba",false]
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
|
||||||
|
private _group = [[-1,-1,-1],count _garrisonedUnits,_difficulty,[],_uniforms,_headgear,_vests,_backpacks,_weaponList,_sidearms,false] call GMS_fnc_spawnGroup;
|
||||||
|
if (isNull _group) exitWith {["Null Group used in GMS_fnc_spawnGarrisonnedUnits","warning"] call GMS_fnc_log};
|
||||||
|
for "_i" from 0 to (count waypoints _group - 1) do
|
||||||
|
{
|
||||||
|
deleteWaypoint [_group, 0];
|
||||||
|
};
|
||||||
|
private _units = units _group;
|
||||||
|
//diag_log format["GMS_fnc_spawnGarrisonedUnits: _coords %3 | _group %1 | _units %2",_group,_units, _coords];
|
||||||
|
{
|
||||||
|
private _unit = _units select _forEachIndex;
|
||||||
|
private _location = _garrisonedUnits select _forEachIndex;
|
||||||
|
_location params["_unitRelPos","_unitDir"];
|
||||||
|
//diag_log format["GMS_fnc_spawnGarrisonedUnits: _unitRelPos %1 | _unitDir %2 | _location %3",_unitRelPos, _unitDir, _location];
|
||||||
|
_unit setPosATL (_unitRelPos vectorAdd _coords);
|
||||||
|
_unit setDir _unitDir;
|
||||||
|
//_unit disableAI "PATH";
|
||||||
|
} forEach _garrisonedUnits;
|
||||||
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
|||||||
#define configureWaypoints true
|
#define configureWaypoints true
|
||||||
|
|
||||||
params["_coords",["_minNoAI",3],["_maxNoAI",6],["_noAIGroups",0],["_missionGroups",[]],["_aiDifficultyLevel","red"],["_uniforms",[]],["_headGear",GMS_BanditHeadgear],["_vests",[]],["_backpacks",[]],["_weapons",[]],["_sideArms",[]],["_isScubaGroup",false]];
|
params["_coords",["_minNoAI",3],["_maxNoAI",6],["_noAIGroups",0],["_missionGroups",[]],["_aiDifficultyLevel","red"],["_uniforms",[]],["_headGear",GMS_BanditHeadgear],["_vests",[]],["_backpacks",[]],["_weapons",[]],["_sideArms",[]],["_isScubaGroup",false]];
|
||||||
//[format["GMS_fnc_spawnMissionAI: _this = %1",_this]] call GMS_fnc_log;
|
[format["GMS_fnc_spawnMissionAI: _this = %1",_this]] call GMS_fnc_log;
|
||||||
private _unitsToSpawn = 0;
|
private _unitsToSpawn = 0;
|
||||||
private _unitsPerGroup = 0;
|
private _unitsPerGroup = 0;
|
||||||
private _ResidualUnits = 0;
|
private _ResidualUnits = 0;
|
||||||
@ -37,6 +37,30 @@ if !(_missionGroups isEqualTo []) then
|
|||||||
_unitsToSpawn = round(_min + round(random(_max - _min)));
|
_unitsToSpawn = round(_min + round(random(_max - _min)));
|
||||||
private _groupPos = _coords vectorAdd _position;
|
private _groupPos = _coords vectorAdd _position;
|
||||||
private _newGroup = [_groupPos,_unitsToSpawn,_aiDifficultyLevel,patrolAreadDimensions,_uniforms,_headGear,_vests,_backpacks,_weapons,_sideArms,_isScubaGroup] call GMS_fnc_spawnGroup;
|
private _newGroup = [_groupPos,_unitsToSpawn,_aiDifficultyLevel,patrolAreadDimensions,_uniforms,_headGear,_vests,_backpacks,_weapons,_sideArms,_isScubaGroup] call GMS_fnc_spawnGroup;
|
||||||
|
/*
|
||||||
|
[
|
||||||
|
_group,
|
||||||
|
GMSAI_BlacklistedLocations,
|
||||||
|
_patrolMarker,
|
||||||
|
waypointTimeoutInfantryPatrols,
|
||||||
|
GMSAI_chanceToGarisonBuilding,
|
||||||
|
"infantry",
|
||||||
|
_deletemarker
|
||||||
|
] call GMSCore_fnc_initializeWaypointsAreaPatrol;
|
||||||
|
*/
|
||||||
|
private _movetoPos = [[[_groupPos, patrolAreadDimensions]],[]/* add condition that the spawn is not near a trader*/] call BIS_fnc_randomPos;
|
||||||
|
(leader _newGroup) moveTo _movetoPos;
|
||||||
|
(leader _newGroup) call GMSCore_fnc_nextWaypointAreaPatrol;
|
||||||
|
/*
|
||||||
|
[
|
||||||
|
_newGroup,
|
||||||
|
[_groupPos, [50,50]],
|
||||||
|
300,
|
||||||
|
0.33,
|
||||||
|
"infantry",
|
||||||
|
true
|
||||||
|
] call GMSCore_fnc_initializeWaypointsAreaPatrol;
|
||||||
|
*/
|
||||||
_groups pushBack _newGroup;
|
_groups pushBack _newGroup;
|
||||||
GMS_monitoredMissionAIGroups pushback _newGroup;
|
GMS_monitoredMissionAIGroups pushback _newGroup;
|
||||||
_allAI append (units _newGroup);
|
_allAI append (units _newGroup);
|
||||||
|
@ -81,6 +81,7 @@ _aiConfigs params [
|
|||||||
"_maxNoAI",
|
"_maxNoAI",
|
||||||
"_noAIGroups",
|
"_noAIGroups",
|
||||||
"_missionGroups",
|
"_missionGroups",
|
||||||
|
"_missionGarrisonedGroups",
|
||||||
"_scubaPatrols", // Added Build 227
|
"_scubaPatrols", // Added Build 227
|
||||||
"_scubaGroupParameters",
|
"_scubaGroupParameters",
|
||||||
"_hostageConfig",
|
"_hostageConfig",
|
||||||
@ -97,7 +98,14 @@ _markerConfigs params[
|
|||||||
private["_temp"];
|
private["_temp"];
|
||||||
if (GMS_SmokeAtMissions select 0) then // spawn a fire and smoke near the crate
|
if (GMS_SmokeAtMissions select 0) then // spawn a fire and smoke near the crate
|
||||||
{
|
{
|
||||||
_temp = [_coords,GMS_SmokeAtMissions select 1] call GMS_fnc_smokeAtCrates;
|
/*
|
||||||
|
params[["_pos",[0,0,0]],
|
||||||
|
["_mode","random"],
|
||||||
|
["_maxDist",12],
|
||||||
|
["_wrecks",_wrecksAvailable],
|
||||||
|
["_addFire",false]];
|
||||||
|
*/
|
||||||
|
_temp = [_coords,GMS_SmokeAtMissions select 1, GMS_wrecksAtMissions] call GMS_fnc_spawnSmokingObject;
|
||||||
_objects append _temp;
|
_objects append _temp;
|
||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
};
|
};
|
||||||
@ -137,6 +145,14 @@ if (!(_scubaGroupParameters isEqualTo []) || {_scubaPatrols > 0}) then
|
|||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//diag_log format["_spawnMissionAssests(141): _coords %1 | _missionGarrisonedGroups = %2 ",_coords, _missionGarrisonedGroups];
|
||||||
|
|
||||||
|
/*
|
||||||
|
No longer supported *****************************
|
||||||
|
*/
|
||||||
|
//if !(_missionGarrisonedGroups isEqualTo []) then {[_coords, _missionGarrisonedGroups,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call GMS_fnc_spawnGarrisonedUnits};
|
||||||
|
|
||||||
|
|
||||||
// TODO: 05/08/22 -> redo code to handle this
|
// TODO: 05/08/22 -> redo code to handle this
|
||||||
if !(_hostageConfig isEqualTo []) then
|
if !(_hostageConfig isEqualTo []) then
|
||||||
{
|
{
|
||||||
@ -160,6 +176,10 @@ if !(_enemyLeaderConfig isEqualTo []) then
|
|||||||
};
|
};
|
||||||
|
|
||||||
// TODO: 05/08/22 -> redo code to handle this
|
// TODO: 05/08/22 -> redo code to handle this
|
||||||
|
/*
|
||||||
|
No longer needed as of Build 270
|
||||||
|
Kept for backwards compatibility with existing missions.
|
||||||
|
*/
|
||||||
if !(_garrisonedBuilding_ATLsystem isEqualTo []) then // Note that there is no error checking here for nulGroups
|
if !(_garrisonedBuilding_ATLsystem isEqualTo []) then // Note that there is no error checking here for nulGroups
|
||||||
{
|
{
|
||||||
_temp = [_coords, _garrisonedBuilding_ATLsystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call GMS_fnc_garrisonBuilding_ATLsystem;
|
_temp = [_coords, _garrisonedBuilding_ATLsystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call GMS_fnc_garrisonBuilding_ATLsystem;
|
||||||
@ -170,16 +190,17 @@ if !(_garrisonedBuilding_ATLsystem isEqualTo []) then // Note that there is no
|
|||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
if !(_garrisonedBuildings_BuildingPosnSystem isEqualTo []) then
|
if !(_garrisonedBuildings_BuildingPosnSystem isEqualTo []) then
|
||||||
{
|
{
|
||||||
|
|
||||||
_temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call GMS_fnc_garrisonBuilding_RelPosSystem;
|
_temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call GMS_fnc_garrisonBuilding_RelPosSystem;
|
||||||
_objects append (_temp select 1);
|
_objects append (_temp select 1);
|
||||||
GMS_monitoredVehicles append (_temp select 2);
|
GMS_monitoredVehicles append (_temp select 2);
|
||||||
_missionInfantry append (units (_temp select 0));
|
_missionInfantry append (units (_temp select 0));
|
||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
/* GMS_fnc_garrisonBuilding_RelPosSystem
|
/* GMS_fnc_garrisonBuilding_RelPosSystem
|
||||||
params["_coords",
|
params["_coords",
|
||||||
["_missionEmplacedWeapons",[]],
|
["_missionEmplacedWeapons",[]],
|
||||||
@ -261,7 +282,6 @@ if (GMS_useVehiclePatrols && {!(_missionPatrolVehicles isEqualTo [])}) then
|
|||||||
}forEach _spawnLocations;
|
}forEach _spawnLocations;
|
||||||
_temp = [_coords,_difficulty,_vicsToSpawn,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call GMS_fnc_spawnMissionVehiclePatrols;
|
_temp = [_coords,_difficulty,_vicsToSpawn,_userelativepos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call GMS_fnc_spawnMissionVehiclePatrols;
|
||||||
_temp params["_vehs","_units"];
|
_temp params["_vehs","_units"];
|
||||||
|
|
||||||
_aiVehicles append _vehs;
|
_aiVehicles append _vehs;
|
||||||
_missionInfantry append _units;
|
_missionInfantry append _units;
|
||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
@ -305,14 +325,15 @@ if !(_airPatrols isEqualTo [] && {random(1) < _chanceHeliPatrol}) then // Spawn
|
|||||||
} else {
|
} else {
|
||||||
if ((_noChoppers > 0) && {random(1) < _chanceHeliPatrol}) then
|
if ((_noChoppers > 0) && {random(1) < _chanceHeliPatrol}) then
|
||||||
{
|
{
|
||||||
|
// GMS_fnc_findPositionsAlongARadius: params["_center","_num","_minDistance","_maxDistance"];
|
||||||
private _spawnLocations = [_coords,_noChoppers,100,120] call GMS_fnc_findPositionsAlongARadius;
|
private _spawnLocations = [_coords,_noChoppers,100,120] call GMS_fnc_findPositionsAlongARadius;
|
||||||
|
//[format["_spawnMissionAssets:(339): _spawnLocations = %1",_spawnLocations]] call GMS_fnc_log;
|
||||||
private _helisToSpawn = [];
|
private _helisToSpawn = [];
|
||||||
private _availableHelis = [_difficulty] call GMS_fnc_selectMissionHelis;
|
private _availableHelis = [_difficulty] call GMS_fnc_selectMissionHelis;
|
||||||
for "_i" from 1 to _noChoppers do
|
|
||||||
{
|
{
|
||||||
private _heli = selectRandom _availableHelis;
|
private _heli = selectRandom _availableHelis;
|
||||||
_helisToSpawn pushBack[_heli,_x,0];
|
_helisToSpawn pushBack[_heli,_x,random(359)];
|
||||||
};
|
} forEach _spawnLocations;
|
||||||
_temp = [_coords,_helisToSpawn,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList, _sideArms] call GMS_fnc_spawnMissionHelis;
|
_temp = [_coords,_helisToSpawn,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList, _sideArms] call GMS_fnc_spawnMissionHelis;
|
||||||
_temp params["_helisSpawned","_unitsSpawned"];
|
_temp params["_helisSpawned","_unitsSpawned"];
|
||||||
GMS_monitoredVehicles append _helisSpawned;
|
GMS_monitoredVehicles append _helisSpawned;
|
||||||
|
@ -19,9 +19,11 @@ private _units = [];
|
|||||||
//diag_log format["_spawnMissionHelis (19): GMS_monitoringInitPass = %3 | count _missionHelis = %1 | _missionHelis = %2",count _missionHelis,_missionHelis, GMS_monitoringInitPass];
|
//diag_log format["_spawnMissionHelis (19): GMS_monitoringInitPass = %3 | count _missionHelis = %1 | _missionHelis = %2",count _missionHelis,_missionHelis, GMS_monitoringInitPass];
|
||||||
{
|
{
|
||||||
_x params["_heli","_relPos","_direction"];
|
_x params["_heli","_relPos","_direction"];
|
||||||
|
//[format["_spawnMissionHelis: _heli = %1 | _relPos = %2 | _direction = %3 | isClass",_heli,_relPos,_direction, isClass(configFile >> "CfgVehicles" >> _heli)]] call GMS_fnc_log;
|
||||||
|
if (isClass(configFile >> "CfgVehicles" >> _heli)) then {
|
||||||
private _noCrew = [_heli,false] call BIS_fnc_crewCount;
|
private _noCrew = [_heli,false] call BIS_fnc_crewCount;
|
||||||
private _spawnPos = _coords vectorDiff _relPos;
|
private _spawnPos = _coords vectorDiff _relPos;
|
||||||
#define patrolArea [1000,1000]
|
#define patrolArea [500,500]
|
||||||
private _crewGroup = [_spawnPos,_noCrew,_difficulty,patrolArea,_uniforms,_headGear,_vests,_backpacks,_weaponList, _sideArms] call GMS_fnc_spawnGroup;
|
private _crewGroup = [_spawnPos,_noCrew,_difficulty,patrolArea,_uniforms,_headGear,_vests,_backpacks,_weaponList, _sideArms] call GMS_fnc_spawnGroup;
|
||||||
_crewGroup setVariable["GMS_group",true];
|
_crewGroup setVariable["GMS_group",true];
|
||||||
_units append (units _crewGroup);
|
_units append (units _crewGroup);
|
||||||
@ -50,9 +52,27 @@ private _units = [];
|
|||||||
];
|
];
|
||||||
*/
|
*/
|
||||||
private _aircraft = [_heli,_crewGroup,_spawnPos,_direction,heliHeight,heliDamage,heliRemoveFuel,_releaseToPlayers,GMS_vehicleDeleteTimer,vehHitCode,vehKilledCode] call GMSCore_fnc_spawnPatrolAircraft;
|
private _aircraft = [_heli,_crewGroup,_spawnPos,_direction,heliHeight,heliDamage,heliRemoveFuel,_releaseToPlayers,GMS_vehicleDeleteTimer,vehHitCode,vehKilledCode] call GMSCore_fnc_spawnPatrolAircraft;
|
||||||
|
private _movetoPos = [[[_spawnPos, patrolArea]],[]/* add condition that the spawn is not near a trader*/] call BIS_fnc_randomPos;
|
||||||
|
(driver _aircraft) moveTo _movetoPos;
|
||||||
|
(driver _aircraft) call GMSCore_fnc_nextWaypointAreaPatrol;
|
||||||
|
/*
|
||||||
|
[
|
||||||
|
_crewGroup,
|
||||||
|
[],
|
||||||
|
[_spawnPos, patrolArea],
|
||||||
|
300,
|
||||||
|
0,
|
||||||
|
"air",
|
||||||
|
true
|
||||||
|
] call GMSCore_fnc_initializeWaypointsAreaPatrol;
|
||||||
|
*/
|
||||||
_helis pushBack _aircraft;
|
_helis pushBack _aircraft;
|
||||||
|
if (GMS_debugLevel > 0) then {[format["_spawnMissionHelis: _heli %1 spawned with crew _2",typeOf _aircraft,_crewGroup]] call GMS_fnc_log};
|
||||||
|
} else {
|
||||||
|
[format["GMS_fnc_spawnEmplacedWeaponArray: Invalid classname %1 used in _airPatrols", _heli],"warning"] call GMS_fnc_log;
|
||||||
|
};
|
||||||
|
|
||||||
} forEach _missionHelis;
|
} forEach _missionHelis;
|
||||||
diag_log format["_spawnMissionHelis: GMS_spawnHelisPass = %1 | GMS_monitorTriggered = %2",GMS_spawnHelisPass, GMS_monitorTriggered];
|
|
||||||
diag_log format["_spawnMissionHelis: GMS_playerIsNear = %1 | GMS_aiKilled = %2", GMS_playerIsNear, GMS_aiKilled];
|
|
||||||
GMS_spawnHelisPass = GMS_spawnHelisPass + 1;
|
GMS_spawnHelisPass = GMS_spawnHelisPass + 1;
|
||||||
[_helis,_units]
|
[_helis,_units]
|
@ -32,13 +32,21 @@ private["_spawnPos"];
|
|||||||
private _vehicles = [];
|
private _vehicles = [];
|
||||||
private _missionAI = [];
|
private _missionAI = [];
|
||||||
private _patrolsThisMission = +_missionPatrolVehicles;
|
private _patrolsThisMission = +_missionPatrolVehicles;
|
||||||
//diag_log format["_spawnMissionVehiclePatrols(42): count _patrolsThisMission = %1 | _patrolsThisMission = %2",count _patrolsThisMission, _patrolsThisMission];
|
//diag_log format["_coords = %3 | _spawnMissionVehiclePatrols(35): count _patrolsThisMission = %1 | _patrolsThisMission = %2",count _patrolsThisMission, _patrolsThisMission, _coords];
|
||||||
|
//{
|
||||||
|
// diag_log format["_spawnMissionPatrolVehicles(37): vehicle definition = %1",_x];
|
||||||
|
//} forEach _patrolsThisMission;
|
||||||
#define configureWaypoints false
|
#define configureWaypoints false
|
||||||
{
|
{
|
||||||
_x params["_vehName","_pos"];
|
//diag_log format["_spawnMissionVehiclePatrols(41): _x = %1",_x];
|
||||||
if (_useRelativePos) then {_pos = _coords vectorAdd _pos};
|
_x params[["_vehName",""],["_pos",[]],["_dir",0]];
|
||||||
_pos = _pos findEmptyPosition[0,50,_vehName];
|
//diag_log format["_spawnMissionVehiclePatrols(43): _vehName = %1 | _pos = %2 | _dir = %3 | isClass _vehName = %4",_vehName,_pos,_dir, isClass(configFile >> "CfgVehicles" >> _vehName)];
|
||||||
#define vehiclePatrolAreaDimensions [500,500]
|
if (_useRelativePos) then {_pos = _coords vectorAdd _pos}; // else {_pos = (_coords vectorAdd _pos) findEmptyPosition[0,50,_vehName]};
|
||||||
|
//diag_log format["_spawnMissionVehiclePatrols(45): _pos updated to %1",_pos];
|
||||||
|
if (isClass(configFile >> "CfgVehicles" >> _vehName)) then {
|
||||||
|
if !(_pos isEqualTo []) then {
|
||||||
|
|
||||||
|
#define vehiclePatrolAreaDimensions [100,100]
|
||||||
private _maxCrewConfigs = [_vehName,true] call BIS_fnc_crewCount;
|
private _maxCrewConfigs = [_vehName,true] call BIS_fnc_crewCount;
|
||||||
private _maxCrewBlck = missionNamespace getVariable[format["GMS_vehCrew_%1",_skillAI],3];
|
private _maxCrewBlck = missionNamespace getVariable[format["GMS_vehCrew_%1",_skillAI],3];
|
||||||
private _crewCount = _maxCrewBlck min _maxCrewConfigs;
|
private _crewCount = _maxCrewBlck min _maxCrewConfigs;
|
||||||
@ -57,6 +65,20 @@ private _patrolsThisMission = +_missionPatrolVehicles;
|
|||||||
private _damage = 0.5;
|
private _damage = 0.5;
|
||||||
private _releaseToPlayers = GMS_allowClaimVehicle;
|
private _releaseToPlayers = GMS_allowClaimVehicle;
|
||||||
|
|
||||||
|
/*
|
||||||
|
params[
|
||||||
|
["_className",""], // Clasname of vehicle to be spawned
|
||||||
|
["_spawnPos",[0,0,0]], // selfevident
|
||||||
|
["_dir",0], // selfevident
|
||||||
|
["_height",0],
|
||||||
|
["_disable",0], // damage value set to this value if less than this value when all crew are dead
|
||||||
|
["_removeFuel",0.2], // fuel set to this value when all crew dead
|
||||||
|
["_releaseToPlayers",true],
|
||||||
|
["_deleteTimer",300],
|
||||||
|
["_vehHitCode",[]],
|
||||||
|
["_vehKilledCode",[]]
|
||||||
|
];
|
||||||
|
*/
|
||||||
private _vehicle = [_vehName,_pos,dir,height,maxDamage,removeFuel,_releaseToPlayers,GMS_vehicleDeleteTimer,vehHitCode,vehKilledCode] call GMSCore_fnc_spawnPatrolVehicle;
|
private _vehicle = [_vehName,_pos,dir,height,maxDamage,removeFuel,_releaseToPlayers,GMS_vehicleDeleteTimer,vehHitCode,vehKilledCode] call GMSCore_fnc_spawnPatrolVehicle;
|
||||||
[_vehicle,_vehGroup] call GMSCore_fnc_loadVehicleCrew;
|
[_vehicle,_vehGroup] call GMSCore_fnc_loadVehicleCrew;
|
||||||
_vehGroup setVariable["GMS_group",true];
|
_vehGroup setVariable["GMS_group",true];
|
||||||
@ -64,7 +86,39 @@ private _patrolsThisMission = +_missionPatrolVehicles;
|
|||||||
[_vehicle,GMS_disabledSensors] call GMSCore_fnc_disableVehicleSensors;
|
[_vehicle,GMS_disabledSensors] call GMSCore_fnc_disableVehicleSensors;
|
||||||
if (GMS_disableInfrared) then {_vehicle disableTIEquipment true};
|
if (GMS_disableInfrared) then {_vehicle disableTIEquipment true};
|
||||||
_vehicles pushback _vehicle;
|
_vehicles pushback _vehicle;
|
||||||
|
/* // From GMSAI
|
||||||
|
private _movetoPos = [[[getMarkerPos _patrolArea,markerSize _patrolArea]],[]] call BIS_fnc_randomPos;
|
||||||
|
(driver _vehicle) moveTo _movetoPos;
|
||||||
|
[
|
||||||
|
_group,
|
||||||
|
_blacklisted,
|
||||||
|
_patrolArea,
|
||||||
|
_timeout,
|
||||||
|
GMSAI_chanceToGarisonBuilding,
|
||||||
|
"vehicle",
|
||||||
|
_markerDelete
|
||||||
|
] call GMSCore_fnc_initializeWaypointsAreaPatrol;
|
||||||
|
*/
|
||||||
|
private _movetoPos = [[[_pos, vehiclePatrolAreaDimensions]],[]/* add condition that the spawn is not near a trader*/] call BIS_fnc_randomPos;
|
||||||
|
(driver _vehicle) moveTo _movetoPos;
|
||||||
|
(driver _vehicle) call GMSCore_fnc_nextWaypointAreaPatrol;
|
||||||
|
/*
|
||||||
|
[
|
||||||
|
_crewCount,
|
||||||
|
[],
|
||||||
|
[_pos, vehiclePatrolAreaDimensions],
|
||||||
|
180,
|
||||||
|
0,
|
||||||
|
"vehicle",
|
||||||
|
true
|
||||||
|
] call GMSCore_fnc_initializeWaypointsAreaPatrol;
|
||||||
|
*/
|
||||||
GMS_landVehiclePatrols pushBack _vehicle;
|
GMS_landVehiclePatrols pushBack _vehicle;
|
||||||
|
if (GMS_debugLevel > 0) then {[format["_spawnMissionVehiclePatrols: _vehName %1 spawned with crew %2",_vehName,_vehGroup]] call GMS_fnc_log};
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
[format["GMS_fnc_spawnMissionVehiclePatrols: Invalid classname %1 used in __missionPatrolVehicles", _vehName],"warning"] call GMS_fnc_log;
|
||||||
|
};
|
||||||
} forEach _patrolsThisMission;
|
} forEach _patrolsThisMission;
|
||||||
GMS_landVehiclePatrols append _vehicles;
|
GMS_landVehiclePatrols append _vehicles;
|
||||||
GMS_monitoredVehicles append _vehicles;
|
GMS_monitoredVehicles append _vehicles;
|
||||||
|
@ -19,39 +19,87 @@ if (GMS_missionsRunning >= GMS_maxSpawnedMissions) exitWith
|
|||||||
{
|
{
|
||||||
[format["_spawnNewMissions (18): GMS_maxSpawnedMissions of %1 Reached",GMS_maxSpawnedMissions]] call GMS_fnc_log;
|
[format["_spawnNewMissions (18): GMS_maxSpawnedMissions of %1 Reached",GMS_maxSpawnedMissions]] call GMS_fnc_log;
|
||||||
};
|
};
|
||||||
|
//[format["_spawnNewMissions (18): time = %1 GMS_debugLevel = %2",diag_tickTime,GMS_debugLevel]] call GMS_fnc_log;
|
||||||
{
|
{
|
||||||
private _missionDescriptors = _x;
|
private _missionDescriptors = _x;
|
||||||
_missionDescriptors params["_key","_difficulty","_maxMissions","_activeMissions","_tMin","_tMax","_waitTime","_missions","_isStatic"];
|
// _missionDescriptor is configures as follows:
|
||||||
|
/*
|
||||||
|
private _mission = [
|
||||||
|
_key,
|
||||||
|
_difficulty,
|
||||||
|
_noMissions, // Max no missions of this category
|
||||||
|
0, // Number active
|
||||||
|
_tMin, // Used to calculate waittime in the future
|
||||||
|
_tMax, // as above
|
||||||
|
_waitTime, // time at which a mission should be spawned
|
||||||
|
_missionsData, // Array of data about individual missions that could be spawned. The data table for each mission is defined in _missionSpawner
|
||||||
|
_isStatic
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
_missionDescriptors params["_key","_difficulty","_maxMissions","_activeMissions","_tMin","_tMax","_waitTime","_missionsData","_isStatic"];
|
||||||
|
|
||||||
|
//{/
|
||||||
|
//diag_log format["_spawnNewMission: _this %1 = %2",_forEachIndex, _x];
|
||||||
|
//} forEach _missionDescriptors;
|
||||||
|
|
||||||
|
//diag_log format["_spawnNewMission: _missionsData = %1",_missionsData];
|
||||||
|
|
||||||
|
if (_missionsData isEqualTo []) exitWith {-1};
|
||||||
if (_activeMissions < _maxMissions && {diag_tickTime > _waitTime && {GMS_missionsRunning < GMS_maxSpawnedMissions}}) then
|
if (_activeMissions < _maxMissions && {diag_tickTime > _waitTime && {GMS_missionsRunning < GMS_maxSpawnedMissions}}) then
|
||||||
{
|
{
|
||||||
// time to reset timers and spawn something.
|
// time to reset timers and spawn something.
|
||||||
private _missionSelected = selectRandom _missions;
|
private _missionSelected = selectRandom _missionsData;
|
||||||
|
// _missionSelected is configured as:
|
||||||
/*
|
/*
|
||||||
params[
|
params [
|
||||||
|
_aiDifficultyLevel, // index 0
|
||||||
|
_markerConfigs, // index 1
|
||||||
|
_endCondition, // index 2
|
||||||
|
_isscubamission, // index 3
|
||||||
|
_missionLootConfigs, // index 4
|
||||||
|
_aiConfigs, // index 5
|
||||||
|
_missionMessages, // index 6
|
||||||
|
_paraConfigs, // index 8
|
||||||
|
_defaultMissionLocations, // index 9
|
||||||
|
_maxMissionRespawns, // index 10
|
||||||
|
_timesSpawned, // index 11
|
||||||
|
_chanceMissionSpawned, // index 12
|
||||||
|
_isSpawned, // index 13
|
||||||
|
_spawnedAt // index 14
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
//{
|
||||||
|
// diag_log format["_spawnNewMission:_missionSelected: _this %1 = %2",_forEachIndex,_x];
|
||||||
|
//} forEach _missionSelected;
|
||||||
|
|
||||||
|
/*
|
||||||
|
params[ // for GMS_fnc_initialiZeMission are
|
||||||
"_key", // This key can be used to seach the list of available mission types to update that list when a mission is completed or times out
|
"_key", // This key can be used to seach the list of available mission types to update that list when a mission is completed or times out
|
||||||
"_missionConfigs", // Selfevident but this is an array with all configs for the mission
|
"_missionConfigs", // Selfevident but this is an array with all configs for the mission
|
||||||
"_missionCount", // The number of missions run thus far which is used to unsure each marker has a unique name
|
"_missionCount", // The number of missions run thus far which is used to unsure each marker has a unique name
|
||||||
"_isStatic" // true if this is a static mission
|
"_isStatic"
|
||||||
];
|
];
|
||||||
*/
|
*/
|
||||||
|
//diag_log format["_spawnNewMissions: _missionSelected = %1",_missionSelected];
|
||||||
private _missionInitialized = [_key,_missionSelected,GMS_dynamicMissionsSpawned,_isStatic] call GMS_fnc_initializeMission;
|
private _missionInitialized = [_key,_missionSelected,GMS_dynamicMissionsSpawned,_isStatic] call GMS_fnc_initializeMission;
|
||||||
|
|
||||||
switch (_missionInitialized) do
|
if (_missionInitialized == 1) then { // This is a dynamic mission s see if we can spawn another instance of this categore (blue, red, green, orange)
|
||||||
{
|
|
||||||
case 1: { // This is a dynamic mission s see if we can spawn another instance of this categore (blue, red, green, orange)
|
|
||||||
GMS_dynamicMissionsSpawned = GMS_dynamicMissionsSpawned + 1;
|
GMS_dynamicMissionsSpawned = GMS_dynamicMissionsSpawned + 1;
|
||||||
#define waitTime 6
|
#define waitTime 6
|
||||||
#define noActive 3
|
#define noActive 3
|
||||||
private _wt = diag_tickTime + _tmin + (random(_tMax - _tMin));
|
private _wt = diag_tickTime + _tmin + (random(_tMax - _tMin));
|
||||||
_x set[waitTime, _wt]; // _x here is the _missionCategoryDescriptors being evaluated
|
_missionDescriptors set[waitTime, _wt];
|
||||||
private _noActiveMissions = _x select noActive;
|
_missionDescriptors set[noActive, _activeMissions + 1];
|
||||||
_x set[noActive, _noActiveMissions + 1];
|
} else {
|
||||||
|
if (_missionInitialized == -1) then // failed the test about chance of spawning
|
||||||
|
{
|
||||||
|
#define waitTime 6
|
||||||
|
private _wt = diag_tickTime + _tmin + (random(_tMax - _tMin));
|
||||||
|
_missionDescriptors set[waitTime, _wt];
|
||||||
};
|
};
|
||||||
case 2: {_missions deleteAt (_missions find _missionSelected)}; // the mission was spawned the maxiumum number of times.
|
|
||||||
case 3: {}; // this is a static mission that was spawned and not completed
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} forEach GMS_missionData;
|
} forEach GMS_missionData;
|
||||||
|
|
||||||
|
private _exitcode = 1;
|
||||||
|
_exitCode;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
GMS_fnc_smokeAtCrates
|
GMS_fnc_spawnSmokingObject
|
||||||
|
|
||||||
Spawns a smoking wreck or object at a specified location and returns the objects spawn (wreck and the particle effects object)
|
Spawns a smoking wreck or object at a specified location and returns the objects spawn (wreck and the particle effects object)
|
||||||
for ghostridergaming
|
for ghostridergaming
|
||||||
@ -14,9 +14,21 @@
|
|||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
#include "\GMS\Compiles\Init\GMS_defines.hpp"
|
||||||
private _wreckSelected = selectRandom ["Land_Wreck_Car2_F","Land_Wreck_Car3_F","Land_Wreck_Car_F","Land_Wreck_Offroad2_F","Land_Wreck_Offroad_F","Land_Tyres_F","Land_Pallets_F","Land_MetalBarrel_F"];
|
private _wrecksAvailable = ["Land_Wreck_Car2_F","Land_Wreck_Car3_F","Land_Wreck_Car_F","Land_Wreck_Offroad2_F","Land_Wreck_Offroad_F","Land_Tyres_F","Land_Pallets_F","Land_MetalBarrel_F"];
|
||||||
params["_pos","_mode",["_maxDist",12],["_wreckChoices",_wreckSelected],["_addFire",false]];
|
params[["_pos",[0,0,0]],
|
||||||
private ["_objs","_wreckSelected","_smokeType","_fire","_posFire","_posWreck","_smoke","_dis","_minDis","_maxDis","_closest","_wrecks"];
|
["_mode","random"],
|
||||||
|
["_maxDist",12],
|
||||||
|
["_wrecks",_wrecksAvailable],
|
||||||
|
["_addFire",false]];
|
||||||
|
if (_pos isEqualTo [0,0,0]) exitWith {["No position passed to GMS_fnc_smokeAtCrates","warning"] call GMS_fnc_log};
|
||||||
|
private _wreck = selectRandom _wrecks;
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
diag_log format["_smokeatCrate: _this %1 = %2",_foreachIndex, _x];
|
||||||
|
} forEach _this;
|
||||||
|
*/
|
||||||
|
|
||||||
|
private ["_objs","_smokeType","_fire","_posFire","_posWreck","_smoke","_dis","_minDis","_maxDis","_closest","_wrecks"];
|
||||||
|
|
||||||
_smokeType = if(_addFire) then {"test_EmptyObjectForFireBig"} else {"test_EmptyObjectForSmoke"};
|
_smokeType = if(_addFire) then {"test_EmptyObjectForFireBig"} else {"test_EmptyObjectForSmoke"};
|
||||||
|
|
||||||
@ -30,7 +42,7 @@ _posWreck = [_pos, _minDis, 50, _closest, 0, 20, 0] call BIS_fnc_findSafePos; /
|
|||||||
|
|
||||||
|
|
||||||
// spawn a wreck near the mission center
|
// spawn a wreck near the mission center
|
||||||
_fire = createVehicle [_wreckSelected, [0,0,0], [], 0, "can_collide"];
|
_fire = createVehicle [_wreck, [0,0,0], [], 0, "can_collide"];
|
||||||
_fire setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
|
_fire setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
|
||||||
_fire setPos _posWreck;
|
_fire setPos _posWreck;
|
||||||
_fire setDir random(360);
|
_fire setDir random(360);
|
@ -122,9 +122,9 @@ if (_creditKill) then
|
|||||||
{
|
{
|
||||||
[_instigator,1] call GMSCore_fnc_updatePlayerKills;
|
[_instigator,1] call GMSCore_fnc_updatePlayerKills;
|
||||||
private _msg = format[
|
private _msg = format[
|
||||||
"%1 killed %2 with %3 at %4 meters %5X KILLSTREAK",
|
"%1 killed by %2 with %3 at %4 meters %5X KILLSTREAK",
|
||||||
name _instigator,
|
|
||||||
name _unit,
|
name _unit,
|
||||||
|
name _instigator,
|
||||||
getText(configFile >> "CfgWeapons" >> currentWeapon _instigator >> "displayName"),
|
getText(configFile >> "CfgWeapons" >> currentWeapon _instigator >> "displayName"),
|
||||||
_unit distance _instigator,
|
_unit distance _instigator,
|
||||||
_killstreak
|
_killstreak
|
||||||
|
@ -50,7 +50,9 @@
|
|||||||
#define atMissionEndAir 3
|
#define atMissionEndAir 3
|
||||||
|
|
||||||
// Defines for mission spawning functions
|
// Defines for mission spawning functions
|
||||||
#define isSpawned 11
|
// Array structure defined in \Complies\Missions\GMS_missionSpawner.sqf
|
||||||
|
#define isSpawned 12
|
||||||
|
#define spawnedAt 13
|
||||||
|
|
||||||
// defines for static group spawners
|
// defines for static group spawners
|
||||||
#define staticPatrolTriggerRange 2000
|
#define staticPatrolTriggerRange 2000
|
||||||
|
@ -103,12 +103,12 @@ if ((toLowerANSI GMSCore_modtype) isEqualTo "default") then
|
|||||||
// HINT: Use these for map-specific settings
|
// HINT: Use these for map-specific settings
|
||||||
#include "\GMS\Configs\GMS_custom_config.sqf";
|
#include "\GMS\Configs\GMS_custom_config.sqf";
|
||||||
|
|
||||||
if (GMS_debugLevel > 0) then {[format["Custom Configurations Loaded at %1",diag_tickTime]] call GMS_fnc_log};
|
if (GMS_debugLevel > 0) then {[format["DEBUG ON: Custom Configurations Loaded at %1",diag_tickTime]] call GMS_fnc_log};
|
||||||
if (GMS_debugLevel > 0) then {[format["GMS_debugLevel = %1",GMS_debugLevel]] call GMS_fnc_log};
|
if (GMS_debugLevel > 0) then {[format["GMS_debugLevel = %1",GMS_debugLevel]] call GMS_fnc_log};
|
||||||
|
|
||||||
// Load vaariables used to store information for the mission system.
|
// Load vaariables used to store information for the mission system.
|
||||||
[] call compileFinal preprocessFileLineNumbers "\GMS\Compiles\GMS_variables.sqf";
|
[] call compileFinal preprocessFileLineNumbers "\GMS\Compiles\GMS_variables.sqf";
|
||||||
if (GMS_debugLevel > 0) then {diag_log format["Variables loaded at %1",diag_tickTime]};
|
if (GMS_debugLevel > 0) then {[format["DEBUG ON: Variables loaded at %1",diag_tickTime]] call GMS_fnc_log};
|
||||||
|
|
||||||
// configure dynamic simulation management is this is being used.
|
// configure dynamic simulation management is this is being used.
|
||||||
if (GMS_simulationManager == 2) then
|
if (GMS_simulationManager == 2) then
|
||||||
@ -119,12 +119,11 @@ if (GMS_simulationManager == 2) then
|
|||||||
|
|
||||||
// find and set Mapcenter and size
|
// find and set Mapcenter and size
|
||||||
call compileFinal preprocessFileLineNumbers "\GMS\Compiles\init\GMS_fnc_findWorld.sqf";
|
call compileFinal preprocessFileLineNumbers "\GMS\Compiles\init\GMS_fnc_findWorld.sqf";
|
||||||
if (GMS_debugLevel > 0) then {diag_log "Map-specific information defined"};
|
if (GMS_debugLevel > 0) then {["DEBUG ON: Map-specific information defined"] call GMS_fnc_log};
|
||||||
|
|
||||||
|
|
||||||
// set up the lists of available missions for each mission category
|
// set up the lists of available missions for each mission category
|
||||||
#include "\GMS\Missions\GMS_missionLists.sqf";
|
#include "\GMS\Missions\GMS_missionLists.sqf";
|
||||||
if (GMS_debugLevel > 0) then {diag_log "Mission Lists Loaded Successfully"};
|
if (GMS_debugLevel > 0) then {["DEBUG ON: Mission Lists Loaded Successfully"] call GMS_fnc_log};
|
||||||
// TODO: merge in underwater / sea missions at some point
|
// TODO: merge in underwater / sea missions at some point
|
||||||
|
|
||||||
switch (GMS_simulationManager) do
|
switch (GMS_simulationManager) do
|
||||||
@ -146,7 +145,7 @@ _fn_setupLocationType = {
|
|||||||
_locations
|
_locations
|
||||||
};
|
};
|
||||||
|
|
||||||
if (isNil "GMS_crateMoveAllowed") then {GMS_crateMoveAllowed = false};
|
if (isNil "GMS_crateMoveAllowed") then {GMS_crateMoveAllowed = true};
|
||||||
|
|
||||||
private _villages = ["NameVillage"] call _fn_setupLocationType;
|
private _villages = ["NameVillage"] call _fn_setupLocationType;
|
||||||
private _cites = ["NameCity"] call _fn_setupLocationType;
|
private _cites = ["NameCity"] call _fn_setupLocationType;
|
||||||
@ -197,22 +196,17 @@ if (GMS_maxCrashSites > 0) then
|
|||||||
[] execVM "\GMS\Missions\HeliCrashs\Crashes2.sqf";
|
[] execVM "\GMS\Missions\HeliCrashs\Crashes2.sqf";
|
||||||
};
|
};
|
||||||
|
|
||||||
diag_log format ["_init: Evaluating Static Missions"];
|
if (GMS_enableStaticMissions > 0 && !(_missionLIstStatics isEqualTo [])) then // GMS_enableStaticMissions should be an integer between 1 and N
|
||||||
if (GMS_enableStaticMissions > 0) then // GMS_enableStaticMissions should be an integer between 1 and N
|
|
||||||
{
|
{
|
||||||
//diag_log format["fn_init: _pathStatics = %1",_pathStatics];
|
diag_log format["fn_init: _pathStatics = %1",_pathStatics];
|
||||||
//diag_log format["fn_init: _missionListStatics = %1",_missionListStatics];
|
|
||||||
private _staticsToSpawn = [];
|
private _staticsToSpawn = [];
|
||||||
private _isStatic = true;
|
private _isStatic = true;
|
||||||
for "_i" from 1 to GMS_enableStaticMissions do
|
private _numberStatics = count _missionListStatics;
|
||||||
{
|
{
|
||||||
if (_i > (count _missionListStatics)) exitWith {};
|
if ((count _staticsToSpawn) > (count _missionLIstStatics)) exitWith {};
|
||||||
private _mission = selectRandom _missionLIstStatics;
|
private _mission = selectRandom _missionLIstStatics;
|
||||||
//diag_log format["_init: static _mission selected = %1",_mission];
|
_staticsToSpawn pushBackUnique _mission;
|
||||||
_staticsToSpawn pushBack _mission;
|
} forEach _missionLIstStatics;
|
||||||
_missionLIstStatics deleteAt (_missionLIstStatics find _mission);
|
|
||||||
//diag_log format["_init: _missionListStatics truncated to %1",_missionListStatics];
|
|
||||||
};
|
|
||||||
/*
|
/*
|
||||||
params[
|
params[
|
||||||
["_missionList",[]],
|
["_missionList",[]],
|
||||||
@ -224,9 +218,8 @@ if (GMS_enableStaticMissions > 0) then // GMS_enableStaticMissions should be an
|
|||||||
["_noMissions",1],
|
["_noMissions",1],
|
||||||
["_isStatic",false]];
|
["_isStatic",false]];
|
||||||
*/
|
*/
|
||||||
//diag_log format["_init: _staticsToSpawn = %1:", _staticsToSpawn];
|
//diag_log format["_init: count _staticsToSpawn = %1 | GMS_enableStaticMissions = %2:",count _staticsToSpawn,GMS_enableStaticMissions];
|
||||||
[_staticsToSpawn,_pathStatics,"StaticsMarker","orange",GMS_TMin_Statics,GMS_TMax_Statics,GMS_enableStaticMissions,_isStatic] call GMS_fnc_addMissionToQue;
|
[_staticsToSpawn,_pathStatics,"StaticsMarker","orange",GMS_TMin_Statics,GMS_TMax_Statics,GMS_enableStaticMissions,_isStatic] call GMS_fnc_addMissionToQue;
|
||||||
["_init (229): Returned from _addMissionToQue"] call GMS_fnc_log;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// start the main thread for the mission system which monitors missions running and stuff to be cleaned up
|
// start the main thread for the mission system which monitors missions running and stuff to be cleaned up
|
||||||
|
@ -135,6 +135,9 @@ switch (GMSCore_modType) do
|
|||||||
GMS_preciseMapMarkers = true; // Map markers are/are not centered at the loot crate
|
GMS_preciseMapMarkers = true; // Map markers are/are not centered at the loot crate
|
||||||
GMS_showCountAliveAI = true;
|
GMS_showCountAliveAI = true;
|
||||||
|
|
||||||
|
// radius within whih missions are triggered. The trigger causes the crate and AI to spawn.
|
||||||
|
GMS_TriggerDistance = 1500;
|
||||||
|
|
||||||
//Minimum distance between missions
|
//Minimum distance between missions
|
||||||
GMS_MinDistanceFromMission = 1200;
|
GMS_MinDistanceFromMission = 1200;
|
||||||
GMS_minDistanceToBases = 250;
|
GMS_minDistanceToBases = 250;
|
||||||
@ -150,6 +153,12 @@ switch (GMSCore_modType) do
|
|||||||
// Options to spawn a smoking wreck near the crate. When the first parameter is true, a wreck or junk pile will be spawned.
|
// Options to spawn a smoking wreck near the crate. When the first parameter is true, a wreck or junk pile will be spawned.
|
||||||
// It's position can be either "center" or "random". smoking wreck will be spawned at a random location between 15 and 50 m from the mission.
|
// It's position can be either "center" or "random". smoking wreck will be spawned at a random location between 15 and 50 m from the mission.
|
||||||
GMS_SmokeAtMissions = [true,"random"]; // set to [false,"anything here"] to disable this function altogether.
|
GMS_SmokeAtMissions = [true,"random"]; // set to [false,"anything here"] to disable this function altogether.
|
||||||
|
|
||||||
|
// When a column of smoke is used as a visual cue one of the following types of wrecks will be spawned.
|
||||||
|
GMS_wrecksAtMissions = ["Land_Wreck_Car2_F","Land_Wreck_Car3_F","Land_Wreck_Car_F","Land_Wreck_Offroad2_F","Land_Wreck_Offroad_F","Land_Tyres_F","Land_Pallets_F","Land_MetalBarrel_F"];
|
||||||
|
|
||||||
|
// Added 10/01/23 for those who want some control over the color.
|
||||||
|
GMS_smokeShellAtCrates = ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
|
||||||
GMS_useSignalEnd = true; // When true a smoke grenade/chemlight will appear at the loot crate for 2 min after mission completion.
|
GMS_useSignalEnd = true; // When true a smoke grenade/chemlight will appear at the loot crate for 2 min after mission completion.
|
||||||
GMS_missionEndCondition = allKilledOrPlayerNear; //allKilledOrPlayerNear; // Options are allUnitsKilled, playerNear, allKilledOrPlayerNear
|
GMS_missionEndCondition = allKilledOrPlayerNear; //allKilledOrPlayerNear; // Options are allUnitsKilled, playerNear, allKilledOrPlayerNear
|
||||||
|
|
||||||
@ -158,6 +167,8 @@ switch (GMSCore_modType) do
|
|||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
GMS_killPercentage = 0.999999; // The mission will complete if this fraction of the total AI spawned has been killed.
|
GMS_killPercentage = 0.999999; // The mission will complete if this fraction of the total AI spawned has been killed.
|
||||||
// This facilitates mission completion when one or two AI are spawned into objects.
|
// This facilitates mission completion when one or two AI are spawned into objects.
|
||||||
|
GMS_crateMovedAllowed = false; // when true the mission is aborted if a player moves the crate
|
||||||
|
// resulting in loss of loot.
|
||||||
GMS_spawnCratesTiming = "atMissionSpawnGround"; // Choices: "atMissionSpawnGround","atMissionSpawnAir","atMissionEndGround","atMissionEndAir".
|
GMS_spawnCratesTiming = "atMissionSpawnGround"; // Choices: "atMissionSpawnGround","atMissionSpawnAir","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.
|
// 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.
|
// This sets the default value but can be overridden by defining _spawnCrateTiming in the file defining a particular mission.
|
||||||
@ -283,6 +294,29 @@ switch (GMSCore_modType) do
|
|||||||
GMS_patrolHelisOrange = _GMS_armed_heavyAttackHelis + _GMS_armed_attackHelis; //_GMS_littleBirds;
|
GMS_patrolHelisOrange = _GMS_armed_heavyAttackHelis + _GMS_armed_attackHelis; //_GMS_littleBirds;
|
||||||
GMS_noPatrolHelisOrange = 1;
|
GMS_noPatrolHelisOrange = 1;
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
// Mission Drone Settings
|
||||||
|
///////////////////////////////
|
||||||
|
GMS_numberUGVs = 0;
|
||||||
|
GMS_UGVtypes = [ //
|
||||||
|
// Stompers
|
||||||
|
"O_UGV_01_rcws_F",5 // east - Use for Exile
|
||||||
|
//"B_UGV_01_rcws_F",5 // west
|
||||||
|
//"I_UGV_01_rcws_F",5 // GUER
|
||||||
|
];
|
||||||
|
|
||||||
|
GMS_numberUAVs = 0;
|
||||||
|
GMSAI_UAVTypes = [ // note that faction may matter here.
|
||||||
|
// East
|
||||||
|
"O_UAV_01_F",2, // Darter equivalent, unarmed
|
||||||
|
//"O_UAV_02_F",2, // Ababil with Scalpel Missels
|
||||||
|
"O_UAV_02_CAS_F",2 // Ababil with Bombx
|
||||||
|
//"O_UAV_01_F",2
|
||||||
|
// West - see CfgVehicles WEST online or in the editor
|
||||||
|
// Independent/GUER
|
||||||
|
//"I_UAV_01_F",1
|
||||||
|
];
|
||||||
|
|
||||||
////////////////////
|
////////////////////
|
||||||
// Enable / Disable Missions
|
// Enable / Disable Missions
|
||||||
////////////////////
|
////////////////////
|
||||||
@ -291,10 +325,10 @@ switch (GMSCore_modType) do
|
|||||||
GMS_maxSpawnedMissions = 15;
|
GMS_maxSpawnedMissions = 15;
|
||||||
|
|
||||||
//Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups.
|
//Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups.
|
||||||
GMS_enableOrangeMissions = -1;
|
GMS_enableOrangeMissions = 1;
|
||||||
GMS_enableGreenMissions = -2;
|
GMS_enableGreenMissions = 2;
|
||||||
GMS_enableRedMissions = -2;
|
GMS_enableRedMissions = 2;
|
||||||
GMS_enableBlueMissions = -1;
|
GMS_enableBlueMissions = 1;
|
||||||
GMS_numberUnderwaterDynamicMissions = -1; // Values from -1 (no UMS) to N (N Underwater missions will be spawned; static UMS units and subs will be spawned.
|
GMS_numberUnderwaterDynamicMissions = -1; // Values from -1 (no UMS) to N (N Underwater missions will be spawned; static UMS units and subs will be spawned.
|
||||||
|
|
||||||
// sets the maximum number of static missions to spawn - set to -1 to disable spawning them.
|
// sets the maximum number of static missions to spawn - set to -1 to disable spawning them.
|
||||||
@ -303,7 +337,7 @@ switch (GMSCore_modType) do
|
|||||||
#ifdef GRGserver
|
#ifdef GRGserver
|
||||||
GMS_enableHunterMissions = 1;
|
GMS_enableHunterMissions = 1;
|
||||||
GMS_enableScoutsMissions =2;
|
GMS_enableScoutsMissions =2;
|
||||||
GMS_maxcrashsites = 2;
|
GMS_maxcrashsites = 3; // TODO: Set to 2-3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
////////////////////
|
////////////////////
|
||||||
|
@ -54,7 +54,7 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
|
|||||||
//"nameNoGoodOpen",
|
//"nameNoGoodOpen",
|
||||||
"Exile_Car_BTR40_MG_Green",
|
"Exile_Car_BTR40_MG_Green",
|
||||||
"Exile_Car_HMMWV_M134_Green",
|
"Exile_Car_HMMWV_M134_Green",
|
||||||
"Exile_Car_HMMWV_M2_Green",
|
//"Exile_Car_HMMWV_M2_Green", // Not a valid class
|
||||||
"B_LSV_01_armed_F",
|
"B_LSV_01_armed_F",
|
||||||
"Exile_Car_Offroad_Armed_Guerilla01",
|
"Exile_Car_Offroad_Armed_Guerilla01",
|
||||||
"B_G_Offroad_01_armed_F",
|
"B_G_Offroad_01_armed_F",
|
||||||
|
@ -120,7 +120,7 @@ switch (toLower (worldName)) do
|
|||||||
GMS_enableBlueMissions = 1;
|
GMS_enableBlueMissions = 1;
|
||||||
GMS_enableHunterMissions = 1;
|
GMS_enableHunterMissions = 1;
|
||||||
GMS_enableScoutsMissions = 1;
|
GMS_enableScoutsMissions = 1;
|
||||||
GMS_maxCrashSites = 3;
|
GMS_maxCrashSites = 0;
|
||||||
GMS_numberUnderwaterDynamicMissions = 1;
|
GMS_numberUnderwaterDynamicMissions = 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -147,13 +147,14 @@ if (GMS_debugLevel > 0) then {
|
|||||||
//GMS_mainThreadUpdateInterval = 10;
|
//GMS_mainThreadUpdateInterval = 10;
|
||||||
GMS_launchersPerGroup = 1;
|
GMS_launchersPerGroup = 1;
|
||||||
|
|
||||||
GMS_enableOrangeMissions = 0;
|
GMS_enableOrangeMissions = 1;
|
||||||
GMS_enableGreenMissions = 0;
|
GMS_enableGreenMissions = 0; // 10-02-2023 Tested with mission list= "FieldCamp", "FieldHQ", "factory", "fortification", "Camp_Moreell", "lager"
|
||||||
GMS_enableRedMissions = 0;
|
GMS_enableRedMissions = 0; // 10-2-2023 Tested with mission list= "fuelDepot", "junkyardWilly", "TraderBoss", "carThieves", "Ammunition_depot", "IDAP", "Outpost", "Service_Point"
|
||||||
GMS_enableBlueMissions = 1;
|
GMS_enableBlueMissions = 0; // 10-2-2023 Tested with mission list= "sniperBase", "survivalSupplies", "Service_point", and "default"
|
||||||
GMS_numberUnderwaterDynamicMissions = 0;
|
GMS_numberUnderwaterDynamicMissions = 0;
|
||||||
GMS_enableHunterMissions = 0;
|
GMS_enableHunterMissions = 0;
|
||||||
GMS_enableScoutsMissions = 1;
|
GMS_enableScoutsMissions = 0;
|
||||||
|
GMS_enableStaticMissions = 0;
|
||||||
GMS_maxCrashSites = 0;
|
GMS_maxCrashSites = 0;
|
||||||
|
|
||||||
GMS_noPatrolHelisBlue = 1;
|
GMS_noPatrolHelisBlue = 1;
|
||||||
@ -171,7 +172,7 @@ if (GMS_debugLevel > 0) then {
|
|||||||
|
|
||||||
GMS_SpawnEmplaced_Orange = 2; // Number of static weapons at Orange Missions
|
GMS_SpawnEmplaced_Orange = 2; // Number of static weapons at Orange Missions
|
||||||
GMS_SpawnEmplaced_Green = 2; // Number of static weapons at Green Missions
|
GMS_SpawnEmplaced_Green = 2; // Number of static weapons at Green Missions
|
||||||
GMS_SpawnEmplaced_Blue = 2; // Number of static weapons at Blue Missions
|
GMS_SpawnEmplaced_Blue = 1; // Number of static weapons at Blue Missions
|
||||||
GMS_SpawnEmplaced_Red = 2; // Number of static weapons at Red Missions
|
GMS_SpawnEmplaced_Red = 2; // Number of static weapons at Red Missions
|
||||||
|
|
||||||
GMS_MinAI_Orange = 20;
|
GMS_MinAI_Orange = 20;
|
||||||
@ -198,6 +199,7 @@ if (GMS_debugLevel > 0) then {
|
|||||||
GMS_TMin_Scouts = 45;
|
GMS_TMin_Scouts = 45;
|
||||||
GMS_TMin_Crashes = 5;
|
GMS_TMin_Crashes = 5;
|
||||||
GMS_TMin_UMS = 20;
|
GMS_TMin_UMS = 20;
|
||||||
|
GMS_TMin_Statics = 60; // minimum time for RESPAWN of static missions
|
||||||
//Maximum Spawn time between missions in seconds
|
//Maximum Spawn time between missions in seconds
|
||||||
GMS_TMax_Blue = 12;
|
GMS_TMax_Blue = 12;
|
||||||
GMS_TMax_Red = 15;
|
GMS_TMax_Red = 15;
|
||||||
@ -207,6 +209,39 @@ if (GMS_debugLevel > 0) then {
|
|||||||
GMS_TMax_Scouts = 20;
|
GMS_TMax_Scouts = 20;
|
||||||
GMS_TMax_Crashes = 15;
|
GMS_TMax_Crashes = 15;
|
||||||
GMS_TMax_UMS = 25;
|
GMS_TMax_UMS = 25;
|
||||||
|
GMS_TMax_Statics = GMS_TMin_Statics + 10; // Maximum time for RESAPWN of static missions
|
||||||
|
// Be sure the minimum is > than the time at which objects from the previous instance of a static mission are deleted
|
||||||
|
// That is set in GMS_cleanupCompositionTimer
|
||||||
|
/*
|
||||||
|
// Reduce to 1 sec for immediate spawns, or longer if you wish to space the missions out
|
||||||
|
GMS_TMin_Orange = 480;
|
||||||
|
GMS_TMin_Green = 420;
|
||||||
|
GMS_TMin_Blue = 300;
|
||||||
|
GMS_TMin_Red = 360;
|
||||||
|
GMS_TMin_UMS = 300;
|
||||||
|
GMS_TMin_Statics = 60 * 35; // minimum time for RESPAWN of static missions
|
||||||
|
|
||||||
|
#ifdef GRGserver
|
||||||
|
GMS_TMin_Hunter = 340;
|
||||||
|
GMS_TMin_Scouts = 300;
|
||||||
|
GMS_TMin_Crashes = 300;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//Maximum Spawn time between missions in seconds
|
||||||
|
GMS_TMax_Orange = 560;
|
||||||
|
GMS_TMax_Green = 500;
|
||||||
|
GMS_TMax_Blue = 360;
|
||||||
|
GMS_TMax_Red = 420;
|
||||||
|
GMS_TMax_UMS = 400;
|
||||||
|
GMS_TMax_Statics = GMS_TMin_Statics + 60; // Maximum time for RESAPWN of static missions
|
||||||
|
// Be sure the minimum is > than the time at which objects from the previous instance of a static mission are deleted
|
||||||
|
// That is set in GMS_cleanupCompositionTimer
|
||||||
|
|
||||||
|
#ifdef GRGserver
|
||||||
|
GMS_TMax_Hunter = 400;
|
||||||
|
GMS_TMax_Scouts = 360;
|
||||||
|
GMS_TMax_Crashes = 360;
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
["Custom Configs <DEBUG LEVEL > 0> Custom mission timers loaded"] call GMS_fnc_log;
|
["Custom Configs <DEBUG LEVEL > 0> Custom mission timers loaded"] call GMS_fnc_log;
|
||||||
};
|
};
|
@ -3,3 +3,4 @@
|
|||||||
Known issues
|
Known issues
|
||||||
|
|
||||||
1.
|
1.
|
||||||
|
1.
|
||||||
|
@ -80,9 +80,11 @@ _submarinePatrolParameters = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
_airPatrols = [
|
_airPatrols = [
|
||||||
|
["somecrazyname",[40,-40,1],0]
|
||||||
];
|
];
|
||||||
|
|
||||||
_missionEmplacedWeapons = [
|
_missionEmplacedWeapons = [
|
||||||
|
["somcrazyname",[20,-15,1],0]
|
||||||
];
|
];
|
||||||
|
|
||||||
_missionGroups = [
|
_missionGroups = [
|
||||||
|
@ -26,7 +26,7 @@ private _missionListBlue = [
|
|||||||
"survivalSupplies", // Spawns OK Debug = 4 Build 246
|
"survivalSupplies", // Spawns OK Debug = 4 Build 246
|
||||||
//"derbunker", // OK, an interesting mission, better as a red / green though
|
//"derbunker", // OK, an interesting mission, better as a red / green though
|
||||||
//"forgotten_HQ", // ok BUT TOO TOUGH FOR BLUE OR RED
|
//"forgotten_HQ", // ok BUT TOO TOUGH FOR BLUE OR RED
|
||||||
//"garrison", // OK but do not use.
|
////"garrison" // OK but do not use.
|
||||||
//"IDAP", // OK but too difficult for a blue mission
|
//"IDAP", // OK but too difficult for a blue mission
|
||||||
"Service_point", // OK build 224
|
"Service_point", // OK build 224
|
||||||
//"Toxin", // OK but too difficult for a blue mission
|
//"Toxin", // OK but too difficult for a blue mission
|
||||||
|
@ -130,6 +130,22 @@ _fn_spawnWreckMission = {
|
|||||||
#define waypointDimensions [60,60]
|
#define waypointDimensions [60,60]
|
||||||
private _numberAI = [_minAI,_maxAI] call GMSCore_fnc_getIntegerFromRange;
|
private _numberAI = [_minAI,_maxAI] call GMSCore_fnc_getIntegerFromRange;
|
||||||
|
|
||||||
|
/*
|
||||||
|
params[
|
||||||
|
["_pos",[-1,-1,1]],
|
||||||
|
["_numbertospawn",0],
|
||||||
|
["_skillLevel","red"],
|
||||||
|
["_areaDimensions",[]],
|
||||||
|
["_uniforms",[]],
|
||||||
|
["_headGear",[]],
|
||||||
|
["_vests",[]],
|
||||||
|
["_backpacks",[]],
|
||||||
|
["_weaponList",[]],
|
||||||
|
["_sideArms",[]],
|
||||||
|
["_scuba",false]
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
// Let the GMS_fnc_spawnGroup scritp assign the defaultsfor everything after headgear.
|
||||||
private _group = [_posOfCrash,_numberAI,_difficulty,waypointDimensions,_uniformsHC,_headGearHC] call GMS_fnc_spawnGroup;
|
private _group = [_posOfCrash,_numberAI,_difficulty,waypointDimensions,_uniformsHC,_headGearHC] call GMS_fnc_spawnGroup;
|
||||||
GMS_monitoredMissionAIGroups pushBack _group;
|
GMS_monitoredMissionAIGroups pushBack _group;
|
||||||
|
|
||||||
@ -140,7 +156,7 @@ _fn_spawnWreckMission = {
|
|||||||
};
|
};
|
||||||
if !(isNull _group) then
|
if !(isNull _group) then
|
||||||
{
|
{
|
||||||
waitUntil{uiSleep 3; {(isPlayer _x) && (_x distance2d _posOfCrash) < 25 /*&& (vehicle _x == _x)*/} count allPlayers > 0};
|
waitUntil{uiSleep 3; {(_x distance2d _posOfCrash) < 10 && (vehicle _x == _x)} count allPlayers > 0};
|
||||||
};
|
};
|
||||||
[_posOfCrash] spawn GMS_fnc_missionCompleteMarker;
|
[_posOfCrash] spawn GMS_fnc_missionCompleteMarker;
|
||||||
diag_log format["crashes2 (145) _crashName = %1",_crashName];
|
diag_log format["crashes2 (145) _crashName = %1",_crashName];
|
||||||
|
@ -70,19 +70,14 @@ _markerColor = "ColorWEST";
|
|||||||
_markerMissionName = "TODO: Set this to an appropriate name";
|
_markerMissionName = "TODO: Set this to an appropriate name";
|
||||||
_startMsg = "TODO: Change approiately";
|
_startMsg = "TODO: Change approiately";
|
||||||
_endMsg = "TODO: Change Appropriately";
|
_endMsg = "TODO: Change Appropriately";
|
||||||
_markerMissionName = "";
|
|
||||||
_crateLoot = GMS_BoxLoot_Blue;
|
_crateLoot = GMS_BoxLoot_Blue;
|
||||||
_lootCounts = GMS_lootCountsBlue;
|
_lootCounts = GMS_lootCountsBlue;
|
||||||
|
|
||||||
_garrisonedBuilding_ATLsystem = [
|
|
||||||
|
|
||||||
];
|
|
||||||
|
|
||||||
_missionLandscape = [
|
_missionLandscape = [
|
||||||
["RoadCone_L_F",[-0.00390625,-0.0507813,0.00721931],0,[true,true]],
|
["RoadCone_L_F",[-0.00390625,-0.0507813,0.00721931],0,[true,true]],
|
||||||
["Land_MedicalTent_01_aaf_generic_closed_F",[31.8184,17.293,0.0235131],0,[true,true]],
|
["Land_MedicalTent_01_aaf_generic_closed_F",[31.8184,17.293,0.0235133],0,[true,true]],
|
||||||
["Land_Research_HQ_F",[17.0625,-18.8281,-0.000879765],0,[true,true]],
|
["Land_Research_HQ_F",[17.0625,-18.8281,-0.000879526],0,[true,true]],
|
||||||
["Land_BagBunker_Large_F",[-28.8945,-16.3652,0.0173037],0,[true,true]]
|
["Land_BagBunker_Large_F",[-29.0078,-17.4941,0.0101435],0,[true,true]]
|
||||||
];
|
];
|
||||||
|
|
||||||
_simpleObjects = [
|
_simpleObjects = [
|
||||||
@ -94,7 +89,7 @@ _missionLootVehicles = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
_missionPatrolVehicles = [
|
_missionPatrolVehicles = [
|
||||||
["B_MRAP_01_F",[-4.84375,-26.1211,0.000152349],0]
|
["B_MRAP_01_F",[-4.84375,-26.1211,0.000152588],0]
|
||||||
];
|
];
|
||||||
|
|
||||||
_submarinePatrolParameters = [
|
_submarinePatrolParameters = [
|
||||||
@ -102,15 +97,25 @@ _submarinePatrolParameters = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
_airPatrols = [
|
_airPatrols = [
|
||||||
["B_Heli_Light_01_dynamicLoadout_F",[50.4258,2.28125,0.000232935],0]
|
//["B_Heli_Light_01_dynamicLoadout_F",[50.4258,2.28125,0.000233173],0]
|
||||||
];
|
];
|
||||||
|
|
||||||
_missionEmplacedWeapons = [
|
_missionEmplacedWeapons = [
|
||||||
["B_HMG_01_F",[-4.19727,-1.55469,0.01511],0]
|
["B_HMG_01_high_F",[21.4336,-16.1445,3.11827],0],
|
||||||
|
["B_HMG_01_high_F",[-30.9922,-18.9863,0.202087],0],
|
||||||
|
["B_HMG_01_high_F",[-34.4316,32.7754,-0.00714135],141.66],
|
||||||
|
["B_HMG_01_high_F",[-22.7617,40.4707,1.05355],166.401]
|
||||||
];
|
];
|
||||||
|
|
||||||
_missionGroups = [
|
|
||||||
|
|
||||||
|
|
||||||
|
_missionGroups = [
|
||||||
|
// [[-33.5879,26.9922,0.00262976],3,6,"Blue"]
|
||||||
|
];
|
||||||
|
|
||||||
|
_missionGarrisonedGroups = [
|
||||||
|
[[-26.6816,45.0723,1.06332],0,"Blue",""],
|
||||||
|
[[21.418,-13.9297,1.14033],266.755,"Blue",""]
|
||||||
];
|
];
|
||||||
|
|
||||||
_scubaGroupParameters = [
|
_scubaGroupParameters = [
|
||||||
@ -139,9 +144,9 @@ _headgear = GMS_headgear;
|
|||||||
_vests = GMS_vests;
|
_vests = GMS_vests;
|
||||||
_backpacks = GMS_backpacks;
|
_backpacks = GMS_backpacks;
|
||||||
_sideArms = GMS_Pistols;
|
_sideArms = GMS_Pistols;
|
||||||
_spawnCratesTiming = "atMissionEndGround";
|
//_spawnCratesTiming = "atMissionEndGround";
|
||||||
_loadCratesTiming = "atMissionCompletion";
|
//_loadCratesTiming = "atMissionCompletion";
|
||||||
_endCondition = playerNear;
|
//_endCondition = playerNear;
|
||||||
_minNoAI = 0;
|
_minNoAI = 0;
|
||||||
_maxNoAI = 0;
|
_maxNoAI = 0;
|
||||||
_noAIGroups = 0;
|
_noAIGroups = 0;
|
||||||
|
6
@GMS/addons/GMS/TODO.txt
Normal file
6
@GMS/addons/GMS/TODO.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
FIX and Test:
|
||||||
|
Group movement needs a jumpstart when groups are spawned in - need to check how this is done in GMSAI.
|
||||||
|
Warning Message: Script \GMS\Compiles\Missions\GMS_fnc_garrisonBuilding_relPosSystem.sqf not found
|
||||||
|
fn_garrisonBuilding_ATLsystem
|
837
@GMS/addons/GMS/changeLog.txt
Normal file
837
@GMS/addons/GMS/changeLog.txt
Normal file
@ -0,0 +1,837 @@
|
|||||||
|
|
||||||
|
Ghostrider's Mission System (GMS)
|
||||||
|
|
||||||
|
by Ghostrider [GRG]
|
||||||
|
Copywrite 2022
|
||||||
|
|
||||||
|
This is a complete reworking of blckeagls mission system which I maintained over many years and was built on the AI mission system by blckeagls ver 2.0.2
|
||||||
|
|
||||||
|
CREDITS And ACKNOWLDEGMENTS
|
||||||
|
Over the time I have developed this code many have contributed to debugging and testing. Some notable contributors include:
|
||||||
|
Narines: bug fixes, testing, infinite ammo fix.
|
||||||
|
Ideas or code from that by He-Man, Vampire and KiloSwiss have been used for certain functions.
|
||||||
|
Many thanks for new Coding and ideas from Grahame.
|
||||||
|
And this code works only because of the countless hours of testing by GRG Members, most of all Mr. Burrito and Ox.
|
||||||
|
|
||||||
|
The reworking of the missions was prompted by several factors.
|
||||||
|
- A desire to optimize code for each function using the most game engine functions and optimized coding methods.
|
||||||
|
- Development of GMSCore which provides many of the basic functions needed and in addition supports a pretty robust area-based system for generating waypoints for patrols.
|
||||||
|
- Realization that blckeagls was a bit bloated and hard to use.
|
||||||
|
- Discovery that blackeagls had some unrecognized bugs.
|
||||||
|
|
||||||
|
|
||||||
|
What has changed beyond the code:
|
||||||
|
|
||||||
|
Time Acceleration was moved to a new Mod:
|
||||||
|
https://github.com/Ghostrider-DbD-/-timeManagement
|
||||||
|
|
||||||
|
The MapAddons module was moved to a new, reworked mod:
|
||||||
|
https://github.com/Ghostrider-DbD-/mapAddons
|
||||||
|
The Mission system can now be run entirely on an HC - no more passing AI back and forth.
|
||||||
|
The static loot system and dynamic loot system are gone. THese outlived thier usefulness.
|
||||||
|
|
||||||
|
I have kept the change log as a bit of history for those interested in development of this mission system.
|
||||||
|
Significant Changes:
|
||||||
|
|
||||||
|
Build 267 - Version 7.162
|
||||||
|
|
||||||
|
REQUIRES GMSCore
|
||||||
|
version = 1.053;
|
||||||
|
build = 36;
|
||||||
|
buildDate = "10-01-23";
|
||||||
|
|
||||||
|
MOVED four setting into GMS_configs.sqf
|
||||||
|
// radius within whih missions are triggered. The trigger causes the crate and AI to spawn.
|
||||||
|
GMS_TriggerDistance = 1500;
|
||||||
|
GMS_wrecksAtMissions = [...];
|
||||||
|
GMS_smokeShellAtCrates = [...];
|
||||||
|
|
||||||
|
ADDED
|
||||||
|
Support for static missions. These will respawn in the same spot after being completed.
|
||||||
|
The list of static missions is generated randomly at server startup from the list of all static missions available.
|
||||||
|
NOTE: Make sure the the tMIN for mission respawns it greater than the time at which mission objects are deleted to avoid duping objects at the mission.
|
||||||
|
ADDED One setting that should be in GMS_configs.sqf
|
||||||
|
GMS_crateMovedAllowed = false;
|
||||||
|
ADDED chemlights are now shown above crates upon mission compltion during twilight and nighttime.
|
||||||
|
ADDED A check that forces the mission spawner to wait 60 seconds after mission spawn before mission completion can occur.
|
||||||
|
|
||||||
|
FIXED Issues with improper triggering of mission initialization and completion.
|
||||||
|
The player now needs to exit the vehicle to trigger mission spawn or completion.
|
||||||
|
|
||||||
|
CHANGED
|
||||||
|
There is now an option to set the chance that a mission spawns.
|
||||||
|
|
||||||
|
DISCONTINUED
|
||||||
|
Support for spawning units that garrison buildings has been discontinued.
|
||||||
|
Note: You can still spawn turrets in buildings and these work just fine.
|
||||||
|
Their type and location relative to the mission center are defined in _missionEmplacedWeapons
|
||||||
|
|
||||||
|
Support for the GarrisonBuilding_relPos system that spawned turrets or units into buildings randomly based on building positions is no longer supported.
|
||||||
|
Any missions that were coded using this feature will cause a warning to be written to the server logs.
|
||||||
|
|
||||||
|
Made other minor changes to functions included for backwards compatibility for the garrisonATL and garrisonBuilding possitions methods of placing turrets and units in buildings.
|
||||||
|
|
||||||
|
7.15
|
||||||
|
1. Added control over what kill messages are displayed.
|
||||||
|
See the following settings in GMS_configs.sqf
|
||||||
|
GMSAI_killMessagingRadius = 3000;
|
||||||
|
GMS_killMessageToAllPlayers = [ ... ];
|
||||||
|
GMS_killMessageTypesKiller = [ ... ];
|
||||||
|
|
||||||
|
2. Added an option to spawn static missions.
|
||||||
|
Deposit the .sqf files for these missions in Missions\Statics.
|
||||||
|
Add their names to _staticMissions = [ ... ]; in \Missions\GMS_missionLists.sqf
|
||||||
|
Static Missions are initialized (any objects and markers are spawned) beginiing at 60 seconds after server startup.
|
||||||
|
The number of static missions that spawn is set by GMS_enableStaticMissions.
|
||||||
|
If there are more missions listed in _staticMissions, then GMS_enableStaticMissions will be randomly selected and spawned at each server restart.
|
||||||
|
If there are fewer than GMS_enableStaticMissions missions in _staticMissions then just the missions in the list will be spawned.
|
||||||
|
Missions are cleared and responding like any dynamic mission.
|
||||||
|
|
||||||
|
Set the timers for min and max in GMS_config.sqf
|
||||||
|
|
||||||
|
3. Reworked some code for spawning missions to make the process more easily followed and increase efficiency by calling reather than spawniing _monitorInitializedMissions
|
||||||
|
and moving code in that function that must be spawned to a separate function. This should reduce the number of times a [] spawn operation is performed.
|
||||||
|
|
||||||
|
7.11 Build 253
|
||||||
|
Changed format for skills to be compatible with GMS_fnc_skills from GMSCore
|
||||||
|
Changed to code for spawning and configuring units in groups to that from GMSCore
|
||||||
|
Changed from the system of cycling waypoints to the area based patrols supported by GMSCore
|
||||||
|
Change how functions that have been recoded to rely on core functions in GMSCore are compiled; these are compiled now in config.hpp\CfgFunctions
|
||||||
|
|
||||||
|
/**************************************************************************************
|
||||||
|
OLD CHANGE LOGS BEGIN HERE
|
||||||
|
*************************************************************************************** */
|
||||||
|
|
||||||
|
7.06 Build 240
|
||||||
|
|
||||||
|
New: Player stats updated for each AI kill on Epoch.
|
||||||
|
New: added support for Mull of Kyntire.
|
||||||
|
New: Unit will randomly suppress locations when group members are hit or fired uppon.
|
||||||
|
Fixed: Launchers and Launcher rounds were not being deleted.
|
||||||
|
Fixed: AI at Turrets were spawned with scubba loadouts.
|
||||||
|
Fixed: Units at UMS missions (Pirate missions) now spawn with scuba gear if spawned over water .
|
||||||
|
Fixed: Mission Loot Vehicles were not being spawned.
|
||||||
|
Fixed: Missions that were aborted (hostage or leader killed, other reasons) were not being respawned.
|
||||||
|
Fixed: Money not being added to some mission crates.
|
||||||
|
Fixed: Units spawning without primary weapons.
|
||||||
|
Fixed: _missionLootCrates not defined when loot crate spawning occurs at mission completion.
|
||||||
|
Changed: Some improvements in coding efficiency were implemented for frequently called functions.
|
||||||
|
Changed: all constants used for searching for mission locations on land or at sea are defined in GMS_fnc_findWorld.sqf
|
||||||
|
Changed: maps without water have the search range for missions at sea set to 0.
|
||||||
|
Changed: No searches for missions at sea will be done when the search range is 0.
|
||||||
|
|
||||||
|
=====================
|
||||||
|
7.02 Build 230
|
||||||
|
|
||||||
|
New: Option to hide bushes and trees that happen to be under the location in which an enterable building is spawned
|
||||||
|
GMS_hideRocksAndPlants = true; // When true, any rocks, trees or bushes under enterable buildings will be 'hidden'
|
||||||
|
|
||||||
|
New: Added support for simple objects. Note that these can be exported by the editor tool now.
|
||||||
|
|
||||||
|
New: Option to drop crates on a parachute at mission spawn which adds some randomness to where crates end up.
|
||||||
|
GMS_spawnCratesTiming = "atMissionSpawnAir";
|
||||||
|
|
||||||
|
New: You can now add money to crates at static missions by defining the following parameter in your .sqf for the mission.
|
||||||
|
_crateMoney = 10000;
|
||||||
|
this can be a value or a range such as [1000,10000];
|
||||||
|
a random amount of money from 0 to the maximum defined will be added.
|
||||||
|
|
||||||
|
New: Added checks and logging for invalid marker types and colors; default values are now provided.
|
||||||
|
|
||||||
|
New: Added some basic error checking and logging for incorrect entries for some key settings.
|
||||||
|
|
||||||
|
New: 3DEN Editor plugin exports missions as .sqf formated text ready to paste into a file.
|
||||||
|
See the instructions in the @blckeagls_3DEN folder of this download for more information.
|
||||||
|
|
||||||
|
Fixed: Don and Hostage missions could not be completed
|
||||||
|
Fixed: Missions tended to spawn all at once
|
||||||
|
Fixed: Vehicles sometimes blew up on spawn. vehicles are spawned at a safe spot which should reduce unintended explosions
|
||||||
|
Fixed: Missions sometimes spawned on steep hillsides.
|
||||||
|
Fixed: Missions were not distributed over the entire map. The scripts now pick a random quadrant to search thus ensuring broader distribution of mission locations.
|
||||||
|
Fixed: Money was not added to crates at dynamic missions
|
||||||
|
Fixed: Markers were not shown if more than once instance of a mission was spawned.
|
||||||
|
Fixed: No subs or scuba units were spawned at dynamic UMS missions.
|
||||||
|
Fixed: Jets crashed at spawn in.
|
||||||
|
|
||||||
|
Changed: Timers for spawning missions adjusted a bit to space out spawn/timeouts a bit more.
|
||||||
|
Changed: The system has been upgraded to a state-based system, meaning only one script (GMS_fnc_mainThread)is running once all missions are initialized.
|
||||||
|
Changed: a lot of debugging code was removed.
|
||||||
|
Changed: List of missions for dynamic Underwater missions was moved to \Missions\GMS_missionLIsts.sqf
|
||||||
|
Changed: Units spawned where the surface is water are spawned with UMS gear now.
|
||||||
|
Changed: Added some CBA compatability (Thanks to porkeid for the fixes)
|
||||||
|
|
||||||
|
6.98 Build 206
|
||||||
|
FIXED: few minor bug fixes.
|
||||||
|
FIXED: Static Mission Loot vehicles are no longer deleted by Epoch servers when players enter them.
|
||||||
|
FIXED: an error in coordinates for some randomly spawned missions tha added an extra 0 to the array with the coordinaates.
|
||||||
|
Added: a define for NIA all in one in GMS_defines;
|
||||||
|
Added a few preconfiguration variables with lists of NIA Armas items.
|
||||||
|
Added: an optional parameter to define the location of a mission as one of one or more locations in an array
|
||||||
|
_defaultMissionLocations = [];
|
||||||
|
|
||||||
|
Added: a function that returns an array of all mission markers used by blckeagls for mission makers and server owners
|
||||||
|
GMS_fnc_getAllBlackeaglsMarkers
|
||||||
|
Returns: an array with all markers used by the mission system.
|
||||||
|
|
||||||
|
Added: a function to pull a list of all map markers belonging to DMS and avoid spawning new blckeagls missions near these.
|
||||||
|
Configuraiont parameter: GMS_minDistanceFromDMS // set to -1 to disable this check.
|
||||||
|
Function: GMS_fnc_getAllDMSMarkers
|
||||||
|
|
||||||
|
Removed: some debugging and map sepcific settings from GMS_custom_config.sqf
|
||||||
|
Changed: some code for finding locations for a new mission.
|
||||||
|
Added: all blckeagls map markers have the same prefix: "blckeagls_marker"
|
||||||
|
|
||||||
|
6.96 Build 199
|
||||||
|
Added support for Arma servers not running Epoch or Exile
|
||||||
|
|
||||||
|
6.96 Build 197
|
||||||
|
Sorted some wisses with the dynamic UMS spawner.
|
||||||
|
Removing debugging info
|
||||||
|
|
||||||
|
6.92 Build 196
|
||||||
|
sorted issues with markers
|
||||||
|
and added new findSafeLocation
|
||||||
|
|
||||||
|
6.92 Build 194
|
||||||
|
Added _noAIGroups to parameter list for _spawnMissionAI
|
||||||
|
Other minor changes to delete logging.
|
||||||
|
|
||||||
|
6.92 Build 193
|
||||||
|
Updates to scripts to see if player(s) are near locations.
|
||||||
|
Updates to scripts to delete alive and dead AI.
|
||||||
|
Updates to simulation managers.
|
||||||
|
|
||||||
|
6.92 Guild 192
|
||||||
|
All actions on dead AI are handled throug units GMS_graveyardGroup
|
||||||
|
All use of GMS_deadAI has been deleted.
|
||||||
|
|
||||||
|
6.92 Build 184
|
||||||
|
Fixed an issues that caused blckeagls to load before exile servers were ready to accept players.
|
||||||
|
Added checks that ensure that live AI and mission scenery do not despawn when players are nearby.
|
||||||
|
Decreased the frequency with which some checks (dead AI, live AI, scenery at completed missions) is checked.
|
||||||
|
Redid a few lops that should be using the more speedy deleteAt rather than forEach methods.
|
||||||
|
worked on killed and hit EH so that these can run on the client owning the unit and server with each having a specific role
|
||||||
|
- note that this requires that the code be streamed to clients and compiled on the HC.
|
||||||
|
Updates to client to reduce logging
|
||||||
|
Added a firedNear EH
|
||||||
|
Redid system for setting up combatmode and behavior to be context dependent
|
||||||
|
Redid setNextWaypont to include an antiStuck check and implement the above checks on behavior and combat mode.
|
||||||
|
Support for claim-vehicle scripts is now built-in
|
||||||
|
GMS_allowClaimVehicle = true; // To allow players to claim vehicles (Exile only).
|
||||||
|
Added a setting to disable having AI toss smoke before healing. Set:
|
||||||
|
GMS_useSmokeWhenHealing=false; // to disable this
|
||||||
|
Added an option to display kill notices using Toasts
|
||||||
|
GMS_aiKillUseToast=true; // in blckClient.sqf in the debug folder of your mission.pbo to enable these.
|
||||||
|
Added offloading of AI to clients
|
||||||
|
////////
|
||||||
|
// Client Offloading and Headless Client Configurations
|
||||||
|
GMS_useHC = true; // Experimental (death messages and rewards not yet working).
|
||||||
|
// Credit to Defent and eraser for their excellent work on scripts to transfer AI to clients for which these settings are required.
|
||||||
|
GMS_ai_offload_to_client = true; // forces AI to be transfered to player's PCs. Disable if you have players running slow PCs.
|
||||||
|
GMS_ai_offload_notifyClient = false; // Set true if you want notifications when AI are offloaded to a client PC. Only for testing/debugging purposes.
|
||||||
|
// TODO: set to false before release
|
||||||
|
GMS_limit_ai_offload_to_blckeagls = true; // when true, only groups spawned by blckeagls are evaluated.
|
||||||
|
|
||||||
|
Fixed - Vehicle unlock when empty of crew through adding a getOut event handler.
|
||||||
|
Code for spawning vehicles redone to reduced redundancy.
|
||||||
|
Monitoring of groups refined to route mission groups that have left the mission area back to it.
|
||||||
|
|
||||||
|
V 6.90 Build 175
|
||||||
|
1. Added new settings to specify the number of crew per vehhicle to GMS_config.sqf and GMS_config_mil.sqf
|
||||||
|
|
||||||
|
// global settings for this parameters
|
||||||
|
// Determine the number of crew plus driver per vehicle; excess crew are ignored.
|
||||||
|
// This can be a value or array of [_min, _max];
|
||||||
|
GMS_vehCrew_blue = 3;
|
||||||
|
GMS_vehCrew_red = 3;
|
||||||
|
GMS_vehCrew_green = 3;
|
||||||
|
GMS_vehCrew_orange = 3;
|
||||||
|
|
||||||
|
You can also define this value in missions by adding the following variable definition to the mission template:
|
||||||
|
|
||||||
|
_vehicleCrewCount = [3,6]; // min/max number of AI to load including driver. see the missions\blue\template.sqf and GMS_configs.sqf for more info.
|
||||||
|
|
||||||
|
2. Lists of items to be excluded from dynamically generated loadouts has been moved to:
|
||||||
|
GMS_config.sqf
|
||||||
|
GMS_config_mil.sqf
|
||||||
|
|
||||||
|
3. Added a new setting that specifies whether logging of blacklisted items is done (handy for debugging)
|
||||||
|
GMS_logBlacklistedItems = true; // set to false to disable logging
|
||||||
|
|
||||||
|
4. Hit and Killed event handlers extensively reworked. Methods for notification of nearby AI and Vehicles of the killers whereabouts were revised to be more inclusive of neighboring AI.
|
||||||
|
|
||||||
|
5. Issues with AIHit events fixed; AI now deploy smoke and heal.
|
||||||
|
|
||||||
|
6. Added constraints on aircraft patrols to keep them in the mission area.
|
||||||
|
|
||||||
|
7. Removed some unnecessary logging.
|
||||||
|
|
||||||
|
8. Other minor coding fixes and optimizations.
|
||||||
|
|
||||||
|
6.88
|
||||||
|
This update consists primarily of a set of bug fixes and code tweaks.
|
||||||
|
Many thanks to HeMan for his time in effort spent going through the scripts to troublehsoot and improve them.
|
||||||
|
|
||||||
|
6.86 Build 156
|
||||||
|
Added support for spawning infantry and statics inside buildings for forming a garrison using either of two methods.
|
||||||
|
1. by placing a marker object such as a sphere in the building you define it as having units/statics inside
|
||||||
|
2. by placing units or statics in it you determine the garrison to be placed at mission spawn.
|
||||||
|
Added tools to facilitate grabbing data from missions in the editor (see the new TOOLS folders for more information).
|
||||||
|
Added additional error checks for missing mission parameters.
|
||||||
|
Fixed: issues that prevented completion of capture/hostage missions on exile servers
|
||||||
|
Added: code that forces air, land and sea vehicles to detect nearby players which should help with frozen AI _noChoppers
|
||||||
|
Changed: code for blckeagls simulation manager to force simulation when groups are awoken.
|
||||||
|
Added: additional settings for simulation management (see GMS_configs.sqf for details)
|
||||||
|
Changed: Simulation management is now set using the new variable GMS_simulationManager which is defined in GMS_configs.sqf
|
||||||
|
Fixed: Heli's just hovered over missions.
|
||||||
|
Fixed: GRG code that locked up the mission system was removed from the public RC.
|
||||||
|
|
||||||
|
6.84 Build 145
|
||||||
|
Added Option to load weapons, pistols, uniforms, headgear, vests and backpacks from CfgPricing (Epoch) or the Arsenal (Exile) and exclude items above a certain price
|
||||||
|
Add details on configs for enabling this and setting the maximum price
|
||||||
|
To use this new feature
|
||||||
|
Set GMS_useConfigsGeneratedLoadouts = true;
|
||||||
|
|
||||||
|
To specify the maximum price for items added to AI, change:
|
||||||
|
GMS_maximumItemPriceInAI_Loadouts = 100;
|
||||||
|
|
||||||
|
NOTE: this function overides any loadouts you specify in GMS_config.sqf etc.
|
||||||
|
|
||||||
|
Added functions to despawn static patrols of all types when no players are nearby. This tracks the number of infantry alive in a group and respawns only the number alive when the group was despawned.
|
||||||
|
Added: Static units will now be spawned with gear specific to difficulty level (blue, red, green, orange) as specified in GMS_config.sqf etc.
|
||||||
|
Added: AI now have a chance of spawning with binocs or range finders.
|
||||||
|
Added: a lit road cone spawns at the center of the mission to help find it and aid in triggering mission completion.
|
||||||
|
|
||||||
|
Changed: Hostage missions redesigned to reduce chances of AI being glitched into containers and of mission objects flying about when spawned in.
|
||||||
|
Changed: Units are spawned with greater dispersion.
|
||||||
|
Changed: method for spawning random landscapes has been changed. Note the added randomization in missions\blue\default.sqf
|
||||||
|
|
||||||
|
Fixed: Collisions between objects at missions caused issues.
|
||||||
|
Fixed: Attempted a fix to reduce the chance that AI will spawn inside or under objects like rocks or containers.
|
||||||
|
Fixed: Captive missions now complete properly.
|
||||||
|
Fixed: Hostage missions now complete properly.
|
||||||
|
Fixed: Paratroops spawned at UMS missions now spawn with scuba gear.
|
||||||
|
|
||||||
|
Version 1.82 Build 134
|
||||||
|
Added: configs for blue, red, green and orange pistol, vest, backpack and uniforms (with thanks to Grahame for suggesting this change and doing most of the coding)
|
||||||
|
Changes:
|
||||||
|
Commented out all configs in missions for uniforms, headgear, backpacks and uniforms.
|
||||||
|
Commented out most configs for helis, paratroops and supplemental loot dropped by paratroops.
|
||||||
|
Removed some logging that is not required.
|
||||||
|
|
||||||
|
Version 1.82 Build 132
|
||||||
|
Added: GMS_killPercentage = 0.9; // The mission will complete if this fraction of the total AI spawned has been killed.
|
||||||
|
// This facilitates mission completion when one or two AI are spawned into objects.
|
||||||
|
|
||||||
|
Added: Male and Female uniforms are separated and can be used alone or together for specific missiosn (Epoch Only).
|
||||||
|
|
||||||
|
Added: Loot tables updated to include food and supplies as of Epoch 1.1.0.
|
||||||
|
|
||||||
|
Added: Setting that configures vehicles to be sold at Black Market Traders.
|
||||||
|
GMS_allowSalesAtBlackMktTraders = true; // Allow vehicles to be sold at Halve's black market traders.
|
||||||
|
|
||||||
|
Added: Support for hostage rescue missions.
|
||||||
|
The hostage can be spawned at any location relative to the mission center.
|
||||||
|
The mission aborts if the hostage is killed; all loot is deleted.
|
||||||
|
To complete the mission, a player must approach the hostage and execute the rescue action.
|
||||||
|
The hostage then runs away, and loot becomes available to the player.
|
||||||
|
See missions\blue\hostage.sqf for an example mission.
|
||||||
|
|
||||||
|
***** PLEASE READ - IMPORTANT ****
|
||||||
|
Please update the GMS_client.sqf in your mission.pbo or you will not be able to interact with or see animations of the new AI characters.
|
||||||
|
|
||||||
|
Added: Support for Arrest Leader missions.
|
||||||
|
These are similar to the rescue hostage mission except that the leader, when arrested, will sites
|
||||||
|
awaiting arrival of imaginary survivor forces.
|
||||||
|
See missions\blue\capture.sqf for an example mission
|
||||||
|
|
||||||
|
Added: GMS_missionEndCondition = playerNear; // Options are allUnitsKilled, playerNear, allKilledOrPlayerNear
|
||||||
|
which provides a simple way to define the default conditions under which the mission ends for all missions.
|
||||||
|
You can of course define _endCondition in the specific mission file if you wish.
|
||||||
|
|
||||||
|
Added: A new mission completion condition for hostage and captive missions.
|
||||||
|
_endCondition = assetSecured;
|
||||||
|
|
||||||
|
Added: Mission crates can now be spawned on the ground or in the air at mission completion.
|
||||||
|
GMS_spawnCratesTiming sets the default for all missions.
|
||||||
|
GMS_spawnCratesTiming = "atMissionEndAir"; // Choices: "atMissionSpawnGround","atMissionSpawnAir","atMissionEndGround","atMissionEndAir".
|
||||||
|
Define _spawnCratesTiming to set this parameter for a particular mission.
|
||||||
|
_spawnCratesTiming = "atMissionEndAir";
|
||||||
|
See the hostage1.sqf mission as an example.
|
||||||
|
|
||||||
|
Added: Crates spawn with tabs or crypto. Set the values in the mod-specific configs.
|
||||||
|
For Epoch, the crypto can be accessed by pressing space bar.
|
||||||
|
|
||||||
|
Added: Additional documentation for those who wish to design their own missions.
|
||||||
|
See \missions\blue\default.sqf and default2.sqf for details.
|
||||||
|
|
||||||
|
Added: greater control over AI loadouts.
|
||||||
|
For land-based dynamic missions you can now specify for each mission:
|
||||||
|
Uniforms
|
||||||
|
Headgear
|
||||||
|
Vests
|
||||||
|
Weapons allowed
|
||||||
|
Sidearms allows.
|
||||||
|
(See \Missions\Blue\default2.sqf for examples).
|
||||||
|
[Still to do: upgrade statics for the same functionality; doable but will require adding these parameters to the spawn info for the groups of infantry, vehicle, submerged and air units];
|
||||||
|
|
||||||
|
Added: greater control of mission helis - you can now set variables in the mission file (see examples below).
|
||||||
|
when these are not defined in the mission file, defaults are used.
|
||||||
|
_chancePara = GMS_chanceParaBlue; // Setting this in the mission file overrides the defaults
|
||||||
|
_noPara = GMS_noParaBlue; // Setting this in the mission file overrides the defaults
|
||||||
|
_chanceHeliPatrol = GMS_chanceHeliPatrolBlue; // Setting this in the mission file overrides the defaults
|
||||||
|
_noChoppers = GMS_noPatrolHelisBlue;
|
||||||
|
_missionHelis = GMS_patrolHelisBlue;
|
||||||
|
|
||||||
|
Added: default minimun and maximum radius for groups to patrol.
|
||||||
|
GMS_minimumPatrolRadius = 22; // AI will patrol within a circle with radius of approximately min-max meters. note that because of the way waypoints are completed they may more more or less than this distance.
|
||||||
|
GMS_maximumPatrolRadius = 35;
|
||||||
|
|
||||||
|
Changed: **** VERY IMPORTANT ******
|
||||||
|
The definitions of private variables used in missions in now read in through an include statement (see Missions\Blue\default.sqf for an example)
|
||||||
|
Please update any custom mission you have generated accordingly.
|
||||||
|
This should save quite a bit of editing going forward.
|
||||||
|
Please note that if you do not update the private variables definitions list certain features of the mission spawner may not work due to issues with scope of variables.
|
||||||
|
|
||||||
|
Changed: Each mission is now compiled at server startup which I hope will save a little server resource between restarts.
|
||||||
|
A few variables that were not used were eliminated.
|
||||||
|
Some declarations of private variables were consolidated.
|
||||||
|
Together these changes should be worth a small performance bump.
|
||||||
|
|
||||||
|
Changed: Code for Heli Patrols redone.
|
||||||
|
Code that spawns paratroops moved to a separate function that is called when a player is within a certain radius of the mission.
|
||||||
|
Code that spawns a supplemental loot chest added - this will be spawned along with the paratroop reinforcements, if desired.
|
||||||
|
This crate can have customized loot (think ammo, building supplies, tools and food, ala Exile/Epoch airdrops).
|
||||||
|
|
||||||
|
Changed: Logic for spawning paratroops was redone so it is more clear.
|
||||||
|
When helis are spawned the paratroops will spawn at the heli location at the location at which the heli spawn based on probability set in _chancePara in the mission file or the default for that mission difficulty.
|
||||||
|
When no helies are to be spawned, paratroops will spawn at the mission center when it spawns based on probability set in _chancePara in the mission file or the default for that mission difficulty.
|
||||||
|
A delay was added so that paratroops spawn when players are nearby for more drama !!
|
||||||
|
|
||||||
|
Changed: Methods for detecting NULL Groups (rarely a problem with arma these days) simplified.
|
||||||
|
Still more work to be done here.
|
||||||
|
|
||||||
|
Changed: Methods for defining mission crate loot were relaxed.
|
||||||
|
You can define each item either with the old method ["Item Name", minimun number, maximum number] or just "Item name".
|
||||||
|
|
||||||
|
Fixed: disabled some logging that is not required except when debugging.
|
||||||
|
Fixed: AI Counts were not being shown at dynamic UMS.
|
||||||
|
Fixed: AI were glitching through walls.
|
||||||
|
Fixed: Emplaced weapons are now spawned at correct locations when their positions are defined in an array in the mission file.
|
||||||
|
Fixed: an issue with the experimental build whereby the number of dynamically tracked missions was not correctly spawned.
|
||||||
|
Fixed: Dead Ai in vehicles were sometimes detected as alive. Dead AI are now ejected.
|
||||||
|
Fixed: Vehicles are now properly released to players when all AI inside are killed when an HC is connected.
|
||||||
|
|
||||||
|
Version 1.80 Build 118
|
||||||
|
Added: you can now determine whether objects spawned at dynamic missions have simulation or damage enabled.
|
||||||
|
See the medicalCamp.sqf mission for an example of how this is done.
|
||||||
|
Added: you can now spawn simple objects as part of your mission landscape. Useful for STATIC missions only.
|
||||||
|
Added: lists of armed vehicles from which you can choose those you wish to spawn at vehicles broken down by category (wheeled, traced APC, Tank, etc)
|
||||||
|
Added: Three constants that define how far away missions are from players when they spawn.
|
||||||
|
GMS_minDistanceToBases = 900; Minimum distance from any freq jammer or flag
|
||||||
|
GMS_minDistanceToPlayer = 900; Minimum distance from any player
|
||||||
|
GMS_minDistanceFromTowns = 300; Minimum distance from cites or towns.
|
||||||
|
|
||||||
|
Changed: Default missions reworked to support the above.
|
||||||
|
|
||||||
|
Version 1.79, Build 116
|
||||||
|
Added: Map-specific information for Lythium.
|
||||||
|
Added: New configuration setting: GMS_showCountAliveAI = true; When = true, the number of alive AI at a mission will be displayed by the mission marker.
|
||||||
|
Added: You can now define the types of patrol vehicles spawned based on AI difficulty.
|
||||||
|
|
||||||
|
Fixed: Setting GMS_useTimeAcceleration = false; now disables the time acceleration module.
|
||||||
|
Fixed: several issues with dynamic UMS missions.
|
||||||
|
Fixed: AI Heli's at missions should now be released to players when all AI are dead.
|
||||||
|
Fixed: script errors when dynamic simulation off.
|
||||||
|
|
||||||
|
Changed: Code for checking the state of AI vehicles and releasing them to players was re-written.
|
||||||
|
Changed: Eliminated useless files from the debug folder (mission.pbo).
|
||||||
|
Please replace the debug folder in your mission PBO with the updated one found on the github.
|
||||||
|
[removed all scripts for markers from mission\debug. These are now located in GMS\compiles\functions.]
|
||||||
|
|
||||||
|
Version 6.78 Build 107
|
||||||
|
Fixed: GMS_baseSkill is now used properly to set skill of units.
|
||||||
|
Added: Units assemble in formation when spawned.
|
||||||
|
|
||||||
|
Version 6.78 build 106
|
||||||
|
Changed how event handlers are handled.
|
||||||
|
bug fixes
|
||||||
|
Removed lines specific to GRG servers.
|
||||||
|
|
||||||
|
Version 6.76 Build 104
|
||||||
|
Added: A new timer that determines the time after which Vehicles are deleted once all AI are dead if no player has entered the driver's seat.
|
||||||
|
Added: an optional variable in the template for missions called _missionGroups by which you can define the parameters (position, skill level, number, patrol radius) for each group spawned.
|
||||||
|
See the default2.sqf mission under GMS\Missions\blue for an example
|
||||||
|
Changed: The method by which the server handles AI damage was changed to use MPHit.
|
||||||
|
Added: an MPKilled event handler for vehicles.
|
||||||
|
|
||||||
|
Fixed: Static Vehicles were being spawned repeatedly.
|
||||||
|
Fixed: _missionGroups parameters were not being handled correctly.
|
||||||
|
Fixed: sever FPS was not being logged by GMS_passToHCs
|
||||||
|
Fixed: crate marker was not shown when in debug mode.
|
||||||
|
Known Issues: Vehicles are not unlocked when released to players if an HC is connected.
|
||||||
|
|
||||||
|
Version 6.74 Build 97
|
||||||
|
Added Core Code for spawning dynamic underwater missions.
|
||||||
|
Added Core Code for spawning scuba units and surface and SDV patrols.
|
||||||
|
Added Code to spawn static underwater missions.
|
||||||
|
Note: support for scuba AI required a significant re-write of the code for spawning AI groups and units.
|
||||||
|
|
||||||
|
Changed static missions so that AI are spawned only when players are within 2000 meter.
|
||||||
|
Added optional respawn to static AI groups, vehicles, emplaced weaps and aircraft.
|
||||||
|
Added four functions that support spawning of static AI with setting for difficulty, patrol radius, and respawn time.
|
||||||
|
For examples, see the updated static eample mission
|
||||||
|
and GMS_custom_config.sqf and the examples below:
|
||||||
|
|
||||||
|
position difficulty radius respawn
|
||||||
|
[[[22920.4,16887.3,3.19144],"red",[1,2], 75, 120]] call GMS_fnc_sm_AddGroup;
|
||||||
|
|
||||||
|
weapon position difficulty radius (not used) respawn time
|
||||||
|
[["B_G_Mortar_01_F",[22867.3,16809.1,3.17968],"red",0,0]] call GMS_fnc_sm_AddEmplaced;
|
||||||
|
|
||||||
|
vehicle position difficulty radius respawn
|
||||||
|
[["B_G_Offroad_01_armed_F",[22819.4,16929.5,3.17413],"red", 600, 0]] call GMS_fnc_sm_AddVehicle;
|
||||||
|
|
||||||
|
aircraft position difficulty radius respawn
|
||||||
|
[["Exile_Chopper_Huey_Armed_Green",[22923.4,16953,3.19],"red", 1000, 0]] call GMS_fnc_sm_AddAircraft;
|
||||||
|
Re-did event handlers for compatability with Arma 1.78+, and moved most code into pre-compiled functions that execute on the server.
|
||||||
|
|
||||||
|
======================
|
||||||
|
Version 6.72 Build 81
|
||||||
|
[Added] Support for headless clients. This functionality works for one HC regardless of the name used for HCs.
|
||||||
|
[Added] Added an optional variable for mission patrol vehicles: _missionPatrolVehicles
|
||||||
|
One can use this variable to defin the spawn position and types of vehicles spawned at missions.
|
||||||
|
note: one can still have the type of vehicle randomized by using selectRandom and pointing it to either the default list of patrol vehicles for the mission system or providing a custom array of vehicle class names.
|
||||||
|
I added this because on some of our GRG missions the vehicles were being destroyed at the time they were spawned.
|
||||||
|
[Changed] Crates can now be lifted only AFTER a mission is completed.
|
||||||
|
[Changed] The client is now activated using remoteExec instead of a public variable.
|
||||||
|
**** Please be sure to update the files in the debug folder on your client.
|
||||||
|
|
||||||
|
=====================
|
||||||
|
Version 6.71 Build 77
|
||||||
|
[Added] HandleDamage Event Handler for Armed Vehicles to increase their interaction with players.
|
||||||
|
[Fixed] Mission name was not displayed with start or end messages when the mission marker labels were disabled.
|
||||||
|
[Fixed] the mission system would hang in some situations due to an undefined global variable in SLS.
|
||||||
|
|
||||||
|
============================
|
||||||
|
8/13/17 Version 6.61 Build 71
|
||||||
|
[Added] Most parameters for numbers of loot, AI, and vehicle patrols can be defined as either a scalar value or range.
|
||||||
|
Note that there is backwards compatability to prior versions so you need make no changes to your configs if you do not wish to.
|
||||||
|
The major reason to include this feature is so that players to do not go looking for that third static weapon at an orange mission. They have to scope out the situation.
|
||||||
|
[Added] options to have multiple aircraft spawn per mission.
|
||||||
|
[Note that if you spawn more than one aircraft I recommend that you disable the paratroop spawns to avoid spawning more than 124 groups].
|
||||||
|
[Added] an optional militarized setting whereby missions use a full complement of Arma air and ground vehicles including fighter jets and tanks. This is OFF by default.
|
||||||
|
Uncomment #define GMS_milServer in GMS\Configs\GMS_defines to enable this.
|
||||||
|
[ Note!!! There are both general and mod-specific configs for the militarized missions.]
|
||||||
|
[Added] Support for setting a range for certain configurations rather than setting a single value.
|
||||||
|
This should make missions a little more varied in that players will no longer be looking for the 4 statics that always spawn at an orange mission.
|
||||||
|
This pertains to:
|
||||||
|
Numbers of Emplaced Weapons
|
||||||
|
Numbers of Vehicles Patrols
|
||||||
|
Numbers of Air Patrols
|
||||||
|
AI Skills; for example you can now set ["aimingAccuracy",[0.08,16]],["aimingShake",[0.25,0.35]],["aimingSpeed",0.5],["endurance",0.50], .... ];
|
||||||
|
Numbers of Items to load into Mission and Static loot crates; for example, for the orange level of difficulty item counts could be revised as follows:
|
||||||
|
GMS_lootCountsOrange = [[6,8],[24,32],[5,10],[25,35],16,1];
|
||||||
|
|
||||||
|
7/27/17 Version 6.59 Build 60
|
||||||
|
[added] AI units in mission vehicles and emplaced weapons are notified of the location of the shooter when an AI unit is hit or killed. Location of the unit is revealed gradually between 0.1 and 4 where 4 is precise. Increments increase with increasing mission difficulty.
|
||||||
|
|
||||||
|
6/1/17 Version 6.59 Build 59
|
||||||
|
[changed] Players are no longer given crypto for each AI kill. Crypto added to AI Bodies was increased.
|
||||||
|
[fixed] error in GMS_fnc_setupWaypoints wherein _arc was not defined early enough in the script.
|
||||||
|
[fixed] Exile Respect Loss bug (temporary fix only).
|
||||||
|
|
||||||
|
5/21/17 Version 6.58 build 58
|
||||||
|
[Fixed] typos for GMS_epochValuables.
|
||||||
|
[Fixed] All loot was removed from AI vehicles at the time a mission was completed.
|
||||||
|
[Fixed] When mission completion criteria included killing all AI, missions could be completed with alive AI in vehicles.
|
||||||
|
|
||||||
|
4/6/17 Version 6.58 Build 54
|
||||||
|
[Added] A FAQ presenting an overview of the mission system and addons.
|
||||||
|
[Changed] Helicopter crew waypoint system reverted to that from Build 46.
|
||||||
|
[Fixed] Mission timouts would prevent new missions from spawning after a while.
|
||||||
|
[Fixed] GMS_timeAcceleration now determines if time acceleration is activated.
|
||||||
|
[Fixed] Missions did not complete correctly under certain circumstances.
|
||||||
|
[Fixed] Mission vehicles were not properly deleted, unlocked or otherwise handled at misison end or when AI crew were killed.
|
||||||
|
[Fixed] Throws errors when evaluating errors related to certain disallowed types of kills.
|
||||||
|
Known errors: throws errors with certain loot crate setups (Exile)
|
||||||
|
|
||||||
|
3/23/17 Verision 6.58 build 48
|
||||||
|
Turned debugging off
|
||||||
|
Added some preprocessor commands to minimize the use of if()then for debugging purposes when running without any debugging settings on.
|
||||||
|
Teaks to heli patrol waypoint system.
|
||||||
|
bugfixes.
|
||||||
|
|
||||||
|
3/21/17 Version 6.58 Build 44
|
||||||
|
[Added] Each mission now has a setting for mines which is set to false. To use the global setting in GMS_config for yoru mission just change this to read:
|
||||||
|
_useMines = GMS_useMines;
|
||||||
|
[Fixed] Logging by the time acceleration module was disabled.
|
||||||
|
[Fixed] Emplaced weapons now spawn in the correct locations.
|
||||||
|
[Fixed] Missions end correctly when all AI are dead and _endCondition = allKilledOrPlayerNear;
|
||||||
|
[changed] Reverted to the waypoint system from build 42.
|
||||||
|
|
||||||
|
3/18/17 Version 6.58 Build 44
|
||||||
|
[Fixed] Time acceleration was not working.
|
||||||
|
[Fixed] GMS_timeAcceleration now determines if time acceleration is activated.
|
||||||
|
[Fixed] The mission described by default2 in the blue missions folder now spawns correctly.
|
||||||
|
You can use this as a guide for how to place loot crates or static weapons at specific locations like inside or on top of structures.
|
||||||
|
Loot vehicles are now spawned correctly.
|
||||||
|
Loot crates positioned at specific locations are now spawned correctely.
|
||||||
|
static weapons to be spawned at specified positions are now spawned correctly.
|
||||||
|
That mission is disabled by default.
|
||||||
|
[Added] option to disable time acceleration (GMS_timeAcceleration = true; line 30 of GMS_config.sqf)
|
||||||
|
[Added] options to have armed heli's patrolling the missions and for them to drop AI.
|
||||||
|
[Added] options to have paratroops drop over missions as an alternative to the above.
|
||||||
|
[Added] Code optimization for GMS_fnc_spawnMissionAI.sqf and several other AI spawning scripts.
|
||||||
|
Added] Formalizing exception handling for the case in which a createGroup request returns grpNull.
|
||||||
|
If this happens during mission spawning the mission will be aborted and all mission objects and AI will be deleted.
|
||||||
|
This should prevent the mission system from crashing causing no further missions to spawn.
|
||||||
|
[Added] a new configuration that sets a cap on the maximum number of spawned missions.
|
||||||
|
GMS_maxSpawnedMissions = 4; // Line 181 of GMS_configs.sqf
|
||||||
|
[Added] a function GMS_fnc_allPlayers which returns an array of allPlayers (as a temporizing fix till BIS patches the allPlayers function.
|
||||||
|
|
||||||
|
[Changed] Coding improvements for waypoint generation.
|
||||||
|
Tried a new approach to generating waypoints to make AI more aggressive without the overhead of the last method.
|
||||||
|
|
||||||
|
[Changed] Redid the mission spawner to spawn one random mission every 1 min for mission for which timers say they can be spoawned.
|
||||||
|
This will continue until the cap is reached then randomly select a mission from those that are ready to be respawned to be spawned next.
|
||||||
|
If you want the various missions to have an equal chance of being spawned at all times, give the the timers for blue, red, green and red timers the same values for Min and Max.
|
||||||
|
[Chaged] logic for detecting whether a player is near the mission center or loot crates to test if a player is near any of an array of location or objects.
|
||||||
|
[Added] a function GMS_fnc_allPlayers which returns an array of allPlayers (as a temporizing fix till BIS patches the allPlayers function.
|
||||||
|
|
||||||
|
To Do - consider moving back to storing AI in a group-based manner (doable easily, needs testing).
|
||||||
|
Build a template for static missions (planned for Ver 6.60).
|
||||||
|
Write a static mission spawning routine (planned for Ver 6.60).
|
||||||
|
|
||||||
|
3/17/17 Version 6.58 Build 43
|
||||||
|
Reverted back to v6.56 build 39 then:
|
||||||
|
[Added] a Hit event handler to make AI more responsive. All AI in the group to which the hit AI belongs are informed of the shooter's location.
|
||||||
|
[Changed] the Killed event handler as below.
|
||||||
|
[Added] New logic for informing AI of the location of players to give AI a more gradual ramp up from little knowledge about player location to full knowledge.
|
||||||
|
[Added] scripts and functions for reinforcements: a) heli patrols; b) paratroops.
|
||||||
|
[Added] ...\GMS\Configs\GMS_defines.hpp inside which you can disable APEX gear and other attributes.
|
||||||
|
|
||||||
|
[Changed] Re-organized variables in the configs.
|
||||||
|
[Changed] Divided configs into tow basic parts:
|
||||||
|
- General configs for the mission system.
|
||||||
|
- Mod-specific configs.
|
||||||
|
[Changed] spawnMarker.sqf in the debug folder (mission.pbo) to reduce unneeded logging.
|
||||||
|
|
||||||
|
3/13/17 Version 6.57 Build 41
|
||||||
|
Changed the method of tracking live AI from an array of units to an array of groups which will aid in monitoring groups for a 'stuck' state.
|
||||||
|
Added Search and Destroy waypoints for each location in the waypoint cycle.
|
||||||
|
Change waypoint compbat mode to "COMBAT"
|
||||||
|
Added Group Waypoint Monitor that deals with the case wherein a group gets 'stuck' in a search and destroy waypoint without any nearby targets.
|
||||||
|
Updated spawnMarker.sqf in the debug folder (mission.pbo) to reduce unneeded logging.
|
||||||
|
|
||||||
|
3/12/17 Version 6.57 Build 40 Reworked AI Event handlers
|
||||||
|
Added an event handler to make AI more responsive.
|
||||||
|
Revised logic for informing AI of the location of players to give AI a more gradual ramp up from little knowledge about player location to full knowledge.
|
||||||
|
|
||||||
|
2/24/17 Version 6.56 Build 39. Reworked Mission End Criteria and timing of loading of loot chests
|
||||||
|
Added a check so that mission completion by players near loot crates was tripped only when players were on foot.
|
||||||
|
Added a setting that determines whether loot crates are loaded when the mission spawns or once the mission is complete.
|
||||||
|
see GMS_loadCratesTiming = "atMissionCompletion"; (line 78) for this configuration setting.
|
||||||
|
|
||||||
|
1/28/17 Version 6.55 Build 38 Bug Fixes
|
||||||
|
bug fixes
|
||||||
|
Commented out logging that is no longer needed
|
||||||
|
Removed a weapon from loot tables that could be used for dupping.
|
||||||
|
|
||||||
|
1/24/17 Version 6.55 Build 35 Improved handling of static weapons with dead AI; added option to delete loot chests at some time after mission completion.
|
||||||
|
Added a new configuration GMS_killEmptyStaticWeapons which determines if static weapons shoudl be disabled after the AI is killed.
|
||||||
|
Added a configuration GMS_cleanUpLootChests that determines if loot crates are deleted when other mission objects are deleted.
|
||||||
|
Fixed an issue that prevented proper deletion of mission objects and live AI.
|
||||||
|
|
||||||
|
1/23/17 Version 6.54 Build 33 Bug Fixes
|
||||||
|
Fixed typos in GMS_fnc_vehicleMonitor.sqf
|
||||||
|
Removed a few files that are not used or needed.
|
||||||
|
Removed some code that had been commented out from GMS_functions.sqf.
|
||||||
|
|
||||||
|
1/22/17 Version 6.54 build 32 Primarily performance-oriented improvements to switch from using timers and .sqf to a 'thread' that scans various arrays related to missions and mission objects using pre-compiled functions.
|
||||||
|
Changed code to test for conditions that trigger to spawn mission objects and AI completely
|
||||||
|
Rewrote the code for spawning emplaced weapons from scratch.
|
||||||
|
Fixed an error in how the waitTime till a mission was respawned after being updated to inactive status.
|
||||||
|
Added additional reporting as to the mission type for which AI, statics and vehicle patrols are being spawned.
|
||||||
|
Continued switching from GMS_debugOn to GMS_debugLevel.
|
||||||
|
Continued work to move much of the code from GMS_fnc_missionSpawner to precompiled functions.
|
||||||
|
- tested and working for all but the emplaced weapons module.
|
||||||
|
Removed old code that had been commented out from GMS_missionSpawner.
|
||||||
|
deactivated the 'fired' event handler
|
||||||
|
added an 'reloaded' event handler to units that adds a magazin of the type used to reload the weapon to prevent units running out of ammo. this also provides a break in firing and is more realistic.
|
||||||
|
Added a check to GMS_fnc_vehicleMonitor that addes ammo to vehicle cargo when stores are low. Removed the infinite ammo script for static and vehicle weapons, again for greater realism.
|
||||||
|
Increased number of rounds of ammo added to AI units for primary and secondary weapons.
|
||||||
|
Tweaked code in GMS_fnc_spawnUnit to increase efficiency.
|
||||||
|
Attempted a fix for occaisional issues with missions not triggering or ending by changing from distance to distance2D.
|
||||||
|
Tweaked code for deleting dead AI to also delete any weapons containers nearby.
|
||||||
|
Checked throughout for potential scope issues; ensured all private variables were declared as such.
|
||||||
|
Changed the method by which mission patrol vehicles and static weapons are deleted at the end of a mission.
|
||||||
|
|
||||||
|
1/21/17 Build 29. Reverted to an older system for mission timers.
|
||||||
|
Went back to the timerless system for spawning missions.
|
||||||
|
Improved code for updating the array of pending/active missions
|
||||||
|
GMS_fnc_updateMissionQue.sqf re-written to take greater advantage of existing array commands: set and find.
|
||||||
|
Ensured that the array used to store the location(s) of active or recent missions is properly updated.
|
||||||
|
|
||||||
|
1/13/17 Version 6.54 Build 27
|
||||||
|
Rerverted back to the code that spawned a single instance of each mission until I can debug certain issues.
|
||||||
|
|
||||||
|
1/7/17 Version 6.53 Build 24 AI difficulty updates; some performance improvements.
|
||||||
|
Added a setting GMS_baseSkill = 0.7; // This defines the base skil of AI. Increase it to make AI more challenging.
|
||||||
|
Tweaked AI difficulty settings to make missions more difficult.
|
||||||
|
changed - GMS_EH_unitKilled - the event handler now uses precompiled rather than compiled on the fly code.
|
||||||
|
changed - several other minor performance tweaks were made server side.
|
||||||
|
changed - small changes were made the the loop in GMS_client.sqf
|
||||||
|
Tweaked debugging information to reduced unnecessary logging when not in debug-mode.
|
||||||
|
Disabled the loop sending server fps client-side
|
||||||
|
fixed - GMS_fnc_updateMissionQue was not correctly updating mission information after mission completion.
|
||||||
|
fixed - GMS_fnc_mainThread was not deleted old AI and Vehicles from the arrays used to capture them after mission completion.
|
||||||
|
changed - calls to GMS_fnc_vehicleMonitor were moved inside the main loop.
|
||||||
|
|
||||||
|
1/3/17 Version 6.51 Build 23 Added several new kinds of messaging to the UI.
|
||||||
|
Moved configuration for the client from debug\blckclient.sqf to debug\blckconfig.sqf.
|
||||||
|
Added a setting GMS_useKillMessages = true/false; (line 60 of the config. when true, kill messages will be send to all players when a player kills an AI. The style of the message is controlled client-side (debug\GMS_config.sqf)
|
||||||
|
Added a setting GMS_useKillScoreMessage = true/false; // (line 61 of the config) when true a tile is displayed to the killer with the kill score information
|
||||||
|
Added a setting GMS_useIEDMessages = true/false; // when true players will receive a message that their vehicle was damaged when AI are killed in a forbidden way (Run over Or Killed with vehicle-mounted weapons)
|
||||||
|
Fixed: Messages that a nearby IED was detonated are now properly displayed when players illegally kill AI.
|
||||||
|
Added a way to easily include / exclude APEX items. To exclude them comment out the line
|
||||||
|
#define useAPEX 1
|
||||||
|
at approximately line 219 in the config.
|
||||||
|
|
||||||
|
12/21/16 Version 6.50 Build 21 Added checks that delete empty groups.
|
||||||
|
Added a check for mod type to the routine that deletes empty groups as this is only needed for Epoch.
|
||||||
|
Added back the code that (a) eliminates the mission timers and (b) allows multiple instances of a mission to be spawned.
|
||||||
|
|
||||||
|
12/20/16 Version 6.46 Buid 20 Tweaks to time acceleration module.
|
||||||
|
Moved Variables for time acceleration to the config files.
|
||||||
|
Reworked code for time acceleration to use timeDay and BIS_fnc_sunriseSunsetTime.
|
||||||
|
|
||||||
|
11/20/16 Build 6.45 Build 19 UI-related additions and bug fixes.
|
||||||
|
Added Option to display mission information in Toasts (Exile Only).
|
||||||
|
Fixed an issue related to bugs in Arma 1.66
|
||||||
|
|
||||||
|
11/16/16 Version 6.44 Build 15 Added options for automated generation of location blacklists; added APEX gear; tweaks to the code that loads items into crates.
|
||||||
|
Added parameters
|
||||||
|
GMS_blacklistTraderCities=true; // the locations of the Epoch/Exile trader cities will be pulled from the config and added to the location blacklist for the mission system.
|
||||||
|
blcklistConcreteMixerZones = true; // Locations of the concrete mixers will be pulled from the configs; no missions will be spawned within 1000 m of these locations.
|
||||||
|
GMS_blacklistSpawns = true; // Locations of Exile spawns will be pulled from the config. No missions will spawn within 1000 m of these locations.
|
||||||
|
Added: the main thread now runs a function that checks for empty groups.
|
||||||
|
Fixed: The mission system would hang on epoch after a while because createGroup returned nullGroup. this appeared to occur because the maximum number of active groups had been reached. Deleting empty groups periodically solved the issue on a test machine.
|
||||||
|
Teaked: code to check whether a possible mission spawn location is near a flag or plot pole. Still needs work.
|
||||||
|
Added: Completed adding EDEN weapons, optics, bipods, optics to AI configurations and mission loot crates.
|
||||||
|
Added APEX headgear and uniforms. (Note, you would need to add any of these you wished for players to sell to Epoch\<Map Name>\epoch_config\CfgPricing.hpp on Epoch)
|
||||||
|
Changed: Definitions of blacklist locations such as spawns moved from GMS_findWorld.sqf to the GMS_configs_(epoch|exile).
|
||||||
|
Changed: Divided rifles and optics into subcategories to better enable assigning weapons to AI difficulties in a sort of class-based way, e.g., 556, 6.5, or LMG are separate classes.
|
||||||
|
Changed: DLS crate loader (not publically available yet) now uses GMS_fnc_loadLootItemsFromArray rather than the prior approach for which specific crate loading functions were called depending on the loadout type (weapons, building supplies, foord etc).
|
||||||
|
Fixed: You can now loot AI bodies in Epoch.
|
||||||
|
|
||||||
|
11/12/16 Version 6.43 Build 12 Added MAP ADDONS and Loot Crate Spawners.
|
||||||
|
Added: MapAddons - use this to spawn AI strongholds or other compositions you generate with Eden editor at server startup.
|
||||||
|
Added: Loot Crate Spawner - Spawn loot crates at prespecified points. This is designed so that you can spawn crates inside buildings or other structures spawned through the map-addons.
|
||||||
|
Added: APEX weapons, sights and optics to AI and loot crates.
|
||||||
|
|
||||||
|
11/12/16 Version 6.42 Build 11 Added code to fit weapons attachments.
|
||||||
|
Enhancements to code to equip weapons; pointrs, silencers and bipods are now attached.
|
||||||
|
|
||||||
|
11/11/16 Version 6.42 build 10 Added code to fit weapons attachments. Improved code to spawn mission objects.
|
||||||
|
Redid the code that spawns the objects at missions to work properly with the new formats generated by M3Arma EDEN Editor whilc being backwards compatible with older formats used in the existing missions.
|
||||||
|
Added code to add scopes and other attachments to AI weapons.
|
||||||
|
Added new variable GMS_blacklistedOptics which you can use to block spawning optics like TMS.
|
||||||
|
Added new parameter GMS_removeNVG which when true will cause NVG to be deleted from AI bodies.
|
||||||
|
Fixed: launchers and rounds should now be deleted when GMS_removeLaunchers = true;
|
||||||
|
Fixed: All AI should spawn with a uniform.
|
||||||
|
More bug fixes and correction of typos.
|
||||||
|
|
||||||
|
11/2/16 Version 6.41 Build 9 Kill message improvements; added money to AI.
|
||||||
|
Added a parameter GMS_useKilledAIName that, when true, changes the kill messages to show player name and AI unit name
|
||||||
|
Added message to players for killstreaks and a crypto/Tabs bonus for killstreaks.
|
||||||
|
Exile: AI spawn with a few tabs.
|
||||||
|
//Epoch: AI spawn with a few Crypto
|
||||||
|
Corrected an error that would spawn Epoch NVG on AI in Exile.
|
||||||
|
|
||||||
|
10/25/16 Version 6.4 Build 8 Code improvements.
|
||||||
|
Reworked the code to spawn vehicle patrols and static weapons and clean them up.
|
||||||
|
Reworked the code that messages players to be sure that calling titleText does not hang the messaging function and delay hints or system chat notifications.
|
||||||
|
|
||||||
|
10/22/16 v 6.3 Build 8-14-16 Code performance improvements.
|
||||||
|
Moved routines that delete dead AI, Alive AI and mission objects from individual loops to a single loop spawned by GMS_init.sqf.
|
||||||
|
Added functions to cache these data with time stamps for later time-based deletion.
|
||||||
|
|
||||||
|
10/21/16 Version 6.2 Build 7 Coding improvements
|
||||||
|
Redid system for markers which are now defined in the mission template reducing dependence on client side configurations for each mission or marker type.
|
||||||
|
Bug-fixes for helicrashes including ensuring that live AI are despawned after a certain time.
|
||||||
|
|
||||||
|
10-1-16 Version 6.1.4 Build 6 Added a time acceleration function
|
||||||
|
1) Added back the time acceleration module
|
||||||
|
|
||||||
|
9-25-16 Version 6.1.4 Build 6 bug fixes; added metadata.
|
||||||
|
1) Added metadata for Australia 5.0.1
|
||||||
|
2) Fixed bugs with the IED notifications used when a player is penalized for illeagal AI Kills. _fnc_processIlegalKills (server side) and blckClient (client side) reworked. _this select 0 etc was replaced with params[] throughout. Many minor errors were corrected.
|
||||||
|
|
||||||
|
9/24/16 Version 6.1.3 Build 5 Code optimization
|
||||||
|
1) Re-wrote the SLS crate spawning code which now relies on functions for crate spawning and generating a smoke source already used by the mission system. Replaced old functions with newer ones (e.g., params[] and selectRandom). Found a few bugs. Broke the script up into several discrete functions. Tested on Exile and Epoch,
|
||||||
|
2) Reworked the code for generating a smoke source. Added additional options with defaults set using params[].
|
||||||
|
|
||||||
|
9-19-16 Ver 6.1.2/11/16 Bug fixes.
|
||||||
|
Minor bug fixes to support Exile.
|
||||||
|
Corrected errors with scout and hunter missions trying to spawn using Epoch headgear.
|
||||||
|
Corrected error wherein AI were spawned as Epoch soldiers
|
||||||
|
Inactivated a call to an exile function that had no value
|
||||||
|
|
||||||
|
9-15-16 vER 6.1.1 Bug fixes.
|
||||||
|
1) Reverted to the old spawnUnits routine because the new one was not spawning AI at Scouts and Hunters correctly.
|
||||||
|
|
||||||
|
9-13-16 Ver 6.10 Improved vehicle patrols.
|
||||||
|
1) Added waypoints for spawned AI Vehicles.
|
||||||
|
2) Reworked the logic for generating the positions of these waypoints
|
||||||
|
3) Added loiter waypoints in addition to move wayponts.
|
||||||
|
4) Reworked the param/params for spawnUnits
|
||||||
|
5) several other minor optimizations.
|
||||||
|
|
||||||
|
9-3-16 Ver 6.0
|
||||||
|
1) Re-did the GMS folder so the mod automatically starts. GMS_client.sqf no longer calls the mod from the server.
|
||||||
|
2) Added a variable GMSCore_modtype which presently can be either "Epoch" or "Exile" with the aim of having a single mission system for both mods.
|
||||||
|
3) Added a more intelligent method for loading key components (variables, functions, and map-specific parameters).
|
||||||
|
4) Re-did all code to automatically select correct parameters to run correctly on either exile or epoch servers.
|
||||||
|
5) Added the Exile Static Loot Crate Spawner; Re-did this to load either an exile or epoch version as needed since a lot of the variables and also the locations tables are unique.
|
||||||
|
6) Added the Dynamic Loot system from Exile again with Exile and Epoch specific configurations; here the difference is only in the location tables.
|
||||||
|
7) Pulled the map addons function from the Exile build and added a functionality to spawn addons appropriately for map and mod type.
|
||||||
|
8) Helicrashes redone to provide more variability in the types of wrecks, loot and challenge. These are spawned by a new file Crashes2.sqf
|
||||||
|
9) Added a setting to determine the number of crash sites spawned at any one time: GMS_maxCrashSites. Set to -1 to disable altogether.
|
||||||
|
10) Added settings to enable / disable specific mission classes, e.g., GMS_enableOrangeMissions. Set to 1 to enable, -1 to disable.
|
||||||
|
|
||||||
|
8-14-16
|
||||||
|
Added mission timout feature, set GMS_MissionTimeout = -1 to disble;
|
||||||
|
Changed to use of params for all .sqf which also eliminated calls to BIS_fnc_params
|
||||||
|
changed to selectRandom for all .sqf
|
||||||
|
|
||||||
|
some changes to client side functions to eliminate the public variable event handler (credits to IT07 for showing the way)
|
||||||
|
Added the armed powerler to the list of default mission vehicles.
|
||||||
|
|
||||||
|
2/28/16
|
||||||
|
1) Bug fixes completed. Cleanup of bodies is now properly separated from cleanup of live AI. Cleanup of vehicles with live AI is now working correctly.
|
||||||
|
2) Released to servers this morning.
|
||||||
|
3) Next step will be to add in the heli reinforcements for ver 5.2.
|
||||||
|
|
||||||
|
2/20/16
|
||||||
|
Bugfixes and enhancements.
|
||||||
|
1) added checks for nearby bases or nearby players when spawning missions.
|
||||||
|
2) Fixed typos in Medical Camp missions.
|
||||||
|
3) Added two new modes for completing mission: 1) mission is complete when all AI are killed; 2) mission is complete when player reaches the crate OR when all AI are killed.
|
||||||
|
|
||||||
|
In Progress
|
||||||
|
1) Mission timouts
|
||||||
|
2) Added optional reinforcments via helicopters which can then patrol the mission area.
|
||||||
|
|
||||||
|
2/11/16
|
||||||
|
Major Update to Build 5.0
|
||||||
|
|
||||||
|
1) All missions but heli crashes are spawned using a single mission timer and mission spawner
|
||||||
|
2) The mission timer now calles a file containing the mission parameters. The mission spawner is included and run from that file.
|
||||||
|
3) A kill feed was added reporting each AI kill.
|
||||||
|
4) AI kills are now handled via an event handler run on the server for forward compatability with headless clients.
|
||||||
|
5) Multiple minor errors and bug fixes related to mission difficulty, AI loadouts, loot and other parameters were included.
|
||||||
|
6) The first phase of restructuring of the file structure has been completed. Most code for functions and units has been moved to a compiles directory in Compiles\Units and Compiles\Functions.
|
||||||
|
7) Some directionality and randomness was added where mission objects are spawned at random locations from an array of objects to give the missions more of a feeling of a perimeter defense where H-barrier and other objects were added.
|
||||||
|
8) As part of the restructuing, variables were moved from AIFunctions to a separate file.
|
||||||
|
9) Bugs in routines for cleanup of dead and live AI were fixed. A much simpler system for tracking live AI, dead AI, locations of active and recent missions, was implemented because of the centralization of the mission spawning to a single script
|
@ -12,9 +12,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
class GMSBuild {
|
class GMSBuild {
|
||||||
Version = "7.15";
|
Version = "7.162";
|
||||||
Build = "263";
|
Build = "267";
|
||||||
Date = "09-24-2023";
|
Date = "10-1-2023";
|
||||||
};
|
};
|
||||||
|
|
||||||
class CfgPatches {
|
class CfgPatches {
|
||||||
@ -57,8 +57,8 @@ class CfgFunctions {
|
|||||||
class missionCompleteMarker {};
|
class missionCompleteMarker {};
|
||||||
class msgIED {};
|
class msgIED {};
|
||||||
class nearestPlayers {};
|
class nearestPlayers {};
|
||||||
class playerInRange {};
|
//class playerInRange {};
|
||||||
class playerInRangeArray {};
|
//class playerInRangeArray {};
|
||||||
class restoreHiddenObjects {};
|
class restoreHiddenObjects {};
|
||||||
class setDirUp {};
|
class setDirUp {};
|
||||||
class spawnMarker {};
|
class spawnMarker {};
|
||||||
@ -84,6 +84,7 @@ class CfgFunctions {
|
|||||||
class endMission {};
|
class endMission {};
|
||||||
class fillBoxes {};
|
class fillBoxes {};
|
||||||
class garrisonBuilding_ATLsystem {};
|
class garrisonBuilding_ATLsystem {};
|
||||||
|
//class garrisonBuilding_relPosSystem {};
|
||||||
class loadLootItemsFromArray {};
|
class loadLootItemsFromArray {};
|
||||||
class initializeMission {};
|
class initializeMission {};
|
||||||
class loadMissionCrate {};
|
class loadMissionCrate {};
|
||||||
@ -103,11 +104,12 @@ class CfgFunctions {
|
|||||||
class selectNumberAirPatrols {};
|
class selectNumberAirPatrols {};
|
||||||
class selectNumberParatroops {};
|
class selectNumberParatroops {};
|
||||||
class selectVehicleCrewCount {};
|
class selectVehicleCrewCount {};
|
||||||
class signalEnd {};
|
//class signalEnd {};
|
||||||
class smokeAtCrates {};
|
class spawnSmokingObject {};
|
||||||
class spawnCrate {};
|
class spawnCrate {};
|
||||||
class spawnCompositionObjects {};
|
class spawnCompositionObjects {};
|
||||||
class spawnEmplacedWeaponArray {};
|
class spawnEmplacedWeaponArray {};
|
||||||
|
class spawnGarrisonedUnits {};
|
||||||
class spawnMissionAssets {};
|
class spawnMissionAssets {};
|
||||||
class spawnMines {};
|
class spawnMines {};
|
||||||
class spawnMissionAI {};
|
class spawnMissionAI {};
|
||||||
|
Loading…
Reference in New Issue
Block a user