See Changelog

More work on modularization of GMS_fnc_missionSpawner
bugfixes for the timerliss mission spawner.
better  logging information.
Old code removed.

Still needed: fix errors spawning emplaced  weapons. Fix issues with
reolading weapons. Find cause of issue with corruption of key data that
causes invalid entries in the mission que. find cause of instances in
which missions dont trigger or sense a condition that should complete
the mission. Sort out reinforcements
This commit is contained in:
Ghostrider-DbD- 2017-01-22 06:48:41 -05:00
parent b369c1ae9d
commit dadc74aa28
20 changed files with 239 additions and 294 deletions

View File

@ -3,7 +3,7 @@
//blck_Message = _this; //blck_Message = _this;
params["_msg",["_players",playableUnits]]; params["_msg",["_players",playableUnits]];
diag_log format["AIM.sqf ===] _this = %1 | _msg = %2 | _players = %3",_this,_msg, _players]; if (blck_debugLevel > 1) then {diag_log format["AIM.sqf ===] _this = %1 | _msg = %2 | _players = %3",_this,_msg, _players];};
blck_Message = _msg; blck_Message = _msg;
{ {
//diag_log format["AIM.sqf ===] _ = %2, and (owner _x) = %1", (owner _x), _x]; //diag_log format["AIM.sqf ===] _ = %2, and (owner _x) = %1", (owner _x), _x];

View File

@ -5,11 +5,10 @@
- whether it is time to delete the mission objects at a specific location - whether it is time to delete the mission objects at a specific location
- whether it is time to delete live AI associated with a specific mission - whether it is time to delete live AI associated with a specific mission
By Ghostrider-DbD- By Ghostrider-DbD-
Last modified 1-13-17 Last modified 1-21-17
*/ */
private ["_index","_timer10Min","_timer1min","_timer5min","_modType"]; private ["_timer10Min","_timer1min","_timer5min","_modType"];
_index = 0;
_timer5sec = diag_tickTime; _timer5sec = diag_tickTime;
_timer1min = diag_tickTime; _timer1min = diag_tickTime;
_timer5min = diag_tickTime; _timer5min = diag_tickTime;
@ -28,31 +27,31 @@ while {true} do
}; };
if ((diag_tickTime - _timer1min) > 15) then if ((diag_tickTime - _timer1min) > 15) then
{ {
diag_log format["_fnc_mainThread:: (30) diag_tickTime = %1", diag_tickTime]; //diag_log format["_fnc_mainThread:: (30) diag_tickTime = %1", diag_tickTime];
diag_log format["_fnc_mainThread:: (31) blck_liveMissionAI = %1", blck_liveMissionAI]; //diag_log format["_fnc_mainThread:: (31) blck_liveMissionAI = %1", blck_liveMissionAI];
_ai = blck_liveMissionAI; _ai = blck_liveMissionAI;
{ {
diag_log format["_fnc_mainThread:: (34) evaluating liveAIArray %1 with diag_tickTime %2", _x,diag_tickTime]; //diag_log format["_fnc_mainThread:: (34) evaluating liveAIArray %1 with diag_tickTime %2", _x,diag_tickTime];
if (diag_tickTime > (_x select 1) ) then { if (diag_tickTime > (_x select 1) ) then {
diag_log format["_fnc_mainTread:: cleaning up AI group %1",_x]; //diag_log format["_fnc_mainTread:: cleaning up AI group %1",_x];
[_x select 0] call blck_fnc_cleanupAliveAI; [_x select 0] call blck_fnc_cleanupAliveAI;
blck_liveMissionAI set[ _forEachIndex, -1]; blck_liveMissionAI set[ _forEachIndex, -1];
blck_liveMissionAI = blck_liveMissionAI - [-1]; // Remove that list of live AI from the list. blck_liveMissionAI = blck_liveMissionAI - [-1]; // Remove that list of live AI from the list.
diag_log format["_fnc_mainTread:: blck_liveMissionAI updated from %1",_ai]; //diag_log format["_fnc_mainTread:: blck_liveMissionAI updated from %1",_ai];
diag_log format["_fnc_mainTread:: blck_liveMissionAI updated to %1",blck_liveMissionAI]; diag_log format["_fnc_mainTread:: blck_liveMissionAI updated to %1",blck_liveMissionAI];
}; };
}forEach _ai; }forEach _ai;
diag_log format["_fnc_mainThread:: (44) blck_oldMissionObjects = %1", blck_oldMissionObjects]; //diag_log format["_fnc_mainThread:: (44) blck_oldMissionObjects = %1", blck_oldMissionObjects];
_obj = blck_oldMissionObjects; _obj = blck_oldMissionObjects;
{ {
diag_log format["mainThread::-->> evaluating missionObjects = %1 diag_tickTime %2",_x,diag_tickTime]; //diag_log format["mainThread::-->> evaluating missionObjects = %1 diag_tickTime %2",_x,diag_tickTime];
if (diag_tickTime > (_x select 1) ) then { if (diag_tickTime > (_x select 1) ) then {
diag_log format["_fnc_mainTread:: cleaning up mission objects %1",_x]; //diag_log format["_fnc_mainTread:: cleaning up mission objects %1",_x];
[_x select 0] call blck_fnc_cleanupObjects; [_x select 0] call blck_fnc_cleanupObjects;
blck_oldMissionObjects set[_forEachIndex, -1]; blck_oldMissionObjects set[_forEachIndex, -1];
blck_oldMissionObjects = blck_oldMissionObjects - [-1]; blck_oldMissionObjects = blck_oldMissionObjects - [-1];
diag_log format["_fnc_mainTread:: blck_oldMissionObjects updated from %1",_obj]; //diag_log format["_fnc_mainTread:: blck_oldMissionObjects updated from %1",_obj];
diag_log format["_fnc_mainTread:: blck_oldMissionObjects updated to %1",blck_oldMissionObjects]; diag_log format["_fnc_mainTread:: blck_oldMissionObjects updated to %1",blck_oldMissionObjects];
}; };
}forEach _obj; }forEach _obj;
@ -63,7 +62,6 @@ while {true} do
[] call blck_fnc_cleanEmptyGroups; [] call blck_fnc_cleanEmptyGroups;
}; // Exile cleans up empty groups automatically so this should not be needed with that mod. }; // Exile cleans up empty groups automatically so this should not be needed with that mod.
/* [Jan 13, 2017] reverted the the approach based on mission timers for now
{ {
if (blck_debugLevel > 2) then {diag_log format["_fnc_mainThread:: -- >> _x = %1 and _x select 6 = %2",_x, _x select 6];}; if (blck_debugLevel > 2) then {diag_log format["_fnc_mainThread:: -- >> _x = %1 and _x select 6 = %2",_x, _x select 6];};
if (_x select 6 > 0) then // The mission is not running, check the time left till it is spawned if (_x select 6 > 0) then // The mission is not running, check the time left till it is spawned
@ -72,22 +70,15 @@ while {true} do
{ {
private _coords = [] call blck_fnc_FindSafePosn; private _coords = [] call blck_fnc_FindSafePosn;
_coords pushback 0; _coords pushback 0;
blck_ActiveMissionCoords pushback _coords; // Note, old entries are delete in blck_fnc_FindSafePosn private["_missionName","_missionPath"];
private["_markerClass","_missionName","_missionPath","_aiDifficultyLevel"];
//diag_log format["_fnc_mainThread:: -->> _missionClass would = %1%2",_x select 2, _index];
_markerClass = _x select 2;
if (blck_debugLevel > 2) then {diag_log format["_fnc_mainThread:: -->> _markerClass = %1",_markerClass];};
_aiDifficultyLevel = _x select 4;
_missionName = selectRandom (_x select 0); _missionName = selectRandom (_x select 0);
_missionPath = _x select 1; _missionPath = _x select 1;
// example: [_coords,_x] execVM format["\q\addons\custom_server\Missions\%1\%2.sqf",_missionPath,_missionName];
// [_missionListHunters,_pathHunters,"HunterMarker","green",blck_TMin_Hunter,blck_TMax_Hunter]
[_coords,_markerClass,_aiDifficultyLevel] execVM format["\q\addons\custom_server\Missions\%1\%2.sqf",_missionPath,_missionName];
}; };
}; };
}forEach blck_pendingMissions; }forEach blck_pendingMissions;
_timer1min = diag_tickTime; _timer1min = diag_tickTime;
*/
}; };
if ((diag_tickTime - _timer5min) > 300) then { if ((diag_tickTime - _timer5min) > 300) then {

View File

@ -3,13 +3,13 @@
for DBD Clan for DBD Clan
By Ghostrider-DBD- By Ghostrider-DBD-
Copyright 2016 Copyright 2016
Last Modified 12/21/16 Last Modified 1/22/17
*/ */
//Sets Private Variables to they don't interfere when this script is called more than once //Sets Private Variables to they don't interfere when this script is called more than once
private["_numbertospawn","_i","_groupSpawned","_safepos","_x","_weaponList","_useLauncher","_launcherType","_aiSkills"]; private["_numbertospawn","_i","_groupSpawned","_safepos","_x","_weaponList","_useLauncher","_launcherType","_aiSkills"];
params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ]; params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ];
if (blck_debugLevel isEqualTo 3) then if (blck_debugLevel > 1) then
{ {
diag_log format["[blckeagls] _fnc_spawnGroup called parameters: _numai1 %1, _numbai2 %2, _skillLevel %3, _center %4",_numai1,_numai2,_skillLevel,_center]; diag_log format["[blckeagls] _fnc_spawnGroup called parameters: _numai1 %1, _numbai2 %2, _skillLevel %3, _center %4",_numai1,_numai2,_skillLevel,_center];
}; };
@ -19,7 +19,7 @@ if (_numai2 > _numai1) then {
} else { } else {
_numbertospawn = _numai2; _numbertospawn = _numai2;
}; };
if (blck_debugLevel isEqualTo 3) then if (blck_debugLevel > 1) then
{ {
diag_log format["spawnGroup.sqf: _numbertospawn = %1",_numbertospawn]; diag_log format["spawnGroup.sqf: _numbertospawn = %1",_numbertospawn];
}; };
@ -27,7 +27,7 @@ if (blck_debugLevel isEqualTo 3) then
_groupSpawned = createGroup blck_AI_Side; _groupSpawned = createGroup blck_AI_Side;
if !(isNull _groupSpawned) then if !(isNull _groupSpawned) then
{ {
if (blck_debugON) then {diag_log format["_fnc_spawnGroup:: -- >> Group created = %1",_groupSpawned]}; if (blck_debugLevel > 1) then {diag_log format["_fnc_spawnGroup:: -- >> Group created = %1",_groupSpawned]};
_groupSpawned setcombatmode blck_combatMode; _groupSpawned setcombatmode blck_combatMode;
_groupSpawned allowfleeing 0; _groupSpawned allowfleeing 0;
_groupSpawned setspeedmode "FULL"; _groupSpawned setspeedmode "FULL";

View File

@ -2,7 +2,7 @@
Adds the basic list of parameters that define a mission such as the marker name, mission list, mission path, AI difficulty, and timer settings, to the arrays that the main thread inspects. Adds the basic list of parameters that define a mission such as the marker name, mission list, mission path, AI difficulty, and timer settings, to the arrays that the main thread inspects.
by Ghostrider-DbD- by Ghostrider-DbD-
Last modified 10-14-16 Last modified 1-21-17
*/ */
//private _mission = _this; //private _mission = _this;
@ -16,7 +16,8 @@ for "_i" from 1 to _noMissions do
private _waitTime = diag_tickTime + (_tMin) + random((_tMax) - (_tMin)); private _waitTime = diag_tickTime + (_tMin) + random((_tMax) - (_tMin));
// 0 1 2 3 4 5 6 7 // 0 1 2 3 4 5 6 7
private _mission = [_missionList,_path,format["%1%2",_marker,_i],_difficulty,_tMin,_tMax,_waitTime,[0,0,0]]; private _mission = [_missionList,_path,format["%1%2",_marker,_i],_difficulty,_tMin,_tMax,_waitTime,[0,0,0]];
diag_log format["-fnc_addMissionToQue::-->> _mission = %1",_mission]; if (blck_debugLevel > 0) then {diag_log format["-fnc_addMissionToQue::-->> _mission = %1",_mission];};
blck_pendingMissions pushback _mission; blck_pendingMissions pushback _mission;
}; };
diag_log format["_fnc_addMissionToQue:: -- >> Result - blck_pendingMissions = %1",blck_pendingMissions];
if (blck_debugLevel > 0) then {diag_log format["_fnc_addMissionToQue:: -- >> Result - blck_pendingMissions = %1",blck_pendingMissions];};

View File

@ -3,14 +3,27 @@
for DBD Clan for DBD Clan
By Ghostrider-DBD- By Ghostrider-DBD-
Copyright 2016 Copyright 2016
Last modified 1/12/17 Last modified 1/22/17
*/ */
private ["_crates","_aiGroup","_objects","_groupPatrolRadius","_missionLandscape","_mines","_blck_AllMissionAI","_blck_localMissionMarker","_AI_Vehicles","_timeOut"]; private ["_crates","_aiGroup","_objects","_groupPatrolRadius","_missionLandscape","_mines","_blck_AllMissionAI","_blck_localMissionMarker","_AI_Vehicles","_timeOut","_aiDifficultyLevel"];
params["_coords","_missionType","_aiDifficultyLevel"]; params["_coords","_mission"];
waitUntil {blck_missionSpawning isEqualTo false};
blck_missionSpawning = true; ////////
diag_log format["[blckeagls] missionSpawner:: Initializing mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; // set all variables needed for the missions
// data is pulled either from the mission description or from the _mission variable passsed as a parameter
// Deal with situations where some of these variables might not be defined as well.
////////
// _mission params[_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange];
_markerClass = _mission select 2;
_aiDifficultyLevel = _mission select 3;
if (blck_debugLevel > 0) then {diag_log format["_fnc_mainThread:: -->> _markerClass = %1",_markerClass];};
[_mission,"active",_coords] call blck_fnc_updateMissionQue;
blck_ActiveMissionCoords pushback _coords;
diag_log format["[blckeagls] missionSpawner (17):: Initializing mission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
private["_chanceHeliPatrol","_noPara","_reinforcementLootCounts","_chanceLoot","_heliCrew"]; private["_chanceHeliPatrol","_noPara","_reinforcementLootCounts","_chanceLoot","_heliCrew"];
if (isNil "_chanceReinforcements") then if (isNil "_chanceReinforcements") then
@ -39,14 +52,14 @@ if (isNil "_reinforcementLootCounts") then
_optics = 1 + floor(random(6)); _optics = 1 + floor(random(6));
_loadout = 1 + floor(random(3)); _loadout = 1 + floor(random(3));
_reinforcementLootCounts = [_weap,_mags,_optics,0,0,_backpacks]; _reinforcementLootCounts = [_weap,_mags,_optics,0,0,_backpacks];
if (blck_debugLevel > 0) then {diag_log "missionSpawner:: default values used for _reinforcementLootCounts";}; if (blck_debugLevel > 1) then {diag_log "missionSpawner:: default values used for _reinforcementLootCounts";};
} }
else else
{ {
if (blck_debugLevel > 0) then {diag_log "missionSpawner:: Mission specific values used for _reinforcementLootCounts";}; if (blck_debugLevel > 1) then {diag_log "missionSpawner (47):: Mission specific values used for _reinforcementLootCounts";};
}; };
if (blck_debugLevel > 0) then { if (blck_debugLevel > 1) then {
diag_log format["[blckEagle] Mission Reinforcement Parameters: changeReinforcements %1 numAI %2 changePatrol %3 chanceLoot %4",_chanceReinforcements,_noPara,_chanceHeliPatrol,_chanceLoot]; diag_log format["[blckEagle] Mission Reinforcement Parameters: changeReinforcements %1 numAI %2 changePatrol %3 chanceLoot %4",_chanceReinforcements,_noPara,_chanceHeliPatrol,_chanceLoot];
}; };
@ -60,32 +73,30 @@ _aiGroup = [];
_missionAIVehicles = []; _missionAIVehicles = [];
_blck_AllMissionAI = []; _blck_AllMissionAI = [];
_AI_Vehicles = []; _AI_Vehicles = [];
_blck_localMissionMarker = [_missionType,_coords,"","",_markerColor,_markerType]; _blck_localMissionMarker = [_markerClass,_coords,"","",_markerColor,_markerType];
_delayTime = 1; _delayTime = 1;
_groupPatrolRadius = 50; _groupPatrolRadius = 50;
if (blck_labelMapMarkers select 0) then if (blck_labelMapMarkers select 0) then
{ {
//diag_log "SM1.sqf: labeling map markers *****"; //diag_log "labeling map markers *****";
_blck_localMissionMarker set [2, _markerMissionName]; _blck_localMissionMarker set [2, _markerMissionName];
}; };
if !(blck_preciseMapMarkers) then if !(blck_preciseMapMarkers) then
{ {
//diag_log "SM1.sqf: Map marker will be OFFSET from the mission position"; //diag_log "Map marker will be OFFSET from the mission position";
_blck_localMissionMarker set [1,[_coords,75] call blck_fnc_randomPosition]; _blck_localMissionMarker set [1,[_coords,75] call blck_fnc_randomPosition];
}; };
_blck_localMissionMarker set [3,blck_labelMapMarkers select 1]; // Use an arrow labeled with the mission name? _blck_localMissionMarker set [3,blck_labelMapMarkers select 1]; // Use an arrow labeled with the mission name?
[["start",_startMsg,_blck_localMissionMarker select 2]] call blck_fnc_messageplayers; [["start",_startMsg,_blck_localMissionMarker select 2]] call blck_fnc_messageplayers;
[_blck_localMissionMarker] execVM "debug\spawnMarker.sqf"; [_blck_localMissionMarker] execVM "debug\spawnMarker.sqf";
uiSleep 1; if (blck_debugLevel > 0) then {diag_log "missionSpawner:: (89) waiting for player to trigger the mission";};
/////////////////////////////
// Everything has been set up for the mission and it is now waiting to be triggered by a nearby player or to time out. ////////
// Lets let other instances of the mission spawner know it is OK to go ahead // All parameters are defined, lets wait until a player is nearby or the mission has timed out
//////////////////////////// ////////
blck_missionSpawning = false;
if (blck_debugON) then {diag_log "missionSpawner:: waiting for player to trigger the mission";};
private["_wait","_missionStartTime","_playerInRange","_missionTimedOut"]; private["_wait","_missionStartTime","_playerInRange","_missionTimedOut"];
_missionStartTime = diag_tickTime; _missionStartTime = diag_tickTime;
_playerInRange = false; _playerInRange = false;
@ -113,30 +124,31 @@ while {_wait} do
uiSleep 1; uiSleep 1;
}; };
}; };
//waitUntil{ { (isPlayer _x && _x distance _coords <= blck_TriggerDistance /*&& vehicle _x == _x*/) || ([_missionStartTime] call _fn_timedOut) } count playableunits > 0 };
if (blck_debugON) then
{
diag_log format["missionSpawner:: Mission Triggerred contition playerInRange %1 and timout = %2",_playerInRange, _missionTimedOut];
};
if (!_playerInRange && _missionTimedOut) exitWith if (_missionTimedOut) exitWith
{ {
// Deal with the case in which the mission timed out.
//["timeOut",_endMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers; //["timeOut",_endMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers;
[_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf"; blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords];
[_mission,"inactive",[0,0,0]] call blck_fnc_updateMissionQue;
[_blck_localMissionMarker select 0] call compile preprocessfilelinenumbers "debug\deleteMarker.sqf";
_blck_localMissionMarker set [1,[0,0,0]]; _blck_localMissionMarker set [1,[0,0,0]];
_blck_localMissionMarker set [2,""]; _blck_localMissionMarker set [2,""];
[_objects, 1] spawn blck_fnc_cleanupObjects; [_objects, 0.1] spawn blck_fnc_cleanupObjects;
if (blck_debugON) then if (blck_debugLevel > 0) then
{ {
diag_log format["[blckeagls] missionSpawner:: Mission Timed Out: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: (105) Mission Timed Out: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
}; };
if (_playerInRange) then if (_playerInRange) then
{ {
if (blck_debugON) then ////////
{ diag_log format["[blckeagls] missionSpawner:: -- >> Mission tripped by nearby player: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; // Spawn the mission objects, loot chest, and AI
////////
if (blck_debugLevel > 0) then
{ diag_log format["[blckeagls] missionSpawner:: (112) -- >> Mission tripped by nearby player: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
if (count _missionLootBoxes > 0) then if (count _missionLootBoxes > 0) then
@ -148,11 +160,12 @@ if (_playerInRange) then
_crates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_crateLoot,_lootCounts]]] call blck_fnc_spawnMissionCrates; _crates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_crateLoot,_lootCounts]]] call blck_fnc_spawnMissionCrates;
}; };
// un-comment this if you want crates cleaned up when the rest of the mission objects are removed.
//_objects append _crates; //_objects append _crates;
if (blck_debugON) then if (blck_debugLevel > 0) then
{ {
diag_log format["[blckeagls] missionSpawner:: Crates Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: (131) Crates Spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
uiSleep _delayTime; uiSleep _delayTime;
@ -187,64 +200,22 @@ if (_playerInRange) then
if (blck_debugON) then if (blck_debugON) then
{ {
diag_log format["[blckeagls] missionSpawner:: Landscape spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: (166) Landscape spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
uiSleep _delayTime;; uiSleep _delayTime;;
// ========
// Old version
// ========
/*
if ((count _missionLootVehicles) > 0) then // spawn loot vehicles
{
{
//diag_log format["spawnMissionCVehicles.sqf _x = %1",_x];
_offset = _x select 1; // offset relative to _coords at which to spawn the vehicle
_pos = [(_coords select 0)+(_offset select 0),(_coords select 1) + (_offset select 1),(_coords select 2)+(_offset select 2)];
_veh = [_x select 0, _pos] call blck_fnc_spawnVehicle;
_vehs pushback _veh;
[_veh,_x select 2, _x select 3] call blck_fnc_fillBoxes;
}forEach _missionLootVehicles;
};
*/
// ========
// Modular Version
// ========
[_missionLootVehicles] call blck_fnc_spawnMissionLootVehicles; [_missionLootVehicles] call blck_fnc_spawnMissionLootVehicles;
// ==========
uiSleep _delayTime; uiSleep _delayTime;
private _precise = false; private _precise = false;
if (blck_debugLevel > 0) then {diag_log format["missionSpawner:: (233) preparing to spawn emplaced weapons for _markerClass %3:: blck_useStatic = %1 and _noEmplacedWeapons = %2",blck_useStatic,_noEmplacedWeapons,_markerClass];};
if (blck_useStatic && (_noEmplacedWeapons > 0)) then if (blck_useStatic && (_noEmplacedWeapons > 0)) then
{ {
// =======
// Old version
// =======
/*if ( count (_missionEmplacedWeapons) isEqualTo 0 ) then
{
_missionEmplacedWeapons = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius;
_precise = true;
};
{
_emplacedGroup = [_x,1,1,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup;
if !(isNull _emplacedGroup) then
{
_blck_AllMissionAI append (units _emplacedGroup);
_emplacedWeapon = [_x,_emplacedGroup,blck_staticWeapons,5,15,_precise] call blck_fnc_spawnEmplacedWeapon;
};
}forEach _missionEmplacedWeapons;
//===============================
*/
// ======
// Modular Version
// ======
private ["_emplacedUnits"]; private ["_emplacedUnits"];
_emplacedUnits = [_missionEmplacedWeapons,_noEmplacedWeapons,_aiDifficultyLevel,_coords,_uniforms,_headGear] call blck_fnc_spawnMissionEmplacedWeapons; _emplacedUnits = [_missionEmplacedWeapons,_noEmplacedWeapons,_aiDifficultyLevel,_coords,_uniforms,_headGear,_markerClass] call blck_fnc_spawnMissionEmplacedWeapons;
//diag_log format["missionSpawner :: (247) _emplacedUnits = %1",_emplacedUnits]; //diag_log format["missionSpawner :: (218) _emplacedUnits = %1",_emplacedUnits];
uisleep 0.1; uisleep 0.1;
if (typeName _emplacedUnits isEqualTo "ARRAY") then if (typeName _emplacedUnits isEqualTo "ARRAY") then
{ {
@ -252,128 +223,34 @@ if (_playerInRange) then
{ {
_blck_AllMissionAI append _emplacedUnits; _blck_AllMissionAI append _emplacedUnits;
}; };
//diag_log format["missionSpawner :: (255) _blck_AllMissionAI updated to = %1",_blck_AllMissionAI]; //diag_log format["missionSpawner :: (226) _blck_AllMissionAI updated to = %1",_blck_AllMissionAI];
}; };
//============================== if (blck_debugLevel > 0) then
if (blck_debugON) then
{ {
diag_log format["[blckeagls] missionSpawner:: Static Weapons Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: (236) Static Weapons Spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
}; };
uisleep _delayTime; uisleep _delayTime;
if (blck_useVehiclePatrols && (_noVehiclePatrols > 0)) then if (blck_useVehiclePatrols && (_noVehiclePatrols > 0)) then
{ {
// ==============
// Old code
// ===============
/*
private["_vehGroup","_patrolVehicle"];
//_vehiclePatrolSpawns= [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius;
{
_vehGroup = [_x,3,3,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup;
diag_log format["missionSpawner:: (249) group for AI Patrol vehicle spawn: group is %1 with units of %2",_vehGroup, units _vehGroup];
diag_log format["missionSpawner:: (250) _blck_AllMissionAI prior to appending _vehGroup units = %1",_blck_AllMissionAI];
uiSleep 0.1;
if !(isNull _vehGroup) then
{
if (typeName (units _vehGroup) isEqualTo "ARRAY") then
{
_blck_AllMissionAI = _blck_AllMissionAI append (units _vehGroup);
diag_log format["missionSpawner:: _blck_AllMissionAI after appending _vehGroup units = %1",_blck_AllMissionAI];
_randomVehicle = selectRandom blck_AIPatrolVehicles;
_patrolVehicle = [_coords,_x,_randomVehicle,(_x distance _coords) -5,(_x distance _coords) + 5,_vehGroup] call blck_fnc_spawnVehiclePatrol;
};
};
}forEach [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius;;
*/
// =====================
// Modular version
// =====================
private["_vehUnits"]; private["_vehUnits"];
_vehUnits = [_coords,_noVehiclePatrols,_aiDifficultyLevel,_uniforms,_headGear] call blck_fnc_spawnMissionVehiclePatrols; _vehUnits = [_coords,_noVehiclePatrols,_aiDifficultyLevel,_uniforms,_headGear,_markerClass] call blck_fnc_spawnMissionVehiclePatrols;
//diag_log format["missionSpawner :: (240) _vehUnits = %1",_vehUnits]; //diag_log format["missionSpawner :: (238) _vehUnits = %1",_vehUnits];
if (typeName _vehUnits isEqualTo "ARRAY") then if (typeName _vehUnits isEqualTo "ARRAY") then
{ {
_blck_AllMissionAI append _vehUnits; _blck_AllMissionAI append _vehUnits;
}; };
uiSleep _delayTime; uiSleep _delayTime;
if (blck_debugON) then if (blck_debugLevel > 0) then
{ {
diag_log format["[blckeagls] missionSpawner:: Vehicle Patrols Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: Vehicle Patrols Spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
}; };
uiSleep _delayTime; uiSleep _delayTime;
// =====
// Old Version
// +++++++++++
/*
private["_unitsToSpawn","_unitsPerGroup","_ResidualUnits","_newGroup"];
_unitsToSpawn = round(_minNoAI + round(random(_maxNoAI - _minNoAI)));
_unitsPerGroup = floor(_unitsToSpawn/_noAIGroups);
_ResidualUnits = _unitsToSpawn - (_unitsPerGroup * _noAIGroups);
//diag_log format["missionSpawner:: _unitsToSpawn %1 ; _unitsPerGroup %2 _ResidualUnits %3",_unitsToSpawn,_unitsPerGroup,_ResidualUnits];
switch (_noAIGroups) do
{
case 1: { // spawn the group near the mission center
//params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ];
_newGroup = [_coords,_unitsToSpawn,_unitsToSpawn,_aiDifficultyLevel,_coords,3,18,_uniforms,_headGear] call blck_fnc_spawnGroup;
_blck_AllMissionAI = _blck_AllMissionAI append (units _newGroup);
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=1 _newGroup=%1 _newAI = %2",_newGroup, (units _newGroup)];
};
case 2: {
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=2"]; // spawn groups on either side of the mission area
_groupLocations = [_coords,_noAIGroups,15,30] call blck_fnc_findPositionsAlongARadius;
{
private["_adjusttedGroupSize"];
if (_ResidualUnits > 0) then
{
_adjusttedGroupSize = _unitsPerGroup + _ResidualUnits;
_ResidualUnits = 0;
} else {
_adjusttedGroupSize = _unitsPerGroup;
};
_newGroup = [_x,_adjusttedGroupSize,_adjusttedGroupSize,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_blck_AllMissionAI = _blck_AllMissionAI append (units _newGroup);
//diag_log format["missionSpawner: Spawning 2 Groups: _newGroup=%1 _newAI = %2",_newGroup, (units _newGroup)];
}forEach _groupLocations;
};
case 3: { // spawn one group near the center of the mission and the rest on the perimeter
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=3"];
_newGroup = [_coords,_unitsPerGroup + _ResidualUnits,_unitsPerGroup + _ResidualUnits,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_blck_AllMissionAI = _blck_AllMissionAI append (units _newGroup);
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=3 _newGroup=%1 _newAI = %2",_newGroup, append (units _newGroup)];
_groupLocations = [_coords,2,20,35] call blck_fnc_findPositionsAlongARadius;
{
_newGroup = [_x,_unitsPerGroup,_unitsPerGroup,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_blck_AllMissionAI = _blck_AllMissionAI append (units _newGroup);
//diag_log format["missionSpawner: Spawning 2 Groups:_newGroup=%1 _newAI = %2",_newGroup, (units _newGroup)];
}forEach _groupLocations;
};
default { // spawn one group near the center of the mission and the rest on the perimeter
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=default"];
_newGroup = [_coords,_unitsPerGroup + _ResidualUnits,_unitsPerGroup + _ResidualUnits,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_blck_AllMissionAI = _blck_AllMissionAI append (units _newGroup);
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=%3 _newGroup=%1 _newAI = %2",_newGroup, (units _newGroup),_noAIGroups];
_groupLocations = [_coords,(_noAIGroups - 1),20,40] call blck_fnc_findPositionsAlongARadius;
{
_newGroup = [_x,_unitsPerGroup,_unitsPerGroup,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_blck_AllMissionAI = _blck_AllMissionAI append (units _newGroup);
//diag_log format["missionSpawner: Spawning %3 Groups: _newGroup=%1 _newAI = %2",_newGroup, (units _newGroup),_noAIGroups];
}forEach _groupLocations;
};
};
*/
////////
// Modular Version
// =====
private ["_infantry"]; private ["_infantry"];
_infantry = [_coords, _minNoAI,_maxNoAI,_aiDifficultyLevel,_uniforms,_headGear] call blck_fnc_spawnMissionAI; _infantry = [_coords, _minNoAI,_maxNoAI,_aiDifficultyLevel,_uniforms,_headGear] call blck_fnc_spawnMissionAI;
//diag_log format["missionSpawner:: (337) -> _infantry = %1",_infantry]; //diag_log format["missionSpawner:: (254) -> _infantry = %1",_infantry];
if (typeName _infantry isEqualto "ARRAY") then if (typeName _infantry isEqualto "ARRAY") then
{ {
_blck_AllMissionAI append _infantry; _blck_AllMissionAI append _infantry;
@ -382,30 +259,20 @@ if (_playerInRange) then
uiSleep _delayTime; uiSleep _delayTime;
if (blck_debugON) then if (blck_debugON) then
{ {
diag_log format["[blckeagls] missionSpawner:: AI Patrols Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: AI Patrols Spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
if ((random(1) < _chanceReinforcements)) then if ((random(1) < _chanceReinforcements)) then
{ {
_weaponList = blck_WeaponList_Red; _weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout;
switch (_aiDifficultyLevel) do {
case "blue": {_weaponList = blck_WeaponList_Blue;};
case "red": {_weaponList = blck_WeaponList_Red;};
case "green": {_weaponList = blck_WeaponList_Green;};
case "orange": {_weaponList = blck_WeaponList_Orange;};
default {_weaponList = blck_WeaponList_Blue;};
};
//diag_log format["missionSpawner:: weaponList = %1",_weaponList];
private["_grpReinforcements"]; private["_grpReinforcements"];
_grpReinforcements = grpNull; _grpReinforcements = grpNull;
//diag_log format["[blckeagls] missionSpawner:: calling in reinforcements: Current mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; //diag_log format["[blckeagls] missionSpawner:: calling in reinforcements: Current mission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
[] spawn { [] spawn {
//[_coords,_noPara,_aiDifficultyLevel,_chanceLoot,_reinforcementLootCounts,_weaponList,_uniforms,_headgear,_chanceHeliPatrol] call blck_fnc_Reinforcements; //[_coords,_noPara,_aiDifficultyLevel,_chanceLoot,_reinforcementLootCounts,_weaponList,_uniforms,_headgear,_chanceHeliPatrol] call blck_fnc_Reinforcements;
//waitUntil {_grpReinforcements != grpNull}; //waitUntil {_grpReinforcements != grpNull};
//diag_log format["[blckeagls] missionSpawner::reinforcement spawner started: Current mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; //diag_log format["[blckeagls] missionSpawner::reinforcement spawner started: Current mission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
if !(_grpReinforcements isEqualTo grpNull) then if !(_grpReinforcements isEqualTo grpNull) then
{ {
@ -447,20 +314,18 @@ if (_playerInRange) then
_missionComplete = 1; _missionComplete = 1;
}; };
}; };
//diag_log format["missionSpawner:: count alive _blck_AllMissionAI = %1",{alive _x} count _blck_AllMissionAI];
if (_endIfAIKilled) then { if (_endIfAIKilled) then {
if (({alive _x} count _blck_AllMissionAI) < 1 ) then { if (({alive _x} count _blck_AllMissionAI) < 1 ) then {
_missionComplete = 1; _missionComplete = 1;
//diag_log format["missionSpawner:: _blck_AllMissionAI = %1","testing case _endIfAIKilled"];
}; };
}; };
uiSleep 2; uiSleep 2;
}; };
}; };
if (blck_debugON) then if (blck_debugLevel > 1) then
{ {
diag_log format["[blckeagls] missionSpawner:: Mission completion criteria fulfilled: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: (329) Mission completion criteria fulfilled: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
if (blck_useSignalEnd) then if (blck_useSignalEnd) then
@ -468,9 +333,9 @@ if (_playerInRange) then
//diag_log format["**** Minor\SM1.sqf:: _crate = %1",_crates select 0]; //diag_log format["**** Minor\SM1.sqf:: _crate = %1",_crates select 0];
[_crates select 0] spawn blck_fnc_signalEnd; [_crates select 0] spawn blck_fnc_signalEnd;
if (blck_debugON) then if (blck_debugLevel > 1) then
{ {
diag_log format["[blckeagls] missionSpawner:: SignalEnd called: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: (340) SignalEnd called: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };
}; };
[_mines] spawn blck_fnc_clearMines; [_mines] spawn blck_fnc_clearMines;
@ -481,8 +346,11 @@ if (_playerInRange) then
uisleep 0.1; uisleep 0.1;
[_blck_AllMissionAI,blck_AliveAICleanUpTimer] spawn blck_fnc_addLiveAItoQue; [_blck_AllMissionAI,blck_AliveAICleanUpTimer] spawn blck_fnc_addLiveAItoQue;
[["end",_endMsg,_blck_localMissionMarker select 2]] call blck_fnc_messageplayers; [["end",_endMsg,_blck_localMissionMarker select 2]] call blck_fnc_messageplayers;
[_blck_localMissionMarker select 1, _missionType] execVM "debug\missionCompleteMarker.sqf"; [_blck_localMissionMarker select 1, _markerClass] execVM "debug\missionCompleteMarker.sqf";
[_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf"; [_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf";
blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords];
blck_recentMissionCoords pushback [_coords,diag_tickTime];
[_mission,"inactive",[0,0,0]] call blck_fnc_updateMissionQue;
uisleep 0.1; uisleep 0.1;
diag_log format["[blckeagls] missionSpawner:: end of mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] missionSpawner:: (357)end of mission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
}; };

View File

@ -0,0 +1,11 @@
/*
[_blck_localMissionMarker, _coords, _objects] call blck_fnc_missionTimedOut;
*/
params["_blck_localMissionMarker", "_coords", "_objects"];
//["timeOut",_endMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers;
[_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf";
_blck_localMissionMarker set [1,[0,0,0]];
_blck_localMissionMarker set [2,""];
blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords];
[_objects, 1] spawn blck_fnc_cleanupObjects;

View File

@ -0,0 +1,38 @@
/*
test if either of two conditions is true:
player within a specific range of the coordinates
mission has timed out
By Ghostrider-DbD-
1/21/17
*/
params["_coords"];
private["_result"];
#define GMS_playerInRange 1
#define GMS_missionTimeOut 2
_result = 0;
if (blck_debugLevel > 2) then
{
_result = GMS_playerInRange;
diag_log format["_fnc_missionTriggeredConditionsMet:: -> Trigger conditions met with blck_debugLevel > 2 and _result set to %1",_result];
} else {
if ({ (isPlayer _x) && (_x distance _coords < blck_TriggerDistance) } count allPlayers > 0) then
{
_result = GMS_playerInRange;
diag_log format["_fnc_missionTriggeredConditionsMet:: -> Trigger conditions met with player in range and _result set to %1",_result];
} else
{
if ((diag_tickTime - _missionStartTime) > blck_MissionTimout) then
{
_result = GMS_missionTimeOut;
diag_log format["_fnc_missionTriggeredConditionsMet:: -> Trigger conditions met with mission timed out and _result set to %1",_result];
};
};
};
if (blck_debugLevel > 0) then {diag_log format["_fnc_missionTriggeredConditionsMet:: _result returned = %1 at time %2:",_result,_diag_tickTime];
_result

View File

@ -3,16 +3,17 @@
[_missionEmplacedWeapons,_noEmplacedWeapons,_aiDifficultyLevel,_coords,_uniforms,_headGear] call blck_fnc_spawnMissionEmplacedWeapons; [_missionEmplacedWeapons,_noEmplacedWeapons,_aiDifficultyLevel,_coords,_uniforms,_headGear] call blck_fnc_spawnMissionEmplacedWeapons;
*/ */
// [_missionEmplacedWeapons,_noEmplacedWeapons,_aiDifficultyLevel,_coords,_uniforms,_headGear] call blck_fnc_spawnMissionEmplacedWeapons;
params["_missionEmplacedWeapons","_noEmplacedWeapons","_aiDifficultyLevel","_coords","_uniforms","_headGear"]; params["_missionEmplacedWeapons","_noEmplacedWeapons","_aiDifficultyLevel","_coords","_uniforms","_headGear",["_missionType","unspecified"]];
private ["_emplacedGroup","_emplacedAI"]; private ["_emplacedGroup","_emplacedAI"];
_emplacedAI = []; _emplacedAI = [];
diag_log format["[blckeagls] _fnc_spawnMissionEmplacedWeapons(10):: - > _noEmplacedWeapons = %1",_noEmplacedWeapons]; if (blck_debugLevel > 0) then {diag_log format["[blckeagls] _fnc_spawnMissionEmplacedWeapons(10):: - >_missionEmplacedWeapons = %2 and _noEmplacedWeapons = %1",_noEmplacedWeapons,_missionEmplacedWeapons];};
if ( count (_missionEmplacedWeapons) isEqualTo 0 ) then if ( count (_missionEmplacedWeapons) isEqualTo 0 ) then
{ {
_missionEmplacedWeapons = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius; _missionEmplacedWeapons = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius;
diag_log format["_fnc_spawnMissionEmplacedWeapons:: (16) _missionType = %2 _missionEmplacedWeapons updated to %1",_missionEmplacedWeapons,_missionType];
_precise = false; _precise = false;
}; };
@ -20,8 +21,9 @@ if ( count (_missionEmplacedWeapons) isEqualTo 0 ) then
_emplacedGroup = [_x,1,1,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup; _emplacedGroup = [_x,1,1,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup;
if !(isNull _emplacedGroup) then if !(isNull _emplacedGroup) then
{ {
diag_log format["_fnc_spawnMissionEmplacedWeapons:: (23) -> spawning _blck_fnc_spawnEmplaceWeapon with group %1",_emplacedGroup]; diag_log format["_fnc_spawnMissionEmplacedWeapons:: (23) -> spawning _blck_fnc_spawnEmplaceWeapon for _missionType %2 with group %1",_emplacedGroup, _missionType];
[_x,_emplacedGroup,blck_staticWeapons,5,15,_precise] call blck_fnc_spawnEmplacedWeapon; // ["_pos","_emplacedGroup","_emplacedTypes",["_minDist",20],["_maxDist",35],["_precise",false] ];
[_x,_emplacedGroup,blck_staticWeapons,5,15,_precise,_missionType] call blck_fnc_spawnEmplacedWeapon;
} else { } else {
diag_log format["[blckeagls] _fnc_spawnMissionEmplacedWeapons(26):: - > Null group spawned"]; diag_log format["[blckeagls] _fnc_spawnMissionEmplacedWeapons(26):: - > Null group spawned"];
}; };

View File

@ -1,11 +1,11 @@
/* /*
[_coords,_noVehiclePatrols,_aiDifficultyLevel,_uniforms,_headGear] call blck_fnc_spawnMissionVehiclePatrols [_coords,_noVehiclePatrols,_aiDifficultyLevel,_uniforms,_headGear] call blck_fnc_spawnMissionVehiclePatrols
by Ghostrider-DbD- by Ghostrider-DbD-
1/13/17 1/22/17
returns [] if no groups could be created returns [] if no groups could be created
returns [_AI_Vehicles,_missionAI] otherwise; returns [_AI_Vehicles,_missionAI] otherwise;
*/ */
params["_coords","_noVehiclePatrols","_aiDifficultyLevel","_uniforms","_headGear"]; params["_coords","_noVehiclePatrols","_aiDifficultyLevel","_uniforms","_headGear",["_missionType","unspecified"]];
private["_vehGroup","_patrolVehicle","_vehiclePatrolSpawns","_missionAI","_missiongroups","_AI_Vehicles","_abort","_vehiclePatrolSpawns","_randomVehicle","_return"]; private["_vehGroup","_patrolVehicle","_vehiclePatrolSpawns","_missionAI","_missiongroups","_AI_Vehicles","_abort","_vehiclePatrolSpawns","_randomVehicle","_return"];
_missionAI = []; _missionAI = [];
@ -13,7 +13,7 @@ _vehiclePatrolSpawns= [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositi
{ {
_vehGroup = [_x,3,3,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup; _vehGroup = [_x,3,3,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup;
//if (isNull _vehGroup) exitWith {_abort = true;}; //if (isNull _vehGroup) exitWith {_abort = true;};
diag_log format["_fnc_spawnMissionVehiclePatrols:: -> _vehGroup = %1 and units _vehGroup = %2",_vehGroup, units _vehGroup]; if (blck_debugLevel > 0) then {diag_log format["_fnc_spawnMissionVehiclePatrols:: -> _missionType = %3 _vehGroup = %1 and units _vehGroup = %2",_vehGroup, units _vehGroup,_missionType];};
if (typename (units _vehGroup) isEqualTo "ARRAY") then if (typename (units _vehGroup) isEqualTo "ARRAY") then
{ {
_randomVehicle = selectRandom blck_AIPatrolVehicles; _randomVehicle = selectRandom blck_AIPatrolVehicles;
@ -24,7 +24,7 @@ _vehiclePatrolSpawns= [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositi
}forEach _vehiclePatrolSpawns; }forEach _vehiclePatrolSpawns;
if (blck_debugLevel > 1) then if (blck_debugLevel > 1) then
{ {
diag_log format["[blckeagls] _fnc_spawnMissionVehiclePatrols :: Vehicle Patrols Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName]; diag_log format["[blckeagls] _fnc_spawnMissionVehiclePatrols :: Vehicle Patrols Spawned: _coords %1 : _missionType %2 : _aiDifficultyLevel %3",_coords,_aiDifficultyLevel];
}; };
_missionAI; _missionAI;

View File

@ -1,7 +1,7 @@
/* /*
spawn a group of objects in random locations aligned with the radial from the center of the region to the object. spawn a group of objects in random locations aligned with the radial from the center of the region to the object.
By Ghostrider-DbD- By Ghostrider-DbD-
Last modified 9-5-2016 Last modified 1/22/17
copyright 2016 copyright 2016
*/ */
@ -24,5 +24,5 @@ _objects = [];
_objects pushback _wreck; _objects pushback _wreck;
sleep 0.1; sleep 0.1;
} forEach _missionLandscape; } forEach _missionLandscape;
diag_log format["_fnc_spawnRandomLandscape::-->> _objects = %1",_objects]; if (blck_debugLevel > 2) then {diag_log format["_fnc_spawnRandomLandscape::-->> _objects = %1",_objects];};
_objects _objects

View File

@ -2,32 +2,32 @@
Update the parameters for a mission in the list of missions running at that time. Update the parameters for a mission in the list of missions running at that time.
Call with the name of the marker associated with the mission and either "Active" or "Completed" Call with the name of the marker associated with the mission and either "Active" or "Completed"
by Ghostrider-DbD- by Ghostrider-DbD-
Last modified 1-12-17 Last modified 1-22-17
*/ */
params["_mission","_status",["_coords",[0,0,0]] ]; params["_mission","_status",["_coords",[0,0,0]] ];
if (blck_debugON) then {diag_log format["_fnc_updateMissionQue :: _mission = %1 | _status = %2 | _coords = %3",_mission,_status,_coords];}; if (blck_debugON) then {diag_log format["_fnc_updateMissionQue :: _mission = %1 | _status = %2 | _coords = %3",_mission,_status,_coords];};
{ private["_index","_element","_waitTime"];
if (_mission isEqualTo (_x select 2)) exitWith
{ _index = blck_pendingMissions find _mission;
private _element = _x; if (_index > -1) then
if (blck_debugON) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions began as %1",blck_pendingMissions];}; {
blck_pendingMissions set[_forEachIndex, -1]; if (blck_debuglevel > 0) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions began as %1",blck_pendingMissions];};
blck_pendingMissions = blck_pendingMissions - [-1]; _element = blck_pendingMissions select _index;
if (blck_debugON) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions after deleteing element = %1 resulted in %2",_element,blck_pendingMissions];}; if (blck_debuglevel > 0) then {diag_log format["_fnc_updateMissionQue:: -- >> _element before update = %1",_element];};
if (toLower(_status) isEqualTo "active") then { if (toLower(_status) isEqualTo "active") then {
_element set[6, -1]; _element set[6, -1];
_element set[7,_coords]; _element set[7,_coords];
}; };
if (toLower(_status) isEqualTo "completed") then if (toLower(_status) isEqualTo "inactive") then
{ {
private _waitTime = (_element select 4) + random((_element select 5) - (_element select 4)); _waitTime = (_element select 4) + random((_element select 5) - (_element select 4));
_element set[6, _waitTime]; _element set[6, diag_tickTime + _waitTime];
_element set [7,[0,0,0]]; _element set [7,[0,0,0]];
}; };
if (blck_debugON) then {diag_log format["_fnc_updateMissionQue:: -- >> _element updated to %1",_x,_element];}; if (blck_debuglevel > 0) then {diag_log format["_fnc_updateMissionQue:: -- >> _element after update = %1",_element];};
blck_pendingMissions pushback _element; blck_pendingMissions set [_index, _element];
if (blck_debugON) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions updated to %1",blck_pendingMissions];}; if (blck_debuglevel > 0) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions after update = %1",blck_pendingMissions];};
}; };
}forEach blck_pendingMissions;

View File

@ -0,0 +1,5 @@
#define GMS_playerInRange 1
#define GMS_missionTimeOut 2
#defin GMS_delayTime 0.1

View File

@ -0,0 +1,21 @@
/*
unit: Object - Object the event handler is assigned to.
selectionName: String - Name of the selection where the unit was damaged. "" for over-all structural damage, "?" for unknown selections.
damage: Number - Resulting level of damage for the selection.
source: Object - The source unit that caused the damage.
projectile: String - Classname of the projectile that caused inflicted the damage. ("" for unknown, such as falling damage.)
(Since Arma 3 v 1.49.131802)
hitPartIndex: Number - Hit part index of the hit point, -1 otherwise.
*/
private ["_unit","_killer","_group","_deleteAI_At"];
_unit = _this select 0;
_source = _this select 3;
if (isPlayer _source) then {
[_unit,_source] call GRMS_fnc_alertGroup;
};

View File

@ -1,9 +1,9 @@
// Spawns an emplaced weapons, man's it, and saves it to an array of monitored vehicles. // Spawns an emplaced weapons, man's it, and saves it to an array of monitored vehicles.
// by Ghostrider-DBD- // by Ghostrider-DBD-
// Last Updated 10-25-16 // Last Updated 10-25-16
// ["_pos","_emplacedGroup","_emplacedTypes",["_minDist",20],["_maxDist",35],["_precise",false] ] call blck_fnc_spawnEmplacedWeapon;
private["_emplaced","_safepos","_emp","_gunner"]; private["_emplaced","_safepos","_emp","_gunner"];
params["_pos","_emplacedGroup","_emplacedTypes",["_minDist",20],["_maxDist",35],["_precise",false] ]; params["_pos","_emplacedGroup","_emplacedTypes",["_minDist",20],["_maxDist",35],["_precise",false], ["_missionType","undefined" ]];
if (isNull _emplacedGroup) exitWith {diag_log "[blckeagls] ERROR CONDITION:-->> NULL-GROUP Provided to _fnc_spawnEmplaced"; objNull;}; if (isNull _emplacedGroup) exitWith {diag_log "[blckeagls] ERROR CONDITION:-->> NULL-GROUP Provided to _fnc_spawnEmplaced"; objNull;};
diag_log format["_fnc_spawnEmplacedGroup:: -- >> _emplacedGroup = %1",_emplacedGroup]; diag_log format["_fnc_spawnEmplacedGroup:: -- >> _emplacedGroup = %1",_emplacedGroup];
_safepos = [_pos,_minDist,_maxDist,0,0,20,0] call BIS_fnc_findSafePos; _safepos = [_pos,_minDist,_maxDist,0,0,20,0] call BIS_fnc_findSafePos;
@ -16,6 +16,6 @@ _gunner moveingunner _emp;
[_emp] call blck_fnc_configureMissionVehicle; [_emp] call blck_fnc_configureMissionVehicle;
waitUntil { count crew _emp > 0}; waitUntil { count crew _emp > 0};
blck_missionVehicles pushback _emp; blck_missionVehicles pushback _emp;
diag_log format["spawnEmplaced.sqf: Emplaced weapon %1 spawned"]; if (blck_debugLevel > 1) then {diag_log format["spawnEmplaced.sqf: _missionType %3 || Emplaced weapon %1 spawned at position %2",_emp,getPosATL _emp,_missionType];
_emp _emp

View File

@ -25,7 +25,7 @@ blck_fnc_MessagePlayers = compileFinal preprocessFileLineNumbers "\q\addons\cus
//blck_fnc_sendRewardMessage = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_sendRewardMessage.sqf"; //blck_fnc_sendRewardMessage = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_sendRewardMessage.sqf";
// Mission-related functions // Mission-related functions
blck_fnc_missionStartConditionsMet = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionStartConditionsMet.sqf"; blck_fnc_missionTriggeredConditionsMet = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionTriggeredConditionsMet.sqf";
blck_fnc_selectAILoadout = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAILoadout.sqf"; blck_fnc_selectAILoadout = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAILoadout.sqf";
blck_fnc_addMissionToQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_addMissionToQue.sqf"; // blck_fnc_addMissionToQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_addMissionToQue.sqf"; //
blck_fnc_updateMissionQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_updateMissionQue.sqf"; // blck_fnc_updateMissionQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_updateMissionQue.sqf"; //
@ -48,7 +48,7 @@ blck_fnc_loadLootItemsFromArray = compileFinal preprocessFileLineNumbers "\q\add
blck_fnc_fillBoxes = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_fillBoxes.sqf"; // Adds items to an object according to passed parameters. See the script for details. blck_fnc_fillBoxes = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_fillBoxes.sqf"; // Adds items to an object according to passed parameters. See the script for details.
blck_fnc_smokeAtCrates = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_smokeAtCrates.sqf"; // Spawns a wreck and adds smoke to it blck_fnc_smokeAtCrates = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_smokeAtCrates.sqf"; // Spawns a wreck and adds smoke to it
blck_fnc_spawnMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMines.sqf"; // Deploys mines at random locations around the mission center blck_fnc_spawnMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMines.sqf"; // Deploys mines at random locations around the mission center
blck_fnc_abortMission = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMines.sqf"; blck_fnc_missionTimedOut = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionTimedOut.sqf";
blck_fnc_missionEndConditionsMet = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionEndConditionsMet.sqf"; blck_fnc_missionEndConditionsMet = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionEndConditionsMet.sqf";
blck_fnc_clearMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_clearMines.sqf"; // clears mines in an array passed as a parameter blck_fnc_clearMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_clearMines.sqf"; // clears mines in an array passed as a parameter
blck_fnc_signalEnd = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_signalEnd.sqf"; // deploy smoke grenades at loot crates at the end of the mission. blck_fnc_signalEnd = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_signalEnd.sqf"; // deploy smoke grenades at loot crates at the end of the mission.

View File

@ -7,7 +7,7 @@
*/ */
//blck_variablesLoaded = false; //blck_variablesLoaded = false;
blck_debugON = true; blck_debugON = true;
blck_debugLevel = 1; // Sets level of detail for debugging info - WIP. blck_debugLevel = 3; // Sets level of detail for debugging info - WIP.
blck_minFPS = 10; blck_minFPS = 10;
//////////////////////////////////////////////// ////////////////////////////////////////////////
@ -31,6 +31,6 @@ DBD_HeliCrashSites = [];
// 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.
blck_TriggerDistance = 1000; blck_TriggerDistance = 1000;
blck_mainThreadUpdateInterval = 60; blck_mainThreadUpdateInterval = 60;
blck_missionSpawning = false; //blck_missionSpawning = false;
diag_log "[blckeagls] Variables Loaded"; diag_log "[blckeagls] Variables Loaded";
blck_variablesLoaded = true; blck_variablesLoaded = true;

View File

@ -24,10 +24,10 @@ if (blck_debugON) then
// Used primarily for debugging. // Used primarily for debugging.
diag_log "[blckeagls] Debug seting is ON, Custom configurations used"; diag_log "[blckeagls] Debug seting is ON, Custom configurations used";
blck_mainThreadUpdateInterval = 10; //blck_mainThreadUpdateInterval = 10;
blck_enableOrangeMissions = -1; blck_enableOrangeMissions = -1;
blck_enableGreenMissions = -1; blck_enableGreenMissions = -1;
blck_enableRedMissions = 1; blck_enableRedMissions = -1;
blck_enableBlueMissions = 1; blck_enableBlueMissions = 1;
@ -37,12 +37,12 @@ if (blck_debugON) then
blck_SpawnEmplaced_Orange = 4; // Number of static weapons at Orange Missions blck_SpawnEmplaced_Orange = 4; // Number of static weapons at Orange Missions
blck_SpawnEmplaced_Green = 3; // Number of static weapons at Green Missions blck_SpawnEmplaced_Green = 3; // Number of static weapons at Green Missions
blck_SpawnEmplaced_Blue = 0; // Number of static weapons at Blue Missions blck_SpawnEmplaced_Blue = 1; // Number of static weapons at Blue Missions
blck_SpawnEmplaced_Red = 2; blck_SpawnEmplaced_Red = 2;
blck_SpawnVeh_Orange = 4; // Number of static weapons at Orange Missions blck_SpawnVeh_Orange = 4; // Number of static weapons at Orange Missions
blck_SpawnVeh_Green = 3; // Number of static weapons at Green Missions blck_SpawnVeh_Green = 3; // Number of static weapons at Green Missions
blck_SpawnVeh_Blue = 0; // Number of static weapons at Blue Missions blck_SpawnVeh_Blue = 2; // Number of static weapons at Blue Missions
blck_SpawnVeh_Red = 2; blck_SpawnVeh_Red = 2;
//blck_reinforcementsBlue = [0, 0, 0.0, 0]; // Chance of reinforcements, number of reinforcements, Chance of reinforcing heli patrols, chance of dropping supplies for the reinforcements //blck_reinforcementsBlue = [0, 0, 0.0, 0]; // Chance of reinforcements, number of reinforcements, Chance of reinforcing heli patrols, chance of dropping supplies for the reinforcements
@ -60,7 +60,7 @@ if (blck_debugON) then
blck_TMax_Orange = 31; blck_TMax_Orange = 31;
blck_reinforceBlue = [0.999, 2, 0.001]; blck_reinforceBlue = [0.999, 2, 0.001];
//blck_MissionTimout = 120; // 40 min //blck_MissionTimout = 60; // 40 min
blck_SkillsBlue = [ blck_SkillsBlue = [
["aimingAccuracy",0.01], ["aimingAccuracy",0.01],
["aimingShake",0.01], ["aimingShake",0.01],

View File

@ -4,9 +4,17 @@ Loosely based on the AI mission system by blckeagls ver 2.0.2
Contributions by Narines: bug fixes, testing, infinite ammo fix. Contributions by Narines: bug fixes, testing, infinite ammo fix.
Ideas or code from that by Vampire and KiloSwiss have been used for certain functions. Ideas or code from that by Vampire and KiloSwiss have been used for certain functions.
1/13/17 Build 29. 1/22/17 Version 6.54 build 30
Modularizing mission spawner. Fixed an error in how the waitTime till a mission was respawned after being updated to inactive status.
Searching for bug that causes mission completion code to hang. Added additional reporting as to the mission type for which AI, statics and vehicle patrols are being spawned.
Continued switching from blck_debugOn to blck_debugLevel.
Removed old code that had been commented out from GMS_missionSpawner.
1/21/17 Build 29.
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 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. Rerverted back to the code that spawned a single instance of each mission until I can debug certain issues.

View File

@ -94,23 +94,23 @@ blck_spawnStaticLootCrates = nil;
//Start the mission timers //Start the mission timers
if (blck_enableOrangeMissions > 0) then if (blck_enableOrangeMissions > 0) then
{ {
[_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange] spawn blck_fnc_missionTimer;//Starts major mission system (Orange Map Markers) //[_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange] spawn blck_fnc_missionTimer;//Starts major mission system (Orange Map Markers)
//[_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange,blck_enableOrangeMissions] call blck_fnc_addMissionToQue; [_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange,blck_enableOrangeMissions] call blck_fnc_addMissionToQue;
}; };
if (blck_enableGreenMissions > 0) then if (blck_enableGreenMissions > 0) then
{ {
[_missionListGreen,_pathGreen,"GreenMarker","green",blck_TMin_Green,blck_TMax_Green] spawn blck_fnc_missionTimer;//Starts major mission system 2 (Green Map Markers) //[_missionListGreen,_pathGreen,"GreenMarker","green",blck_TMin_Green,blck_TMax_Green] spawn blck_fnc_missionTimer;//Starts major mission system 2 (Green Map Markers)
//[_missionListGreen,_pathGreen,"GreenMarker","green",blck_TMin_Green,blck_TMax_Green,blck_enableGreenMissions] call blck_fnc_addMissionToQue; [_missionListGreen,_pathGreen,"GreenMarker","green",blck_TMin_Green,blck_TMax_Green,blck_enableGreenMissions] call blck_fnc_addMissionToQue;
}; };
if (blck_enableRedMissions > 0) then if (blck_enableRedMissions > 0) then
{ {
[_missionListRed,_pathRed,"RedMarker","red",blck_TMin_Red,blck_TMax_Red] spawn blck_fnc_missionTimer;//Starts minor mission system (Red Map Markers)//Starts minor mission system 2 (Red Map Markers) //[_missionListRed,_pathRed,"RedMarker","red",blck_TMin_Red,blck_TMax_Red] spawn blck_fnc_missionTimer;//Starts minor mission system (Red Map Markers)//Starts minor mission system 2 (Red Map Markers)
//[_missionListRed,_pathRed,"RedMarker","red",blck_TMin_Red,blck_TMax_Red,blck_enableRedMissions] call blck_fnc_addMissionToQue; [_missionListRed,_pathRed,"RedMarker","red",blck_TMin_Red,blck_TMax_Red,blck_enableRedMissions] call blck_fnc_addMissionToQue;
}; };
if (blck_enableBlueMissions > 0) then if (blck_enableBlueMissions > 0) then
{ {
[_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue] spawn blck_fnc_missionTimer;//Starts minor mission system (Blue Map Markers) //[_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue] spawn blck_fnc_missionTimer;//Starts minor mission system (Blue Map Markers)
//[_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue,blck_enableBlueMissions] call blck_fnc_addMissionToQue; [_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue,blck_enableBlueMissions] call blck_fnc_addMissionToQue;
}; };
// 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

View File

@ -1,3 +1,3 @@
private ["_version","_versionDate"]; private ["_version","_versionDate"];
_blck_version = "6.54 Build 29"; _blck_version = "6.54 Build 30";
_blck_versionDate = "1-21-17 5:00 PM"; _blck_versionDate = "1-21-17 5:00 PM";