Merge branch 'Experimental'
This commit is contained in:
commit
873026090d
@ -13,26 +13,14 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
if (toLower(blck_modType) isEqualTo "default") exitWith {};
|
if (toLower(blck_modType) isEqualTo "default") exitWith {};
|
||||||
|
|
||||||
params["_obj","_difficulty"];
|
params["_obj",["_money",-1]];
|
||||||
|
_money = ([_money] call blck_fnc_getNumberFromRange);
|
||||||
if (blck_modType isEqualTo "Exile") then
|
if (blck_debugLevel >= 3) then {[format["_fnc_addmoneyToObject: _money = %1 _obj = %2",_money,_obj]] call blck_fnc_log};
|
||||||
|
if !(_money <= 0) then
|
||||||
{
|
{
|
||||||
switch (_difficulty) do
|
switch(toLower(blck_modType)) do
|
||||||
{
|
{
|
||||||
case "blue":{_obj setVariable["ExileMoney", floor(random([blck_crateMoneyBlue] call blck_fnc_getNumberFromRange)),true];};
|
case "exile": {_obj setVariable["ExileMoney",_money,true]};
|
||||||
case "red":{_obj setVariable["ExileMoney", floor(random([blck_crateMoneyRed] call blck_fnc_getNumberFromRange)),true];};
|
case "epoch": {_obj setVariable["Crypto", _money,true]};
|
||||||
case "green":{_obj setVariable["ExileMoney", floor(random([blck_crateMoneyGreen] call blck_fnc_getNumberFromRange)),true];};
|
|
||||||
case "orange":{_obj setVariable["ExileMoney", floor(random([blck_crateMoneyGreen] call blck_fnc_getNumberFromRange)),true];};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
if (blck_modType isEqualTo "Epoch") then
|
|
||||||
{
|
|
||||||
switch (_difficulty) do
|
|
||||||
{
|
|
||||||
case "blue":{_obj setVariable["Crypto", floor(random([blck_crateMoneyBlue] call blck_fnc_getNumberFromRange)),true];};
|
|
||||||
case "red":{_obj setVariable["Crypto", floor(random([blck_crateMoneyRed] call blck_fnc_getNumberFromRange)),true];};
|
|
||||||
case "green":{_obj setVariable["Crypto", floor(random([blck_crateMoneyGreen] call blck_fnc_getNumberFromRange)),true];};
|
|
||||||
case "orange":{_obj setVariable["Crypto", floor(random([blck_crateMoneyGreen] call blck_fnc_getNumberFromRange)),true];};
|
|
||||||
};
|
|
||||||
};
|
|
@ -19,4 +19,4 @@ for "_i" from 1 to (count blck_temporaryMarkers) do
|
|||||||
} else {
|
} else {
|
||||||
blck_temporaryMarkers pushBack _m;
|
blck_temporaryMarkers pushBack _m;
|
||||||
};
|
};
|
||||||
};
|
};
|
@ -21,21 +21,22 @@ private "_markers";
|
|||||||
["_markerBrush","GRID"]
|
["_markerBrush","GRID"]
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
if (blck_debugLevel >= 3) then
|
||||||
private _pList =[
|
|
||||||
"_markerName", // the name used when creating the marker. Must be unique.
|
|
||||||
"_markerPos",
|
|
||||||
"_markerLabel",
|
|
||||||
"_markerColor",
|
|
||||||
"_markerType", // Use either the name of the icon or "ELLIPSE" or "RECTANGLE" where non-icon markers are used
|
|
||||||
"_markerSize",
|
|
||||||
"_markerBrush"
|
|
||||||
];
|
|
||||||
for "_i" from 0 to ((count _this) - 1) do
|
|
||||||
{
|
{
|
||||||
diag_log format["_fnc_createMarker: parameter %1 = %2",_pList select _i,_this select _i];
|
private _pList =[
|
||||||
};
|
"_markerName", // the name used when creating the marker. Must be unique.
|
||||||
*/
|
"_markerPos",
|
||||||
|
"_markerLabel",
|
||||||
|
"_markerColor",
|
||||||
|
"_markerType", // Use either the name of the icon or "ELLIPSE" or "RECTANGLE" where non-icon markers are used
|
||||||
|
"_markerSize",
|
||||||
|
"_markerBrush"
|
||||||
|
];
|
||||||
|
for "_i" from 0 to ((count _this) - 1) do
|
||||||
|
{
|
||||||
|
diag_log format["_fnc_createMarker: parameter %1 = %2",_pList select _i,_this select _i];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
if (toUpper(_markerType) in ["ELLIPSE","RECTANGLE"]) then // not an Icon ....
|
if (toUpper(_markerType) in ["ELLIPSE","RECTANGLE"]) then // not an Icon ....
|
||||||
{
|
{
|
||||||
|
@ -8,12 +8,18 @@
|
|||||||
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons 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/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
|
||||||
|
Notes: cosine acute angle = hypotenuse / opposite. We always know the opposite = 1/2 mapsize so if we pick a random angle, we can calculate distance to edge of map.
|
||||||
|
Thus, we can have a random direction, calculate distance to the map edge as cos(direction - east/south/west/north angle) * 1/2 mapsize. Then, we can use 1/2 the lenght of the hypotenuse as the search range.
|
||||||
|
In this way we can reduce the radius of the search by about 1/2 and ensure a wider range of terrain is selected.
|
||||||
|
|
||||||
|
However, if we use this approach, we risk having some missions spawn outside the map so much check for that.
|
||||||
|
It may be quicker just to pick a random angle and use 1/2 map size to search a position obtained by getPos[(1/2 mapSize),random(359)]; to pick that random seed location for the search.
|
||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
if (isNil "blck_locationBlackList") then {blck_locationBlackList = []};
|
if (isNil "blck_locationBlackList") then {blck_locationBlackList = []};
|
||||||
|
|
||||||
|
|
||||||
_fn_buildBlacklistedLocationsList = {
|
_fn_buildBlacklistedLocationsList = {
|
||||||
params["_minToBases","_minToPlayers","_minToMissions","_minToTowns","_minToRecentMissionLocation"];
|
params["_minToBases","_minToPlayers","_minToMissions","_minToTowns","_minToRecentMissionLocation"];
|
||||||
/* locations of villages / cities / others already included in blck_locationBlackList so we do not need to add it here. */
|
/* locations of villages / cities / others already included in blck_locationBlackList so we do not need to add it here. */
|
||||||
@ -40,8 +46,6 @@ _fn_buildBlacklistedLocationsList = {
|
|||||||
_blacklistedLocs pushBack [getPosATL _x,_minToBases];
|
_blacklistedLocs pushBack [getPosATL _x,_minToBases];
|
||||||
} forEach _bases;
|
} forEach _bases;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
_blacklistedLocs pushBack [getPosATL _x,_minToPlayers];
|
_blacklistedLocs pushBack [getPosATL _x,_minToPlayers];
|
||||||
} forEach allPlayers;
|
} forEach allPlayers;
|
||||||
@ -50,45 +54,138 @@ _fn_buildBlacklistedLocationsList = {
|
|||||||
{
|
{
|
||||||
_blacklistedLocs append ([] call blck_fnc_getAllDMSMarkers);
|
_blacklistedLocs append ([] call blck_fnc_getAllDMSMarkers);
|
||||||
};
|
};
|
||||||
//diag_log format["_blacklistedLocs = %1",_blacklistedLocs];
|
|
||||||
_blacklistedLocs
|
_blacklistedLocs
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_fnc_nearWater = {
|
||||||
|
private _result = false;
|
||||||
|
private _coords = _this select 0;
|
||||||
|
private _radius = _this select 1;
|
||||||
|
|
||||||
|
for "_i" from 0 to 359 step 45 do {
|
||||||
|
//_checkposition = [(_coords select 0) + (sin(_i)*_radius), (_coords select 1) + (cos(_i)*_radius)];
|
||||||
|
//_checkposition2 = [(_coords select 0) + (sin(_i)*_radius/2), (_coords select 1) + (cos(_i)*_radius/2)];
|
||||||
|
//_checkPosition = _coords getPos[_radius, _i];
|
||||||
|
if (surfaceIsWater (_coords getPos[_radius, _i])) exitWith {
|
||||||
|
_result = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
_result
|
||||||
|
};
|
||||||
|
|
||||||
private _minDistToBases = blck_minDistanceToBases;
|
private _minDistToBases = blck_minDistanceToBases;
|
||||||
private _minDistToPlayers = blck_minDistanceToPlayer;
|
private _minDistToPlayers = blck_minDistanceToPlayer;
|
||||||
private _minDistToTowns = blck_minDistanceFromTowns;
|
private _minDistToTowns = blck_minDistanceFromTowns;
|
||||||
private _mindistToMissions = blck_MinDistanceFromMission;
|
private _mindistToMissions = blck_MinDistanceFromMission;
|
||||||
private _minToRecentMissionLocation = 200;
|
private _minToRecentMissionLocation = 200;
|
||||||
|
private _keyDistances = [_minDistToBases,_minDistToPlayers,_minDistToTowns,_minToRecentMissionLocation];
|
||||||
private _coords = [];
|
private _coords = [];
|
||||||
private _blacklistedLocations = [_minDistToBases,_minDistToPlayers,_minDistToTowns,_mindistToMissions,_minToRecentMissionLocation] call _fn_buildBlacklistedLocationsList;
|
//private _blacklistedLocations = [_minDistToBases,_minDistToPlayers,_minDistToTowns,_mindistToMissions,_minToRecentMissionLocation] call _fn_buildBlacklistedLocationsList;
|
||||||
|
|
||||||
private _count = 25;
|
private _count = 25;
|
||||||
while {_coords isEqualTo [] && _count > 0} do
|
private _flatCoords = [];
|
||||||
|
private _slope = 0.15;
|
||||||
|
private _searchDist = blck_mapRange / 2;
|
||||||
|
private _timeIn = diag_tickTime;
|
||||||
|
private _validspot = false;
|
||||||
|
while { !_validspot} do
|
||||||
{
|
{
|
||||||
/*
|
private _angle = random(359);
|
||||||
6-13-20
|
private _searchCenter = blck_mapCenter getPos[_searchDist, random(359)];
|
||||||
Notes
|
_coords = [_searchCenter,0,_searchDist,10,0,_slope,0] call BIS_fnc_findSafePos;
|
||||||
increased min distance to objects from 3 to 10
|
|
||||||
decreased max slope from 5 to 0.5
|
|
||||||
*/
|
|
||||||
|
|
||||||
_coords = [blck_mapCenter,0,blck_mapRange,10,0,0.5,0,_blacklistedLocations] call BIS_fnc_findSafePos;
|
if (_coords isEqualTo []) then
|
||||||
/* Check whether the location is flat enough: returns [] if not. */
|
|
||||||
private _isFlat = _coords isFlatEmpty [20,0,0.5,100,0,false];
|
|
||||||
if (_coords isEqualTo [] || !(_isFlat isEqualTo [])) then
|
|
||||||
{
|
{
|
||||||
{
|
|
||||||
//private _range = (_x select 1) * 0.7;
|
|
||||||
_x set[1,(_x select 1) * 0.75];
|
|
||||||
} forEach _blackListedLocations;
|
|
||||||
_count = _count - 1;
|
_count = _count - 1;
|
||||||
|
_slope = _slope + 0.02;
|
||||||
|
uiSleep 0.1; // to give the server a chance to handle other jobs for a moment
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//uiSleep 1;
|
||||||
|
_validspot = true;
|
||||||
|
|
||||||
|
if (count _coords > 2) then {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
if(_validspot) then {
|
||||||
|
if ([_coords,500] call _fnc_nearWater) then {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
if(_validspot) then {
|
||||||
|
_isflat = _coords isFlatEmpty [20,0,0.5,100,0,false];
|
||||||
|
if (_isflat isequalto []) then {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
if(_validspot) then {
|
||||||
|
{
|
||||||
|
if (_coords distance _x < blck_MinDistanceFromMission) exitwith {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
} foreach (blck_ActiveMissionCoords);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check for near Bases
|
||||||
|
if(_validspot) then {
|
||||||
|
if (blck_modType isEqualTo "Epoch") then {
|
||||||
|
{
|
||||||
|
if (_coords distance _x < blck_minDistanceToBases) exitwith {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
} foreach (missionnamespace getvariable ["Epoch_PlotPoles",[]]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (blck_modType isEqualTo "Exile") then {
|
||||||
|
{
|
||||||
|
if (_coords distance _x < blck_minDistanceToBases) exitwith {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
} foreach (nearestObjects [blck_mapCenter, ["Exile_Construction_Flag_Static"], blck_mapRange + 25000]);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check for near Players
|
||||||
|
if(_validspot) then {
|
||||||
|
{
|
||||||
|
if (_coords distance _x < blck_minDistanceToPlayer) exitwith {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
} foreach allplayers;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check for near locations
|
||||||
|
if (_validspot) then {
|
||||||
|
{
|
||||||
|
if (_coords distance (_x select 0) < (_x select 1)) exitWith {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
} forEach blck_locationBlackList;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check for DMS missions
|
||||||
|
if (blck_minDistanceFromDMS > 0 && _validspot) then
|
||||||
|
{
|
||||||
|
{
|
||||||
|
if (_coords distance _x < blck_minDistanceFromDMS) exitWith {
|
||||||
|
_validspot = false;
|
||||||
|
};
|
||||||
|
} forEach ([] call blck_fnc_getAllDMSMarkers);
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
//diag_log format["_fnc_findSafePosn: _coords = %1 | _flatCoords = %2 | _searchCenter = %3 | _angle %4 | _count = %5 | _validSpot = %6",_coords,_flatCoords,_searchCenter,_angle,_count,_validspot];
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_coords isEqualTo []) then
|
if (_coords isEqualTo []) then
|
||||||
{
|
{
|
||||||
diag_log format["[blckeagls] <ERROR> Could not find a safe position for a mission, consider reducing values for minimum distances between missions and players, bases, other missions or towns"];
|
["Could not find a safe position for a mission, consider reducing values for minimum distances between missions and players, bases, other missions or towns","error"] call blck_fnc_log;
|
||||||
|
} else {
|
||||||
|
_coords set[2, 0];
|
||||||
|
//diag_log format["_fnc_findSafePosn: _exit with _coords = %1 | time spent = %2",_coords,diag_tickTime - _timeIn];
|
||||||
};
|
};
|
||||||
|
|
||||||
_coords
|
_coords
|
||||||
|
|
||||||
|
|
||||||
|
20
@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_log.sqf
Normal file
20
@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_log.sqf
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
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/
|
||||||
|
*/
|
||||||
|
|
||||||
|
params[["_message","Unknown Message"],["_code",""]];
|
||||||
|
|
||||||
|
switch (toLower _code) do
|
||||||
|
{
|
||||||
|
case "error": {_message = format["[blckeagls] <ERROR> %1",_message]};
|
||||||
|
case "warning": {_message = format["[blckeagls] <WARNING> %1",_message]};
|
||||||
|
default {_message = format["[blckeagls] :: %1",_message]};
|
||||||
|
};
|
||||||
|
diag_log _message;
|
@ -10,10 +10,10 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
|
private["_timer1sec","_timer5sec","_timer10Sec","_timer20sec","_timer5min","_timer5min"];
|
||||||
private["_timer1sec","_timer5sec","_timer20sec","_timer5min","_timer5min"];
|
|
||||||
_timer1sec = diag_tickTime;
|
_timer1sec = diag_tickTime;
|
||||||
_timer5sec = diag_tickTime;
|
_timer5sec = diag_tickTime;
|
||||||
|
_timer10Sec = diag_tickTime;
|
||||||
_timer20sec = diag_tickTime;
|
_timer20sec = diag_tickTime;
|
||||||
_timer1min = diag_tickTime;
|
_timer1min = diag_tickTime;
|
||||||
_timer5min = diag_tickTime;
|
_timer5min = diag_tickTime;
|
||||||
@ -23,6 +23,7 @@ while {true} do
|
|||||||
uiSleep 1;
|
uiSleep 1;
|
||||||
if (diag_tickTime > _timer1sec) then
|
if (diag_tickTime > _timer1sec) then
|
||||||
{
|
{
|
||||||
|
[] spawn blck_fnc_monitorInitializedMissions;
|
||||||
if (blck_showCountAliveAI) then
|
if (blck_showCountAliveAI) then
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@ -36,12 +37,16 @@ while {true} do
|
|||||||
_timer5sec = diag_tickTime + 5;
|
_timer5sec = diag_tickTime + 5;
|
||||||
if (blck_simulationManager isEqualTo blck_useBlckeaglsSimulationManagement) then {[] call blck_fnc_simulationManager};
|
if (blck_simulationManager isEqualTo blck_useBlckeaglsSimulationManagement) then {[] call blck_fnc_simulationManager};
|
||||||
[] call blck_fnc_sm_staticPatrolMonitor;
|
[] call blck_fnc_sm_staticPatrolMonitor;
|
||||||
[] call blck_fnc_vehicleMonitor;
|
[] call blck_fnc_vehicleMonitor;
|
||||||
|
|
||||||
#ifdef GRGserver
|
#ifdef GRGserver
|
||||||
[] call blck_fnc_broadcastServerFPS;
|
[] call blck_fnc_broadcastServerFPS;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
if (diag_tickTime > _timer10Sec) then
|
||||||
|
{
|
||||||
|
[] call blck_fnc_spawnPendingMissions;
|
||||||
|
_timer10Sec = diag_tickTime;
|
||||||
|
};
|
||||||
if (diag_tickTime > _timer20sec) then
|
if (diag_tickTime > _timer20sec) then
|
||||||
{
|
{
|
||||||
[] call blck_fnc_scanForPlayersNearVehicles;
|
[] call blck_fnc_scanForPlayersNearVehicles;
|
||||||
@ -52,31 +57,26 @@ while {true} do
|
|||||||
if ((diag_tickTime > _timer1min)) then
|
if ((diag_tickTime > _timer1min)) then
|
||||||
{
|
{
|
||||||
_timer1min = diag_tickTime + 60;
|
_timer1min = diag_tickTime + 60;
|
||||||
[] call blck_fnc_spawnPendingMissions;
|
|
||||||
[] call blck_fnc_groupWaypointMonitor;
|
[] call blck_fnc_groupWaypointMonitor;
|
||||||
if (blck_dynamicUMS_MissionsRuning < blck_numberUnderwaterDynamicMissions) then {[] spawn blck_fnc_addDyanamicUMS_Mission};
|
[] call blck_fnc_cleanupAliveAI;
|
||||||
|
[] call blck_fnc_cleanupObjects;
|
||||||
|
[] call blck_fnc_cleanupDeadAI;
|
||||||
if (blck_useHC) then {[] call blck_fnc_HC_passToHCs};
|
if (blck_useHC) then {[] call blck_fnc_HC_passToHCs};
|
||||||
if (blck_useTimeAcceleration) then {[] call blck_fnc_timeAcceleration};
|
if (blck_useTimeAcceleration) then {[] call blck_fnc_timeAcceleration};
|
||||||
if (blck_ai_offload_to_client) then {[] call blck_fnc_ai_offloadToClients};
|
if (blck_ai_offload_to_client) then {[] call blck_fnc_ai_offloadToClients};
|
||||||
#ifdef blck_debugMode
|
|
||||||
diag_log format["_fnc_mainThread: active scripts include: %1",diag_activeScripts];
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
if (diag_tickTime > _timer5min) then
|
if (diag_tickTime > _timer5min) then
|
||||||
{
|
{
|
||||||
diag_log format["[blckeagls] Timstamp %8 |Dynamic Missions Running %1 | UMS Running %2 | Vehicles %3 | Groups %4 | Server FPS %5 | Server Uptime %6 Min | Missions Run %7",blck_missionsRunning,blck_dynamicUMS_MissionsRuning,count blck_monitoredVehicles,count blck_monitoredMissionAIGroups,diag_FPS,floor(diag_tickTime/60),blck_missionsRun, diag_tickTime];
|
[format["Timstamp %8 |Dynamic Missions Running %1 | UMS Running %2 | Vehicles %3 | Groups %4 | Server FPS %5 | Server Uptime %6 Min | Missions Run %7",
|
||||||
#ifdef blck_debugMode
|
blck_missionsRunning,
|
||||||
/*
|
blck_dynamicUMS_MissionsRuning,
|
||||||
Syntax:
|
count blck_monitoredVehicles,
|
||||||
diag_activeSQFScripts
|
count blck_monitoredMissionAIGroups,
|
||||||
Return Value:
|
diag_FPS,floor(diag_tickTime/60),
|
||||||
Array of Arrays - to format [[scriptName, fileName, isRunning, currentLine], ...]:
|
blck_missionsRun,
|
||||||
*/
|
diag_tickTime]
|
||||||
|
] call blck_fnc_log;
|
||||||
#endif
|
|
||||||
[] call blck_fnc_cleanupAliveAI;
|
|
||||||
[] call blck_fnc_cleanupObjects;
|
|
||||||
[] call blck_fnc_cleanupDeadAI;
|
|
||||||
[] call blck_fnc_cleanEmptyGroups;
|
[] call blck_fnc_cleanEmptyGroups;
|
||||||
_timer5min = diag_tickTime + 300;
|
_timer5min = diag_tickTime + 300;
|
||||||
};
|
};
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
if !(isServer) exitWith {};
|
if !(isServer) exitWith {};
|
||||||
params["_msg",["_players",allplayers]];
|
params["_msg",["_players",allplayers]];
|
||||||
//diag_log format["AIM.sqf ===] _this = %1 | _msg = %2 | _players = %3",_this,_msg, _players];
|
|
||||||
|
|
||||||
{
|
{
|
||||||
if (isPlayer _x) then {_msg remoteExec["fn_handleMessage",(owner _x)]};
|
if (isPlayer _x) then {_msg remoteExec["fn_handleMessage",(owner _x)]};
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
private["_newX","_newY"];
|
private["_newX","_newY"];
|
||||||
params["_pos","_range"];
|
params["_pos","_range"];
|
||||||
|
|
||||||
_newX = ((_pos select 0) + (random(_range)) * (selectRandom [1,-1]));
|
_newX = ((_pos select 0) + (random(_range)) * (selectRandom [1,-1]));
|
||||||
_newY = ((_pos select 1) + (random(_range)) * (selectRandom [1,-1]));
|
_newY = ((_pos select 1) + (random(_range)) * (selectRandom [1,-1]));
|
||||||
|
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
params["_object","_dir"];
|
||||||
|
switch (typeName _dir) do
|
||||||
|
{
|
||||||
|
case "SCALAR": {_object setDir _dir};
|
||||||
|
case "ARRAY": {_object setVectorDirAndUp _dir};
|
||||||
|
};
|
@ -1,20 +0,0 @@
|
|||||||
//////////////////////////////////////////////////////
|
|
||||||
// test if a timeout condition exists.
|
|
||||||
// [_startTime] call blck_fnc_timedOut
|
|
||||||
// Returns true (timed out) or false (not timed out)
|
|
||||||
/*
|
|
||||||
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 "\q\addons\custom_server\Configs\blck_defines.hpp";
|
|
||||||
/////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
params["_startTime",["_timeoutTime",blck_MissionTimeout]];
|
|
||||||
private _return = if ((diag_tickTime - _startTime) > _timeoutTime) then {true} else {false};
|
|
||||||
_return
|
|
@ -14,9 +14,7 @@
|
|||||||
// TODO: used for 'unstuck' cases
|
// TODO: used for 'unstuck' cases
|
||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
#ifdef blck_debugMode
|
|
||||||
diag_log "_fnc_changeToMoveWaypoint: blck_debugMode enabled";
|
|
||||||
#endif
|
|
||||||
private["_group","_wp","_wpPos","_dis","_arc","_dir","_newPos","_marker","_center","_minDis","_maxDis"];
|
private["_group","_wp","_wpPos","_dis","_arc","_dir","_newPos","_marker","_center","_minDis","_maxDis"];
|
||||||
|
|
||||||
_group = group _this;
|
_group = group _this;
|
||||||
@ -49,23 +47,7 @@ _wp setWaypointLoiterRadius (_group getVariable["wpRadius",30]);
|
|||||||
_wp setWaypointLoiterType "CIRCLE";
|
_wp setWaypointLoiterType "CIRCLE";
|
||||||
_wp setWaypointSpeed "LIMITED";
|
_wp setWaypointSpeed "LIMITED";
|
||||||
_group setCurrentWaypoint _wp;
|
_group setCurrentWaypoint _wp;
|
||||||
diag_log format["_fnc_changeToMoveWaypoint:: -- >> group to update is %1 and new Waypoint position is %2",_group, getWPPos _wp];
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint (4/25/17): _this = %1", _this];
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint: typeName _this = %1", typeName _this];
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint:_group = %1",_group];
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint:_group timestamp updated to %1", _group getVariable "timeStamp"];
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint:: -- >> wpMode %1 _dir %2 _dis %3 _center %4",_group getVariable["wpMode","random"], _dir, _dis,_center];
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint:: -- >> group to update is %1 and new position is %2",_group, _newPos];
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint:: -- >> group to update is %1 and new Waypoint position is %2",_group, getWPPos _wp];
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint:_group %1 basic waypoint parameters updates", _group getVariable "timeStamp"];
|
|
||||||
_marker =_group getVariable["wpMarker",""];
|
|
||||||
_marker setMarkerColor "ColorBlue";
|
|
||||||
diag_log format["_fnc_changeToMoveWaypoint:: -- >> Waypoint marker for group %1 have been configured as %2",_group, _group getVariable "wpMarker"];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
if (_group getVariable["wpPatrolMode",""] isEqualTo "SAD") then
|
if (_group getVariable["wpPatrolMode",""] isEqualTo "SAD") then
|
||||||
{
|
{
|
||||||
#ifdef blck_debugMode
|
#ifdef blck_debugMode
|
||||||
|
@ -17,7 +17,4 @@ params["_group","_maxTime","_radius"];
|
|||||||
if (diag_tickTime > (_group getVariable "timeStamp") + _maxTime) then // || ( (getPos (leader)) distance2d (_group getVariable "patrolCenter") > _radius)) then
|
if (diag_tickTime > (_group getVariable "timeStamp") + _maxTime) then // || ( (getPos (leader)) distance2d (_group getVariable "patrolCenter") > _radius)) then
|
||||||
{
|
{
|
||||||
(leader _group) call blck_fnc_setNextWaypoint;
|
(leader _group) call blck_fnc_setNextWaypoint;
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 1) then {diag_log format["_fnc_checkGroupWaypointStatus: group %1 stuck, waypoint reset",_group];};
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
//diag_log format["_fnc_cleanEmptyGroups: count blck_monitoredMissionAIGroups = %1",count blck_monitoredMissionAIGroups];
|
|
||||||
for "_i" from 0 to ((count blck_monitoredMissionAIGroups) - 1) do
|
for "_i" from 0 to ((count blck_monitoredMissionAIGroups) - 1) do
|
||||||
{
|
{
|
||||||
if (_i >= (count blck_monitoredMissionAIGroups)) exitWith {};
|
if (_i >= (count blck_monitoredMissionAIGroups)) exitWith {};
|
||||||
|
@ -22,26 +22,17 @@ _fn_waypointComplete = {
|
|||||||
private _done = if (currentWaypoint _group) > (count (waypoints _group)) then {true} else {false};
|
private _done = if (currentWaypoint _group) > (count (waypoints _group)) then {true} else {false};
|
||||||
_done
|
_done
|
||||||
};
|
};
|
||||||
//diag_log format["_fnc_groupWaypointMonitor called at %1 with %2 groups to monitor",diag_tickTime,count blck_monitoredMissionAIGroups];
|
|
||||||
{
|
{
|
||||||
private["_timeStamp","_index","_unit","_soldierType"];
|
private["_timeStamp","_index","_unit","_soldierType"];
|
||||||
if ( !(_x isEqualTo grpNull) && ({alive _x} count (units _x) > 0) ) then
|
if ( !(_x isEqualTo grpNull) && ({alive _x} count (units _x) > 0) ) then
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
#define blck_turnBackRadiusInfantry 800
|
|
||||||
#define blck_turnBackRadiusVehicles 1000
|
|
||||||
#define blck_turnBackRadiusHelis 1000
|
|
||||||
#define blck_turnBackRadiusJets 1500
|
|
||||||
*/
|
|
||||||
//diag_log format["_fn_monitorGroupWaypoints - radii: on foot %1 | vehicle %2 | heli %3 | jet %4",blck_turnBackRadiusInfantry,blck_turnBackRadiusVehicles,blck_turnBackRadiusHelis,blck_turnBackRadiusJets];
|
|
||||||
_timeStamp = _x getVariable ["timeStamp",0];
|
_timeStamp = _x getVariable ["timeStamp",0];
|
||||||
if (_timeStamp isEqualTo 0) then
|
if (_timeStamp isEqualTo 0) then
|
||||||
{
|
{
|
||||||
_x setVariable["timeStamp",diag_tickTime];
|
_x setVariable["timeStamp",diag_tickTime];
|
||||||
//diag_log format["_fn_monitorGroupWaypoints::--> updating timestamp for group %1 at time %2",_x,diag_tickTime];
|
|
||||||
};
|
};
|
||||||
_soldierType = _x getVariable["soldierType","null"];
|
_soldierType = _x getVariable["soldierType","null"];
|
||||||
//diag_log format["_fn_monitorGroupWaypoints::--> soldierType for group %1 = %2 and timeStamp = %3",_x,_soldierType,_timeStamp];
|
|
||||||
switch (_soldierType) do
|
switch (_soldierType) do
|
||||||
{
|
{
|
||||||
case "infantry": {[_x, 60] call blck_fnc_checkgroupwaypointstatus;};
|
case "infantry": {[_x, 60] call blck_fnc_checkgroupwaypointstatus;};
|
||||||
@ -49,6 +40,5 @@ _fn_waypointComplete = {
|
|||||||
case "aircraft": {[_x, 90, 1000] call blck_fnc_checkgroupwaypointstatus;};
|
case "aircraft": {[_x, 90, 1000] call blck_fnc_checkgroupwaypointstatus;};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
//private _updateNeeded = if (diag_tickTime > (_x getVariable "timeStamp") + 60) then
|
|
||||||
} forEach blck_monitoredMissionAIGroups;
|
} forEach blck_monitoredMissionAIGroups;
|
||||||
|
|
||||||
|
@ -25,15 +25,11 @@ private _leader = _this;
|
|||||||
private _pos = _group getVariable "patrolCenter"; // Center of the area to be patroleld.
|
private _pos = _group getVariable "patrolCenter"; // Center of the area to be patroleld.
|
||||||
private _minDis = _group getVariable "minDis"; // minimum distance between waypoints
|
private _minDis = _group getVariable "minDis"; // minimum distance between waypoints
|
||||||
private _maxDis = _group getVariable "maxDis"; // maximum distance between waypoints
|
private _maxDis = _group getVariable "maxDis"; // maximum distance between waypoints
|
||||||
// _group getVariable "timeStamp"; // used to check that waypoints are being completed
|
|
||||||
//private _wpRadisu _group getVariable "wpRadius"; // Always set to 0 to force groups to move a bit
|
|
||||||
private _patrolRadius = _group getVariable "patrolRadius"; // radius of the area to be patrolled
|
private _patrolRadius = _group getVariable "patrolRadius"; // radius of the area to be patrolled
|
||||||
private _wpMode = _group getVariable "wpMode"; // The default mode used when the waypoint becomes active https://community.bistudio.com/wiki/AI_Behaviour
|
private _wpMode = _group getVariable "wpMode"; // The default mode used when the waypoint becomes active https://community.bistudio.com/wiki/AI_Behaviour
|
||||||
//_group getVariable "wpPatrolMode"; // Not used; the idea is to allow two algorythms: randomly select waypoints so groups move back and forth along the perimiter of the patrool area or sequenctioal, hoping along the perimeter
|
|
||||||
private _wpTimeout = _group getVariable "wpTimeout"; // Here to alow you to have the game engine pause before advancing to the next waypoing. a timout of 10-20 sec is recommended for infantry and land vehicles, and 1 sec for aircraft
|
private _wpTimeout = _group getVariable "wpTimeout"; // Here to alow you to have the game engine pause before advancing to the next waypoing. a timout of 10-20 sec is recommended for infantry and land vehicles, and 1 sec for aircraft
|
||||||
private _wpDir = _group getVariable "wpDir"; // Used to note the degrees along the circumference of the patrol area at which the last waypoint was positioned.
|
private _wpDir = _group getVariable "wpDir"; // Used to note the degrees along the circumference of the patrol area at which the last waypoint was positioned.
|
||||||
private _arc = _group getVariable "wpArc"; // Increment in degrees to be used when advancing the position of the patrol to the next position along the patrol perimeter
|
private _arc = _group getVariable "wpArc"; // Increment in degrees to be used when advancing the position of the patrol to the next position along the patrol perimeter
|
||||||
//_group getVariable "soldierType"; // infantry, vehicle, air or emplaced. Note that there is no need to have more than one waypoint for emplaced units.
|
|
||||||
private _wp = [_group,0];
|
private _wp = [_group,0];
|
||||||
private _nearestEnemy = _leader findNearestEnemy (getPosATL _leader);
|
private _nearestEnemy = _leader findNearestEnemy (getPosATL _leader);
|
||||||
private _maxTime = _group getVariable["maxTime",300];
|
private _maxTime = _group getVariable["maxTime",300];
|
||||||
|
@ -11,10 +11,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
if (blck_simulationManager isEqualTo blck_simulationManagementOff) exitWith
|
if (blck_simulationManager isEqualTo blck_simulationManagementOff) exitWith {};
|
||||||
{
|
|
||||||
//diag_log format["_fnc_simulationMonitor: monitoring disabled at %1",diag_tickTime];
|
|
||||||
};
|
|
||||||
|
|
||||||
if (blck_simulationManager isEqualTo blck_useDynamicSimulationManagement) exitWith
|
if (blck_simulationManager isEqualTo blck_useDynamicSimulationManagement) exitWith
|
||||||
{
|
{
|
||||||
@ -31,7 +28,7 @@ if (blck_simulationManager isEqualTo blck_useDynamicSimulationManagement) exitWi
|
|||||||
|
|
||||||
if (blck_simulationManager isEqualTo blck_useBlckeaglsSimulationManager) then
|
if (blck_simulationManager isEqualTo blck_useBlckeaglsSimulationManager) then
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_simulationMonitor: evaluating simulation using blckeagls code"];
|
|
||||||
{
|
{
|
||||||
private _group = _x;
|
private _group = _x;
|
||||||
private _nearplayer = [position (leader _group),blck_simulationEnabledDistance] call blck_fnc_nearestPlayers;
|
private _nearplayer = [position (leader _group),blck_simulationEnabledDistance] call blck_fnc_nearestPlayers;
|
||||||
@ -43,19 +40,16 @@ if (blck_simulationManager isEqualTo blck_useBlckeaglsSimulationManager) then
|
|||||||
_x enableSimulationGlobal true;
|
_x enableSimulationGlobal true;
|
||||||
_x reveal [(_nearplayer select 0),(_group knowsAbout (_nearPlayer select 0)) + 0.001]; // Force simulation on
|
_x reveal [(_nearplayer select 0),(_group knowsAbout (_nearPlayer select 0)) + 0.001]; // Force simulation on
|
||||||
}forEach units _group;
|
}forEach units _group;
|
||||||
//diag_log format["_fnc_simulationMonitor: (44) enabling simulation for group %1",_group];
|
|
||||||
};
|
};
|
||||||
}else{
|
}else{
|
||||||
if (simulationEnabled (leader _group)) then
|
if (simulationEnabled (leader _group)) then
|
||||||
{
|
{
|
||||||
{_x enableSimulationGlobal false} forEach units _group;
|
{_x enableSimulationGlobal false} forEach units _group;
|
||||||
//diag_log format["_fnc_simulationMonitor: (50) disabling simulation for group %1",_group];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} forEach blck_monitoredMissionAIGroups;
|
} forEach blck_monitoredMissionAIGroups;
|
||||||
|
|
||||||
{
|
{
|
||||||
// diag_log format["_fnc_simulationManager: _x = %1 | blck_graveyardGroup = %2",_x, units blck_graveyardGroup];
|
|
||||||
// disable simulation once players have left the area.
|
// disable simulation once players have left the area.
|
||||||
private _nearPlayers = [position (_x),blck_simulationEnabledDistance] call blck_fnc_nearestPlayers;
|
private _nearPlayers = [position (_x),blck_simulationEnabledDistance] call blck_fnc_nearestPlayers;
|
||||||
if (simulationEnabled _x) then
|
if (simulationEnabled _x) then
|
||||||
@ -63,13 +57,11 @@ if (blck_simulationManager isEqualTo blck_useBlckeaglsSimulationManager) then
|
|||||||
if (_nearPlayers isEqualTo []) then
|
if (_nearPlayers isEqualTo []) then
|
||||||
{
|
{
|
||||||
_x enableSimulationGlobal false;
|
_x enableSimulationGlobal false;
|
||||||
//diag_log format["_fnc_simulationMonior: simulation for unit %1 set to FALSE",_unit];
|
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
if !(_nearPlayers isEqualTo []) then
|
if !(_nearPlayers isEqualTo []) then
|
||||||
{
|
{
|
||||||
_x enableSimulationGlobal true;
|
_x enableSimulationGlobal true;
|
||||||
//diag_log format["_fnc_simulationMonior: simulation for unit %1 set to TRUE",_unit];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} forEach units blck_graveyardGroup;
|
} forEach units blck_graveyardGroup;
|
||||||
|
@ -16,8 +16,6 @@ private["_numbertospawn","_safepos","_launcherType","_infantryType"];
|
|||||||
params[["_group","Error"],"_pos", "_center", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], ["_minDist",30], ["_maxDist",45],["_configureWaypoints",true], ["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_scuba",false],["_patrolRadius",30]];
|
params[["_group","Error"],"_pos", "_center", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], ["_minDist",30], ["_maxDist",45],["_configureWaypoints",true], ["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_scuba",false],["_patrolRadius",30]];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (_weaponList isEqualTo []) then {_weaponList = [_skillLevel] call blck_fnc_selectAILoadout};
|
if (_weaponList isEqualTo []) then {_weaponList = [_skillLevel] call blck_fnc_selectAILoadout};
|
||||||
if (_sideArms isEqualTo []) then {_sideArms = [_skillLevel] call blck_fnc_selectAISidearms};
|
if (_sideArms isEqualTo []) then {_sideArms = [_skillLevel] call blck_fnc_selectAISidearms};
|
||||||
if (_uniforms isEqualTo []) then {_uniforms = [_skillLevel] call blck_fnc_selectAIUniforms};
|
if (_uniforms isEqualTo []) then {_uniforms = [_skillLevel] call blck_fnc_selectAIUniforms};
|
||||||
@ -45,17 +43,13 @@ if !(isNull _group) then
|
|||||||
_launcherType = "none";
|
_launcherType = "none";
|
||||||
};
|
};
|
||||||
private _unitPos = [_pos,3,6] call blck_fnc_findRandomLocationWithinCircle;
|
private _unitPos = [_pos,3,6] call blck_fnc_findRandomLocationWithinCircle;
|
||||||
|
|
||||||
[_unitPos,_group,_skillLevel,_uniforms,_headGear,_vests,_backpacks,_launcherType, _weaponList, _sideArms, _scuba] call blck_fnc_spawnUnit;
|
[_unitPos,_group,_skillLevel,_uniforms,_headGear,_vests,_backpacks,_launcherType, _weaponList, _sideArms, _scuba] call blck_fnc_spawnUnit;
|
||||||
|
|
||||||
//diag_log format["_fnc_spawnGroup: _unit %1 spawned at %2 at a distance from the group center of %3 and _vector of %4",_unit,_unitPos,_unitPos distance _pos,_pos getRelDir _unitPos];
|
//diag_log format["_fnc_spawnGroup: _unit %1 spawned at %2 at a distance from the group center of %3 and _vector of %4",_unit,_unitPos,_unitPos distance _pos,_pos getRelDir _unitPos];
|
||||||
};
|
};
|
||||||
_group selectLeader ((units _group) select 0);
|
_group selectLeader ((units _group) select 0);
|
||||||
|
|
||||||
if (_configureWaypoints) then
|
if (_configureWaypoints) then
|
||||||
{
|
{
|
||||||
if (_scuba) then {_infantryType = "scuba"} else {_infantryType = "infantry"};
|
if (_scuba) then {_infantryType = "scuba"} else {_infantryType = "infantry"};
|
||||||
|
|
||||||
#define infantryPatrolRadius 30
|
#define infantryPatrolRadius 30
|
||||||
#define infantryWaypointTimeout [5,7.5,10]
|
#define infantryWaypointTimeout [5,7.5,10]
|
||||||
[_pos,_minDist,_maxDist,_group,"random","SAD",_infantryType,_patrolRadius,infantryWaypointTimeout] spawn blck_fnc_setupWaypoints;
|
[_pos,_minDist,_maxDist,_group,"random","SAD",_infantryType,_patrolRadius,infantryWaypointTimeout] spawn blck_fnc_setupWaypoints;
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
_isMagazine = false;
|
_isMagazine = false;
|
||||||
_isBackpack = false;
|
_isBackpack = false;
|
||||||
_quant = 0;
|
_quant = 0;
|
||||||
//diag_log format["_fn_addItemToCrate:: -- >> itemInfor = %1",_itemInfo];
|
|
||||||
if (typeName _itemInfo isEqualTo "STRING") then {_item = _itemInfo; _quant = 1}; // case where only the item descriptor was provided
|
if (typeName _itemInfo isEqualTo "STRING") then {_item = _itemInfo; _quant = 1}; // case where only the item descriptor was provided
|
||||||
if (typeName _itemInfo isEqualTo "ARRAY") then {
|
if (typeName _itemInfo isEqualTo "ARRAY") then {
|
||||||
|
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
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-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 "\q\addons\custom_server\Configs\blck_defines.hpp";
|
|
||||||
|
|
||||||
params[
|
|
||||||
"_missionList", // list of missions to be used for that category (blue, red, gree, orange, etc)
|
|
||||||
"_path", // path to the folder with the mission.sqf's
|
|
||||||
"_marker", // a root name for markers used in the mission
|
|
||||||
"_difficulty",
|
|
||||||
"_tMin",
|
|
||||||
"_tMax",
|
|
||||||
["_noMissions",1]
|
|
||||||
];
|
|
||||||
|
|
||||||
//{diag_log format["_fnc_addMissionToCue: _this %1 = %2",_forEachIndex,_x]} forEach _this;
|
|
||||||
private["_compiledMission","_compiledMissionsList"];
|
|
||||||
|
|
||||||
|
|
||||||
private _waitTime = diag_tickTime + (_tMin) + random((_tMax) - (_tMin));
|
|
||||||
private _missionsData = []; // Parameters definine each of the missions for this difficulty are stored as arrays here.
|
|
||||||
{
|
|
||||||
private _missionFile = format["\q\addons\custom_server\Missions\%1\%2.sqf",_path,_x];
|
|
||||||
private _missionCode = compileFinal preprocessFileLinenumbers _missionFile;//return all of the values that define how the mission is spawned as an array of values.
|
|
||||||
private _data = [] call _missionCode;
|
|
||||||
_missionsData pushBack _data;
|
|
||||||
} forEach _missionList;
|
|
||||||
|
|
||||||
private _missionCategoryDescriptors = [
|
|
||||||
_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 //
|
|
||||||
];
|
|
||||||
|
|
||||||
blck_missionData pushBack _missionCategoryDescriptors;
|
|
||||||
|
|
@ -12,30 +12,42 @@
|
|||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
//params["_missionList","_compiledMission","_compiledMissionsList","_waitTime","_mission","_path","_marker","_difficulty","_tMin","_tMax",["_noMissions",1]];
|
|
||||||
params["_missionList","_path","_marker","_difficulty","_tMin","_tMax",["_noMissions",1]];
|
params["_missionList","_path","_marker","_difficulty","_tMin","_tMax",["_noMissions",1]];
|
||||||
private["_compiledMission","_compiledMissionsList"];
|
if (blck_debugLevel >= 3) then
|
||||||
_compiledMissionsList = [];
|
|
||||||
for "_i" from 1 to _noMissions do
|
|
||||||
{
|
{
|
||||||
_waitTime = diag_tickTime + (_tMin) + random((_tMax) - (_tMin));
|
|
||||||
// 0 1 2 3 4 5 6 7 8
|
|
||||||
//_mission = [_missionList,_path,format["%1%2",_marker,_i],_difficulty,_tMin,_tMax,_waitTime,[0,0,0],_allowReinforcements];
|
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_addMissionToQue: _x = %1",_x];
|
diag_log format["_addMissionToQue: _this %1 = %2",_forEachIndex, _this select _forEachIndex];
|
||||||
_compiledMission = compilefinal preprocessFileLineNumbers format["\q\addons\custom_server\Missions\%1\%2.sqf",_path,_x];
|
} forEach _this;
|
||||||
_compiledMissionsList pushBack _compiledMission;
|
|
||||||
}forEach _missionList;
|
|
||||||
_mission = [_compiledMissionsList,format["%1%2",_marker,_i],_difficulty,_tMin,_tMax,_waitTime,[0,0,0]];
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel >= 2) then {
|
|
||||||
diag_log format["-fnc_addMissionToQue::-->> _mission = %1",[/*_mission select 0, */_mission select 1, _mission select 2, _mission select 3, _mission select 4, _mission select 5, _mission select 6]];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
//diag_log format["-fnc_addMissionToQue::-->> _mission = %1",[ _mission select 1, _mission select 2, _mission select 3, _mission select 4, _mission select 5, _mission select 6]];
|
|
||||||
blck_pendingMissions pushback _mission;
|
|
||||||
};
|
};
|
||||||
|
private _waitTime = diag_tickTime + (_tMin) + random((_tMax) - (_tMin));
|
||||||
|
private _missionsData = []; // Parameters definine each of the missions for this difficulty are stored as arrays here.
|
||||||
|
{
|
||||||
|
private _missionFile = format["\q\addons\custom_server\Missions\%1\%2.sqf",_path,_x];
|
||||||
|
private _missionCode = compileFinal preprocessFileLinenumbers _missionFile;//return all of the values that define how the mission is spawned as an array of values
|
||||||
|
if !(isNil "_missionCode") then
|
||||||
|
{
|
||||||
|
private _data = [_marker,_difficulty] call _missionCode;
|
||||||
|
if !(isNil "_data") then
|
||||||
|
{
|
||||||
|
_missionsData pushBack _data;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
diag_log format["bad path\mission combination %1",_missionFile];
|
||||||
|
};
|
||||||
|
} forEach _missionList;
|
||||||
|
|
||||||
|
private _missionCategoryDescriptors = [
|
||||||
|
_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 //
|
||||||
|
];
|
||||||
|
|
||||||
|
blck_missionData pushBack _missionCategoryDescriptors;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel >= 4) then {diag_log format["_fnc_addMissionToQue:: -- >> Result - blck_pendingMissions = %1",blck_pendingMissions];};
|
|
||||||
#endif
|
|
@ -16,8 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
//diag_log format["_fnc_cleanUpObjects: time %1 | count blck_oldMissionObjects %2",diag_tickTime,count blck_oldMissionObjects];
|
|
||||||
|
|
||||||
for "_i" from 1 to (count blck_oldMissionObjects) do {
|
for "_i" from 1 to (count blck_oldMissionObjects) do {
|
||||||
if (_i <= count blck_oldMissionObjects) then {
|
if (_i <= count blck_oldMissionObjects) then {
|
||||||
private _oldObjs = blck_oldMissionObjects deleteAt 0;
|
private _oldObjs = blck_oldMissionObjects deleteAt 0;
|
||||||
@ -27,7 +25,6 @@ for "_i" from 1 to (count blck_oldMissionObjects) do {
|
|||||||
private _nearplayer = [_missionCenter,800] call blck_fnc_nearestPlayers;
|
private _nearplayer = [_missionCenter,800] call blck_fnc_nearestPlayers;
|
||||||
if (_nearPlayer isEqualTo []) then
|
if (_nearPlayer isEqualTo []) then
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_cleanUpObjects: _nearPlayer = %1 | _missionCenter = %2 | _objarr = %3",_nearplayer,_missionCenter,_objarr];
|
|
||||||
{deleteVehicle _x}forEach _objarr;
|
{deleteVehicle _x}forEach _objarr;
|
||||||
} else {
|
} else {
|
||||||
blck_oldMissionObjects pushback _oldObjs;
|
blck_oldMissionObjects pushback _oldObjs;
|
||||||
|
@ -14,8 +14,7 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params ["_mines"];
|
params ["_mines"];
|
||||||
//_mines = _this select 0; // array containing the mines to be deleted
|
|
||||||
//diag_log format["deleting %1 mines----- >>>> ", count _mines];
|
|
||||||
{
|
{
|
||||||
deleteVehicle _x;
|
deleteVehicle _x;
|
||||||
} forEach _mines;
|
} forEach _mines;
|
||||||
|
@ -13,5 +13,4 @@
|
|||||||
|
|
||||||
params["_crate"];
|
params["_crate"];
|
||||||
private _result = if ((_crate distance (_crate getVariable["crateSpawnPos",[0,0,0]])) > 10) then {true} else {false};
|
private _result = if ((_crate distance (_crate getVariable["crateSpawnPos",[0,0,0]])) > 10) then {true} else {false};
|
||||||
//diag_log format["_fn_crateMoved:: _crate %1 | crateSpawnPos %2 | _result = %3",_crate,_result];
|
|
||||||
_result;
|
_result;
|
||||||
|
@ -13,12 +13,10 @@
|
|||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp"
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp"
|
||||||
private["_cleanupAliveAITimer","_cleanupCompositionTimer","_isScubaMission"];
|
|
||||||
|
|
||||||
_fn_missionCleanup = {
|
_fn_missionCleanup = {
|
||||||
params["_coords","_mines","_objects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]];
|
params["_coords","_mines","_objects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]];
|
||||||
[_mines] call blck_fnc_clearMines;
|
[_mines] call blck_fnc_clearMines;
|
||||||
//[_coords,_objects, _cleanupCompositionTimer] call blck_fnc_addObjToQue;
|
|
||||||
blck_oldMissionObjects pushback [_coords,_objects, (diag_tickTime + _cleanupCompositionTimer)];
|
blck_oldMissionObjects pushback [_coords,_objects, (diag_tickTime + _cleanupCompositionTimer)];
|
||||||
blck_liveMissionAI pushback [_coords,_blck_AllMissionAI, (diag_tickTime + _cleanupAliveAITimer)];
|
blck_liveMissionAI pushback [_coords,_blck_AllMissionAI, (diag_tickTime + _cleanupAliveAITimer)];
|
||||||
blck_missionsRunning = blck_missionsRunning - 1;
|
blck_missionsRunning = blck_missionsRunning - 1;
|
||||||
@ -55,68 +53,90 @@ params[
|
|||||||
["_vehicles",[]],
|
["_vehicles",[]],
|
||||||
["_isScubaMission",false]
|
["_isScubaMission",false]
|
||||||
];
|
];
|
||||||
/*
|
|
||||||
private _param = ["_coords","_mines","_objects","_crates","_blck_AllMissionAI","_endMsg","_markers","_markerPos","_markerName","_markerLabel","_endCondition","_vehicles","_isScubaMission"];
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_endMission: parameter %1 named %2 = %3",_forEachIndex,_param select _forEachIndex,_x];
|
|
||||||
} forEach _this;
|
|
||||||
*/
|
|
||||||
{
|
{
|
||||||
[_x] call blck_fnc_deleteMarker;
|
[_x] call blck_fnc_deleteMarker;
|
||||||
}forEach (_markers);
|
}forEach (_markers);
|
||||||
|
|
||||||
|
switch (_endCondition) do
|
||||||
if (_endCondition > 0) exitWith // Mision aborted for some reason
|
|
||||||
{
|
|
||||||
#define cleanupCompositionTimer 0
|
|
||||||
#define cleanupAliveAITimer 0
|
|
||||||
// params["_coords","_mines","_objects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]];
|
|
||||||
[_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup;
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
if (local _x) then {deleteVehicle _x};
|
|
||||||
}forEach _crates;
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
if (local _x) then {deleteVehicle _x};
|
|
||||||
}forEach _vehicles;
|
|
||||||
};
|
|
||||||
if (_endCondition <= 0) then // Normal Mission End State
|
|
||||||
{
|
{
|
||||||
|
case -1: {
|
||||||
|
#define cleanupCompositionTimer 0
|
||||||
|
#define cleanupAliveAITimer 0
|
||||||
|
|
||||||
|
{
|
||||||
|
if (local _x) then {deleteVehicle _x};
|
||||||
|
}forEach _crates;
|
||||||
|
|
||||||
|
[_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup;
|
||||||
if (blck_useSignalEnd) then
|
[format["Mission <TIMED OUT> | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log;
|
||||||
{
|
|
||||||
[_crates select 0] spawn blck_fnc_signalEnd;
|
|
||||||
{
|
|
||||||
_x enableRopeAttach true;
|
|
||||||
}forEach _crates;
|
|
||||||
};
|
};
|
||||||
diag_log format["_fnc_endMission (93) _endMsg = %1 | _markerLabel = %2",_endMsg,_markerLabel];
|
case 1: { // Normal End
|
||||||
if (_endCondition == 0) then {[["end",_endMsg,_markerLabel]] call blck_fnc_messageplayers;};
|
if (blck_useSignalEnd) then
|
||||||
if (_endCondition == -1) then {[["warning",_endMsg,_markerLabel]] call blck_fnc_messageplayers;};
|
{
|
||||||
[_markerPos, _markerName] spawn blck_fnc_missionCompleteMarker;
|
[_crates select 0] spawn blck_fnc_signalEnd;
|
||||||
{
|
{
|
||||||
if !(_x getVariable["lootLoaded",false] || _endCondition == 1) then // dont load loot if the asset was killed
|
_x enableRopeAttach true;
|
||||||
{
|
}forEach _crates;
|
||||||
|
};
|
||||||
|
|
||||||
|
[["end",_endMsg,_markerLabel]] call blck_fnc_messageplayers;
|
||||||
|
|
||||||
[_x,_crateLoot,_lootCounts] call blck_fnc_fillBoxes;
|
[_markerPos, _markerName] spawn blck_fnc_missionCompleteMarker;
|
||||||
};
|
{
|
||||||
}forEach _crates;
|
if !(_x getVariable["lootLoaded",false] || _endCondition == 1) then // dont load loot if the asset was killed
|
||||||
|
{
|
||||||
|
[_x,_crateLoot,_lootCounts] call blck_fnc_fillBoxes;
|
||||||
|
};
|
||||||
|
}forEach _crates;
|
||||||
|
|
||||||
{
|
{
|
||||||
private ["_v","_posnVeh"];
|
private ["_v","_posnVeh"];
|
||||||
_posnVeh = blck_monitoredVehicles find _x; // returns -1 if the vehicle is not in the array else returns 0-(count blck_monitoredVehicles -1)
|
_posnVeh = blck_monitoredVehicles find _x; // returns -1 if the vehicle is not in the array else returns 0-(count blck_monitoredVehicles -1)
|
||||||
if (_posnVeh >= 0) then
|
if (_posnVeh >= 0) then
|
||||||
{
|
{
|
||||||
(blck_monitoredVehicles select _posnVeh) setVariable ["missionCompleted", diag_tickTime];
|
(blck_monitoredVehicles select _posnVeh) setVariable ["missionCompleted", diag_tickTime];
|
||||||
} else {
|
} else {
|
||||||
_x setVariable ["missionCompleted", diag_tickTime];
|
_x setVariable ["missionCompleted", diag_tickTime];
|
||||||
blck_monitoredVehicles pushback _x;
|
blck_monitoredVehicles pushback _x;
|
||||||
};
|
};
|
||||||
} forEach _vehicles;
|
} forEach _vehicles;
|
||||||
// params["_coords","_mines","_objects","_blck_AllMissionAI","_markerName","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]];
|
|
||||||
[_coords,_mines,_objects,_blck_AllMissionAI,_markerName,blck_AliveAICleanUpTimer,blck_cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup;
|
[_coords,_mines,_objects,_blck_AllMissionAI,_markerName,blck_AliveAICleanUpTimer,blck_cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup;
|
||||||
|
[format["Mission Completed | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log;
|
||||||
|
};
|
||||||
|
case 2: { // Aborted for moving a crate
|
||||||
|
|
||||||
|
{
|
||||||
|
if ( _x distance (_x getVariable ["crateSpawnPos", (getPos _x)]) > max_distance_crate_moved_uncompleted_mission)then {deleteVehicle _x};
|
||||||
|
} forEach _crates;
|
||||||
|
#define illegalCrateMoveMsg "Crate moved before mission completed"
|
||||||
|
[["warming",illegalCrateMoveMsg,_markerLabel]] call blck_fnc_messageplayers;
|
||||||
|
[_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup;
|
||||||
|
[format["Mission Aborted <CRATE MOVED> | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log;
|
||||||
|
};
|
||||||
|
case 3: { // Mision aborted for killing an asset
|
||||||
|
#define cleanupCompositionTimer 0
|
||||||
|
#define cleanupAliveAITimer 0
|
||||||
|
|
||||||
|
{
|
||||||
|
if (local _x) then {deleteVehicle _x};
|
||||||
|
}forEach _crates;
|
||||||
|
[["warning",_endMsg,_markerLabel]] call blck_fnc_messageplayers;
|
||||||
|
[_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup;
|
||||||
|
[format["Mission Aborted <ASSET KILLED> | _coords %1 : _markerClass %2 : _markerMissionName %3",_coords,_markerName,_markerLabel]] call blck_fnc_log;
|
||||||
|
|
||||||
|
};
|
||||||
|
case 4: {
|
||||||
|
#define cleanupCompositionTimer 0
|
||||||
|
#define cleanupAliveAITimer 0
|
||||||
|
|
||||||
|
{
|
||||||
|
if (local _x) then {deleteVehicle _x};
|
||||||
|
}forEach _crates;
|
||||||
|
|
||||||
|
[_coords,_mines,_objects,_blck_AllMissionAI,_markerName,cleanupAliveAITimer,cleanupCompositionTimer,_isScubaMission] call _fn_missionCleanup;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
_endCondition
|
blck_missionsRun = blck_missionsRun + 1;
|
||||||
|
@ -14,25 +14,19 @@
|
|||||||
|
|
||||||
private["_a1","_item","_diff","_tries"];
|
private["_a1","_item","_diff","_tries"];
|
||||||
params["_crate","_boxLoot","_itemCnts"];
|
params["_crate","_boxLoot","_itemCnts"];
|
||||||
//diag_log format["_fnc_fillBoxes: _this = %1",_this];
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_fillBoxes: _this select %1 = %2",_foreachindex, _this select _foreachindex];
|
|
||||||
}foreach _this;
|
|
||||||
#endif
|
|
||||||
_itemCnts params["_wepCnt","_magCnt","_opticsCnt","_materialsCnt","_itemCnt","_bkcPckCnt"];
|
_itemCnts params["_wepCnt","_magCnt","_opticsCnt","_materialsCnt","_itemCnt","_bkcPckCnt"];
|
||||||
_boxLoot params["_weapons","_magazines","_optics","_materials","_items","_backpacks"];
|
_boxLoot params["_weapons","_magazines","_optics","_materials","_items","_backpacks"];
|
||||||
|
|
||||||
//diag_log format["_fnc_fillBoxes: _weapons = %1",_weapons];
|
|
||||||
if !(_weapons isEqualTo []) then
|
if !(_weapons isEqualTo []) then
|
||||||
{
|
{
|
||||||
_tries = [_wepCnt] call blck_fnc_getNumberFromRange;
|
_tries = [_wepCnt] call blck_fnc_getNumberFromRange;
|
||||||
//diag_log format["_fnc_fillBoxes (31): loading %1 weapons",_tries];
|
|
||||||
// Add some randomly selected weapons and corresponding magazines
|
// Add some randomly selected weapons and corresponding magazines
|
||||||
for "_i" from 0 to (_tries - 1) do
|
for "_i" from 0 to (_tries - 1) do
|
||||||
{
|
{
|
||||||
_item = selectRandom _weapons;
|
_item = selectRandom _weapons;
|
||||||
//diag_log format["_fnc_fillBoxes with weapons: _item = %1",_item];
|
|
||||||
if (typeName _item isEqualTo "ARRAY") then // Check whether weapon name is part of an array that might also specify an ammo to use
|
if (typeName _item isEqualTo "ARRAY") then // Check whether weapon name is part of an array that might also specify an ammo to use
|
||||||
{
|
{
|
||||||
_crate addWeaponCargoGlobal [_item select 0,1]; // if yes then assume the first element in the array is the weapon name
|
_crate addWeaponCargoGlobal [_item select 0,1]; // if yes then assume the first element in the array is the weapon name
|
||||||
@ -51,16 +45,15 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_fillBoxes: _magazines = %1",_magazines];
|
|
||||||
if !(_magazines isEqualTo []) then
|
if !(_magazines isEqualTo []) then
|
||||||
{
|
{
|
||||||
_tries = [_magCnt] call blck_fnc_getNumberFromRange;
|
_tries = [_magCnt] call blck_fnc_getNumberFromRange;
|
||||||
//diag_log format["_fnc_fillBoxes (26): loading %1 magazines",_tries];
|
|
||||||
// Add Magazines, grenades, and 40mm GL shells
|
// Add Magazines, grenades, and 40mm GL shells
|
||||||
for "_i" from 0 to (_tries - 1) do
|
for "_i" from 0 to (_tries - 1) do
|
||||||
{
|
{
|
||||||
_item = selectRandom _magazines;
|
_item = selectRandom _magazines;
|
||||||
//diag_log format["_fnc_fillBoxes with magazines: _item = %1",_item];
|
|
||||||
if (typeName _item isEqualTo "ARRAY") then
|
if (typeName _item isEqualTo "ARRAY") then
|
||||||
{
|
{
|
||||||
_diff = (_item select 2) - (_item select 1); // Take difference between max and min number of items to load and randomize based on this value
|
_diff = (_item select 2) - (_item select 1); // Take difference between max and min number of items to load and randomize based on this value
|
||||||
@ -73,16 +66,15 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_fillBoxes: _optics = %1",_optics];
|
|
||||||
if !(_optics isEqualTo []) then
|
if !(_optics isEqualTo []) then
|
||||||
{
|
{
|
||||||
_tries = [_opticsCnt] call blck_fnc_getNumberFromRange;
|
_tries = [_opticsCnt] call blck_fnc_getNumberFromRange;
|
||||||
//diag_log format["_fnc_fillBoxes (72): loading %1 optics",_tries];
|
|
||||||
// Add Optics
|
// Add Optics
|
||||||
for "_i" from 0 to (_tries - 1) do
|
for "_i" from 0 to (_tries - 1) do
|
||||||
{
|
{
|
||||||
_item = selectRandom _optics;
|
_item = selectRandom _optics;
|
||||||
//diag_log format["_fnc_fillBoxes with optics: _item = %1",_item];
|
|
||||||
if (typeName _item isEqualTo "ARRAY") then
|
if (typeName _item isEqualTo "ARRAY") then
|
||||||
{
|
{
|
||||||
_diff = (_item select 2) - (_item select 1);
|
_diff = (_item select 2) - (_item select 1);
|
||||||
@ -95,16 +87,15 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_fillBoxes: _materials = %1",_materials];
|
|
||||||
if !(_materials isEqualTo []) then
|
if !(_materials isEqualTo []) then
|
||||||
{
|
{
|
||||||
_tries = [_materialsCnt] call blck_fnc_getNumberFromRange;
|
_tries = [_materialsCnt] call blck_fnc_getNumberFromRange;
|
||||||
//diag_log format["_fnc_fillBoxes (92): loading %1 materials",_materialsCnt];
|
|
||||||
// Add materials (cindar, mortar, electrical parts etc)
|
// Add materials (cindar, mortar, electrical parts etc)
|
||||||
for "_i" from 0 to (_tries - 1) do
|
for "_i" from 0 to (_tries - 1) do
|
||||||
{
|
{
|
||||||
_item = selectRandom _materials;
|
_item = selectRandom _materials;
|
||||||
//diag_log format["_fnc_fillBoxes with materials: _item = %1",_item];
|
|
||||||
if (typeName _item isEqualTo "ARRAY") then
|
if (typeName _item isEqualTo "ARRAY") then
|
||||||
{
|
{
|
||||||
_diff = (_item select 2) - (_item select 1);
|
_diff = (_item select 2) - (_item select 1);
|
||||||
@ -117,16 +108,14 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_fillBoxes: _items = %1",_items];
|
|
||||||
if !(_items isEqualTo []) then
|
if !(_items isEqualTo []) then
|
||||||
{
|
{
|
||||||
_tries = [_itemCnt] call blck_fnc_getNumberFromRange;
|
_tries = [_itemCnt] call blck_fnc_getNumberFromRange;
|
||||||
//diag_log format["_fnc_fillBoxes (112): loading %1 items",_itemCnt];
|
|
||||||
// Add Items (first aid kits, multitool bits, vehicle repair kits, food and drinks)
|
// Add Items (first aid kits, multitool bits, vehicle repair kits, food and drinks)
|
||||||
for "_i" from 0 to (_tries - 1) do
|
for "_i" from 0 to (_tries - 1) do
|
||||||
{
|
{
|
||||||
_item = selectRandom _items;
|
_item = selectRandom _items;
|
||||||
//diag_log format["_fnc_fillBoxes with items: _item = %1",_item];
|
|
||||||
if (typeName _item isEqualTo "ARRAY") then
|
if (typeName _item isEqualTo "ARRAY") then
|
||||||
{
|
{
|
||||||
_diff = (_item select 2) - (_item select 1);
|
_diff = (_item select 2) - (_item select 1);
|
||||||
@ -139,15 +128,13 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_fillBoxes: _backpacks = %1",_backpacks];
|
|
||||||
if !(_backpacks isEqualTo []) then
|
if !(_backpacks isEqualTo []) then
|
||||||
{
|
{
|
||||||
_tries = [_bkcPckCnt] call blck_fnc_getNumberFromRange;
|
_tries = [_bkcPckCnt] call blck_fnc_getNumberFromRange;
|
||||||
//diag_log format["_fnc_fillBoxes (132): loading %1 backpacks",_tries];
|
|
||||||
for "_i" from 0 to (_tries - 1) do
|
for "_i" from 0 to (_tries - 1) do
|
||||||
{
|
{
|
||||||
_item = selectRandom _backpacks;
|
_item = selectRandom _backpacks;
|
||||||
//diag_log format["_fnc_fillBoxes with backpacks: _item = %1",_item];
|
|
||||||
if (typeName _item isEqualTo "ARRAY") then
|
if (typeName _item isEqualTo "ARRAY") then
|
||||||
{
|
{
|
||||||
_diff = (_item select 2) - (_item select 1);
|
_diff = (_item select 2) - (_item select 1);
|
||||||
@ -159,6 +146,3 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
//diag_log "_fnc_fillBoxes <END>";
|
|
||||||
//diag_log format["testCrateLoading: crate inventory = %1",getItemCargo _crate];
|
|
||||||
//diag_log "_fnc_fillBoxes <END>";
|
|
@ -28,12 +28,6 @@ if (_headGear isEqualTo []) then {_headGear = [_aiDifficultyLevel] call blck_f
|
|||||||
if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call blck_fnc_selectAIVests};
|
if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call blck_fnc_selectAIVests};
|
||||||
if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call blck_fnc_selectAIBackpacks};
|
if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call blck_fnc_selectAIBackpacks};
|
||||||
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_garrisonBuilding_ATLsystem: _this %1 = %2",_forEachIndex,_this select _forEachIndex];
|
|
||||||
}forEach _this;
|
|
||||||
*/
|
|
||||||
|
|
||||||
private["_group","_buildingsSpawned","_staticsSpawned","_g","_building","_return"];
|
private["_group","_buildingsSpawned","_staticsSpawned","_g","_building","_return"];
|
||||||
_buildingsSpawned = [];
|
_buildingsSpawned = [];
|
||||||
_staticsSpawned = [];
|
_staticsSpawned = [];
|
||||||
@ -41,25 +35,15 @@ _group = [blck_AI_Side,true] call blck_fnc_createGroup;
|
|||||||
if !(isNull _group) then
|
if !(isNull _group) then
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
_g = _x;
|
_g = _x;
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["_g %1 = %2",_forEachIndex,_g select _forEachIndex];
|
|
||||||
}forEach _g;
|
|
||||||
*/
|
|
||||||
// ["Land_Unfinished_Building_02_F",[-28.3966,34.8145,-0.00268841],0,true,true,[["B_HMG_01_high_F",[-5.76953,1.16504,7.21168],360]],[]],
|
|
||||||
_x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_statics","_men"];
|
_x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_statics","_men"];
|
||||||
//diag_log format["_bldClassName = %1 | _bldRelPos = %2 | _bldDir = %3",_bldClassName,_bldRelPos,_bldDir];
|
|
||||||
_building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"];
|
_building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"];
|
||||||
_building setPosATL (_bldRelPos vectorAdd _center);
|
_building setPosATL (_bldRelPos vectorAdd _center);
|
||||||
_building setDir _bldDir;
|
_building setDir _bldDir;
|
||||||
_buildingsSpawned pushBack _building;
|
_buildingsSpawned pushBack _building;
|
||||||
// params["_building","_group","_statics","_men",["_aiDifficultyLevel","Red"], ["_uniforms",[]],["_headGear",[]],["_vests",[]],["_backpacks",[]],["_launcher","none"],["_weaponList",[]],["_sideArms",[]]];
|
|
||||||
_staticsSpawned = [_building,_group,_statics,_men,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_ATL;
|
_staticsSpawned = [_building,_group,_statics,_men,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_ATL;
|
||||||
}forEach _garrisonedBuilding_ATLsystem;
|
}forEach _garrisonedBuilding_ATLsystem;
|
||||||
};
|
};
|
||||||
//{
|
|
||||||
//diag_log format["__fnc_garrisonBuilding_ATLsystem: %2 = %1",_x select 1, _x select 0];
|
|
||||||
//}forEach [ [_buildingsSpawned,"Buildings"],[_staticsSpawned,"Statics"]];
|
|
||||||
_return = [_group,_buildingsSpawned,_staticsSpawned];
|
_return = [_group,_buildingsSpawned,_staticsSpawned];
|
||||||
_return
|
_return
|
||||||
|
@ -11,7 +11,8 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params["_center","_garrisonedBuilding_relPosSystem",
|
params["_center",
|
||||||
|
"_garrisonedBuilding_relPosSystem",
|
||||||
["_aiDifficultyLevel","Red"],
|
["_aiDifficultyLevel","Red"],
|
||||||
["_uniforms",[]],
|
["_uniforms",[]],
|
||||||
["_headGear",[]],
|
["_headGear",[]],
|
||||||
@ -20,11 +21,7 @@ params["_center","_garrisonedBuilding_relPosSystem",
|
|||||||
["_weaponList",[]],
|
["_weaponList",[]],
|
||||||
["_sideArms",[]]
|
["_sideArms",[]]
|
||||||
];
|
];
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_garrisonBuilding_relPosSystem: _this %1 = %2",_forEachIndex,_this select _forEachIndex];
|
|
||||||
}forEach _this;
|
|
||||||
*/
|
|
||||||
if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout};
|
if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout};
|
||||||
if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call blck_fnc_selectAISidearms};
|
if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call blck_fnc_selectAISidearms};
|
||||||
if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call blck_fnc_selectAIUniforms};
|
if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call blck_fnc_selectAIUniforms};
|
||||||
@ -38,14 +35,13 @@ _group = [blck_AI_Side,true] call blck_fnc_createGroup;
|
|||||||
if !(isNull _group) then
|
if !(isNull _group) then
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
_g = _x;
|
|
||||||
// ["Land_Unfinished_Building_02_F",[-21.8763,-45.978,-0.00213432],0,true,true,0.67,3,[],4],
|
// ["Land_Unfinished_Building_02_F",[-21.8763,-45.978,-0.00213432],0,true,true,0.67,3,[],4],
|
||||||
_g params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_p","_noStatics","_typesStatics","_noUnits"];
|
_x params["_bldClassName","_bldRelPos","_bldDir","_s","_d","_p","_noStatics","_typesStatics","_noUnits"];
|
||||||
if (_typesStatics isEqualTo []) then {_typesStatics = ["B_HMG_01_high_F"]};
|
if (_typesStatics isEqualTo []) then {_typesStatics = ["B_HMG_01_high_F"]};
|
||||||
_building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"];
|
_building = createVehicle[_bldClassName,[0,0,0],[],0,"CAN_COLLIDE"];
|
||||||
_buildingsSpawned pushBack _building;
|
_buildingsSpawned pushBack _building;
|
||||||
_building setPosATL (_bldRelPos vectorAdd _center);
|
_building setPosATL (_bldRelPos vectorAdd _center);
|
||||||
_building setDir _bldDir;
|
[_building, _bldDir] call blck_fnc_setDirUp;
|
||||||
_staticsSpawned = [_building,_group,_noStatics,_typesStatics,_noUnits,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_relPos;
|
_staticsSpawned = [_building,_group,_noStatics,_typesStatics,_noUnits,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,"none",_weaponList,_sideArms] call blck_fnc_spawnGarrisonInsideBuilding_relPos;
|
||||||
}forEach _garrisonedBuilding_relPosSystem;
|
}forEach _garrisonedBuilding_relPosSystem;
|
||||||
};
|
};
|
||||||
|
@ -6,12 +6,8 @@
|
|||||||
|
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
|
|
||||||
private ["_coords","_coordArray","_return"];
|
private ["_coords","_coordArray","_return"];
|
||||||
|
|
||||||
|
|
||||||
params["_missionCategoryDescriptors","_missionParameters"];
|
params["_missionCategoryDescriptors","_missionParameters"];
|
||||||
|
|
||||||
_missionCategoryDescriptors params [
|
_missionCategoryDescriptors params [
|
||||||
"_difficulty",
|
"_difficulty",
|
||||||
"_noMissions", // Max no missions of this category
|
"_noMissions", // Max no missions of this category
|
||||||
@ -22,87 +18,30 @@ params["_missionCategoryDescriptors","_missionParameters"];
|
|||||||
"_missionsData" //
|
"_missionsData" //
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
if (blck_debugLevel >= 3) then
|
||||||
{
|
{
|
||||||
diag_log format["fnc_initializeMission: _missionCategoryDescriptors:%1 = %2",_x,_missionCategoryDescriptors select _forEachIndex];
|
{
|
||||||
} forEach [
|
diag_log format["_initializeMission: _missionCategoryDescriptors %1 = %2",_forEachIndex, _missionCategoryDescriptors];
|
||||||
"_difficulty",
|
} forEach [
|
||||||
"_noMissions", // Max no missions of this category
|
"_difficulty",
|
||||||
"_noActive", // Number active
|
"_noMissions", // Max no missions of this category
|
||||||
"_tMin", // Used to calculate waittime in the future
|
"_noActive", // Number active
|
||||||
"_tMax", // as above
|
"_tMin", // Used to calculate waittime in the future
|
||||||
"_waitTime", // time at which a mission should be spawned
|
"_tMax", // as above
|
||||||
"_missionsData" //
|
"_waitTime", // time at which a mission should be spawned
|
||||||
];
|
"_missionsData" //
|
||||||
*/
|
];
|
||||||
|
};
|
||||||
if (_noActive > _noMissions) exitWith {if (blck_debugOn) then {}};
|
if (_noActive > _noMissions) exitWith {if (blck_debugOn) then {}};
|
||||||
|
|
||||||
_missionParameters params[
|
_missionParameters params[
|
||||||
"_defaultMissionLocations", // 1
|
"_markerName",
|
||||||
"_crateLoot", // 2
|
"_markerMissionName",
|
||||||
"_lootCounts", // 3
|
"_endMsg",
|
||||||
"_startMsg", // 4
|
"_startMsg",
|
||||||
"_endMsg", // 5
|
"_defaultMissionLocations",
|
||||||
"_markerMissionName", // 6 "Scouts";
|
"_crateLoot",
|
||||||
"_markerType", // 7 "mil_triangle"
|
"_lootCounts",
|
||||||
"_markerColor", // 8 ColorBlue
|
|
||||||
"_markerSize", // 9 [200,200] for ELLIPSE and rectangle markers only
|
|
||||||
"_markerBrush", // 10 "GRID", for ELLIPSE and rectangle markers only
|
|
||||||
"_missionLandscapeMode", // 11
|
|
||||||
"_garrisonedBuildings_BuildingPosnSystem",
|
|
||||||
"_garrisonedBuilding_ATLsystem", // 13
|
|
||||||
"_missionLandscape", // 14
|
|
||||||
"_missionLootBoxes", // 15
|
|
||||||
"_missionLootVehicles", // 16
|
|
||||||
"_missionPatrolVehicles", // 17
|
|
||||||
"_submarinePatrolParameters", // 18
|
|
||||||
"_airPatrols", // 19
|
|
||||||
"_noVehiclePatrols", // 20
|
|
||||||
"_vehicleCrewCount", // 21
|
|
||||||
"_missionEmplacedWeapons", // 22
|
|
||||||
"_noEmplacedWeapons", // 23
|
|
||||||
"_missionLootVehicles", // 24
|
|
||||||
"_useMines", // 25
|
|
||||||
"_minNoAI", // 26
|
|
||||||
"_maxNoAI",
|
|
||||||
"_noAIGroups",
|
|
||||||
"_missionGroups",
|
|
||||||
"_scubaGroupParameters",
|
|
||||||
"_hostageConfig",
|
|
||||||
"_enemyLeaderConfig",
|
|
||||||
"_uniforms",
|
|
||||||
"_headgear",
|
|
||||||
"_vests",
|
|
||||||
"_backpacks",
|
|
||||||
"_weaponList",
|
|
||||||
"_sideArms",
|
|
||||||
"_chanceHeliPatrol",
|
|
||||||
"_noChoppers",
|
|
||||||
"_missionHelis",
|
|
||||||
"_chancePara",
|
|
||||||
"_noPara",
|
|
||||||
"_paraTriggerDistance",
|
|
||||||
"_paraSkill",
|
|
||||||
"_chanceLoot",
|
|
||||||
"_paraLoot",
|
|
||||||
"_paraLootCounts",
|
|
||||||
"_spawnCratesTiming",
|
|
||||||
"_loadCratesTiming",
|
|
||||||
"_endCondition",
|
|
||||||
"_isScubaMission"
|
|
||||||
];
|
|
||||||
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["fnc_initializeMission: _missionParameters:%1 = %2",_x,_missionParameters select _forEachIndex];
|
|
||||||
} forEach [
|
|
||||||
"_defaultMissionLocations", // 1
|
|
||||||
"_crateLoot", // 2
|
|
||||||
"_lootCounts", // 3
|
|
||||||
"_startMsg", // 2
|
|
||||||
"_endMsg", // 3
|
|
||||||
"_markerMissionName",
|
|
||||||
"_markerType",
|
"_markerType",
|
||||||
"_markerColor",
|
"_markerColor",
|
||||||
"_markerSize",
|
"_markerSize",
|
||||||
@ -120,7 +59,6 @@ _missionParameters params[
|
|||||||
"_vehicleCrewCount",
|
"_vehicleCrewCount",
|
||||||
"_missionEmplacedWeapons",
|
"_missionEmplacedWeapons",
|
||||||
"_noEmplacedWeapons",
|
"_noEmplacedWeapons",
|
||||||
"_missionLootVehicles",
|
|
||||||
"_useMines",
|
"_useMines",
|
||||||
"_minNoAI",
|
"_minNoAI",
|
||||||
"_maxNoAI",
|
"_maxNoAI",
|
||||||
@ -129,6 +67,7 @@ _missionParameters params[
|
|||||||
"_scubaGroupParameters",
|
"_scubaGroupParameters",
|
||||||
"_hostageConfig",
|
"_hostageConfig",
|
||||||
"_enemyLeaderConfig",
|
"_enemyLeaderConfig",
|
||||||
|
"_assetKilledMsg",
|
||||||
"_uniforms",
|
"_uniforms",
|
||||||
"_headgear",
|
"_headgear",
|
||||||
"_vests",
|
"_vests",
|
||||||
@ -150,8 +89,7 @@ _missionParameters params[
|
|||||||
"_endCondition",
|
"_endCondition",
|
||||||
"_isScubaMission"
|
"_isScubaMission"
|
||||||
];
|
];
|
||||||
*/
|
|
||||||
//diag_log format["_fnc_initializeMission: _isScubaMission = %1",_isScubaMission];
|
|
||||||
_coordsArray = [];
|
_coordsArray = [];
|
||||||
if !(_defaultMissionLocations isEqualTo []) then
|
if !(_defaultMissionLocations isEqualTo []) then
|
||||||
{
|
{
|
||||||
@ -165,46 +103,51 @@ if !(_defaultMissionLocations isEqualTo []) then
|
|||||||
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
//diag_log format["_fnc_initializeMission: _coords = %1",_coords];
|
|
||||||
//uiSleep 1;
|
|
||||||
if (_coords isEqualTo []) exitWith
|
if (_coords isEqualTo []) exitWith
|
||||||
{
|
{
|
||||||
//diag_log format['_fnc_initializeMission: no safe location found, defering initialization'];
|
|
||||||
false;
|
false;
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_initializeMission(160): _defaultMissionLocations = %3 | _markerMissionName = %1 | _coords = %2",_markerMissionName,_coords,_defaultMissionLocations];
|
|
||||||
blck_ActiveMissionCoords pushback _coords;
|
blck_ActiveMissionCoords pushback _coords;
|
||||||
blck_missionsRunning = blck_missionsRunning + 1;
|
blck_missionsRunning = blck_missionsRunning + 1;
|
||||||
|
|
||||||
blck_missionsRun = blck_missionsRun + 1;
|
|
||||||
//diag_log format["_initializeMission (164): Total Dyanamic Land and UMS Run = %1 | total Dynamic and UMS Missions Running = %2", blck_missionsRun,blck_missionsRunning];
|
|
||||||
|
|
||||||
private _markers = [];
|
private _markers = [];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Handle map markers
|
Handle map markers
|
||||||
*/
|
*/
|
||||||
private _markerName = format["%1:%2",_markerMissionName,blck_missionsRun];
|
private _markerName = format["%1:%2",_markerMissionName,blck_missionsRun];
|
||||||
//diag_log format["_initializeMission: _markerName = %1",_markerName];
|
|
||||||
private "_missionMarkerPosition";
|
private "_markerPos";
|
||||||
if (blck_labelMapMarkers select 0) then
|
if (blck_labelMapMarkers select 0) then
|
||||||
{
|
{
|
||||||
_missionMarkerPosition = _coords;
|
_markerPos = _coords;
|
||||||
};
|
};
|
||||||
if !(blck_preciseMapMarkers) then
|
if !(blck_preciseMapMarkers) then
|
||||||
{
|
{
|
||||||
_missionMarkerPosition = [_coords,75] call blck_fnc_randomPosition;
|
_markerPos = [_coords,75] call blck_fnc_randomPosition;
|
||||||
};
|
};
|
||||||
|
private _markerData = [_markerType,_markerColor,_markerSize,_markerBrush];
|
||||||
|
|
||||||
private _markers = [_markerName,_coords,_markerMissionName,_markerColor,_markerType,_markerSize,_markerBrush] call blck_fnc_createMarker;
|
if (blck_debugLevel >= 3) then
|
||||||
_markers params["_mainMarker",["_labelMarker",""]];
|
{
|
||||||
|
{
|
||||||
|
diag_log format["_initializeMission: %1 = %2",_x,_markerData select _forEachIndex];
|
||||||
|
} forEach [
|
||||||
|
"_markerType",
|
||||||
|
"_markerColor",
|
||||||
|
"_markerSize",
|
||||||
|
"_markerBrush"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
private _markers = [_markerName,_markerPos,_markerMissionName,_markerColor,_markerType,_markerSize,_markerBrush] call blck_fnc_createMissionMarkers;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Send a message to players.
|
Send a message to players.
|
||||||
*/
|
*/
|
||||||
[["start",_startMsg,_markerMissionName]] call blck_fnc_messageplayers;
|
[["start",_startMsg,_markerMissionName]] call blck_fnc_messageplayers;
|
||||||
|
|
||||||
private _missionTimeoutAt = diag_tickTime + blck_MissionTimeout;
|
private _missionTimeoutAt = diag_tickTime + blck_MissionTimeout;
|
||||||
private _triggered = 0;
|
private _triggered = 0;
|
||||||
private _spawnPara = if (random(1) < _chancePara) then {true} else {false};
|
private _spawnPara = if (random(1) < _chancePara) then {true} else {false};
|
||||||
@ -216,7 +159,9 @@ private _blck_AllMissionAI = [];
|
|||||||
private _AI_Vehicles = [];
|
private _AI_Vehicles = [];
|
||||||
private _assetSpawned = objNull;
|
private _assetSpawned = objNull;
|
||||||
|
|
||||||
private _missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_mainMarker,_labelMarker];
|
private _missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers];
|
||||||
blck_activeMissionsList pushBack [_missionCategoryDescriptors,_missionTimeoutAt,_triggered,_spawnPara,_missionData,_missionParameters];
|
blck_activeMissionsList pushBack [_missionCategoryDescriptors,_missionTimeoutAt,_triggered,_spawnPara,_missionData,_missionParameters];
|
||||||
|
|
||||||
|
[format["Initialized Mission %1 | description %2 | difficulty %3 at %4",_markerName, _markerMissionName, _difficulty, diag_tickTime]] call blck_fnc_log;
|
||||||
|
|
||||||
true
|
true
|
@ -11,7 +11,6 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
private _crate = _this select 0;
|
private _crate = _this select 0;
|
||||||
[_crate,(_crate getVariable "lootArray"),(_crate getVariable "lootCounts")] call blck_fnc_fillBoxes;
|
[_crate,(_crate getVariable "lootArray"),(_crate getVariable "lootCounts")] call blck_fnc_fillBoxes;
|
||||||
[_crate, _crate getVariable "difficulty"] call blck_fnc_addMoneyToObject;
|
|
||||||
_crate setVariable["lootLoaded",true];
|
_crate setVariable["lootLoaded",true];
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,20 +17,16 @@ private ["_abort","_crates","_aiGroup","_objects","_groupPatrolRadius","_mission
|
|||||||
"_AI_Vehicles","_timeOut","_aiDifficultyLevel","_missionPatrolVehicles","_missionGroups","_loadCratesTiming","_spawnCratesTiming","_assetSpawned","_hostageConfig",
|
"_AI_Vehicles","_timeOut","_aiDifficultyLevel","_missionPatrolVehicles","_missionGroups","_loadCratesTiming","_spawnCratesTiming","_assetSpawned","_hostageConfig",
|
||||||
"_chanceHeliPatrol","_noPara","_chanceLoot","_heliCrew","_loadCratesTiming","_useMines","_blck_AllMissionAI","_delayTime","_groupPatrolRadius",
|
"_chanceHeliPatrol","_noPara","_chanceLoot","_heliCrew","_loadCratesTiming","_useMines","_blck_AllMissionAI","_delayTime","_groupPatrolRadius",
|
||||||
"_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"];
|
"_defaultMissionLocations","_garrisonedbuildings_buildingposnsystem","_garrisonedBuilding_ATLsystem", "_isScubaMission","_markerlabel","_missionLootBoxes","_airpatrols"];
|
||||||
|
|
||||||
params["_coords","_markerName","_aiDifficultyLevel"];
|
params["_markerName",["_aiDifficultyLevel","Red"]];
|
||||||
if (isNil "_markerLabel") then {_markerLabel = _markerMissionName};
|
if (isNil "_markerLabel") then {_markerLabel = _markerMissionName};
|
||||||
[_markerName, "active",_coords] call blck_fnc_updateMissionQue;
|
|
||||||
|
|
||||||
diag_log format["[blckeagls] missionSpawner (17):: Initializing mission: _cords %1 : _markerName %2 : _aiDifficultyLevel %3",_coords,_markerName,_aiDifficultyLevel,_markerLabel];
|
|
||||||
|
|
||||||
if (isNil "_assetKilledMsg") then {_assetKilledMsg = ""};
|
if (isNil "_assetKilledMsg") then {_assetKilledMsg = ""};
|
||||||
if (isNil "_markerColor") then {_markerColor = "ColorBlack"};
|
if (isNil "_markerColor") then {_markerColor = "ColorBlack"};
|
||||||
if (isNil "_markerType") then {_markerType = ["mil_box",[]]};
|
if (isNil "_markerType") then {_markerType = ["mil_box",[]]};
|
||||||
if (isNil "_markerSize") then {_markerSize = []};
|
if (isNil "_markerSize") then {_markerSize = []};
|
||||||
if (isNil "_endCondition") then {_endCondition = blck_missionEndCondition}; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear"};
|
if (isNil "_endCondition") then {_endCondition = blck_missionEndCondition}; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear"};
|
||||||
if (isNil "_spawnCratesTiming") then {_spawnCratesTiming = blck_spawnCratesTiming}; // Choices: "atMissionSpawnGround","atMissionStartAir","atMissionEndGround","atMissionEndAir".
|
if (isNil "_spawnCratesTiming") then {_spawnCratesTiming = blck_spawnCratesTiming}; // Choices: "atMissionSpawnGround","atMissionSpawnAir","atMissionEndGround","atMissionEndAir".
|
||||||
if (isNil "_loadCratesTiming") then {_loadCratesTiming = blck_loadCratesTiming}; // valid choices are "atMissionCompletion" and "atMissionSpawn";
|
if (isNil "_loadCratesTiming") then {_loadCratesTiming = blck_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 = []};
|
||||||
@ -59,7 +55,6 @@ if (isNil "_garrisonedBuildings_BuildingPosnSystem") then {_garrisonedBuildings_
|
|||||||
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 "_submarinePatrolParameters") then {_submarinePatrolParameters = []};
|
if (isNil "_submarinePatrolParameters") then {_submarinePatrolParameters = []};
|
||||||
|
|
||||||
if (isNil "_scubagroupparameters") then {_scubagroupparameters = []};
|
if (isNil "_scubagroupparameters") then {_scubagroupparameters = []};
|
||||||
if (isNil "_markerMissionName") then {
|
if (isNil "_markerMissionName") then {
|
||||||
diag_log format["_fnc_missionSpawner: _markerMissionName not defined, using default value"];
|
diag_log format["_fnc_missionSpawner: _markerMissionName not defined, using default value"];
|
||||||
@ -68,516 +63,87 @@ if (isNil "_markerMissionName") then {
|
|||||||
if (isNil "_noLootCrates") then {_noLootCrates = 1};
|
if (isNil "_noLootCrates") then {_noLootCrates = 1};
|
||||||
if (isNil "_lootCrates") then {_lootCrates = blck_crateTypes};
|
if (isNil "_lootCrates") then {_lootCrates = blck_crateTypes};
|
||||||
if (isNil "_lootCratePositions") then {_lootCratePositions = []};
|
if (isNil "_lootCratePositions") then {_lootCratePositions = []};
|
||||||
|
|
||||||
if (isNil "_isScubaMission") then {_isScubaMission = false};
|
if (isNil "_isScubaMission") then {_isScubaMission = false};
|
||||||
if (isNil "_missionLootBoxes") then {_missionLootBoxes = []};
|
if (isNil "_missionLootBoxes") then {_missionLootBoxes = []};
|
||||||
private "_temp";
|
|
||||||
|
|
||||||
// If the mission is to be spawned at pre-defined coordinates then select one from the array that defines them
|
|
||||||
// otherwise use the _coords that were passed to the script in _this
|
|
||||||
if (isNil "_defaultMissionLocations") then {_defaultMissionLocations = []};
|
if (isNil "_defaultMissionLocations") then {_defaultMissionLocations = []};
|
||||||
if !(_defaultMissionLocations isEqualTo []) then
|
if !(_defaultMissionLocations isEqualTo []) then
|
||||||
{
|
{
|
||||||
_coords = selectRandom _defaultMissionLocations;
|
_coords = selectRandom _defaultMissionLocations;
|
||||||
};
|
};
|
||||||
|
_markerType params["_markerType",["_markersize",[250,250]],["_markerBrush","GRID"]];
|
||||||
|
private _paraSkill = _aiDifficultyLevel;
|
||||||
|
|
||||||
blck_ActiveMissionCoords pushback _coords;
|
|
||||||
blck_missionsRunning = blck_missionsRunning + 1;
|
|
||||||
//diag_log format["_fnc_missionSpawner: count blck_ActiveMissionCoords = %1 | blck_ActiveMissionCoords = %2",count blck_ActiveMissionCoords,blck_ActiveMissionCoords];
|
|
||||||
|
|
||||||
_objects = [];
|
if !(_spawnCratesTiming in blck_validLootSpawnTimings) then
|
||||||
_mines = [];
|
|
||||||
_crates = [];
|
|
||||||
_aiGroup = [];
|
|
||||||
_missionAIVehicles = [];
|
|
||||||
_blck_AllMissionAI = [];
|
|
||||||
_AI_Vehicles = [];
|
|
||||||
|
|
||||||
#define delayTime 1
|
|
||||||
#define useRelativePos true
|
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
diag_log "_missionSpawner: All variables initialized";
|
|
||||||
#endif
|
|
||||||
private _markerPos = _coords;
|
|
||||||
|
|
||||||
if !(blck_preciseMapMarkers) then
|
|
||||||
{
|
{
|
||||||
private _markerPos = [_coords,75] call blck_fnc_randomPosition;
|
[format['Invalid crate spawn timing %1 found in mission %2 :: default value "atMissionSpawnGround" used',_spawnCratesTiming,_markerMissionName],"<WARNING>"] call blck_fnc_log;
|
||||||
//diag_log format["_fnc_missionSpawner (110): _markerPos = %1",_markerPos];
|
_spawnCratesTiming = "atMissionSpawnGround";
|
||||||
} ;
|
};
|
||||||
|
if !(_loadCratesTiming in blck_validLootLoadTimings) then
|
||||||
[["start",_startMsg,_markerMissionName]] call blck_fnc_messageplayers;
|
|
||||||
|
|
||||||
|
|
||||||
_markerType params["_type",["_size",[250,250]],["_brush","GRID"]];
|
|
||||||
_markers = [_markerName,_markerPos,_markerMissionName,_markerColor,_type,_size,_brush] call blck_fnc_createMissionMarkers;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 0) then {diag_log "missionSpawner:: (145) message players and spawn a mission marker";};
|
|
||||||
if (blck_debugLevel > 0) then {diag_log format["missionSpawner:: (146) _markers = %1",_markers];};
|
|
||||||
if (blck_debugLevel > 0) then {diag_log "missionSpawner:: (147) waiting for player to trigger the mission";};
|
|
||||||
#endif
|
|
||||||
////////
|
|
||||||
// All parameters are defined, lets wait until a player is nearby or the mission has timed out
|
|
||||||
////////
|
|
||||||
|
|
||||||
_missionStartTime = diag_tickTime;
|
|
||||||
_playerInRange = false;
|
|
||||||
_missionTimedOut = false;
|
|
||||||
_wait = true;
|
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 0) then {
|
|
||||||
diag_log "missionSpawner:: (90) starting mission trigger loop"};
|
|
||||||
diag_log format["missionSpawner (163) blck_MissionTimeout = %1", blck_MissionTimeout];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while {_wait} do
|
|
||||||
{
|
{
|
||||||
//#ifdef blck_debugMode
|
[format['Invalid crate loading timing %1 found in mission %2 :: default "atMissionSpawn" value used',_loadCratesTiming,_markerMissionName],"<WARNING>"] call blck_fnc_log;
|
||||||
if (blck_debugLevel > 2) exitWith {_playerInRange = true;diag_log "_fnc_missionSpawner (168): player trigger loop triggered by scripting";};
|
_loadCratesTiming = "atMissionSpawn";
|
||||||
//#endif
|
};
|
||||||
|
if !(_endCondition in blck_validEndStates) then
|
||||||
if ([_coords, blck_TriggerDistance, false] call blck_fnc_playerInRange) exitWith {_playerInRange = true;};
|
{
|
||||||
if ([_missionStartTime,blck_MissionTimeout] call blck_fnc_timedOut) exitWith {_missionTimedOut = true;};
|
[format['Invalid mission end condition %1 found in mission %2 :: default value "allKilledOrPlayerNear"; used',_endCondition,_markerMissionName],"<WARNING>"] call blck_fnc_log;
|
||||||
uiSleep 5;
|
_endCondition = "allKilledOrPlayerNear";
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 3) then
|
|
||||||
{
|
|
||||||
diag_log format["missionSpawner:: Trigger Loop - blck_debugLevel = %1 and _coords = %2",blck_debugLevel, _coords];
|
|
||||||
diag_log format["missionSpawner:: Trigger Loop - players in range = %1",{isPlayer _x && _x distance2D _coords < blck_TriggerDistance} count allPlayers];
|
|
||||||
diag_log format["missionSpawner:: Trigger Loop - blck_MissionTimeout = %4 | _missionStartTime = %1 | time = %2 | timeout = %3",_missionStartTime, diag_tickTime, [_missionStartTime,blck_MissionTimeout] call blck_fnc_timedOut,blck_MissionTimeout];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_missionTimedOut) exitWith
|
private _table = [
|
||||||
{
|
_markerName,
|
||||||
|
_markerMissionName, // Name used for setMarkerText and also for the root name for all markers
|
||||||
|
_endMsg,
|
||||||
diag_log format["_fnc_missionSpawner (187): mission timed out: _markerName %1 | _markerLabel %2 | time %3",_markerName,_markerLabel,diag_tickTime];
|
_startMsg,
|
||||||
|
_defaultMissionLocations,
|
||||||
[_coords,_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_markers,_markerPos,_markerName,_markerMissionName, 1] call blck_fnc_endMission;
|
_crateLoot,
|
||||||
};
|
_lootCounts,
|
||||||
|
_markerType,
|
||||||
////////////////////////////////////////////////
|
_markerColor,
|
||||||
// Spawn the mission objects, loot chest, and AI
|
_markerSize,
|
||||||
///////////////////////////////////////////////
|
_markerBrush,
|
||||||
#ifdef blck_debugMode
|
_missionLandscapeMode,
|
||||||
if (blck_debugLevel > 0) then
|
_garrisonedBuildings_BuildingPosnSystem,
|
||||||
{
|
_garrisonedBuilding_ATLsystem,
|
||||||
diag_log format["[blckeagls] missionSpawner:: (200) -- >> Mission tripped: _cords %1 : _markerName %2 : _aiDifficultyLevel %3 _markerLabel %4",_coords,_markerName,_aiDifficultyLevel,_markerMissionName];
|
_missionLandscape,
|
||||||
};
|
_missionLootBoxes,
|
||||||
#endif
|
_missionLootVehicles,
|
||||||
|
_missionPatrolVehicles,
|
||||||
if (blck_SmokeAtMissions select 0) then // spawn a fire and smoke near the crate
|
_submarinePatrolParameters,
|
||||||
{
|
_airPatrols,
|
||||||
_temp = [_coords,blck_SmokeAtMissions select 1] call blck_fnc_smokeAtCrates;
|
_noVehiclePatrols,
|
||||||
if (typeName _temp isEqualTo "ARRAY") then
|
_vehicleCrewCount,
|
||||||
{
|
_missionEmplacedWeapons,
|
||||||
_objects append _temp;
|
_noEmplacedWeapons,
|
||||||
};
|
_useMines,
|
||||||
};
|
_minNoAI,
|
||||||
|
_maxNoAI,
|
||||||
uiSleep delayTime;
|
_noAIGroups,
|
||||||
if (_useMines) then
|
_missionGroups,
|
||||||
{
|
_scubaGroupParameters,
|
||||||
_mines = [_coords] call blck_fnc_spawnMines;
|
_hostageConfig,
|
||||||
|
_enemyLeaderConfig,
|
||||||
};
|
_assetKilledMsg,
|
||||||
uiSleep delayTime;
|
_uniforms,
|
||||||
_temp = [];
|
_headgear,
|
||||||
|
_vests,
|
||||||
if (_missionLandscapeMode isEqualTo "random") then
|
_backpacks,
|
||||||
{
|
_weaponList,
|
||||||
_temp = [_coords,_missionLandscape, 3, 15, 2] call blck_fnc_spawnRandomLandscape;
|
_sideArms,
|
||||||
} else {
|
_chanceHeliPatrol,
|
||||||
|
_noChoppers,
|
||||||
_temp = [_coords, _missionLandscape] call blck_fnc_spawnCompositionObjects;
|
_missionHelis,
|
||||||
};
|
_chancePara,
|
||||||
if (typeName _temp isEqualTo "ARRAY") then
|
_noPara,
|
||||||
{
|
_paraTriggerDistance,
|
||||||
_objects append _temp;
|
_paraSkill,
|
||||||
};
|
_chanceLoot,
|
||||||
|
_paraLoot,
|
||||||
#ifdef blck_debugMode
|
_paraLootCounts,
|
||||||
if (blck_debugLevel > 0) then
|
_spawnCratesTiming,
|
||||||
{
|
_loadCratesTiming,
|
||||||
diag_log format["[blckeagls] missionSpawner:: (219) Landscape spawned: _cords %1 : _markerName %2 : _aiDifficultyLevel %3 _markerLabel %4",_coords,_markerName,_aiDifficultyLevel,_markerLabel];
|
_endCondition,
|
||||||
};
|
_isScubaMission
|
||||||
#endif
|
];
|
||||||
|
|
||||||
uiSleep delayTime;
|
_table
|
||||||
|
|
||||||
_abort = false;
|
|
||||||
_temp = [];
|
|
||||||
|
|
||||||
_temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_missionGroups,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionAI;
|
|
||||||
|
|
||||||
_abort = _temp select 1;
|
|
||||||
|
|
||||||
if !(_abort) then
|
|
||||||
{
|
|
||||||
_blck_AllMissionAI append (_temp select 0);
|
|
||||||
};
|
|
||||||
//diag_log format["[blckeagls] missionSpawner:: (236) missionAI spawned: _markerName %1 : _markerLabel %2 : count _blck_AllMissionAI = %3",_markerName,_markerLabel, count _blck_AllMissionAI];
|
|
||||||
if !(_scubaGroupParameters isEqualTo []) then
|
|
||||||
{
|
|
||||||
#define isScubaMission true
|
|
||||||
private _temp = [_coords, _minNoAI,_maxNoAI,count _scubaGroupParameters,_scubaGroupParameters,_aiDifficultyLevel,blck_UMS_uniforms,blck_UMS_headgear,blck_UMS_vests,[],blck_UMS_weapons,[],_isScubaMission] call blck_fnc_spawnMissionAI;
|
|
||||||
|
|
||||||
uiSleep 2;
|
|
||||||
_abort = _temp select 1;
|
|
||||||
|
|
||||||
if !(_abort) then
|
|
||||||
{
|
|
||||||
_blck_AllMissionAI append (_temp select 0);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_assetSpawned = objNull;
|
|
||||||
if !(_hostageConfig isEqualTo []) then
|
|
||||||
{
|
|
||||||
_temp = [_coords,_hostageConfig] call blck_fnc_spawnHostage;
|
|
||||||
_assetSpawned = _temp select 0;
|
|
||||||
_objects pushBack (_temp select 1);
|
|
||||||
_blck_AllMissionAI pushBack _assetSpawned;
|
|
||||||
};
|
|
||||||
|
|
||||||
if !(_enemyLeaderConfig isEqualTo []) then
|
|
||||||
{
|
|
||||||
_temp = [_coords,_enemyLeaderConfig] call blck_fnc_spawnLeader;
|
|
||||||
_assetSpawned = _temp select 0;
|
|
||||||
_objects pushBack (_temp select 1);
|
|
||||||
_blck_AllMissionAI pushBack _assetSpawned;
|
|
||||||
};
|
|
||||||
|
|
||||||
uiSleep delayTime;
|
|
||||||
_temp = [[],[],false];
|
|
||||||
_abort = false;
|
|
||||||
|
|
||||||
// Deal with helicopter patrols
|
|
||||||
_temp = [];
|
|
||||||
_noChoppers = [_noChoppers] call blck_fnc_getNumberFromRange;
|
|
||||||
if (_noChoppers > 0) then
|
|
||||||
{
|
|
||||||
for "_i" from 1 to (_noChoppers) do
|
|
||||||
{
|
|
||||||
if (random(1) < _chanceHeliPatrol) then
|
|
||||||
{
|
|
||||||
_temp = [_coords,_aiDifficultyLevel,_missionHelis,_uniforms,_headGear,_vests,_backpacks,_weaponList, _sideArms,"none"] call blck_fnc_spawnMissionHeli;
|
|
||||||
|
|
||||||
if (typeName _temp isEqualTo "ARRAY") then
|
|
||||||
{
|
|
||||||
_abort = _temp select 2;
|
|
||||||
if !(_abort) then
|
|
||||||
{
|
|
||||||
blck_monitoredVehicles pushBack (_temp select 0);
|
|
||||||
_blck_AllMissionAI append (_temp select 1);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uisleep 3;
|
|
||||||
if !(_garrisonedBuilding_ATLsystem isEqualTo []) then
|
|
||||||
{
|
|
||||||
_temp = [_coords, _garrisonedBuilding_ATLsystem, _aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_ATLsystem;
|
|
||||||
_objects append (_temp select 1);
|
|
||||||
blck_monitoredVehicles append (_temp select 2);
|
|
||||||
_blck_AllMissionAI append (units (_temp select 0));
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uiSleep 3;
|
|
||||||
if !(_garrisonedBuildings_BuildingPosnSystem isEqualTo []) then
|
|
||||||
{
|
|
||||||
_temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_RelPosSystem;
|
|
||||||
_objects append (_temp select 1);
|
|
||||||
blck_monitoredVehicles append (_temp select 2);
|
|
||||||
_blck_AllMissionAI append (units (_temp select 0));
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uiSleep 15;
|
|
||||||
private["_noEmplacedToSpawn"];
|
|
||||||
_noEmplacedToSpawn = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange;
|
|
||||||
if (blck_useStatic && (_noEmplacedToSpawn > 0)) then
|
|
||||||
{
|
|
||||||
_temp = [_coords,_missionEmplacedWeapons,useRelativePos,_noEmplacedToSpawn,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnEmplacedWeaponArray;
|
|
||||||
_temp params ["_emplacedObjects","_units","_abort"];
|
|
||||||
_objects append _emplacedObjects;
|
|
||||||
_blck_AllMissionAI append _units;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_vehToSpawn = [_noVehiclePatrols] call blck_fnc_getNumberFromRange;
|
|
||||||
if (blck_useVehiclePatrols && ((_vehToSpawn > 0) || !(_missionPatrolVehicles isEqualTo []) )) then
|
|
||||||
{
|
|
||||||
_temp = [_coords,_vehToSpawn,_aiDifficultyLevel,_missionPatrolVehicles,useRelativePos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols;
|
|
||||||
|
|
||||||
_temp params ["_patrolVehicles","_units","_abort"];
|
|
||||||
_blck_AllMissionAI append _units;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Spawn any submarine patrols
|
|
||||||
if (blck_useVehiclePatrols && !(_submarinePatrolParameters isEqualTo []) ) then
|
|
||||||
{
|
|
||||||
|
|
||||||
_temp = [_coords,_vehToSpawn,_aiDifficultyLevel,_submarinePatrolParameters,true,_umsUniforms,_umsHeadgear,_umsVests,[],_umsWeapons,[],isScubaMission] call blck_fnc_spawnMissionVehiclePatrols;
|
|
||||||
_missionAIVehicles append (_temp select 0);
|
|
||||||
_blck_AllMissionAI append (_temp select 1);
|
|
||||||
};
|
|
||||||
|
|
||||||
uiSleep delayTime;
|
|
||||||
|
|
||||||
|
|
||||||
if (_spawnCratesTiming isEqualTo "atMissionSpawnGround") then
|
|
||||||
{
|
|
||||||
if !(_missionLootBoxes isEqualTo []) then
|
|
||||||
{
|
|
||||||
_crates = [_coords,_missionLootBoxes,_loadCratesTiming, _spawnCratesTiming, "start", _aiDifficultyLevel] call blck_fnc_spawnMissionCrates;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_crates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_crateLoot,_lootCounts]], _loadCratesTiming, _spawnCratesTiming, "start", _aiDifficultyLevel] call blck_fnc_spawnMissionCrates;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (blck_cleanUpLootChests) then
|
|
||||||
{
|
|
||||||
_objects append _crates;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
uiSleep delayTime;;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if !(_missionLootVehicles isEqualTo []) then
|
|
||||||
{
|
|
||||||
_temp = [_coords,_missionLootVehicles,_loadCratesTiming,0] call blck_fnc_spawnMissionLootVehicles;
|
|
||||||
_crates append _temp;
|
|
||||||
};
|
|
||||||
if (_noPara > 0 && (random(1) < _chancePara) && _paraTriggerDistance == 0) then
|
|
||||||
{
|
|
||||||
|
|
||||||
private _paratroops = [_coords,_noPara,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnParaUnits;
|
|
||||||
if !(isNull _paratroops) then
|
|
||||||
{
|
|
||||||
_blck_AllMissionAI append (units _paratroops);
|
|
||||||
};
|
|
||||||
if (random(1) < _chanceLoot) then
|
|
||||||
{
|
|
||||||
|
|
||||||
private _extraCrates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_paraLoot,_paraLootCounts]], "atMissionSpawn","atMissionStartAir", "start", _aiDifficultyLevel] call blck_fnc_spawnMissionCrates;
|
|
||||||
if (blck_cleanUpLootChests) then
|
|
||||||
{
|
|
||||||
_objects append _extraCrates;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private["_missionComplete","_endIfPlayerNear","_endIfAIKilled","_secureAsset","_crateStolen","_locations"];
|
|
||||||
_missionComplete = -1;
|
|
||||||
_startTime = diag_tickTime;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
switch (_endCondition) do
|
|
||||||
{
|
|
||||||
case "playerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = false;};
|
|
||||||
case "allUnitsKilled": {_secureAsset = false; _endIfPlayerNear = false;_endIfAIKilled = true;};
|
|
||||||
case "allKilledOrPlayerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = true;};
|
|
||||||
case "assetSecured": {_secureAsset = true; _endIfPlayerNear = false; _endIfAIKilled = false;};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (blck_showCountAliveAI) then
|
|
||||||
{
|
|
||||||
|
|
||||||
blck_missionLabelMarkers pushBack [_markers select 1,_markerMissionName,_blck_AllMissionAI];
|
|
||||||
};
|
|
||||||
|
|
||||||
_crateStolen = false;
|
|
||||||
_locations = [_coords];
|
|
||||||
private _spawnPara = if (random(1) < _chancePara) then {true} else {false};
|
|
||||||
{
|
|
||||||
_locations pushback (getPos _x);
|
|
||||||
_x setVariable["crateSpawnPos", (getPos _x)];
|
|
||||||
} forEach _crates;
|
|
||||||
|
|
||||||
private["_minNoAliveForCompletion","_result","_minPercentageKilled"];
|
|
||||||
_minNoAliveForCompletion = (count _blck_AllMissionAI) - (round(blck_killPercentage * (count _blck_AllMissionAI)));
|
|
||||||
if (_secureAsset) then {_minNoAliveForCompletion = _minNoAliveForCompletion + 1};
|
|
||||||
|
|
||||||
while {_missionComplete isEqualTo -1} do
|
|
||||||
{
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 3) exitWith {uiSleep blck_triggerLoopCompleteTime;diag_log "_missionSpawner (492) scripted Mission End blck_debugLevel = 3";};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (_endIfPlayerNear) then
|
|
||||||
{
|
|
||||||
if ([_locations,20,true] call blck_fnc_playerInRangeArray) then {_missionComplete = 1};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_endIfAIKilled) then
|
|
||||||
{
|
|
||||||
if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then {_missionComplete = 1};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_spawnCratesTiming isEqualTo "atMissionSpawnGround") then
|
|
||||||
{
|
|
||||||
{
|
|
||||||
private _d = _x distance (_x getVariable ["crateSpawnPos",_coords]);
|
|
||||||
|
|
||||||
if (_d > 25) exitWith
|
|
||||||
{
|
|
||||||
_missionComplete = 1;
|
|
||||||
_crateStolen = true;
|
|
||||||
};
|
|
||||||
}forEach _crates;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_secureAsset) then
|
|
||||||
{
|
|
||||||
if !(alive _assetSpawned) then
|
|
||||||
{
|
|
||||||
_missionComplete = 1;
|
|
||||||
[_assetSpawned] remoteExec["GMS_fnc_clearAllActions",-2, true];
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then
|
|
||||||
{
|
|
||||||
if ((_assetSpawned getVariable["blck_unguarded",0]) isEqualTo 0) then
|
|
||||||
{
|
|
||||||
_assetSpawned setVariable["blck_unguarded",1,true];
|
|
||||||
};
|
|
||||||
|
|
||||||
if ((_assetSpawned getVariable["blck_AIState",0]) isEqualTo 1) then
|
|
||||||
{
|
|
||||||
_missionComplete = 1;
|
|
||||||
_assetSpawned allowdamage false;
|
|
||||||
[_assetSpawned] remoteExec["GMS_fnc_clearAllActions",-2, true];
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
if (_spawnPara) then
|
|
||||||
{
|
|
||||||
if ([_coords,_paraTriggerDistance,true] call blck_fnc_playerInRange) then
|
|
||||||
{
|
|
||||||
_spawnPara = false; // The player gets one try to spawn these.
|
|
||||||
if (random(1) < _chancePara) then //
|
|
||||||
{
|
|
||||||
private _paratroops = [_coords,_noPara,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnParaUnits;
|
|
||||||
if !(isNull _paratroops) then
|
|
||||||
{
|
|
||||||
_blck_AllMissionAI append (units _paratroops);
|
|
||||||
};
|
|
||||||
if (random(1) < _chanceLoot) then
|
|
||||||
{
|
|
||||||
private _extraCrates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_paraLoot,_paraLootCounts]], "atMissionSpawn","atMissionStartAir", "start", _aiDifficultyLevel] call blck_fnc_spawnMissionCrates;
|
|
||||||
if (blck_cleanUpLootChests) then
|
|
||||||
{
|
|
||||||
_objects append _extraCrates;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
uiSleep 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_crateStolen) exitWith
|
|
||||||
{
|
|
||||||
|
|
||||||
[_coords,_mines,_objects,_crates, _blck_AllMissionAI,"Crate Removed from Mission Site Before Mission Completion: Mission Aborted",_markers,_markerPos,_markerName,_markerLabel, 2] call blck_fnc_endMission;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_spawnCratesTiming in ["atMissionEndGround","atMissionEndAir"]) then
|
|
||||||
{
|
|
||||||
if (!(_secureAsset) || (_secureAsset && (alive _assetSpawned))) then
|
|
||||||
{
|
|
||||||
if !(_missionLootBoxes isEqualTo []) then
|
|
||||||
{
|
|
||||||
_crates = [_coords,_missionLootBoxes,_loadCratesTiming,_spawnCratesTiming, "end", _aiDifficultyLevel] call blck_fnc_spawnMissionCrates;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_crates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_crateLoot,_lootCounts]], _loadCratesTiming,_spawnCratesTiming, "end", _aiDifficultyLevel] call blck_fnc_spawnMissionCrates;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (blck_cleanUpLootChests) then
|
|
||||||
{
|
|
||||||
_objects append _crates;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
if (_spawnCratesTiming isEqualTo "atMissionSpawnGround" && _loadCratesTiming isEqualTo "atMissionCompletion") then
|
|
||||||
{
|
|
||||||
if (!(_secureAsset) || (_secureAsset && (alive _assetSpawned))) then
|
|
||||||
{
|
|
||||||
{
|
|
||||||
[_x] call blck_fnc_loadMissionCrate;
|
|
||||||
} forEach _crates;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
private["_result"];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (_secureAsset && (alive _assetSpawned)) then
|
|
||||||
{
|
|
||||||
if (_assetSpawned getVariable["assetType",0] isEqualTo 1) then
|
|
||||||
{
|
|
||||||
_assetSpawned setVariable["GMSAnimations",[""],true];
|
|
||||||
[_assetSpawned,""] remoteExec["switchMove",-2];;
|
|
||||||
uiSleep 0.1;
|
|
||||||
_assetSpawned enableAI "ALL";
|
|
||||||
private _newPos = (getPos _assetSpawned) getPos [1000, random(360)];
|
|
||||||
(group _assetSpawned) setCurrentWaypoint [group _assetSpawned, 0];
|
|
||||||
[group _assetSpawned,0] setWaypointPosition [_newPos,0];
|
|
||||||
[group _assetSpawned,0] setWaypointType "MOVE";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_assetSpawned getVariable["assetType",0] isEqualTo 2) then
|
|
||||||
{
|
|
||||||
[_assetSpawned,""] remoteExec["switchMove",-2];
|
|
||||||
_assetSpawned setVariable["GMSAnimations",_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]],true];
|
|
||||||
[_assetSpawned,selectRandom(_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]])] remoteExec["switchMove",-2];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
if (_secureAsset && !(alive _assetSpawned)) then
|
|
||||||
{
|
|
||||||
|
|
||||||
[_coords,_mines,_objects,_crates,_blck_AllMissionAI,_assetKilledMsg,_markers,_markerPos,_markerName,_markerLabel, -1] call blck_fnc_endMission;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!(_secureAsset) || (_secureAsset && (alive _assetSpawned))) then
|
|
||||||
{
|
|
||||||
[_coords,_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_markers,_markerPos,_markerName,_markerLabel, 0] call blck_fnc_endMission;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
diag_log format["_fnc_missionSpawner (643) Mission Completed | _cords %1 : _markerName %2 : _aiDifficultyLevel %3 _markerLabel %4",_coords,_markerName,_aiDifficultyLevel,_markerLabel];
|
|
||||||
blck_missionsRun = blck_missionsRun + 1;
|
|
||||||
diag_log format["_fnc_missionSpawner (644): Total Dyanamic Land and UMS Run = %1", blck_missionsRun];
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
GMS_fnc_monitorInitializedMissions
|
GMS_fnc_monitorInitializedMissions
|
||||||
by Ghostrider-GRG-
|
by Ghostrider-GRG-
|
||||||
*/
|
*/
|
||||||
//diag_log format["fnc_monitorInitializedMissions: time = %1 | count blck_activeMissionsList %2 | blck_activeMissionsList %3",diag_tickTime,count blck_activeMissionsList,blck_activeMissionsList];
|
|
||||||
for "_i" from 1 to (count blck_activeMissionsList) do
|
for "_i" from 1 to (count blck_activeMissionsList) do
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -10,8 +10,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
|
|
||||||
// Select a mission category (blue, red, green , etd)
|
// Select a mission category (blue, red, green , etd)
|
||||||
private _el = blck_activeMissionsList deleteAt 0;
|
private _el = blck_activeMissionsList deleteAt 0;
|
||||||
//diag_log format["fnc_monitorInitializedMissions: _el = %1",_el];
|
|
||||||
//blck_activeMissionsList pushBack [_missionCategoryDescriptors,_missionTimeoutAt,_triggered,_spawnPara,_missionData,_missionParameters];
|
|
||||||
_el params [
|
_el params [
|
||||||
"_missionCategoryDescriptors", // 0
|
"_missionCategoryDescriptors", // 0
|
||||||
"_missionTimeoutAt", // 1
|
"_missionTimeoutAt", // 1
|
||||||
@ -20,29 +19,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
"_missionData", // 6
|
"_missionData", // 6
|
||||||
"_missionParameters" // 7
|
"_missionParameters" // 7
|
||||||
];
|
];
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_monitorInitializedMissions: _el:%1 = %2",_x, _el select _forEachIndex];
|
|
||||||
} forEach [
|
|
||||||
"_missionCategoryDescriptors", // 0
|
|
||||||
"_missionTimeoutAt", // 1
|
|
||||||
"_triggered", // 2
|
|
||||||
"_spawnPara", // 3
|
|
||||||
"_missionData", // 6
|
|
||||||
"_missionParameters" // 7
|
|
||||||
];
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
private _missionCategoryDescriptors = [
|
|
||||||
_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 //
|
|
||||||
];
|
|
||||||
*/
|
|
||||||
#define noActive 2
|
#define noActive 2
|
||||||
#define waitTime 5
|
#define waitTime 5
|
||||||
#define missionData 6
|
#define missionData 6
|
||||||
@ -56,84 +33,65 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
"_waitTime", // time at which a mission should be spawned
|
"_waitTime", // time at which a mission should be spawned
|
||||||
"_missionsData" //
|
"_missionsData" //
|
||||||
];
|
];
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["fnc_monitorInitializeMission: _missionCategoryDescriptors:%1 = %2",_x,_missionCategoryDescriptors select _forEachIndex];
|
|
||||||
} forEach [
|
|
||||||
"_difficulty",
|
|
||||||
"_noMissions", // Max no missions of this category
|
|
||||||
"_noActive", // Number active
|
|
||||||
"_tMin", // Used to calculate waittime in the future
|
|
||||||
"_tMax", // as above
|
|
||||||
"_waitTime", // time at which a mission should be spawned
|
|
||||||
"_missionsData" //
|
|
||||||
];
|
|
||||||
*/
|
|
||||||
#define setMissionData _missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_mainMarker,_labelMarker];
|
|
||||||
//private _missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_mainMarker,_labelMarker];
|
|
||||||
// 0 1 2 3 4 5 6 7 8
|
// 0 1 2 3 4 5 6 7 8
|
||||||
_missionData params ["_coords","_mines","_objects","_crates","_blck_AllMissionAI","_assetSpawned","_missionAIVehicles","_mainMarker","_labelMarker"];
|
_missionData params ["_coords","_mines","_objects","_crates","_blck_AllMissionAI","_assetSpawned","_missionAIVehicles","_markers"];
|
||||||
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_monitorInitializedMissions (79): _missionData:%1 = %2",_x, _missionData select _forEachIndex];
|
|
||||||
} forEach ["_coords","_mines","_objects","_crates","_blck_AllMissionAI","_assetSpawned","_missionAIVehicles","_mainMarker","_labelMarker"];
|
|
||||||
*/
|
|
||||||
|
|
||||||
_missionParameters params[
|
_missionParameters params[
|
||||||
"_defaultMissionLocations",
|
"_markerName",
|
||||||
"_crateLoot", // 0
|
"_markerMissionName",
|
||||||
"_lootCounts", // 1
|
"_endMsg",
|
||||||
"_startMsg", // 2
|
"_startMsg",
|
||||||
"_endMsg", // 3
|
"_defaultMissionLocations",
|
||||||
"_markerMissionName",
|
"_crateLoot",
|
||||||
"_markerType",
|
"_lootCounts",
|
||||||
"_markerColor",
|
"_markerType",
|
||||||
"_markerSize",
|
"_markerColor",
|
||||||
"_markerBrush",
|
"_markerSize",
|
||||||
"_missionLandscapeMode",
|
"_markerBrush",
|
||||||
"_garrisonedBuildings_BuildingPosnSystem",
|
"_missionLandscapeMode",
|
||||||
"_garrisonedBuilding_ATLsystem",
|
"_garrisonedBuildings_BuildingPosnSystem",
|
||||||
"_missionLandscape",
|
"_garrisonedBuilding_ATLsystem",
|
||||||
"_missionLootBoxes",
|
"_missionLandscape",
|
||||||
"_missionLootVehicles",
|
"_missionLootBoxes",
|
||||||
"_missionPatrolVehicles",
|
"_missionLootVehicles",
|
||||||
"_submarinePatrolParameters",
|
"_missionPatrolVehicles",
|
||||||
"_airPatrols",
|
"_submarinePatrolParameters",
|
||||||
"_noVehiclePatrols",
|
"_airPatrols",
|
||||||
"_vehicleCrewCount",
|
"_noVehiclePatrols",
|
||||||
"_missionEmplacedWeapons",
|
"_vehicleCrewCount",
|
||||||
"_noEmplacedToSpawn",
|
"_missionEmplacedWeapons",
|
||||||
"_missionLootVehicles",
|
"_noEmplacedWeapons",
|
||||||
"_useMines",
|
"_useMines",
|
||||||
"_minNoAI",
|
"_minNoAI",
|
||||||
"_maxNoAI",
|
"_maxNoAI",
|
||||||
"_noAIGroups",
|
"_noAIGroups",
|
||||||
"_missionGroups",
|
"_missionGroups",
|
||||||
"_scubaGroupParameters",
|
"_scubaGroupParameters",
|
||||||
"_hostageConfig",
|
"_hostageConfig",
|
||||||
"_enemyLeaderConfig",
|
"_enemyLeaderConfig",
|
||||||
"_uniforms",
|
"_assetKilledMsg",
|
||||||
"_headgear",
|
"_uniforms",
|
||||||
"_vests",
|
"_headgear",
|
||||||
"_backpacks",
|
"_vests",
|
||||||
"_weaponList",
|
"_backpacks",
|
||||||
"_sideArms",
|
"_weaponList",
|
||||||
"_chanceHeliPatrol",
|
"_sideArms",
|
||||||
"_noChoppers",
|
"_chanceHeliPatrol",
|
||||||
"_missionHelis",
|
"_noChoppers",
|
||||||
"_chancePara",
|
"_missionHelis",
|
||||||
"_noPara",
|
"_chancePara",
|
||||||
"_paraTriggerDistance",
|
"_noPara",
|
||||||
"_paraSkill",
|
"_paraTriggerDistance",
|
||||||
"_chanceLoot",
|
"_paraSkill",
|
||||||
"_paraLoot",
|
"_chanceLoot",
|
||||||
"_paraLootCounts",
|
"_paraLoot",
|
||||||
"_spawnCratesTiming",
|
"_paraLootCounts",
|
||||||
"_loadCratesTiming",
|
"_spawnCratesTiming",
|
||||||
"_endCondition",
|
"_loadCratesTiming",
|
||||||
"_isScubaMission"
|
"_endCondition",
|
||||||
];
|
"_isScubaMission"
|
||||||
|
];
|
||||||
|
|
||||||
private _playerInRange = [_coords, blck_TriggerDistance, false] call blck_fnc_playerInRange;
|
private _playerInRange = [_coords, blck_TriggerDistance, false] call blck_fnc_playerInRange;
|
||||||
#define delayTime 1
|
#define delayTime 1
|
||||||
@ -157,34 +115,25 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
_monitorAction = 1;
|
_monitorAction = 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
//diag_log format["_monitorInitializedMissions(149): _triggered = %1 | _monitorAction = %2",_triggered,_monitorAction];
|
|
||||||
private _blck_localMissionMarker = [_markerType,_coords,"","",_markerColor,_markerType];
|
|
||||||
switch (_monitorAction) do
|
switch (_monitorAction) do
|
||||||
{
|
{
|
||||||
// Handle Timeout
|
// Handle Timeout
|
||||||
case -1:
|
case -1:
|
||||||
{
|
{
|
||||||
diag_log format["_fnc_monitorInitializedMissions: mission timed out: %1",_el];
|
//[format["_fnc_monitorInitializedMissions: mission timed out: %1",_el]] call blck_fnc_log;
|
||||||
_missionCategoryDescriptors set[noActive, _noActive - 1];
|
_missionCategoryDescriptors set[noActive, _noActive - 1];
|
||||||
// params ["_mines","_objects","_crates","_blck_AllMissionAI","_endMsg","_mainMarker","_labelMarker","_markerClass","_coords",["_endCondition",0]]
|
[_coords,_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, -1] call blck_fnc_endMission;
|
||||||
[_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_mainMarker,_labelMarker,_markerType,_coords,1] call blck_fnc_endMission;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 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:
|
||||||
{
|
{
|
||||||
if (blck_debugLevel >= 3) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_moniorInitializedMissions: blck_debugLevel == 3, spawning objects for mission %1",_el];
|
|
||||||
} else {
|
|
||||||
//diag_log format["_fnc_moniorInitializedMissions: mission TRIGGERED by player: spawning objects for mission %1",_el];
|
|
||||||
};
|
|
||||||
|
|
||||||
#define triggered 2
|
#define triggered 2
|
||||||
#define timedOut 1
|
#define timedOut 1
|
||||||
_el set[triggered,1];
|
_el set[triggered,1];
|
||||||
_el set[timedOut,diag_tickTime + 240];
|
_el set[timedOut,diag_tickTime + 240];
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (167): spawning smoking wrecks as needed: blck_smokeAtMissions == %1",blck_SmokeAtMissions];
|
|
||||||
private["_temp"];
|
private["_temp"];
|
||||||
if (blck_SmokeAtMissions select 0) then // spawn a fire and smoke near the crate
|
if (blck_SmokeAtMissions select 0) then // spawn a fire and smoke near the crate
|
||||||
{
|
{
|
||||||
@ -196,14 +145,12 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (193): spawning mines as needed: _useMines == %1",_useMines];
|
|
||||||
if (_useMines) then
|
if (_useMines) then
|
||||||
{
|
{
|
||||||
_mines = [_coords] call blck_fnc_spawnMines;
|
_mines = [_coords] call blck_fnc_spawnMines;
|
||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (200): spawning landscape as needed: _missionLandscapeMode = %1 | _missionLandscape = %2",_missionLandscapeMode,_missionLandscape];
|
|
||||||
if (_missionLandscapeMode isEqualTo "random") then
|
if (_missionLandscapeMode isEqualTo "random") then
|
||||||
{
|
{
|
||||||
_temp = [_coords,_missionLandscape, 3, 15, 2] call blck_fnc_spawnRandomLandscape;
|
_temp = [_coords,_missionLandscape, 3, 15, 2] call blck_fnc_spawnRandomLandscape;
|
||||||
@ -215,31 +162,24 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (213): spawning AI Patrols as needed: _missionGroups == %1",_missionGroups];
|
|
||||||
_temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_missionGroups,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionAI;
|
_temp = [_coords, _minNoAI,_maxNoAI,_noAIGroups,_missionGroups,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionAI;
|
||||||
_temp params["_ai","_abort"];
|
_temp params["_ai","_abort"];
|
||||||
if (_abort) throw 1;
|
if (_abort) throw 1;
|
||||||
_blck_AllMissionAI append (_ai);
|
_blck_AllMissionAI append (_ai);
|
||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (220): spawning hostages as needed: _hostageConfig == %1",_hostageConfig];
|
|
||||||
//private ["_assetSpawned"];
|
|
||||||
if !(_hostageConfig isEqualTo []) then
|
if !(_hostageConfig isEqualTo []) then
|
||||||
{
|
{
|
||||||
_temp = [_coords,_hostageConfig] call blck_fnc_spawnHostage;
|
_temp = [_coords,_hostageConfig] call blck_fnc_spawnHostage;
|
||||||
if (_temp isEqualTo grpNull) then {throw 1} else
|
if (_temp isEqualTo grpNull) then {throw 1} else
|
||||||
{
|
{
|
||||||
_assetSpawned = _temp select 0;
|
_assetSpawned = _temp select 0;
|
||||||
// 0 1 2 3 4 5 6 7
|
|
||||||
// _missionData params ["_coords","_mines","_objects","_crates","_blck_AllMissionAI","_assetSpawned","_mainMarker","_labelMarker"];
|
|
||||||
_missionData set[5,_assetSpawned];
|
_missionData set[5,_assetSpawned];
|
||||||
_objects pushBack (_temp select 1);
|
_objects pushBack (_temp select 1);
|
||||||
_blck_AllMissionAI pushBack _assetSpawned;
|
_blck_AllMissionAI pushBack _assetSpawned;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (234): spawning leaders as needed: _enemyLeaderConfig == %1",_enemyLeaderConfig];
|
|
||||||
if !(_enemyLeaderConfig isEqualTo []) then
|
if !(_enemyLeaderConfig isEqualTo []) then
|
||||||
{
|
{
|
||||||
private _temp = [_coords,_enemyLeaderConfig] call blck_fnc_spawnLeader;
|
private _temp = [_coords,_enemyLeaderConfig] call blck_fnc_spawnLeader;
|
||||||
@ -252,7 +192,6 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (248): spawning chopers as needed: _noChoppers = %1 | _chanceHeliPatrol = %2 | _missionHelis = %3",_noChoppers,_chanceHeliPatrol,_missionHelis];
|
|
||||||
private _noChoppers = [_noChoppers] call blck_fnc_getNumberFromRange;
|
private _noChoppers = [_noChoppers] call blck_fnc_getNumberFromRange;
|
||||||
if (_noChoppers > 0) then
|
if (_noChoppers > 0) then
|
||||||
{
|
{
|
||||||
@ -276,7 +215,6 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
};
|
};
|
||||||
uisleep 3;
|
uisleep 3;
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (271): spawning garrisons using ATL coordinate system as needed: _garrisonedBuilding_ATLsystem == %1",_garrisonedBuilding_ATLsystem];
|
|
||||||
if (count _garrisonedBuilding_ATLsystem > 0) then // Note that there is no error checking here for nulGroups
|
if (count _garrisonedBuilding_ATLsystem > 0) then // Note that there is no error checking here for nulGroups
|
||||||
{
|
{
|
||||||
private _temp = [_coords, _garrisonedBuilding_ATLsystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_ATLsystem;
|
private _temp = [_coords, _garrisonedBuilding_ATLsystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_ATLsystem;
|
||||||
@ -290,7 +228,6 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
};
|
};
|
||||||
uiSleep 3;
|
uiSleep 3;
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (285): spawning garrisons using relative coordinate system as needed: _garrisonedBuildings_BuildingPosnSystem == %1",_garrisonedBuildings_BuildingPosnSystem];
|
|
||||||
if (count _garrisonedBuildings_BuildingPosnSystem > 0) then
|
if (count _garrisonedBuildings_BuildingPosnSystem > 0) then
|
||||||
{
|
{
|
||||||
private _temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_RelPosSystem;
|
private _temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_RelPosSystem;
|
||||||
@ -305,13 +242,12 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
uiSleep 15;
|
uiSleep 15;
|
||||||
|
|
||||||
private _userelativepos = true;
|
private _userelativepos = true;
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (300): spawning static turrets needed: _noEmplacedToSpawn == %1 | _missionEmplacedWeapons = %2",_noEmplacedToSpawn,_missionEmplacedWeapons];
|
private _noEmplacedWeapons = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange;
|
||||||
private _noEmplacedToSpawn = [_noEmplacedToSpawn] call blck_fnc_getNumberFromRange;
|
if (blck_useStatic && ((_noEmplacedWeapons > 0) || count _missionEmplacedWeapons > 0)) then
|
||||||
if (blck_useStatic && ((_noEmplacedToSpawn > 0) || count _missionEmplacedWeapons > 0)) then
|
|
||||||
// TODO: add error checks for grpNull to the emplaced weapon spawner
|
// TODO: add error checks for grpNull to the emplaced weapon spawner
|
||||||
{
|
{
|
||||||
|
|
||||||
private _temp = [_coords,_missionEmplacedWeapons,_userelativepos,_noEmplacedToSpawn,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnEmplacedWeaponArray;
|
private _temp = [_coords,_missionEmplacedWeapons,_userelativepos,_noEmplacedWeapons,_difficulty,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnEmplacedWeaponArray;
|
||||||
if (_temp isEqualTo grpNull) then {throw 1} else
|
if (_temp isEqualTo grpNull) then {throw 1} else
|
||||||
{
|
{
|
||||||
_objects append (_temp select 0);
|
_objects append (_temp select 0);
|
||||||
@ -320,7 +256,6 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
};
|
};
|
||||||
uisleep 10;
|
uisleep 10;
|
||||||
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (316): spawning patrol vehicles as needed: _noVehiclePatrols == %1 | _missionPatrolVehicles = %2",_noVehiclePatrols,_missionPatrolVehicles];
|
|
||||||
private _noVehiclePatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange;
|
private _noVehiclePatrols = [_noVehiclePatrols] call blck_fnc_getNumberFromRange;
|
||||||
if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || count _missionPatrolVehicles > 0)) then
|
if (blck_useVehiclePatrols && ((_noVehiclePatrols > 0) || count _missionPatrolVehicles > 0)) then
|
||||||
{
|
{
|
||||||
@ -333,8 +268,9 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
uiSleep delayTime;
|
uiSleep delayTime;
|
||||||
|
if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _spawnCrateTiming = %1 _loadCratesTiming = %2 | _markerMissionName = %3",_spawnCratesTiming,_loadCratesTiming, _markerMissionName]};
|
||||||
if (_spawnCratesTiming isEqualTo "atMissionSpawnGround") then
|
if (blck_debugLevel >= 3) then {diag_log format["monitorInitializedMissions: _missionLootBoxes = %1",_missionLootBoxes]};
|
||||||
|
if (_spawnCratesTiming in ["atMissionSpawnGround","atMissionSpawnAir"]) then
|
||||||
{
|
{
|
||||||
if (_missionLootBoxes isEqualTo []) then
|
if (_missionLootBoxes isEqualTo []) then
|
||||||
{
|
{
|
||||||
@ -349,6 +285,13 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
{
|
{
|
||||||
_objects append _crates;
|
_objects append _crates;
|
||||||
};
|
};
|
||||||
|
if (_loadCratesTiming isEqualTo "atMissionSpawn") then
|
||||||
|
{
|
||||||
|
private _crateMoney = missionNamespace getVariable (format["blck_crateMoney%1",_difficulty]);
|
||||||
|
{
|
||||||
|
[_x,_crateMoney] call blck_fnc_addMoneyToObject;
|
||||||
|
} forEach _crates;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
_missionData set[2,_objects];
|
_missionData set[2,_objects];
|
||||||
_missionData set[3,_crates];
|
_missionData set[3,_crates];
|
||||||
@ -357,21 +300,20 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
|
|
||||||
if (blck_showCountAliveAI) then
|
if (blck_showCountAliveAI) then
|
||||||
{
|
{
|
||||||
[_mainMarker,_labelMarker,_markerMissionName,_blck_AllMissionAI] call blck_fnc_updateMarkerAliveCount;
|
blck_missionLabelMarkers pushBack [_markers select 1,_markerMissionName,_blck_AllMissionAI];
|
||||||
};
|
};
|
||||||
|
|
||||||
{
|
{
|
||||||
_x setVariable["crateSpawnPos", (getPos _x)];
|
_x setVariable["crateSpawnPos", (getPos _x)];
|
||||||
} forEach _crates;
|
} forEach _crates;
|
||||||
private _spawnPara = if (random(1) < _chancePara) then {true} else {false};
|
private _spawnPara = if (random(1) < _chancePara) then {true} else {false};
|
||||||
setMissionData // code defined above
|
_missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers];
|
||||||
//{diag_log format["_monotirInitializedMissions:(371) _missiondata %1 = %2",_forEachIndex,_x]} forEach _missionData;
|
|
||||||
|
|
||||||
_el set[missionData, _missionData];
|
_el set[missionData, _missionData];
|
||||||
|
|
||||||
// Everything spawned withouth serous errors so lets keep the mission active for future monitoring
|
// Everything spawned withouth serous errors so lets keep the mission active for future monitoring
|
||||||
|
|
||||||
blck_activeMissionsList pushBack _el;
|
blck_activeMissionsList pushBack _el;
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (366): all objects, men and vehicles spawened, blck_activeMissionsList= %1", blck_activeMissionsList];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
catch
|
catch
|
||||||
@ -379,20 +321,24 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
if (_exception isEqualTo 1) then
|
if (_exception isEqualTo 1) then
|
||||||
{
|
{
|
||||||
_missionCategoryDescriptors set[noActive, _noActive - 1];
|
_missionCategoryDescriptors set[noActive, _noActive - 1];
|
||||||
// params ["_mines","_objects","_crates","_blck_AllMissionAI","_endMsg","_mainMarker","_labelMarker","_markerClass","_coords",["_endCondition",0]]
|
[_coords,_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, 1] call blck_fnc_endMission;
|
||||||
[_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_mainMarker,_labelMarker,_markerType,_coords, 1] call blck_fnc_endMission;
|
["Critial Error returned by one or more critical functions, mission spawning aborted!",'error'] call blck_fnc_log;
|
||||||
diag_log format["[blkeagls] <WARNING> grpNull returned by one or more critical functions, mission spawning aborted!"];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_moniorInitializedMissions(398): evaluating status of mission %1 | _missionTimeoutAt = %2 | time = %3 | _crates = %4",_el,_missionTimeoutAt,diag_tickTime,_crates];
|
|
||||||
private _missionComplete = -1;
|
private _missionComplete = -1;
|
||||||
private _crateStolen = -1;
|
|
||||||
private ["_secureAsset","_endIfPlayerNear","_endIfAIKilled"];
|
private ["_secureAsset","_endIfPlayerNear","_endIfAIKilled"];
|
||||||
|
|
||||||
|
/*
|
||||||
|
"_endCondition",
|
||||||
|
*/
|
||||||
|
_secureAsset = false;
|
||||||
|
_endIfPlayerNear = true;
|
||||||
|
_endIfAIKilled = true;
|
||||||
|
|
||||||
switch (_endCondition) do
|
switch (_endCondition) do
|
||||||
{
|
{
|
||||||
case "playerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = false;};
|
case "playerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = false;};
|
||||||
@ -400,49 +346,22 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
case "allKilledOrPlayerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = true;};
|
case "allKilledOrPlayerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = true;};
|
||||||
case "assetSecured": {_secureAsset = true; _endIfPlayerNear = false; _endIfAIKilled = false;};
|
case "assetSecured": {_secureAsset = true; _endIfPlayerNear = false; _endIfAIKilled = false;};
|
||||||
};
|
};
|
||||||
if (blck_showCountAliveAI) then
|
|
||||||
{
|
|
||||||
[_mainMarker,_labelMarker,_markerMissionName,_blck_AllMissionAI] call blck_fnc_updateMarkerAliveCount;
|
|
||||||
};
|
|
||||||
try {
|
try {
|
||||||
if (blck_debugLevel == 5) throw 1;
|
|
||||||
if (blck_debugLevel == 6) then {
|
|
||||||
diag_log format["_fnc_monitorInitializedMissions: mission ended, condition CRATE MOVED, mission %1",_el];
|
|
||||||
throw 2;
|
|
||||||
};
|
|
||||||
if (blck_debugLevel == 7) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_monitorInitializedMissions: mission ended, condition simulated death of asset, mission %1",_el];
|
|
||||||
throw 3;
|
|
||||||
};
|
|
||||||
private _playerIsNear = [_crates,20,true] call blck_fnc_playerInRangeArray;
|
private _playerIsNear = [_crates,20,true] call blck_fnc_playerInRangeArray;
|
||||||
private _minNoAliveForCompletion = (count _blck_AllMissionAI) - (round(blck_killPercentage * (count _blck_AllMissionAI)));
|
private _minNoAliveForCompletion = (count _blck_AllMissionAI) - (round(blck_killPercentage * (count _blck_AllMissionAI)));
|
||||||
private _aiKilled = if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then {true} else {false}; // mission complete
|
private _aiKilled = if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then {true} else {false}; // mission complete
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (404): _playerIsNear = %1 | _aiKilled = %2 | _crates = %3",_playerIsNear,_aiKilled,_crates];
|
|
||||||
if (_endIfPlayerNear) then
|
if (_endIfPlayerNear) then
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_monitorInitializedMissions: mission ended, condition player near, mission %1",_el];
|
|
||||||
if (_playerIsNear) throw 1; // mission complete
|
if (_playerIsNear) throw 1; // mission complete
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_endIfAIKilled) then
|
if (_endIfAIKilled) then
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_monitorInitializedMissions: mission ended, condition AI Killed, mission %1",_el];
|
|
||||||
if (_aiKilled) throw 1;
|
if (_aiKilled) throw 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_spawnCratesTiming isEqualTo "atMissionSpawnGround") then
|
|
||||||
{
|
|
||||||
{
|
|
||||||
private _d = _x distance (_x getVariable ["crateSpawnPos",_coords]);
|
|
||||||
if (_d > 25) then
|
|
||||||
{
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions: mission ended, condition CRATE MOVED, mission %1",_el];
|
|
||||||
throw 2;
|
|
||||||
}; // crate moved illegally
|
|
||||||
}forEach _crates;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_spawnPara) then
|
if (_spawnPara) then
|
||||||
{
|
{
|
||||||
if ([_coords,_paraTriggerDistance,true] call blck_fnc_playerInRange) then
|
if ([_coords,_paraTriggerDistance,true] call blck_fnc_playerInRange) then
|
||||||
@ -458,7 +377,7 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
};
|
};
|
||||||
if (random(1) < _chanceLoot) then
|
if (random(1) < _chanceLoot) then
|
||||||
{
|
{
|
||||||
private _extraCrates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_paraLoot,_paraLootCounts]], "atMissionSpawn","atMissionStartAir", "start", _difficulty] call blck_fnc_spawnMissionCrates;
|
private _extraCrates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_paraLoot,_paraLootCounts]], "atMissionSpawn","atMissionSpawnAir", "start", _difficulty] call blck_fnc_spawnMissionCrates;
|
||||||
if (blck_cleanUpLootChests) then
|
if (blck_cleanUpLootChests) then
|
||||||
{
|
{
|
||||||
_objects append _extraCrates;
|
_objects append _extraCrates;
|
||||||
@ -472,21 +391,18 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
{
|
{
|
||||||
if !(alive _assetSpawned) then
|
if !(alive _assetSpawned) then
|
||||||
{
|
{
|
||||||
diag_log format["_line 498 asset %1 killed throwing error with code 3",_assetSpawned];
|
|
||||||
throw 3;
|
throw 3;
|
||||||
} else {
|
} else {
|
||||||
diag_log format["line 501: asset alive, count _blck_AllMissionAI = %1",count _blck_AllMissionAI];
|
|
||||||
if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then
|
if (({alive _x} count _blck_AllMissionAI) <= (_minNoAliveForCompletion + 1)) then
|
||||||
{
|
{
|
||||||
if ((_assetSpawned getVariable["blck_unguarded",0]) isEqualTo 0) then
|
if ((_assetSpawned getVariable["blck_unguarded",0]) isEqualTo 0) then
|
||||||
{
|
{
|
||||||
_assetSpawned setVariable["blck_unguarded",1,true];
|
_assetSpawned setVariable["blck_unguarded",1,true];
|
||||||
diag_log format["_assetSpawned: blck_unguarded updated to 1 for asset %1",_assetSpawned];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if ((_assetSpawned getVariable["blck_AIState",0]) isEqualTo 1) then
|
if ((_assetSpawned getVariable["blck_AIState",0]) isEqualTo 1) then
|
||||||
{
|
{
|
||||||
diag_log format["_assetSpawned: blck_AIState updated to 1 for asset %1",_assetSpawned];
|
|
||||||
_assetSpawned allowdamage false;
|
_assetSpawned allowdamage false;
|
||||||
[_assetSpawned] remoteExec["GMS_fnc_clearAllActions",-2, true];
|
[_assetSpawned] remoteExec["GMS_fnc_clearAllActions",-2, true];
|
||||||
throw 1;
|
throw 1;
|
||||||
@ -495,13 +411,15 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
if (blck_debugLevel > 3 && diag_tickTime > _missionTimeoutAt) then
|
private _moved = false;
|
||||||
|
if ((_spawnCratesTiming isEqualTo "atMissionSpawnGround") && blck_crateMoveAllowed) then
|
||||||
{
|
{
|
||||||
diag_log format["_monitoInitializeMissions: debugLevel == 3, mission triggered, timout condition reached, ending mission"];
|
{
|
||||||
throw 1;
|
if ( _x distance (_x getVariable ["crateSpawnPos", (getPos _x)]) > max_distance_crate_moved_uncompleted_mission) throw 2;
|
||||||
|
} forEach _crates;
|
||||||
};
|
};
|
||||||
setMissionData // Code defined above
|
|
||||||
|
_missionData = [_coords,_mines,_objects,_crates, _blck_AllMissionAI,_assetSpawned,_missionAIVehicles,_markers];
|
||||||
|
|
||||||
_el set[missionData, _missionData];
|
_el set[missionData, _missionData];
|
||||||
|
|
||||||
@ -511,7 +429,6 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
|
|
||||||
catch // catch all conditions that cause the mission to end.
|
catch // catch all conditions that cause the mission to end.
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_monitorInitializeMissions (507): _exception = %1",_exception];
|
|
||||||
switch (_exception) do
|
switch (_exception) do
|
||||||
{
|
{
|
||||||
case 1: { // Normal Mission End
|
case 1: { // Normal Mission End
|
||||||
@ -532,21 +449,25 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
{
|
{
|
||||||
_objects append _crates;
|
_objects append _crates;
|
||||||
};
|
};
|
||||||
|
private _crateMoney = missionNamespace getVariable (format["blck_crateMoney%1",_difficulty]);
|
||||||
|
{
|
||||||
|
[_x,_crateMoney] call blck_fnc_addMoneyToObject;
|
||||||
|
} forEach _crates;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_spawnCratesTiming isEqualTo "atMissionSpawnGround" && _loadCratesTiming isEqualTo "atMissionCompletion") then
|
if (_spawnCratesTiming in ["atMissionSpawnGround","atMissionSpawnAir"] && _loadCratesTiming isEqualTo "atMissionCompletion") then
|
||||||
{
|
{
|
||||||
if (!(_secureAsset) || (_secureAsset && (alive _assetSpawned))) then
|
if (!(_secureAsset) || (_secureAsset && (alive _assetSpawned))) then
|
||||||
{
|
{
|
||||||
|
private _crateMoney = missionNamespace getVariable (format["blck_crateMoney%1",_difficulty]);
|
||||||
{
|
{
|
||||||
[_x] call blck_fnc_loadMissionCrate;
|
[_x] call blck_fnc_loadMissionCrate;
|
||||||
|
[_x,_crateMoney] call blck_fnc_addMoneyToObject;
|
||||||
} forEach _crates;
|
} forEach _crates;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
_blck_localMissionMarker set [2, _markerMissionName];
|
|
||||||
|
|
||||||
if (_secureAsset && (alive _assetSpawned)) then
|
if (_secureAsset && (alive _assetSpawned)) then
|
||||||
{
|
{
|
||||||
if (_assetSpawned getVariable["assetType",0] isEqualTo 1) then
|
if (_assetSpawned getVariable["assetType",0] isEqualTo 1) then
|
||||||
@ -568,54 +489,22 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
[_assetSpawned,selectRandom(_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]])] remoteExec["switchMove",-2];
|
[_assetSpawned,selectRandom(_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]])] remoteExec["switchMove",-2];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
diag_log format["_fnc_monitorInitializedMissions (430) calling <_fnc_endMission> | _cords %1 : _markerType %2 : _difficulty %3 _markerMissionName %4",_coords,_markerType,_difficulty,_markerMissionName];
|
[_coords,_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission;
|
||||||
// params ["_mines","_objects","_crates","_blck_AllMissionAI","_endMsg","_mainMarker","_labelMarker","_markerClass","_coords",["_endCondition",0]];
|
|
||||||
[_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_mainMarker,_labelMarker,_markerType,_coords, 0] call blck_fnc_endMission;
|
|
||||||
//diag_log format["_fnc_monitorInitializedMissions (430) Mission Completed | _cords %1 : _markerType %2 : _difficulty %3 _markerMissionName %4",_coords,_markerType,_difficulty,_markerMissionName];
|
|
||||||
_waitTime = diag_tickTime + _tMin + random(_tMax - _tMin);
|
_waitTime = diag_tickTime + _tMin + random(_tMax - _tMin);
|
||||||
/*
|
|
||||||
_missionCategoryDescriptors params [
|
|
||||||
//"_marker",
|
|
||||||
"_difficulty", 0
|
|
||||||
"_noMissions", 1 // Max no missions of this category
|
|
||||||
"_noActive", 2 // Number active
|
|
||||||
//"_timesSpawned", // times spawned, useful for keeping unique markers
|
|
||||||
"_tMin", 3 // Used to calculate waittime in the future
|
|
||||||
"_tMax", 4 // as above
|
|
||||||
"_waitTime", 5 // time at which a mission should be spawned
|
|
||||||
"_missionsData" //
|
|
||||||
];
|
|
||||||
*/
|
|
||||||
_missionCategoryDescriptors set [noActive,_noActive - 1];
|
_missionCategoryDescriptors set [noActive,_noActive - 1];
|
||||||
_missionCategoryDescriptors set [waitTime,_waitTime];
|
_missionCategoryDescriptors set [waitTime,_waitTime];
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_monitorInitializedMissions (570): _missionCategoryDescriptors parameter %1 = %2",_x,_missionCategoryDescriptors select _forEachIndex];
|
|
||||||
} forEach [
|
|
||||||
//"_marker",
|
|
||||||
"_difficulty",
|
|
||||||
"_noMissions", // Max no missions of this category
|
|
||||||
"_noActive", // Number active
|
|
||||||
//"_timesSpawned", // times spawned, useful for keeping unique markers
|
|
||||||
"_tMin", // Used to calculate waittime in the future
|
|
||||||
"_tMax", // as above
|
|
||||||
"_waitTime", // time at which a mission should be spawned
|
|
||||||
"_missionsData" //
|
|
||||||
];
|
|
||||||
*/
|
|
||||||
};
|
};
|
||||||
case 2: { // Abort, crate moved.
|
case 2: { // Abort, crate moved.
|
||||||
//[_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_mainMarker,_labelMarker,_markerType,_coords, 0]
|
|
||||||
[_mines,_objects,_crates, _blck_AllMissionAI,"Crate Removed from Mission Site Before Mission Completion: Mission Aborted",_mainMarker,_labelMarker,_markerType,_coords,2] call blck_fnc_endMission;
|
|
||||||
_endMsg = "Crate Removed from Mission Site Before Mission Completion: Mission Aborted";
|
_endMsg = "Crate Removed from Mission Site Before Mission Completion: Mission Aborted";
|
||||||
[_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_mainMarker,_labelMarker,_markerType,_coords, 0] call blck_fnc_endMission;
|
[_coords,_mines,_objects,_crates, _blck_AllMissionAI,"Crate Removed from Mission Site Before Mission Completion: Mission Aborted",_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission;
|
||||||
};
|
};
|
||||||
case 3: { // Abort, key asset killed
|
case 3: { // Abort, key asset killed
|
||||||
diag_log format["Asset Killed, aborting mission"];
|
[_coords,_mines,_objects,_crates,_blck_AllMissionAI,_assetKilledMsg,_markers,markerPos (_markers select 1),_markerName,_markerMissionName, _exception] call blck_fnc_endMission;
|
||||||
#define missionAbort 1
|
|
||||||
//[_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_mainMarker,_labelMarker,_markerType,_coords, 0]
|
|
||||||
[_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_mainMarker,_labelMarker,_markerType,_coords, missionAbort] call blck_fnc_endMission;
|
|
||||||
};
|
};
|
||||||
|
case 4: { // Reserved for grpNull errors in the future
|
||||||
|
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -624,4 +513,4 @@ for "_i" from 1 to (count blck_activeMissionsList) do
|
|||||||
blck_activeMissionsList pushBack _el;
|
blck_activeMissionsList pushBack _el;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params["_aiDifficultyLevel"]; //[["_aiDifficultyLevel",selectRandom["Red","Green"]]];
|
params["_aiDifficultyLevel"]; //[["_aiDifficultyLevel",selectRandom["Red","Green"]]];
|
||||||
//diag_log format["_fnc_selectAISidearms: _aiDifficultyLevel = %1",_aiDifficultyLevel];
|
|
||||||
private["_sideArms"];
|
private["_sideArms"];
|
||||||
switch (toLower (_aiDifficultyLevel)) do
|
switch (toLower (_aiDifficultyLevel)) do
|
||||||
{
|
{
|
||||||
|
@ -19,5 +19,5 @@ switch (toLower(_diff)) do
|
|||||||
case "green": {_count = blck_vehCrew_green};
|
case "green": {_count = blck_vehCrew_green};
|
||||||
case "orange": {_count = blck_vehCrew_orange};
|
case "orange": {_count = blck_vehCrew_orange};
|
||||||
};
|
};
|
||||||
///diag_log format["_fnc_selectVehicleCrewCount: _count set to %1",_count];
|
|
||||||
_count
|
_count
|
||||||
|
@ -16,7 +16,7 @@ private ["_start","_maxHeight","_smokeShell","_light","_lightSource"];
|
|||||||
params[["_crate",objNull],["_time",60]];
|
params[["_crate",objNull],["_time",60]];
|
||||||
if (isNull _crate) exitWith {};
|
if (isNull _crate) exitWith {};
|
||||||
_start = diag_tickTime;
|
_start = diag_tickTime;
|
||||||
//diag_log format["signalEnd.sqf: _this = %1, _crate = %2",_this, _crate];
|
|
||||||
_smokeShell = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
|
_smokeShell = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
|
||||||
_lightSource = selectRandom ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"];
|
_lightSource = selectRandom ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"];
|
||||||
_light = objNull;
|
_light = objNull;
|
||||||
|
@ -1,81 +0,0 @@
|
|||||||
/*
|
|
||||||
by Ghostrider [GRG]
|
|
||||||
|
|
||||||
--------------------------
|
|
||||||
License
|
|
||||||
--------------------------
|
|
||||||
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
|
|
||||||
|
|
||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
|
||||||
*/
|
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
|
||||||
//diag_log "[blckeagls] GMS_fnc_sm_init_functions.sqf <Defining Variables and Compiling Functions>";
|
|
||||||
//blck_sm_Groups = [];
|
|
||||||
blck_sm_Infantry = [];
|
|
||||||
blck_sm_Vehicles = [];
|
|
||||||
blck_sm_Aircraft = [];
|
|
||||||
blck_sm_Emplaced = [];
|
|
||||||
blck_sm_scubaGroups = [];
|
|
||||||
blck_sm_surfaceShips = [];
|
|
||||||
blck_sm_submarines = [];
|
|
||||||
blck_sm_lootContainers = [];
|
|
||||||
blck_sm_garrisonBuildings_ASL = [];
|
|
||||||
blcl_sm_garrisonBuilding_relPos = [];
|
|
||||||
|
|
||||||
blck_fnc_sm_AddGroupToArray = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_AddGroupToArray.sqf";
|
|
||||||
|
|
||||||
/*
|
|
||||||
blck_fnc_sm_AddGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_AddGroup.sqf";
|
|
||||||
blck_fnc_sm_AddVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_AddVehicle.sqf";
|
|
||||||
blck_fnc_sm_AddAircraft = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_AddAircraft.sqf";
|
|
||||||
blck_fnc_sm_AddEmplaced = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_AddEmplaced.sqf";
|
|
||||||
*/
|
|
||||||
// TODO: Delte soon
|
|
||||||
private _functions = [
|
|
||||||
//["blck_fnc_sm_monitorStaticUnits","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorStaticPatrols.sqf"],
|
|
||||||
["blck_fnc_sm_monitorInfantry","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorInfantry.sqf"],
|
|
||||||
["blck_fnc_sm_monitorScuba","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorScuba.sqf"],
|
|
||||||
["blck_fnc_sm_monitorVehicles","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorVehicles.sqf"],
|
|
||||||
["blck_fnc_sm_monitorAircraft","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorAircraft.sqf"],
|
|
||||||
["blck_fnc_sm_monitorShips","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorShips.sqf"],
|
|
||||||
["blck_fnc_sm_monitorSubs","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorSubs.sqf"],
|
|
||||||
["blck_fnc_sm_monitorEmplaced","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorEmplaced.sqf"],
|
|
||||||
["blck_fnc_sm_monitorGarrisonsASL","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorGarrisonsASL.sqf"],
|
|
||||||
["blck_fnc_sm_monitorGarrisons_relPos","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorGarrisons_relPos.sqf"],
|
|
||||||
["blck_fnc_sm_spawnVehiclePatrol","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnVehiclePatrol.sqf"],
|
|
||||||
["blck_fnc_sm_spawnAirPatrol","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnAirPatrol.sqf"],
|
|
||||||
["blck_fnc_sm_spawnEmplaced","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnEmplaced.sqf"],
|
|
||||||
// ["blck_fnc_sm_spawnInfantryPatrol","\q\addons\custom_server\Missions\Static\Code\GMS_sm_spawnInfantryPatrol.sqf"],
|
|
||||||
["blck_fnc_sm_staticPatrolMonitor","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_staticPatrolMonitor.sqf"],
|
|
||||||
// ["blck_fnc_sm_checkForPlayerNearMission","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_checkForPlayerNearMission.sqf"],
|
|
||||||
["blck_fnc_sm_spawnAirPatrols","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnAirPatrols.sqf"],
|
|
||||||
["blck_fnc_sm_spawnEmplaceds","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnEmplaced.sqf"],
|
|
||||||
["blck_fnc_sm_spawnInfantryPatrols","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnInfantryPatrols.sqf"],
|
|
||||||
["blck_fnc_sm_spawnLootContainers","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnLootContainers.sqf"],
|
|
||||||
["blck_fnc_sm_spawnObjects","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnObjects.sqf"],
|
|
||||||
["blck_fnc_sm_spawnVehiclePatrols","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnVehiclePatrols.sqf"],
|
|
||||||
["blck_fnc_sm_spawnBuildingGarrison_ASL","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnBuildingGarrisonASL.sqf"],
|
|
||||||
["blck_fnc_sm_spawnBuildingGarrison_relPos","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnBuildingGarrison_relPos.sqf"],
|
|
||||||
["blck_fnc_sm_spawnObjectASLVectorDirUp","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnObjectASLVectorDirUp.sqf"],
|
|
||||||
["blck_fnc_spawnScubaGroup","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_spawnScubaGroup.sqf"],
|
|
||||||
["blck_fnc_spawnSDVPatrol","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_spawnSDVPatrol.sqf"],
|
|
||||||
["blck_fnc_spawnSurfacePatrol","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_spawnSurfacePatrol.sqf"],
|
|
||||||
//["blck_fnc_sm_AddScubaGroup","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_AddScubaGroup.sqf"],
|
|
||||||
//["blck_fnc_sm_AddSurfaceVehicle","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_AddSurfaceVehicle.sqf"],
|
|
||||||
["blck_fnc_sm_AddSDVVehicle","\q\addons\custom_server\Missions\Static\Code\GMS_sm_AddSDVVehicle.sqf"]
|
|
||||||
];
|
|
||||||
{
|
|
||||||
_x params ["_name","_path"];
|
|
||||||
missionnamespace setvariable [_name,compileFinal preprocessFileLineNumbers _path];
|
|
||||||
} foreach _functions;
|
|
||||||
|
|
||||||
diag_log "[blckeagls] GMS_sm_init_functions.sqf <Variables Defined and Functions Loaded>";
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
blck_fnc_spawnScubaGroup = compileFinal preprocessFileLineNumbers "q\addons\custom_server\Missions\UMS\code\GMS_fnc_spawnScubaGroup.sqf";
|
|
||||||
blck_fnc_spawnSDVPatrol = compileFinal preprocessFileLineNumbers "q\addons\custom_server\Missions\UMS\code\GMS_fnc_spawnSDVPatrol.sqf";
|
|
||||||
blck_fnc_spawnSurfacePatrol = compileFinal preprocessFileLineNumbers "q\addons\custom_server\Missions\UMS\code\GMS_fnc_spawnSurfacePatrol.sqf";
|
|
||||||
blck_fnc_sm_AddScubaGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\UMS\code\GMS_sm_AddScubaGroup.sqf";
|
|
||||||
blck_fnc_sm_AddSurfaceVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\UMS\code\GMS_sm_AddSurfaceVehicle.sqf";
|
|
||||||
blck_fnc_sm_AddSDVVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\UMS\code\GMS_sm_AddSDVVehicle.sqf";
|
|
@ -28,7 +28,7 @@ if (isNil "_aiGroupParameters") then {_aiGroupParameters = []};
|
|||||||
if (isNil "_missionEmplacedWeapons") then {_missionEmplacedWeapons = []};
|
if (isNil "_missionEmplacedWeapons") then {_missionEmplacedWeapons = []};
|
||||||
if (isNil "_vehiclePatrolParameters") then {_vehiclePatrolParameters = []};
|
if (isNil "_vehiclePatrolParameters") then {_vehiclePatrolParameters = []};
|
||||||
if (isNil "_missionLootVehicles") then {_missionLootVehicles = []};
|
if (isNil "_missionLootVehicles") then {_missionLootVehicles = []};
|
||||||
|
if (isNil "_crateMoney") then {_crateMoney = 0};
|
||||||
_markerClass = format["static%1",floor(random(1000000))];
|
_markerClass = format["static%1",floor(random(1000000))];
|
||||||
_blck_localMissionMarker = [_markerClass,_missionCenter,"","",_markerColor,_markerType];
|
_blck_localMissionMarker = [_markerClass,_missionCenter,"","",_markerColor,_markerType];
|
||||||
if (blck_labelMapMarkers select 0) then
|
if (blck_labelMapMarkers select 0) then
|
||||||
@ -43,25 +43,6 @@ _blck_localMissionMarker set [3,blck_labelMapMarkers select 1]; // Use an arrow
|
|||||||
[_blck_localMissionMarker] call blck_fnc_spawnMarker;
|
[_blck_localMissionMarker] call blck_fnc_spawnMarker;
|
||||||
|
|
||||||
[_missionLandscape] call blck_fnc_sm_spawnObjects;
|
[_missionLandscape] call blck_fnc_sm_spawnObjects;
|
||||||
|
|
||||||
{
|
|
||||||
//diag_log format["processing _garrisonedBuilding_ASL %1 which = %2",_forEachIndex,_x];
|
|
||||||
// ["Land_i_House_Big_02_V2_F",[23650.3,18331.9,3.19],[[0,1,0],[0,0,1]],[true,true],"Red",
|
|
||||||
_x params["_buildingClassName","_buildingPosnASL","_buildingVectorDirUp","_buildingDamSim","_aiDifficulty","_staticsASL","_unitsASL","_respawnTimer","_noRespawns"];
|
|
||||||
private _building = [_buildingClassName,_buildingPosnASL,_buildingVectorDirUp,_buildingDamSim] call blck_fnc_sm_spawnObjectASLVectorDirUp;
|
|
||||||
[blck_sm_garrisonBuildings_ASL,[_building,_aiDifficulty,_staticsASL,_unitsASL,_respawnTimer,_noRespawns]] call blck_fnc_sm_AddGroupToArray;
|
|
||||||
//diag_log format["_fnc_sm_initializeMission: blck_sm_garrisonBuildings_ASL updated to: %1",blck_sm_garrisonBuildings_ASL];
|
|
||||||
}forEach _garrisonedBuilding_ASLsystem;
|
|
||||||
|
|
||||||
// blcl_sm_garrisonBuilding_relPos
|
|
||||||
{
|
|
||||||
//diag_log format["processing _garrisonedBuilding_relPos %1 which = %2",_forEachIndex,_x];
|
|
||||||
_x params["_buildingClassName","_buildingPosnASL","_buildingVectorDirUp","_buildingDamSim","_aiDifficulty","_p","_noStatics","_typesStatics","_noUnits","_respawnTimer","_noRespawns"];
|
|
||||||
private _building = [_buildingClassName,_buildingPosnASL,_buildingVectorDirUp,_buildingDamSim] call blck_fnc_sm_spawnObjectASLVectorDirUp;
|
|
||||||
[blcl_sm_garrisonBuilding_relPos,[_building,_aiDifficulty,_noStatics,_typesStatics,_noUnits,_respawnTimer,_noRespawns]] call blck_fnc_sm_AddGroupToArray;
|
|
||||||
//diag_log format["_fnc_sm_initializeMission: blcl_sm_garrisonBuilding_relPos updated to: %1",blcl_sm_garrisonBuilding_relPos];
|
|
||||||
}forEach _garrisonedBuildings_BuildingPosnSystem;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
[blck_sm_Aircraft,_x] call blck_fnc_sm_AddGroupToArray;
|
[blck_sm_Aircraft,_x] call blck_fnc_sm_AddGroupToArray;
|
||||||
|
|
||||||
@ -82,7 +63,7 @@ _blck_localMissionMarker set [3,blck_labelMapMarkers select 1]; // Use an arrow
|
|||||||
|
|
||||||
uiSleep 30;
|
uiSleep 30;
|
||||||
// spawn loot chests
|
// spawn loot chests
|
||||||
[_missionLootBoxes,_missionCenter] call blck_fnc_sm_spawnLootContainers;
|
[_missionLootBoxes,_missionCenter,_crateMoney] call blck_fnc_sm_spawnLootContainers;
|
||||||
[_missionLootVehicles,_missionCenter] call blck_fnc_sm_spawnLootContainers;
|
[_missionLootVehicles,_missionCenter,_crateMoney] call blck_fnc_sm_spawnLootContainers;
|
||||||
diag_log format["[blckeagls] Static Mission Spawner: Mission %1 spawned",_mission];
|
[format["Static Mission Spawner: Mission %1 spawned",_mission]] call blck_fnc_log;
|
||||||
|
|
||||||
|
@ -70,4 +70,4 @@ _blck_localMissionMarker set [3,blck_labelMapMarkers select 1]; // Use an arrow
|
|||||||
// spawn loot chests
|
// spawn loot chests
|
||||||
[_missionLootBoxes,_missionCenter] call blck_fnc_sm_spawnLootContainers;
|
[_missionLootBoxes,_missionCenter] call blck_fnc_sm_spawnLootContainers;
|
||||||
|
|
||||||
diag_log format["[blckeagls] UMS Mission Spawner: Static UMS Mission %1 spawned",_mission];
|
[format["UMS Mission Spawner: Static UMS Mission %1 spawned",_mission]] call blck_fnc_log;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
private["_mode","_sm_groups","_pos","_element"];
|
private["_mode","_sm_groups","_pos","_element"];
|
||||||
if (blck_fnc_sm_spawnBuildingGarrison_relPos isEqualTo []) exitWith {};
|
if (blck_fnc_sm_spawnBuildingGarrison_relPos isEqualTo []) exitWith {};
|
||||||
_sm_groups = +blcl_sm_garrisonBuilding_relPos;
|
_sm_groups = +blck_sm_garrisonBuilding_relPos;
|
||||||
|
|
||||||
{
|
{
|
||||||
_x params["_groupParameters","_group","_groupSpawned","_timesSpawned","_respawnAt"];
|
_x params["_groupParameters","_group","_groupSpawned","_timesSpawned","_respawnAt"];
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
|
|
||||||
|
|
||||||
params["_building","_aiDifficultyLevel","_statics","_units"];
|
params["_building","_aiDifficultyLevel","_statics","_units"];
|
||||||
//diag_log format["_fnc_sm_spawnBuildingGarrisonASL: handling _building = %1 | at location = %2",_building,position _building];
|
|
||||||
private _group = [blck_AI_Side,true] call blck_fnc_createGroup;
|
private _group = [blck_AI_Side,true] call blck_fnc_createGroup;
|
||||||
if !(isNull _group) then
|
if !(isNull _group) then
|
||||||
{
|
{
|
||||||
//params["_building","_group","_statics","_men","_aiDifficultyLevel","_uniforms","_headGear","_vests","_backpacks",["_launcher","none"],"_weaponList","_sideArms"];
|
|
||||||
[_building,_group,_statics,_units,_aiDifficultyLevel] call blck_fnc_spawnGarrisonInsideBuilding_ATL;
|
[_building,_group,_statics,_units,_aiDifficultyLevel] call blck_fnc_spawnGarrisonInsideBuilding_ATL;
|
||||||
};
|
};
|
||||||
_group
|
_group
|
||||||
|
@ -19,38 +19,28 @@ _units = [];
|
|||||||
_abort = false;
|
_abort = false;
|
||||||
_pos = [];
|
_pos = [];
|
||||||
|
|
||||||
//diag_log format["_sm_spawnEmplaced <Line 26>:: _missionEmplacedWeapons = %1",_missionEmplacedWeapons];
|
|
||||||
// Define _missionEmplacedWeapons if not already configured.
|
// Define _missionEmplacedWeapons if not already configured.
|
||||||
if (_missionEmplacedWeapons isEqualTo []) then
|
if (_missionEmplacedWeapons isEqualTo []) then
|
||||||
{
|
{
|
||||||
_missionEmplacedWeaponPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius;
|
_missionEmplacedWeaponPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius;
|
||||||
{
|
{
|
||||||
_static = selectRandom blck_staticWeapons;
|
_static = selectRandom blck_staticWeapons;
|
||||||
//diag_log format["_fnc_spawnEmplacedWeaponArray: creating spawn element [%1,%2]",_static,_x];
|
|
||||||
_missionEmplacedWeapons pushback [_static,_coords vectorAdd _x,_aiDifficultyLevel];
|
_missionEmplacedWeapons pushback [_static,_coords vectorAdd _x,_aiDifficultyLevel];
|
||||||
//diag_log format["_fnc_spawnEmplacedWeaponArray: _mi updated to %1",_missionEmplacedWeapons];
|
|
||||||
} forEach _missionEmplacedWeaponPositions;
|
} forEach _missionEmplacedWeaponPositions;
|
||||||
};
|
};
|
||||||
//diag_log format["_sm_spawnEmplaced<Line 38>:: _missionEmplacedWeapons = %1",_missionEmplacedWeapons];
|
|
||||||
{
|
{
|
||||||
_wepnClassName = _x select 0;
|
_wepnClassName = _x select 0;
|
||||||
_pos = _x select 1;
|
_pos = _x select 1;
|
||||||
_difficulty = _x select 2;
|
_difficulty = _x select 2;
|
||||||
|
|
||||||
// params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ];
|
|
||||||
private _empGroup = [blck_AI_Side,true] call blck_fnc_createGroup;
|
private _empGroup = [blck_AI_Side,true] call blck_fnc_createGroup;
|
||||||
if !(_empGroup) then
|
if !(_empGroup) then
|
||||||
{
|
{
|
||||||
[_empGroup,_pos,1,1,_difficulty,_pos,1,2,_uniforms,_headGear,false] call blck_fnc_spawnGroup;
|
[_empGroup,_pos,1,1,_difficulty,_pos,1,2,_uniforms,_headGear,false] call blck_fnc_spawnGroup;
|
||||||
_empGroup setcombatmode "RED";
|
_empGroup setcombatmode "RED";
|
||||||
_empGroup setBehaviour "COMBAT";
|
_empGroup setBehaviour "COMBAT";
|
||||||
// // params["_pos","_minDis","_maxDis","_group",["_mode","random"],["_wpPatrolMode","SAFE"],["_soldierType","null"],["_patrolRadius",30],["_wpTimeout",[5.0,7.5,10]]];
|
_wep = [_wepnClassName,[0,0,0],"NONE",0] call blck_fnc_spawnVehicle;
|
||||||
// Not sure of the value of giving waypoints here
|
|
||||||
//[_pos,0.01,0.02,_empGroup,"random","SAD","emplaced"] spawn blck_fnc_setupWaypoints;
|
|
||||||
//if (isNull _empGroup) exitWith {_abort = _true};
|
|
||||||
_wep = [_wepnClassName,[0,0,0],false] call blck_fnc_spawnVehicle;
|
|
||||||
//_empGroup setVariable["groupVehicle",_wep];
|
|
||||||
//_wep setVariable["vehicleGroup",_empGroup];
|
|
||||||
_wep setVariable["GRG_vehType","emplaced"];
|
_wep setVariable["GRG_vehType","emplaced"];
|
||||||
_wep setPosATL _pos;
|
_wep setPosATL _pos;
|
||||||
[_wep,false] call blck_fnc_configureMissionVehicle;
|
[_wep,false] call blck_fnc_configureMissionVehicle;
|
||||||
|
@ -19,34 +19,24 @@ _units = [];
|
|||||||
_abort = false;
|
_abort = false;
|
||||||
_pos = [];
|
_pos = [];
|
||||||
|
|
||||||
//diag_log format["_sm_spawnEmplaced <Line 26>:: _missionEmplacedWeapons = %1",_missionEmplacedWeapons];
|
|
||||||
// Define _missionEmplacedWeapons if not already configured.
|
// Define _missionEmplacedWeapons if not already configured.
|
||||||
if (_missionEmplacedWeapons isEqualTo []) then
|
if (_missionEmplacedWeapons isEqualTo []) then
|
||||||
{
|
{
|
||||||
_missionEmplacedWeaponPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius;
|
_missionEmplacedWeaponPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius;
|
||||||
{
|
{
|
||||||
_static = selectRandom blck_staticWeapons;
|
_static = selectRandom blck_staticWeapons;
|
||||||
//diag_log format["_fnc_spawnEmplacedWeaponArray: creating spawn element [%1,%2]",_static,_x];
|
|
||||||
_missionEmplacedWeapons pushback [_static,_coords vectorAdd _x,_aiDifficultyLevel];
|
_missionEmplacedWeapons pushback [_static,_coords vectorAdd _x,_aiDifficultyLevel];
|
||||||
//diag_log format["_fnc_spawnEmplacedWeaponArray: _mi updated to %1",_missionEmplacedWeapons];
|
|
||||||
} forEach _missionEmplacedWeaponPositions;
|
} forEach _missionEmplacedWeaponPositions;
|
||||||
};
|
};
|
||||||
//diag_log format["_sm_spawnEmplaced<Line 38>:: _missionEmplacedWeapons = %1",_missionEmplacedWeapons];
|
|
||||||
{
|
{
|
||||||
_wepnClassName = _x select 0;
|
_wepnClassName = _x select 0;
|
||||||
_pos = _x select 1;
|
_pos = _x select 1;
|
||||||
_difficulty = _x select 2;
|
_difficulty = _x select 2;
|
||||||
|
|
||||||
/// params["_pos", "_center", _numai1, _numai2, _skillLevel, _minDist, _maxDist, _configureWaypoints, _uniforms, _headGear,_vests,_backpacks,_weaponList,_sideArms, _scuba ];
|
|
||||||
__empGroup = [_pos,_pos,1,1,_difficulty,1,2,false,_uniforms,_headGear] call blck_fnc_spawnGroup;
|
__empGroup = [_pos,_pos,1,1,_difficulty,1,2,false,_uniforms,_headGear] call blck_fnc_spawnGroup;
|
||||||
_empGroup setcombatmode "RED";
|
_empGroup setcombatmode "RED";
|
||||||
_empGroup setBehaviour "COMBAT";
|
_empGroup setBehaviour "COMBAT";
|
||||||
// Not sure of the value of giving waypoints here.
|
_wep = [_wepnClassName,[0,0,0]] call blck_fnc_spawnVehicle;
|
||||||
//[_pos,0.01,0.02,_empGroup,"random","SAD","emplaced"] spawn blck_fnc_setupWaypoints;
|
|
||||||
//if (isNull _empGroup) exitWith {_abort = _true};
|
|
||||||
_wep = [_wepnClassName,[0,0,0],false] call blck_fnc_spawnVehicle;
|
|
||||||
//_empGroup setVariable["groupVehicle",_wep];
|
|
||||||
//_wep setVariable["vehicleGroup",_empGroup];
|
|
||||||
_wep setVariable["GRG_vehType","emplaced"];
|
_wep setVariable["GRG_vehType","emplaced"];
|
||||||
_wep setPosATL _pos;
|
_wep setPosATL _pos;
|
||||||
[_wep,false] call blck_fnc_configureMissionVehicle;
|
[_wep,false] call blck_fnc_configureMissionVehicle;
|
||||||
|
@ -27,13 +27,9 @@ _backpacks = [_aiDifficultyLevel] call blck_fnc_selectAIBackpacks;
|
|||||||
if !(_patrols isEqualTo []) then
|
if !(_patrols isEqualTo []) then
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
//diag_log format["_sm_spawnInfantryPatrols.sqf:: _x = %1",_x];
|
|
||||||
// Use the pre-defined spawn positions and other parameters for each group.
|
// Use the pre-defined spawn positions and other parameters for each group.
|
||||||
// [[22819.4,16929.5,5.33892],"red",4, 75]
|
|
||||||
_x params ["_pos","_difficulty","_noAI","_patrolRadius"];
|
_x params ["_pos","_difficulty","_noAI","_patrolRadius"];
|
||||||
private _group = [blck_AI_Side,true] call blck_fnc_createGroup;
|
private _group = [blck_AI_Side,true] call blck_fnc_createGroup;
|
||||||
// params[["_group","Error"],"_pos", "_center", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], ["_minDist",30], ["_maxDist",45],["_configureWaypoints",true], ["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],
|
|
||||||
// ["_weaponList",[]],["_sideArms",[]], ["_scuba",false],["_patrolRadius",30]];
|
|
||||||
#define setupWaypoints true
|
#define setupWaypoints true
|
||||||
if !(isNull _group) then
|
if !(isNull _group) then
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params["_objectDescriptors","_coords"];
|
params["_objectDescriptors","_coords",["_money",-1]];
|
||||||
|
|
||||||
if !(_objectDescriptors isEqualTo []) then
|
if !(_objectDescriptors isEqualTo []) then
|
||||||
{ // Spawn loot crates where specified in _objects using the information for loot parameters provided for each location.
|
{ // Spawn loot crates where specified in _objects using the information for loot parameters provided for each location.
|
||||||
@ -18,6 +18,14 @@ if !(_objectDescriptors isEqualTo []) then
|
|||||||
// data within the descriptor for each loot crate is organized as follows (not that the _allowDamageSim is included just for backward compatibilty but is not used
|
// data within the descriptor for each loot crate is organized as follows (not that the _allowDamageSim is included just for backward compatibilty but is not used
|
||||||
_x params["_crateClassName","_cratePosASL","_vectorDirUp","_allowDamageSim","_crateLoot","_lootCounts"];
|
_x params["_crateClassName","_cratePosASL","_vectorDirUp","_allowDamageSim","_crateLoot","_lootCounts"];
|
||||||
private _crate = [_cratePosASL, _crateClassName] call blck_fnc_spawnCrate;
|
private _crate = [_cratePosASL, _crateClassName] call blck_fnc_spawnCrate;
|
||||||
|
if (blck_debugLevel >= 3) then
|
||||||
|
{
|
||||||
|
[format["_fnc_sm_initializeMission: _money = %1",_money]] call blck_fnc_log;
|
||||||
|
};
|
||||||
|
if (_money > 0) then
|
||||||
|
{
|
||||||
|
[_crate,_money] call blck_fnc_addMoneyToObject;
|
||||||
|
};
|
||||||
[_crate, _crateLoot,_lootCounts] call blck_fnc_fillBoxes;
|
[_crate, _crateLoot,_lootCounts] call blck_fnc_fillBoxes;
|
||||||
} forEach _objectDescriptors;
|
} forEach _objectDescriptors;
|
||||||
}
|
}
|
||||||
@ -26,6 +34,10 @@ else
|
|||||||
{
|
{
|
||||||
_crateType = selectRandom blck_crateTypes;
|
_crateType = selectRandom blck_crateTypes;
|
||||||
_crate = [_coords,_crateType] call blck_fnc_spawnCrate;
|
_crate = [_coords,_crateType] call blck_fnc_spawnCrate;
|
||||||
|
if !(_money == -1) then
|
||||||
|
{
|
||||||
|
[_crate,_money] call blck_fnc_addMoneyToObject;
|
||||||
|
};
|
||||||
[_crate,blck_BoxLoot_Red,blck_lootCountsGreen] call blck_fnc_fillBoxes;
|
[_crate,blck_BoxLoot_Red,blck_lootCountsGreen] call blck_fnc_fillBoxes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ params["_vehicleDescriptors","_coords"];
|
|||||||
{
|
{
|
||||||
// data within the descriptor for each loot vehicle is organized as follows (not that the _allowDamageSim is included just for backward compatibilty but is not used)
|
// data within the descriptor for each loot vehicle is organized as follows (not that the _allowDamageSim is included just for backward compatibilty but is not used)
|
||||||
_x params["_vehcleClassName","_posATL","_vectorDirUp","_allowDamageSim","_loot","_lootCounts"];
|
_x params["_vehcleClassName","_posATL","_vectorDirUp","_allowDamageSim","_loot","_lootCounts"];
|
||||||
private _veh = [_vehcleClassName,_posATL] call blck_fnc_spawnVehicle;
|
private _veh = [_vehcleClassName,_posATL,"NONE",30] call blck_fnc_spawnVehicle;
|
||||||
[_veh, _loot,_lootCounts] call blck_fnc_fillBoxes;
|
[_veh, _loot,_lootCounts] call blck_fnc_fillBoxes;
|
||||||
} forEach _vehicleDescriptors;
|
} forEach _vehicleDescriptors;
|
||||||
|
|
||||||
|
@ -18,27 +18,18 @@ uiSleep 10; // Let the objects 'settle' before placing anything on or around the
|
|||||||
|
|
||||||
|
|
||||||
// Spawn Air Patrols
|
// Spawn Air Patrols
|
||||||
// params["_airPatrols","_noAirPatrols","_heliTypes","_center","_difficulty","_uniforms","_headGear"];
|
|
||||||
[_airPatrols,_noAirPatrols,_aircraftTypes,_missionCenter,_difficulty,_uniforms,_headgear,_weapons] call blck_fnc_sm_spawnAirPatrols;
|
[_airPatrols,_noAirPatrols,_aircraftTypes,_missionCenter,_difficulty,_uniforms,_headgear,_weapons] call blck_fnc_sm_spawnAirPatrols;
|
||||||
//uiSleep 1;
|
|
||||||
|
|
||||||
// Spawn Vehicle Patrols
|
// Spawn Vehicle Patrols
|
||||||
// params["_coords","_noVehiclePatrols","_vehiclePatrolSpawns","_aiDifficultyLevel","_uniforms","_headGear",["_missionType","unspecified"]];
|
|
||||||
[_missionCenter,_noVehiclePatrols,_vehiclePatrolParameters,_difficulty,_uniforms,_headGear] call blck_fnc_sm_spawnVehiclePatrols;
|
[_missionCenter,_noVehiclePatrols,_vehiclePatrolParameters,_difficulty,_uniforms,_headGear] call blck_fnc_sm_spawnVehiclePatrols;
|
||||||
//uiSleep 1;
|
|
||||||
|
|
||||||
|
|
||||||
// spawn infantry
|
// spawn infantry
|
||||||
// params["_patrols","_coords",["_minNoAI",3],["_maxNoAI",6],["_aiDifficultyLevel","red"],["_weapons",blck_WeaponList_Orange],["_uniforms",blck_SkinList],["_headGear",blck_BanditHeadgear]];
|
|
||||||
[_aiGroupParameters, _missionCenter,_minNoAI,_maxNoAI,_difficulty,_weapons,_uniforms,_headGear] call blck_fnc_sm_spawnInfantryPatrols;
|
[_aiGroupParameters, _missionCenter,_minNoAI,_maxNoAI,_difficulty,_weapons,_uniforms,_headGear] call blck_fnc_sm_spawnInfantryPatrols;
|
||||||
//uiSleep 1;
|
|
||||||
|
|
||||||
// spawn loot vehicles
|
// spawn loot vehicles
|
||||||
// params["_objects","_coords","_loot","_lootCounts"];
|
|
||||||
[_missionLootVehicles,_missionCenter,_crateLoot,_lootCounts] call blck_fnc_sm_spawnLootContainers;
|
[_missionLootVehicles,_missionCenter,_crateLoot,_lootCounts] call blck_fnc_sm_spawnLootContainers;
|
||||||
|
|
||||||
// Spawn static weapons
|
// Spawn static weapons
|
||||||
// params["_missionEmplacedWeapons","_noEmplacedWeapons","_aiDifficultyLevel","_coords","_uniforms","_headGear"];
|
|
||||||
[_missionEmplacedWeapons,_noEmplacedWeapons,_difficulty,_missionCenter,_uniforms,_headGear] call blck_fnc_sm_spawnEmplaceds;
|
[_missionEmplacedWeapons,_noEmplacedWeapons,_difficulty,_missionCenter,_uniforms,_headGear] call blck_fnc_sm_spawnEmplaceds;
|
||||||
|
|
||||||
// spawn loot chests
|
// spawn loot chests
|
||||||
@ -47,5 +38,4 @@ uiSleep 10; // Let the objects 'settle' before placing anything on or around the
|
|||||||
_blck_localMissionMarker = ["",_missionCenter,"","",_markerColor,_markerType];
|
_blck_localMissionMarker = ["",_missionCenter,"","",_markerColor,_markerType];
|
||||||
[_blck_localMissionMarker] call blck_fnc_spawnMarker;
|
[_blck_localMissionMarker] call blck_fnc_spawnMarker;
|
||||||
|
|
||||||
diag_log format["[blckeagls] Static Mission Spawner: Mission %1 spawned",_mission];
|
|
||||||
|
|
||||||
|
@ -13,15 +13,14 @@
|
|||||||
|
|
||||||
params["_coords","_noVehiclePatrols","_vehiclePatrolSpawns","_aiDifficultyLevel"];
|
params["_coords","_noVehiclePatrols","_vehiclePatrolSpawns","_aiDifficultyLevel"];
|
||||||
|
|
||||||
private["_vehGroup","_patrolVehicle","_missionAI","_missiongroups","_vehicles","_return","_vehiclePatrolSpawns","_randomVehicle","_return","_abort"];
|
private["_vehGroup","_patrolVehicle","_missionAI","_missiongroups","_vehicles","_return","_vehiclePatrolSpawns","_randomVehicle","_return","_abort",
|
||||||
private ["_weaponList","_sideArms","_uniforms","_headgear","_vests","_backpacks"];
|
"_weaponList","_sideArms","_uniforms","_headgear","_vests","_backpacks"];
|
||||||
|
|
||||||
if (_vehiclePatrolSpawns isEqualTo []) then
|
if (_vehiclePatrolSpawns isEqualTo []) then
|
||||||
{
|
{
|
||||||
private["_spawnPoints","_vehType"];
|
private["_spawnPoints","_vehType"];
|
||||||
_spawnPoints = [_coords,_noVehiclePatrols,75,100] call blck_fnc_findPositionsAlongARadius;
|
_spawnPoints = [_coords,_noVehiclePatrols,75,100] call blck_fnc_findPositionsAlongARadius;
|
||||||
{
|
{
|
||||||
// ["Vehicle Class Name", position[x,y,z], AI Skill [blue, red, green, orange],patrol radius [0 for static units], respawn time [seconds]]
|
|
||||||
#define vehiclePatrolRadius 150
|
#define vehiclePatrolRadius 150
|
||||||
#define vehicleRespawnTime 900
|
#define vehicleRespawnTime 900
|
||||||
_vehType = selectRandom blck_AIPatrolVehicles;
|
_vehType = selectRandom blck_AIPatrolVehicles;
|
||||||
@ -48,6 +47,7 @@ if (_vehiclePatrolSpawns isEqualTo []) then
|
|||||||
#define useWaypoints true
|
#define useWaypoints true
|
||||||
_patrolVehicle = [_spawnPos,_spawnPos,_vehicle,_patrolRadius,_patrolRadius,_vehGroup,useWaypoints,[difficulty] call blck_fnc_selectVehicleCrewCount,_patrolRadius] call blck_fnc_spawnVehiclePatrol; // Check whether we should pass the group; looks like we should.
|
_patrolVehicle = [_spawnPos,_spawnPos,_vehicle,_patrolRadius,_patrolRadius,_vehGroup,useWaypoints,[difficulty] call blck_fnc_selectVehicleCrewCount,_patrolRadius] call blck_fnc_spawnVehiclePatrol; // Check whether we should pass the group; looks like we should.
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
} forEach _vehiclePatrolSpawns;
|
} forEach _vehiclePatrolSpawns;
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
//diag_log format["_fnc_staticPatrolMonitor called at %1",diag_tickTime];
|
|
||||||
[] call blck_fnc_sm_monitorInfantry;
|
[] call blck_fnc_sm_monitorInfantry;
|
||||||
[] call blck_fnc_sm_monitorScuba;
|
[] call blck_fnc_sm_monitorScuba;
|
||||||
[] call blck_fnc_sm_monitorVehicles;
|
[] call blck_fnc_sm_monitorVehicles;
|
||||||
@ -19,7 +18,5 @@
|
|||||||
[] call blck_fnc_sm_monitorEmplaced;
|
[] call blck_fnc_sm_monitorEmplaced;
|
||||||
[] call blck_fnc_sm_monitorShips;
|
[] call blck_fnc_sm_monitorShips;
|
||||||
[] call blck_fnc_sm_monitorSubs;
|
[] call blck_fnc_sm_monitorSubs;
|
||||||
//[] call blck_fnc_sm_monitorGarrisonsASL;
|
|
||||||
//[] call blck_fnc_sm_monitorGarrisons_relPos;
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,54 +12,33 @@
|
|||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
_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"];
|
||||||
|
params["_pos","_mode",["_maxDist",12],["_wreckChoices",_wreckSelected],["_addFire",false]];
|
||||||
private ["_objs","_wreckSelected","_smokeType","_fire","_posFire","_posWreck","_smoke","_dis","_minDis","_maxDis","_closest","_wrecks"];
|
private ["_objs","_wreckSelected","_smokeType","_fire","_posFire","_posWreck","_smoke","_dis","_minDis","_maxDis","_closest","_wrecks"];
|
||||||
|
|
||||||
_objs = [];
|
|
||||||
|
|
||||||
// http://www.antihelios.de/EK/Arma/index.htm
|
_smokeType = if(_addFire) then {"test_EmptyObjectForFireBig"} else {"test_EmptyObjectForSmoke"};
|
||||||
_wrecks = ["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",_wrecks],["_addFire",false]];
|
|
||||||
|
|
||||||
_wreckSelected = selectRandom _wreckChoices;
|
|
||||||
//_smokeTrail = "test_EmptyObjectForSmoke"; // "options are "test_EmptyObjectForFireBig", "test_EmptyObjectForSmoke"
|
|
||||||
_smokeType = if(_addFire) then {"test_EmptyObjectForFireBig"} else {"test_EmptyObjectForSmoke"};
|
|
||||||
|
|
||||||
switch (_mode) do {
|
switch (_mode) do {
|
||||||
case "none": {if (true) exitWith {};};
|
case "none": {_minDis = 0; _maxDis = 1; _closest = 1;};
|
||||||
case "center": {_minDis = 5; _maxDis = 15; _closest = 5;};
|
case "center": {_minDis = 5; _maxDis = 15; _closest = 5;};
|
||||||
case "random": {_minDis = 15; _maxDis = 50; _closest = 10;};
|
case "random": {_minDis = 15; _maxDis = 50; _closest = 10;};
|
||||||
default {_minDis = 5; _maxDis = 15; _closest = 5;};
|
default {_minDis = 5; _maxDis = 15; _closest = 5;};
|
||||||
};
|
};
|
||||||
_dis = 0;
|
private _posWreck = [_pos, _minDis, 50, _closest, 0, 20, 0] call BIS_fnc_findSafePos; // find a safe spot near the location passed in the call
|
||||||
//_posWreck = [_pos, 0, 30, 10, 0, 20, 0] call BIS_fnc_findSafePos; // Position the wreck within 30 meters of the position and 5 meters away from the nearest object
|
|
||||||
// _minDis and _maxDis determine the spacing between the smoking item and the loot crate.
|
|
||||||
_minDis = 5; // Minimum distance of
|
|
||||||
//_maxDis = 50;
|
|
||||||
_closest = 10;
|
|
||||||
|
|
||||||
while {_dis < _maxDist} do
|
|
||||||
{
|
|
||||||
_posWreck = [_pos, _minDis, 50, _closest, 0, 20, 0] call BIS_fnc_findSafePos; // find a safe spot near the location passed in the call
|
|
||||||
_dis = _posWreck distance _pos;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 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 [_wreckSelected, [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);
|
||||||
//https://community.bistudio.com/wiki/setVectorUp
|
|
||||||
//_fire setVectorUp surfaceNormal position _fire;
|
|
||||||
|
|
||||||
|
|
||||||
// spawn asmoke or fire source near the wreck and attach it.
|
// spawn asmoke or fire source near the wreck and attach it.
|
||||||
_smoke = createVehicle [_smokeType, [0,0,0], [], 0, "can_collide"]; // "test_EmptyObjectForSmoke" createVehicle _posFire;
|
_smoke = createVehicle [_smokeType, [0,0,0], [], 0, "can_collide"];
|
||||||
_smoke setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
|
_smoke setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
|
||||||
_smoke setPos _posWreck;
|
_smoke setPos _posWreck;
|
||||||
_smoke attachto [_fire, [0,0,1]];
|
_smoke attachto [_fire, [0,0,1.5]];
|
||||||
|
|
||||||
_objs = _objs + [_fire,_smoke];
|
_objs = [_fire,_smoke];
|
||||||
//diag_log format ["--smokeAtCrate.sqf:: _objs = %1",_objs];
|
|
||||||
_objs
|
_objs
|
||||||
|
@ -34,13 +34,9 @@ _newObjs pushBack _obj;
|
|||||||
_dam = _x select 4;
|
_dam = _x select 4;
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_spawnBaseObjects: className %1 | _center %2 | _offset %3 | element %4",_x select 0,_center,_x select 1,_forEachIndex];
|
|
||||||
|
|
||||||
_obj = createVehicle[(_x select 0),_center vectorAdd (_x select 1),[],0,"CAN_COLLIDE"];
|
_obj = createVehicle[(_x select 0),_center vectorAdd (_x select 1),[],0,"CAN_COLLIDE"];
|
||||||
//diag_log format["_fnc_spawnBaseObjects::-->> _x = %1 | _obj = %2",_x,_obj];
|
|
||||||
_newObjs pushback _obj;
|
_newObjs pushback _obj;
|
||||||
_obj setDir (_x select 2);
|
[_obj, (_x select 2)] call blck_fnc_setDirUp;
|
||||||
|
|
||||||
_obj enableDynamicSimulation _sim;
|
_obj enableDynamicSimulation _sim;
|
||||||
_obj allowDamage _dam;
|
_obj allowDamage _dam;
|
||||||
if ((typeOf _obj) isKindOf "LandVehicle" || (typeOf _obj) isKindOf "Air" || (typeOf _obj) isKindOf "Sea") then
|
if ((typeOf _obj) isKindOf "LandVehicle" || (typeOf _obj) isKindOf "Air" || (typeOf _obj) isKindOf "Sea") then
|
||||||
|
@ -10,27 +10,22 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
private ["_crate"];
|
|
||||||
params["_coords",["_crateType","Box_NATO_Wps_F"],["_crateDir",0]];
|
params["_coords",["_crateType","Box_NATO_Wps_F"],["_crateDir",0]];
|
||||||
|
|
||||||
_crate = createVehicle [_crateType,[0,0,0],[], 2, "NONE"];
|
private _cratePos = _coords findEmptyPosition[15,25,_crateType];
|
||||||
|
_crate = createVehicle [_crateType,_coords,[], 0, "NONE"];
|
||||||
_crate setVariable ["LAST_CHECK", 100000];
|
_crate setVariable ["LAST_CHECK", 100000];
|
||||||
_crate allowDamage false;
|
_crate allowDamage false;
|
||||||
_crate enableRopeAttach false;
|
_crate enableRopeAttach false;
|
||||||
[_crate] call blck_fnc_emptyObject;
|
[_crate] call blck_fnc_emptyObject;
|
||||||
|
|
||||||
_crate setPosATL [_coords select 0, _coords select 1, (_coords select 2) + 0.25];
|
_crate setPosATL [_coords select 0, _coords select 1, (_coords select 2) + 0.25];
|
||||||
_crate setDir _crateDir;
|
[_crate, _crateDir] call blck_fnc_setDirUp;
|
||||||
//_crate setVectorUp [0,0,1];
|
|
||||||
_crate setVectorUp surfaceNormal position _crate;
|
_crate setVectorUp surfaceNormal position _crate;
|
||||||
// the function to have a lightsource on underwater objects needs work.
|
|
||||||
if ((_coords select 2) < 0 || surfaceIsWater (_coords)) then
|
if ((_coords select 2) < 0 || surfaceIsWater (_coords)) then
|
||||||
{
|
{
|
||||||
|
|
||||||
private["_lantern","_bbr","_p1","_p2","_maxHeight"];
|
private["_lantern","_bbr","_p1","_p2","_maxHeight"];
|
||||||
//_lantern = createVehicle ["PortableHelipadLight_01_red_F", [0,0,0],[],0,"CAN_COLLIDE"];// Land_Camping_Light_F
|
|
||||||
//_lantern enableSimulationGlobal true;
|
|
||||||
//_lantern switchLight "on";
|
|
||||||
_light = "#lightpoint" createVehicle (getPos _crate);
|
_light = "#lightpoint" createVehicle (getPos _crate);
|
||||||
_light setLightDayLight true;
|
_light setLightDayLight true;
|
||||||
_light setLightBrightness 1.0;
|
_light setLightBrightness 1.0;
|
||||||
@ -40,7 +35,6 @@ if ((_coords select 2) < 0 || surfaceIsWater (_coords)) then
|
|||||||
_p1 = _bbr select 0;
|
_p1 = _bbr select 0;
|
||||||
_p2 = _bbr select 1;
|
_p2 = _bbr select 1;
|
||||||
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
|
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
|
||||||
//diag_log format["_fnc_spawnCrate: _bbr = %1 | _maxHeight = %2",_bbr,_maxHeight];
|
|
||||||
_light attachTo [_crate, [0,0,(_maxHeight + 0.5)]];
|
_light attachTo [_crate, [0,0,(_maxHeight + 0.5)]];
|
||||||
};
|
};
|
||||||
_crate;
|
_crate;
|
||||||
|
@ -20,12 +20,6 @@ if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call blc
|
|||||||
if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout};
|
if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout};
|
||||||
if (_sideArms isEqualTo []) then {[_aiDifficultyLevel] call blck_fnc_selectAISidearms};
|
if (_sideArms isEqualTo []) then {[_aiDifficultyLevel] call blck_fnc_selectAISidearms};
|
||||||
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnEmplacedWeaponArray: _this %1 varName %2 = %3",_forEachIndex,_x,_this select _forEachIndex];
|
|
||||||
} forEach ["_coords","_missionEmplacedWeapons","_useRelativePos","_noEmplacedWeapons","_aiDifficultyLevel"];
|
|
||||||
*/
|
|
||||||
|
|
||||||
private["_return","_emplacedWeps","_emplacedAI","_wep","_units","_gunner","_abort","_pos","_mode","_useRelativePos","_useRelativePos"];
|
private["_return","_emplacedWeps","_emplacedAI","_wep","_units","_gunner","_abort","_pos","_mode","_useRelativePos","_useRelativePos"];
|
||||||
_emplacedWeps = [];
|
_emplacedWeps = [];
|
||||||
_emplacedAI = [];
|
_emplacedAI = [];
|
||||||
@ -58,8 +52,7 @@ if (_missionEmplacedWeapons isEqualTo []) then
|
|||||||
#define maxAI 1
|
#define maxAI 1
|
||||||
#define minDist 1
|
#define minDist 1
|
||||||
#define maxDist 2
|
#define maxDist 2
|
||||||
|
|
||||||
/// // params["_pos", "_center", _numai1, _numai2, _skillLevel, _minDist, _maxDist, _configureWaypoints, _uniforms, _headGear,_vests,_backpacks,_weaponList,_sideArms, _scuba ];
|
|
||||||
private _empGroup = [blck_AI_Side,true] call blck_fnc_createGroup;
|
private _empGroup = [blck_AI_Side,true] call blck_fnc_createGroup;
|
||||||
if !(isNull _empGroup) then
|
if !(isNull _empGroup) then
|
||||||
{
|
{
|
||||||
@ -82,7 +75,7 @@ if (_missionEmplacedWeapons isEqualTo []) then
|
|||||||
} else {
|
} else {
|
||||||
_abort = true;
|
_abort = true;
|
||||||
_return = grpNull;
|
_return = grpNull;
|
||||||
diag_log format["[blckeagls] <WARNING> createGroup returned grpNull"];
|
["createGroup returned grpNull","warning"] call blck_fnc_log;
|
||||||
};
|
};
|
||||||
} forEach _missionEmplacedWeapons;
|
} forEach _missionEmplacedWeapons;
|
||||||
if !(_abort) then
|
if !(_abort) then
|
||||||
|
@ -26,10 +26,8 @@ _staticsSpawned = [];
|
|||||||
_obj = [_staticClassName, [0,0,0]] call blck_fnc_spawnVehicle;
|
_obj = [_staticClassName, [0,0,0]] call blck_fnc_spawnVehicle;
|
||||||
_obj setVariable["GRG_vehType","emplaced"];
|
_obj setVariable["GRG_vehType","emplaced"];
|
||||||
_staticsSpawned pushBack _obj;
|
_staticsSpawned pushBack _obj;
|
||||||
//diag_log format["_fnc_spawnGarrisonInsideBuilding_ATL: _obj = %1 | _staticsSpawned = %2",_obj,_staticsSpawned];
|
|
||||||
_obj setPosATL (_staticRelPos vectorAdd getPosATL _building);
|
_obj setPosATL (_staticRelPos vectorAdd getPosATL _building);
|
||||||
_obj setDir _staticDir;
|
_obj setDir _staticDir;
|
||||||
//diag_log format["_fnc_spawnGarrisonInsideBuilding_ATL: _obj = %1 | getPosATL _obj = %2",_obj,getPosATL _obj];
|
|
||||||
_unit = [[0,0,0],_group,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_launcher,_weaponList,_sideArms,false,true] call blck_fnc_spawnUnit;
|
_unit = [[0,0,0],_group,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_launcher,_weaponList,_sideArms,false,true] call blck_fnc_spawnUnit;
|
||||||
_unit moveInGunner _obj;
|
_unit moveInGunner _obj;
|
||||||
}forEach _statics;
|
}forEach _statics;
|
||||||
|
@ -17,29 +17,25 @@ if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call blck_f
|
|||||||
if (_headGear isEqualTo []) then {_headGear = [_aiDifficultyLevel] call blck_fnc_selectAIHeadgear};
|
if (_headGear isEqualTo []) then {_headGear = [_aiDifficultyLevel] call blck_fnc_selectAIHeadgear};
|
||||||
if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call blck_fnc_selectAIVests};
|
if (_vests isEqualTo []) then {_vests = [_aiDifficultyLevel] call blck_fnc_selectAIVests};
|
||||||
if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call blck_fnc_selectAIBackpacks};
|
if (_backpacks isEqualTo []) then {_backpacks = [_aiDifficultyLevel] call blck_fnc_selectAIBackpacks};
|
||||||
//if (_typesStatics isEqualTo []) then {_typesStatics = blck_staticWeapons};
|
|
||||||
|
|
||||||
private["_staticsSpawned","_allBldPsn","_allBldPsn","_floor","_ceil","_statics","_units","_unit","_obj","_staticClassName","_usedBldPsn","_pos","_obj"];
|
private["_unit","_obj","_staticClassName","_usedBldPsn","_pos","_obj"];
|
||||||
_allBldPsn = [_building] call BIS_fnc_buildingPositions;
|
private _allBldPsn = [_building] call BIS_fnc_buildingPositions;
|
||||||
_usedBldPsn = [];
|
private _usedBldPsn = [];
|
||||||
_floor = floor((count _allBldPsn)/2);
|
private _floor = floor((count _allBldPsn)/2);
|
||||||
_ceil = ceil((count _allBldPsn)/2);
|
private _ceil = ceil((count _allBldPsn)/2);
|
||||||
_statics = if (_ceil > _noStatics) then {_noStatics} else {_ceil};
|
private _statics = if (_ceil > _noStatics) then {_noStatics} else {_ceil};
|
||||||
_units = if (_floor > _noUnits) then {_noUnits} else {_floor};
|
private _units = if (_floor > _noUnits) then {_noUnits} else {_floor};
|
||||||
_staticsSpawned = [];
|
private _staticsSpawned = [];
|
||||||
uiSleep 1;
|
uiSleep 1;
|
||||||
for "_i" from 1 to _statics do
|
for "_i" from 1 to _statics do
|
||||||
{
|
{
|
||||||
diag_log format["_fnc_spawnGarrisonInsideBuilding_relPos: _x = %1",_x];
|
|
||||||
_pos = selectRandom _allBldPsn;
|
_pos = selectRandom _allBldPsn;
|
||||||
_allBldPsn = _allBldPsn - [_pos];
|
_allBldPsn = _allBldPsn - [_pos];
|
||||||
_staticClassName = selectRandom _typesStatics;
|
_staticClassName = selectRandom _typesStatics;
|
||||||
_obj = [_staticClassName, [0,0,0], true] call blck_fnc_spawnVehicle;
|
_obj = [_staticClassName, [0,0,0]] call blck_fnc_spawnVehicle;
|
||||||
_obj setVariable["GRG_vehType","emplaced"];
|
_obj setVariable["GRG_vehType","emplaced"];
|
||||||
_staticsSpawned pushBack _obj;
|
_staticsSpawned pushBack _obj;
|
||||||
diag_log format["_fnc_spawnGarrisonInsideBuilding_relPos: _obj = %1 | _staticsSpawned = %2",_obj,_staticsSpawned];
|
|
||||||
_obj setPosATL _pos; // (_pos vectorAdd (getPosATL _building));
|
_obj setPosATL _pos; // (_pos vectorAdd (getPosATL _building));
|
||||||
diag_log format["static weapon %1 placed in building %2 located at %4 at postion %3",_obj,_building,_pos, getPosATL _building];
|
|
||||||
_unit = [[0,0,0],_group,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_launcher,_weaponList,_sideArms,false,true] call blck_fnc_spawnUnit;
|
_unit = [[0,0,0],_group,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_launcher,_weaponList,_sideArms,false,true] call blck_fnc_spawnUnit;
|
||||||
_unit moveInGunner _obj;
|
_unit moveInGunner _obj;
|
||||||
};
|
};
|
||||||
@ -48,7 +44,6 @@ for "_i" from 1 to _units do
|
|||||||
{
|
{
|
||||||
_pos = selectRandom _allBldPsn;
|
_pos = selectRandom _allBldPsn;
|
||||||
_allBldPsn = _allBldPsn - [_pos];
|
_allBldPsn = _allBldPsn - [_pos];
|
||||||
// ["_pos","_aiGroup",["_aiDifficultyLevel","red"],["_uniforms", []],["_headGear",[]],["_vests",[]],["_backpacks",[]],["_Launcher","none"],["_weaponList",[]],["_sideArms",[]],["_scuba",false],["_garrison",false]];
|
|
||||||
_unit = [[0,0,0],_group,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_launcher,_weaponList,_sideArms,false,true] call blck_fnc_spawnUnit;
|
_unit = [[0,0,0],_group,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_launcher,_weaponList,_sideArms,false,true] call blck_fnc_spawnUnit;
|
||||||
_unit setPosATL _pos;
|
_unit setPosATL _pos;
|
||||||
};
|
};
|
||||||
|
@ -32,13 +32,10 @@ for "_i" from 1 to _noMines/2 do
|
|||||||
_xpos = (_pos select 0) + sin (_dir) * _radius;
|
_xpos = (_pos select 0) + sin (_dir) * _radius;
|
||||||
_ypos = (_pos select 1) + cos (_dir) * _radius;
|
_ypos = (_pos select 1) + cos (_dir) * _radius;
|
||||||
_posMine = [_xpos,_ypos,0];
|
_posMine = [_xpos,_ypos,0];
|
||||||
//_posMine = [[_xpos,_ypos,0],0,10,_closest,0,20,0] call BIS_fnc_findSafePos; // find a random loc
|
|
||||||
_mine = createMine ["ATMine", _posMine, [], 0];
|
_mine = createMine ["ATMine", _posMine, [], 0];
|
||||||
_mine setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
|
_mine setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
|
||||||
_mine setPos _posMine;
|
_mine setPos _posMine;
|
||||||
//https://community.bistudio.com/wiki/setVectorUp
|
|
||||||
_minesPlaced = _minesPlaced + [_mine];
|
_minesPlaced = _minesPlaced + [_mine];
|
||||||
//diag_log format["[spawnMines.sqf] mine # %2 spawned at %1",_posMine,_i];
|
|
||||||
};
|
};
|
||||||
_dir = _dir + _incr;
|
_dir = _dir + _incr;
|
||||||
};
|
};
|
||||||
|
@ -17,7 +17,6 @@ _fnc_dropMissionCrates = {
|
|||||||
_markers = [];
|
_markers = [];
|
||||||
|
|
||||||
{
|
{
|
||||||
// params["_pos","_crate",["_crateVisualMarker",true],["_dropHeight", 150]];
|
|
||||||
[(getPos _x), _x, true, 150] call blck_fnc_paraDropObject;
|
[(getPos _x), _x, true, 150] call blck_fnc_paraDropObject;
|
||||||
} forEach _crates;
|
} forEach _crates;
|
||||||
|
|
||||||
@ -26,7 +25,6 @@ _fnc_dropMissionCrates = {
|
|||||||
{
|
{
|
||||||
uiSleep 1;
|
uiSleep 1;
|
||||||
{
|
{
|
||||||
// (((getPos _crate) select 2) < 3)
|
|
||||||
if ((getPos _x) select 2 < 5) then
|
if ((getPos _x) select 2 < 5) then
|
||||||
{
|
{
|
||||||
_airborneCrates = _airborneCrates - [_x];
|
_airborneCrates = _airborneCrates - [_x];
|
||||||
@ -36,12 +34,9 @@ _fnc_dropMissionCrates = {
|
|||||||
_location = getPos _x;
|
_location = getPos _x;
|
||||||
_blck_localMissionMarker = [format["crateMarker%1%2",_location select 0, _location select 1],_location,"","","ColorBlack",["mil_dot",[]]];
|
_blck_localMissionMarker = [format["crateMarker%1%2",_location select 0, _location select 1],_location,"","","ColorBlack",["mil_dot",[]]];
|
||||||
_marker = [_blck_localMissionMarker] call blck_fnc_spawnMarker;
|
_marker = [_blck_localMissionMarker] call blck_fnc_spawnMarker;
|
||||||
//_markers pushBack _marker;
|
|
||||||
blck_temporaryMarkers pushBack [_marker,diag_tickTime + 300];
|
blck_temporaryMarkers pushBack [_marker,diag_tickTime + 300];
|
||||||
//uiSleep 0.5;
|
|
||||||
_curPosCrate = getPos _x;
|
_curPosCrate = getPos _x;
|
||||||
_x setPos [_curPosCrate select 0, _curPosCrate select 1, 0.3];
|
_x setPos [_curPosCrate select 0, _curPosCrate select 1, 0.3];
|
||||||
//_x setVectorDirAndUp[[0,1,0],[0,0,1]];
|
|
||||||
};
|
};
|
||||||
} forEach _crates;
|
} forEach _crates;
|
||||||
};
|
};
|
||||||
@ -63,7 +58,7 @@ private _cratesSpawned = [];
|
|||||||
|
|
||||||
private _pos = _coords vectorAdd _crateOffset;
|
private _pos = _coords vectorAdd _crateOffset;
|
||||||
private _crate = [_pos,_crateType] call blck_fnc_spawnCrate;
|
private _crate = [_pos,_crateType] call blck_fnc_spawnCrate;
|
||||||
_crate setDir _crateDir;
|
[_crate, _crateDir] call blck_fnc_setDirUp;
|
||||||
_crate setVariable["lootArray",_lootArray];
|
_crate setVariable["lootArray",_lootArray];
|
||||||
_crate setVariable["lootCounts",_lootCounts];
|
_crate setVariable["lootCounts",_lootCounts];
|
||||||
_crate setVariable["difficulty",_difficulty];
|
_crate setVariable["difficulty",_difficulty];
|
||||||
@ -72,19 +67,10 @@ private _cratesSpawned = [];
|
|||||||
[_crate] call blck_fnc_loadMissionCrate;
|
[_crate] call blck_fnc_loadMissionCrate;
|
||||||
};
|
};
|
||||||
_cratesSpawned pushback _crate;
|
_cratesSpawned pushback _crate;
|
||||||
#define blck_debugMode
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel >= 2) then
|
|
||||||
{
|
|
||||||
_marker = createMarker [format["crateMarker%1",random(1000000)], _pos];
|
|
||||||
_marker setMarkerType "mil_triangle";
|
|
||||||
_marker setMarkerColor "colorGreen";
|
|
||||||
_crate setVariable["crateMarker",_marker];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
}forEach _cratesToSpawn;
|
}forEach _cratesToSpawn;
|
||||||
|
|
||||||
if (_spawnCrateTiming in ["atMissionEndAir","atMissionStartAir"]) then
|
if (_spawnCrateTiming in ["atMissionEndAir","atMissionSpawnAir"]) then
|
||||||
{
|
{
|
||||||
[_cratesSpawned] spawn _fnc_dropMissionCrates;
|
[_cratesSpawned] spawn _fnc_dropMissionCrates;
|
||||||
};
|
};
|
||||||
|
@ -16,21 +16,13 @@ if (count _coords isEqualTo 2) then {_coords pushBack 0};
|
|||||||
private _vehs = [];
|
private _vehs = [];
|
||||||
{
|
{
|
||||||
_x params["_vehType","_vehOffset",["_dir",0],"_lootArray","_lootCounts"];
|
_x params["_vehType","_vehOffset",["_dir",0],"_lootArray","_lootCounts"];
|
||||||
//diag_log format["spawnMissionCVehicles: _vehType = %1 | _vehOffset = %2 | _lootCounts = %4 | _dir %5 | _lock %6 | _lootArray = %3 ",_vehType,_vehOffset,_lootArray,_lootCounts,_dir,_lock];
|
|
||||||
private _pos =_coords vectorAdd _vehOffset;
|
private _pos =_coords vectorAdd _vehOffset;
|
||||||
_veh = [_vehType, _pos] call blck_fnc_spawnVehicle;
|
_veh = [_vehType, _pos] call blck_fnc_spawnVehicle;
|
||||||
if (typeName _dir isEqualTo "SCALAR") then
|
[_veh, _dir] call blck_fnc_setDirUp;
|
||||||
{
|
|
||||||
_veh setDir _dir;
|
|
||||||
};
|
|
||||||
if (typeName _dir isEqualTo "ARRAY") then
|
|
||||||
{
|
|
||||||
_veh setVectorDirAndUp _dir;
|
|
||||||
};
|
|
||||||
_veh lock _lock;
|
_veh lock _lock;
|
||||||
if (_loadCrateTiming isEqualTo "atMissionSpawn") then
|
if (_loadCrateTiming isEqualTo "atMissionSpawn") then
|
||||||
{
|
{
|
||||||
//diag_log format["blck_fnc_spawnMissionLootVehicles::-> loading loot at mission spawn for veh %1",_x];
|
|
||||||
[_veh,_lootArray,_lootCounts] call blck_fnc_fillBoxes;
|
[_veh,_lootArray,_lootCounts] call blck_fnc_fillBoxes;
|
||||||
_veh setVariable["lootLoaded",true];
|
_veh setVariable["lootLoaded",true];
|
||||||
};
|
};
|
||||||
|
@ -28,7 +28,7 @@ private["_vehGroup","_vehiclePatrolSpawns","_missionAI","_missiongroups","_vehic
|
|||||||
_vehicles = [];
|
_vehicles = [];
|
||||||
_missionAI = [];
|
_missionAI = [];
|
||||||
_abort = false;
|
_abort = false;
|
||||||
//diag_log format["fnc_spawnMissionVehiclePatrols(29): _missionPatrolVehicles = %1",_missionPatrolVehicles];
|
|
||||||
if (_missionPatrolVehicles isEqualTo []) then
|
if (_missionPatrolVehicles isEqualTo []) then
|
||||||
{
|
{
|
||||||
_useRelativePos = false;
|
_useRelativePos = false;
|
||||||
@ -37,7 +37,6 @@ if (_missionPatrolVehicles isEqualTo []) then
|
|||||||
_v = [_skillAI] call blck_fnc_selectPatrolVehicle;
|
_v = [_skillAI] call blck_fnc_selectPatrolVehicle;
|
||||||
_missionPatrolVehicles pushBack [_v, _x];
|
_missionPatrolVehicles pushBack [_v, _x];
|
||||||
}forEach _vehiclePatrolSpawns;
|
}forEach _vehiclePatrolSpawns;
|
||||||
//diag_log format["fnc_spawnMissionVehiclePatrols(38): _missionPatrolVehicles updated to %1",_missionPatrolVehicles];
|
|
||||||
};
|
};
|
||||||
#define configureWaypoints false
|
#define configureWaypoints false
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,3 @@
|
|||||||
/*
|
|
||||||
for ghostridergaming
|
|
||||||
By Ghostrider [GRG]
|
|
||||||
Copyright 2016
|
|
||||||
checks the status of each entry in
|
|
||||||
/*
|
/*
|
||||||
By Ghostrider [GRG]
|
By Ghostrider [GRG]
|
||||||
--------------------------
|
--------------------------
|
||||||
@ -16,30 +11,29 @@
|
|||||||
|
|
||||||
if (blck_missionsRunning >= blck_maxSpawnedMissions) exitWith {};
|
if (blck_missionsRunning >= blck_maxSpawnedMissions) exitWith {};
|
||||||
|
|
||||||
private["_coords","_compiledMission","_search","_readyToSpawnQue","_missionToSpawn","_allowReinforcements"];
|
{
|
||||||
_readyToSpawnQue = [];
|
private _missionCategoryDescriptors = _x;
|
||||||
{
|
_missionCategoryDescriptors params["_difficulty","_maxNoMissions","_noActiveMissions","_tMin","_tMax","_waitTime","_missionsData"];
|
||||||
if ( (diag_tickTime > (_x select 5)) && ((_x select 5) > 0) ) then
|
|
||||||
|
if (_noActiveMissions < _maxNoMissions && diag_tickTime > _waitTime && blck_missionsRunning < blck_maxSpawnedMissions) then
|
||||||
{
|
{
|
||||||
_readyToSpawnQue pushback _x;
|
|
||||||
|
// time to reset timers and spawn something.
|
||||||
|
private _wt = diag_tickTime + _tmin + (random(_tMax - _tMin));
|
||||||
|
private _missionInitialized = [_x,selectRandom _missionsData] call blck_fnc_initializeMission;
|
||||||
|
if (blck_debugLevel >= 3) then
|
||||||
|
{
|
||||||
|
if !(_missionInitialized) then
|
||||||
|
{
|
||||||
|
[format["fnc_spawnPendingMissions: _missionInitialized = %1",_missionInitialized],"warning"] call blck_fnc_log;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
if (_missionInitialized) then
|
||||||
|
{
|
||||||
|
#define waitTime 5
|
||||||
|
#define noActive 2
|
||||||
|
_x set[waitTime, _wt]; // _x here is the _missionCategoryDescriptors being evaluated
|
||||||
|
_x set[noActive, _noActiveMissions + 1];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
} forEach blck_pendingMissions;
|
} forEach blck_missionData;
|
||||||
|
|
||||||
if (count _readyToSpawnQue > 0) then
|
|
||||||
{
|
|
||||||
_missionToSpawn = selectRandom _readyToSpawnQue;
|
|
||||||
|
|
||||||
|
|
||||||
_coords = [] call blck_fnc_FindSafePosn;
|
|
||||||
if (_coords isEqualTo []) exitWith
|
|
||||||
{
|
|
||||||
diag_log format["[blckagls] fnc_spawnPendingMissions: <ERROR> _fnc_findSafePosn could not find a location for this mission; consider reducing distances between players, bases, missions or towns."];
|
|
||||||
};
|
|
||||||
_compiledMission = selectRandom (_missionToSpawn select 0);
|
|
||||||
|
|
||||||
_missionMarker = _missionToSpawn select 1;
|
|
||||||
_missionDifficulty = _missionToSpawn select 2;
|
|
||||||
[_coords,_missionMarker,_missionDifficulty] spawn _compiledMission;
|
|
||||||
};
|
|
||||||
|
|
||||||
true
|
|
||||||
|
@ -26,6 +26,7 @@ _wreck enableSimulationGlobal false;
|
|||||||
_wreck enableDynamicSimulation false;
|
_wreck enableDynamicSimulation false;
|
||||||
_objects pushBack _wreck;
|
_objects pushBack _wreck;
|
||||||
{
|
{
|
||||||
|
|
||||||
private _dir = random(360);
|
private _dir = random(360);
|
||||||
private _radius = minObjectSpawnRadius + random(maxObjectSpawnRadius);
|
private _radius = minObjectSpawnRadius + random(maxObjectSpawnRadius);
|
||||||
_wreck = createVehicle[_x, _coords getPos[_radius,_dir], [], 2];
|
_wreck = createVehicle[_x, _coords getPos[_radius,_dir], [], 2];
|
||||||
|
@ -15,10 +15,7 @@
|
|||||||
#define UMS_sidearms []
|
#define UMS_sidearms []
|
||||||
|
|
||||||
params["_group","_pos",["_skillLevel","red"],["_numUnits",6],["_patrolRadius",15]];
|
params["_group","_pos",["_skillLevel","red"],["_numUnits",6],["_patrolRadius",15]];
|
||||||
//{diag_log format["_fnc_spawnScubaGroup: _this select %1 = %2",_foreachindex,_x]} forEach _this;
|
|
||||||
|
|
||||||
//params[["_group","Error"],"_pos", "_center", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], ["_minDist",30], ["_maxDist",45],["_configureWaypoints",true],
|
|
||||||
//["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_scuba",false],["_patrolRadius",30]];
|
|
||||||
[_group,_pos,_pos,_numUnits,_numUnits,_skillLevel, _patrolRadius - 2, _patrolRadius, configureWaypoints, blck_UMS_uniforms, blck_UMS_headgear, blck_UMS_vests, UMS_backpacks, blck_UMS_weapons, UMS_sidearms, isScubaGroup] call blck_fnc_spawnGroup;
|
[_group,_pos,_pos,_numUnits,_numUnits,_skillLevel, _patrolRadius - 2, _patrolRadius, configureWaypoints, blck_UMS_uniforms, blck_UMS_headgear, blck_UMS_vests, UMS_backpacks, blck_UMS_weapons, UMS_sidearms, isScubaGroup] call blck_fnc_spawnGroup;
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,15 +10,14 @@
|
|||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
// ["B_SDV_01_F",[22584.9,15304.8,-6.14801],"red",4, 75,0],
|
|
||||||
params["_SDV","_pos","_difficulty","_numAI","_patrolRadius","_respawnTime"];
|
params["_SDV","_pos","_difficulty","_numAI","_patrolRadius","_respawnTime"];
|
||||||
//diag_log format["_fnc_spawnSurfacePatrol: _this = %1",_this];
|
|
||||||
private _group = [blck_AI_Side,true] call blck_fnc_createGroup;
|
private _group = [blck_AI_Side,true] call blck_fnc_createGroup;
|
||||||
private _vehicle = objNull;
|
private _vehicle = objNull;
|
||||||
if !(isNull _group) then
|
if !(isNull _group) then
|
||||||
{
|
{
|
||||||
[_group,_pos,_numAI,_numAI,_difficulty,_pos,_patrolRadius - 2,_patrolRadius,blck_UMS_uniforms,blck_UMS_headgear,true,blck_UMS_weapons,blck_UMS_vests,true] call blck_fnc_spawnGroup;
|
[_group,_pos,_numAI,_numAI,_difficulty,_pos,_patrolRadius - 2,_patrolRadius,blck_UMS_uniforms,blck_UMS_headgear,true,blck_UMS_weapons,blck_UMS_vests,true] call blck_fnc_spawnGroup;
|
||||||
// params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull]];
|
|
||||||
_vehicle = [_pos,_pos,_vehType,_minDis,_maxDis,_group] call blck_fnc_spawnVehiclePatrol;
|
_vehicle = [_pos,_pos,_vehType,_minDis,_maxDis,_group] call blck_fnc_spawnVehiclePatrol;
|
||||||
};
|
};
|
||||||
_vehicle
|
_vehicle
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params["_mission","_status",["_coords",[0,0,0]] ];
|
params["_mission","_status",["_coords",[0,0,0]] ];
|
||||||
|
|
||||||
// _mission is the name used to identify the marker associated with that particular mission. it is a unique identifier.
|
// _mission is the name used to identify the marker associated with that particular mission. it is a unique identifier.
|
||||||
#ifdef blck_debugMode
|
#ifdef blck_debugMode
|
||||||
if (blck_debugLevel > 3) then {diag_log format["_fnc_updateMissionQue :: _mission = %1 | _status = %2 | _coords = %3",_mission,_status,_coords];};
|
if (blck_debugLevel > 3) then {diag_log format["_fnc_updateMissionQue :: _mission = %1 | _status = %2 | _coords = %3",_mission,_status,_coords];};
|
||||||
@ -23,23 +24,14 @@ private["_index","_element","_waitTime"];
|
|||||||
if (_mission isEqualTo (_x select 1)) exitWith
|
if (_mission isEqualTo (_x select 1)) exitWith
|
||||||
{
|
{
|
||||||
_index = _forEachIndex;
|
_index = _forEachIndex;
|
||||||
//diag_log format["_fnc_updateMissionQue: match found at _forEachIndex %1 for _mission with _x = %2",_forEachIndex,_x select 1];
|
|
||||||
};
|
};
|
||||||
}forEach blck_pendingMissions;
|
}forEach blck_pendingMissions;
|
||||||
|
|
||||||
//_index = blck_pendingMissions find _mission;
|
//_index = blck_pendingMissions find _mission;
|
||||||
if (_index > -1) then
|
if (_index > -1) then
|
||||||
{
|
{
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debuglevel > 4) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions began as %1",blck_pendingMissions];};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_element = blck_pendingMissions select _index;
|
_element = blck_pendingMissions select _index;
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debuglevel > 3) then {diag_log format["_fnc_updateMissionQue:: -- >> _element before update = %1",_element];};
|
|
||||||
#endif
|
|
||||||
// 0 1 2 3 4 5 6
|
|
||||||
//_mission = [_missionList,format["%1%2",_marker,_i],_difficulty,_tMin,_tMax,_waitTime,[0,0,0]];
|
|
||||||
if (toLower(_status) isEqualTo "active") then {
|
if (toLower(_status) isEqualTo "active") then {
|
||||||
_element set[5, -1];
|
_element set[5, -1];
|
||||||
_element set[6,_coords];
|
_element set[6,_coords];
|
||||||
@ -51,15 +43,7 @@ if (_index > -1) then
|
|||||||
_element set [6,[0,0,0]];
|
_element set [6,[0,0,0]];
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debuglevel > 2) then {diag_log format["_fnc_updateMissionQue:: -- >> _element after update = %1",_element];};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
blck_pendingMissions set [_index, _element];
|
blck_pendingMissions set [_index, _element];
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debuglevel > 4) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions after update = %1",blck_pendingMissions];};
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,5 +12,4 @@
|
|||||||
|
|
||||||
params["_group"];
|
params["_group"];
|
||||||
blck_sm_scubaGroups pushBack [_group,grpNull,0];
|
blck_sm_scubaGroups pushBack [_group,grpNull,0];
|
||||||
//diag_log format["_sm_AddScubaGroup:: blck_sm_scubaGroups = %1",blck_sm_scubaGroups];
|
|
||||||
true
|
true
|
@ -28,26 +28,18 @@ _sunrise = _arr select 0;
|
|||||||
_sunset = _arr select 1;
|
_sunset = _arr select 1;
|
||||||
_time = dayTime;
|
_time = dayTime;
|
||||||
|
|
||||||
//diag_log "fnc_Time:: Debug settings ON";
|
|
||||||
//diag_log format["_fnc_Time:: --> blck_useTimeAcceleration = %1", blck_useTimeAcceleration];
|
|
||||||
//diag_log format["_fnc_Time:: -- > _sunrise = %1 | _sunset = %2 | _time = %3",_sunrise,_sunset,_time];
|
|
||||||
|
|
||||||
|
|
||||||
// Night
|
// Night
|
||||||
if (_time > (_sunset + 0.5) || _time < (_sunrise - 0.5)) exitWith {
|
if (_time > (_sunset + 0.5) || _time < (_sunrise - 0.5)) exitWith {
|
||||||
setTimeMultiplier blck_timeAccelerationNight;
|
setTimeMultiplier blck_timeAccelerationNight;
|
||||||
//diag_log format["NIGHT TIMGE ADJUSTMENT:: time accel updated to %1; time of day = %2",timeMultiplier,dayTime];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Day
|
// Day
|
||||||
if (_time > (_sunrise + 0.5) && _time < (_sunset - 0.5)) exitWith {
|
if (_time > (_sunrise + 0.5) && _time < (_sunset - 0.5)) exitWith {
|
||||||
setTimeMultiplier blck_timeAccelerationDay;
|
setTimeMultiplier blck_timeAccelerationDay;
|
||||||
//diag_log format["DAYTIME ADJUSTMENT:: time accel updated to %1; time of day = %2",timeMultiplier,dayTime];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// default
|
// default
|
||||||
setTimeMultiplier blck_timeAccelerationDusk;
|
setTimeMultiplier blck_timeAccelerationDusk;
|
||||||
//diag_log format["DUSK ADJUSTMENT:: time accel updated to %1; time of day = %2",timeMultiplier,dayTime];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
//diag_log format["_EH_AIHit: _this = %1",_this];
|
|
||||||
if (isServer) then {_this call blck_fnc_processAIHit};
|
if (isServer) then {_this call blck_fnc_processAIHit};
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
Introduced with Arma 3 version 1.65
|
Introduced with Arma 3 version 1.65
|
||||||
gunner: Object - gunner, whose weapons are fired
|
gunner: Object - gunner, whose weapons are fired
|
||||||
*/
|
*/
|
||||||
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
//if (isServer) then {_this remoteExec ["blck_fnc_processAIKill",2]};
|
|
||||||
//if (local (_this select 0)) then {_this call blck_fnc_processAIFiredNear};
|
|
||||||
_this call blck_fnc_processAIFiredNear
|
_this call blck_fnc_processAIFiredNear
|
@ -25,6 +25,6 @@ private ["_unit","_killer","_group","_deleteAI_At"];
|
|||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
_source = _this select 3;
|
_source = _this select 3;
|
||||||
|
|
||||||
if (isPlayer _source) then {
|
if !(isPlayer _source) then {
|
||||||
[_unit,_source] call GRMS_fnc_alertGroup;
|
_unit setDamage 0;
|
||||||
};
|
};
|
@ -21,9 +21,5 @@
|
|||||||
#define unit _this select 0
|
#define unit _this select 0
|
||||||
#define newMagazine _this select 3 select 0
|
#define newMagazine _this select 3 select 0
|
||||||
(unit) addMagazine (newMagazine);
|
(unit) addMagazine (newMagazine);
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then {
|
|
||||||
diag_log format["_EH_unitWeaponReloaded:: one magazine of type %1 added to inventory of unit %2",_mag,(_this select 3 select 0)];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -14,11 +14,11 @@
|
|||||||
|
|
||||||
params[["_unit",objNull],["_target",objNull]];
|
params[["_unit",objNull],["_target",objNull]];
|
||||||
if (isNull _unit) exitWith {};
|
if (isNull _unit) exitWith {};
|
||||||
//diag_log format["_fnc_alertGroupUnits: _unit = %1 | _target = %2",_unit,_target];
|
|
||||||
{
|
{
|
||||||
_x reveal [_target,(_x knowsAbout _target) + (_unit getVariable ["intelligence",1])];
|
if (random(1) < -.33) then {_x reveal [_target,(_x knowsAbout _target) + random(_unit getVariable ["intelligence",1]) ]};
|
||||||
_x doSuppressiveFire _target;
|
//_x doSuppressiveFire _target;
|
||||||
}forEach (units (group _unit));
|
}forEach (units (group _unit));
|
||||||
//leader(group _target) doSuppressiveFire _target;
|
leader(group _target) doSuppressiveFire _target;
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,12 +12,20 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
private["_nearbyGroups","_intelligence"];
|
|
||||||
params["_unit","_killer",["_searchRadius",300]];
|
params["_unit","_killer",["_searchRadius",300]];
|
||||||
private _nearbyGroups = allGroups select{(_unit distance (leader _x) < _searchRadius)};
|
private _nearbyGroups = allGroups select{(_unit distance (leader _x) < _searchRadius)};
|
||||||
|
|
||||||
{
|
{
|
||||||
private _group = _x;
|
private _group = _x;
|
||||||
|
|
||||||
|
if (_group isEqualTo (group _unit)) then
|
||||||
{
|
{
|
||||||
_x reveal[_killer,(_x knowsAbout _killer) + (_x getVariable ["intelligence",1])];
|
[_unit,_killer] call blck_fnc_allertGroupUnits;
|
||||||
|
} else {
|
||||||
|
if (random(1) < 0.33) then
|
||||||
|
{
|
||||||
|
_x reveal[_killer,(_x knowsAbout _killer) + random(_x getVariable["intelligence",1])];
|
||||||
|
};
|
||||||
}forEach (units _group);
|
}forEach (units _group);
|
||||||
|
|
||||||
}forEach _nearbyGroups;
|
}forEach _nearbyGroups;
|
||||||
|
@ -13,9 +13,9 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
params["_unit","_killer"];
|
params["_unit","_killer"];
|
||||||
|
|
||||||
private["_units"];
|
private "_units";
|
||||||
if (toLower(blck_modType) isEqualTo "epoch") then {_units = _unit nearEntities ["I_Soldier_EPOCH", (_unit getVariable ["alertDist",300])]};
|
if (toLower(blck_modType) isEqualTo "epoch") then {_units = _unit nearEntities ["I_Soldier_EPOCH", (_unit getVariable ["alertDist",300])]};
|
||||||
if !(toLower(blck_modType) isEqualTo "epoch") then {_units = _unit nearEntities ["i_g_soldier_unarmed_f", (_unit getVariable ["alertDist",300])]};
|
if !(toLower(blck_modType) isEqualTo "epoch") then {_units = _unit nearEntities ["i_g_soldier_unarmed_f", (_unit getVariable ["alertDist",300])]};
|
||||||
{
|
{
|
||||||
_x reveal[_killer, (_x knowsAbout _killer) + (_unit getVariable ["intelligence",1])]
|
_x reveal[_killer, (_x knowsAbout _killer) + random(_unit getVariable ["intelligence",1])]
|
||||||
}forEach _units;
|
}forEach _units;
|
||||||
|
@ -12,13 +12,15 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params[["_target",objNull]];
|
params[["_target",objNull]];
|
||||||
//diag_log format["_fnc_alertNearbyVehicles: _target = %1 | typeName _target = %2",_target,typeName _target];
|
|
||||||
if (isnull _target) exitWith {};
|
if !(isnull _target) then
|
||||||
private _nearestVehicles = (nearestObjects [getPos _target,["Car","Truck","Tank","Ship"],300]);
|
{
|
||||||
if (_nearestVehicles isEqualTo []) exitWith {};
|
private _nearestVehicles = (nearestObjects [getPos _target,["Car","Tank","Ship","Air"],300]);
|
||||||
private _nearestVehicle = _nearestVehicles select 0;
|
if !(_nearestVehicles isEqualTo []) then
|
||||||
//diag_log format["_fnc_alertNearbyVehicles: _target = %1 | _nearestVehicle = %2",_target,_nearestVehicle];
|
{
|
||||||
[(crew _nearestVehicle) select 0,_target] call blck_fnc_alertGroupUnits;
|
if (random(1) < 0.33) then {[(crew (_nearestVehicles select 0)) select 0,_target] call blck_fnc_alertGroupUnits};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,5 +15,5 @@
|
|||||||
params["_group"];
|
params["_group"];
|
||||||
private _nearbyGroup = [group _unit] call blck_fnc_findNearestGroup;
|
private _nearbyGroup = [group _unit] call blck_fnc_findNearestGroup;
|
||||||
{
|
{
|
||||||
_x reveal[_killer,(_x knowsAbout _killer) + (_unit getVariable ["intelligence",1])];
|
_x reveal[_killer,(_x knowsAbout _killer) + random(_unit getVariable ["intelligence",1])];
|
||||||
}forEach (units _nearbyGroup);
|
}forEach (units _nearbyGroup);
|
||||||
|
@ -10,12 +10,12 @@
|
|||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
//diag_log format["_fnc_cleanupaliveAI: called at %1 | count %2 | blck_liveMissionAI = %3",diag_ticktime,count blck_liveMissionAI,blck_liveMissionAI];
|
|
||||||
for "_i" from 1 to (count blck_liveMissionAI) do {
|
for "_i" from 1 to (count blck_liveMissionAI) do {
|
||||||
if ((_i) <= count blck_liveMissionAI) then {
|
if ((_i) <= count blck_liveMissionAI) then {
|
||||||
_units = blck_liveMissionAI deleteAt 0;
|
_units = blck_liveMissionAI deleteAt 0;
|
||||||
_units params ["_missionCenter","_unitsarr","_timer"];
|
_units params ["_missionCenter","_unitsarr","_timer"];
|
||||||
//diag_log format["_fnc_cleanupAliveAI: _units = %4 | _missionCenter %1 | typeName _unitsArr = %2 | _unitsarr = %3",_missionCenter,typeName _unitsArr, _unitsarr,_units];
|
|
||||||
if (diag_tickTime > _timer) then
|
if (diag_tickTime > _timer) then
|
||||||
{
|
{
|
||||||
private _nearplayer = [_missionCenter,800] call blck_fnc_nearestPlayers;
|
private _nearplayer = [_missionCenter,800] call blck_fnc_nearestPlayers;
|
||||||
|
@ -11,17 +11,14 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
//diag_log format["fnc_cleanupDeadAI: (partially deactivated) time %1 | count blck_deadAI %2",diag_tickTime,count blck_deadAI];
|
|
||||||
|
|
||||||
{
|
{
|
||||||
private _unit = _x;
|
private _unit = _x;
|
||||||
if (_unit getVariable["blck_cleanupAt",0] isEqualTo 0) then {_unit setVariable["blck_cleanupAt",diag_tickTime + blck_bodyCleanUpTimer]};
|
if (_unit getVariable["blck_cleanupAt",0] isEqualTo 0) then {_unit setVariable["blck_cleanupAt",diag_tickTime + blck_bodyCleanUpTimer]};
|
||||||
private _nearplayer = [position _unit,800] call blck_fnc_nearestPlayers;
|
private _nearplayer = [position _unit,800] call blck_fnc_nearestPlayers;
|
||||||
//diag_log format["fnc_cleanupDeadAI: _unit = %1 | blck_cleanupat = %2 | _nearPlayer = %3",_unit, _unit getVariable["blck_cleanupAt",0],_nearPlayer];
|
|
||||||
if (diag_tickTime > _unit getVariable ["blck_cleanupAt",0]) then
|
if (diag_tickTime > _unit getVariable ["blck_cleanupAt",0]) then
|
||||||
{
|
{
|
||||||
if (_nearplayer isequalto []) then {
|
if (_nearplayer isequalto []) then {
|
||||||
//diag_log format["_fnc_cleanupDeadAI: handling deletion of unit %1",_unit];
|
|
||||||
{
|
{
|
||||||
deleteVehicle _x;
|
deleteVehicle _x;
|
||||||
}forEach nearestObjects [getPos _unit,["WeaponHolderSimulated","GroundWeapoonHolder"],3];
|
}forEach nearestObjects [getPos _unit,["WeaponHolderSimulated","GroundWeapoonHolder"],3];
|
||||||
|
@ -14,8 +14,6 @@
|
|||||||
private["_ai","_group"];
|
private["_ai","_group"];
|
||||||
params["_unit"];
|
params["_unit"];
|
||||||
|
|
||||||
//if (blck_debugLevel > 2) then {diag_log format["_fnc_deleteAI::-> deleting unit = %1",_unit];};
|
|
||||||
|
|
||||||
{
|
{
|
||||||
_unit removeAllEventHandlers _x;
|
_unit removeAllEventHandlers _x;
|
||||||
}forEach ["reloaded"];
|
}forEach ["reloaded"];
|
||||||
@ -23,7 +21,6 @@ params["_unit"];
|
|||||||
_unit removeAllMPEventHandlers _x;
|
_unit removeAllMPEventHandlers _x;
|
||||||
} forEach ["MPKilled","MPHit"];
|
} forEach ["MPKilled","MPHit"];
|
||||||
_group = (group _unit);
|
_group = (group _unit);
|
||||||
[_unit] joinSilent grpNull;
|
|
||||||
deleteVehicle _unit;
|
deleteVehicle _unit;
|
||||||
if (count units _group isEqualTo 0) then
|
if (count units _group isEqualTo 0) then
|
||||||
{
|
{
|
||||||
|
@ -11,12 +11,11 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params["_character","_center","_characterBuildingConfigs"];
|
params["_character","_center","_characterBuildingConfigs"];
|
||||||
//diag_log format["_fnc_placeCharacterInBuilding: _characterBuildingConfigs = %1",_characterBuildingConfigs];
|
|
||||||
private ["_obj"];
|
private ["_obj"];
|
||||||
if !(_characterBuildingConfigs isEqualTo []) then
|
if !(_characterBuildingConfigs isEqualTo []) then
|
||||||
{
|
{
|
||||||
_obj = createVehicle[(_characterBuildingConfigs select 0),_center vectorAdd (_characterBuildingConfigs select 1),[],0,"CAN_COLLIDE"];
|
_obj = createVehicle[(_characterBuildingConfigs select 0),_center vectorAdd (_characterBuildingConfigs select 1),[],0,"CAN_COLLIDE"];
|
||||||
//diag_log format["_fnc_placeCharacterInBuilding: _obj = %1",_obj];
|
|
||||||
_obj setDir (_characterBuildingConfigs select 2);
|
_obj setDir (_characterBuildingConfigs select 2);
|
||||||
_obj allowDamage true;
|
_obj allowDamage true;
|
||||||
_obj enableDynamicSimulation true;
|
_obj enableDynamicSimulation true;
|
||||||
|
@ -13,43 +13,35 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
if !(isServer) exitWith {};
|
if !(isServer) exitWith {};
|
||||||
private ["_unit","_instigator","_group","_wp"];
|
private ["_unit","_instigator","_group","_wp"];
|
||||||
_unit = _this select 0 select 0;
|
(_this select 0) params["_unit","_causedBy","_damage","_instigator"];
|
||||||
_instigator = _this select 0 select 3;
|
|
||||||
//diag_log format["_fnc_processAIHit:(19): _units = %1 and _instigator = %2 units damage is %3",_unit,_instigator, damage _unit];
|
if !(isPlayer _instigator) exitWith
|
||||||
|
{
|
||||||
|
_unit setDamage ( (damage _unit) - _damage);
|
||||||
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_processAIHit: evaluating case of ai not alive"];
|
|
||||||
if (!(alive _unit)) exitWith {
|
if (!(alive _unit)) exitWith {
|
||||||
//diag_log format["_fnc_processAIHit: _unit %1 is dead",_unit];
|
|
||||||
[_unit, _instigator] call blck_fnc_processAIKill;
|
[_unit, _instigator] call blck_fnc_processAIKill;
|
||||||
};
|
};
|
||||||
//diag_log format["_fnc_processAIHit: evaluating case of damage > 0.95"];
|
|
||||||
if (damage _unit > 0.95) exitWith {
|
if (damage _unit > 0.95) exitWith {
|
||||||
//diag_log format["_fnc_processAIHit: _unit %1 extensively damagged",_unit];
|
|
||||||
_unit setDamage 1.2; [_unit, _instigator] call blck_fnc_processAIKill;
|
_unit setDamage 1.2; [_unit, _instigator] call blck_fnc_processAIKill;
|
||||||
};
|
};
|
||||||
//diag_log format["_fnc_processAIHit: evaluating case of killer not player"];
|
|
||||||
if !(isPlayer _instigator) exitWith {
|
|
||||||
//diag_log format["_fnc_procesAIHit: _instigator %1 not player",_instigator];
|
|
||||||
};
|
|
||||||
|
|
||||||
//diag_log format["_processAIHit: calling [_unit,_instigator] call blck_fnc_alertGroupUnits with _unit = %1 and _instigator = %2",_unit,_instigator];
|
|
||||||
|
|
||||||
[_unit,_instigator,50] call GMS_fnc_alertNearbyGroups;
|
[_unit,_instigator,50] call GMS_fnc_alertNearbyGroups;
|
||||||
[_instigator] call blck_fnc_alertNearbyVehicles;
|
[_instigator] call blck_fnc_alertNearbyVehicles;
|
||||||
//diag_log format["_fnc_processAIHit: updating group and waypoint settings"];
|
|
||||||
_group = group _unit;
|
_group = group _unit;
|
||||||
_wp = [_group, currentWaypoint _group];
|
_wp = [_group, currentWaypoint _group];
|
||||||
_wp setWaypointBehaviour "COMBAT";
|
_wp setWaypointBehaviour "COMBAT";
|
||||||
_group setCombatMode "RED";
|
_group setCombatMode "RED";
|
||||||
_wp setWaypointCombatMode "RED";
|
_wp setWaypointCombatMode "RED";
|
||||||
|
|
||||||
//diag_log format["_fnc_processAIHit: determining if prior heal has occured"];
|
if (_unit getVariable ["hasHealed",false]) exitWith {};
|
||||||
if (_unit getVariable ["hasHealed",false]) exitWith {
|
|
||||||
//diag_log format["_fnc_processAIHit: _unit %1 has already healed one",_unit];
|
if ((damage _unit) > 0.5 ) then
|
||||||
};
|
|
||||||
//diag_log format["_fnc_processAIHit: no prior heal so evaluate whether one is needed"];
|
|
||||||
if ((damage _unit) > 0.2 ) then
|
|
||||||
{
|
{
|
||||||
//diag_log format["_EH_AIHit::-->> Healing unit %1",_unit];
|
|
||||||
_unit setVariable["hasHealed",true,true];
|
_unit setVariable["hasHealed",true,true];
|
||||||
if (blck_useSmokeWhenHealing) then
|
if (blck_useSmokeWhenHealing) then
|
||||||
{
|
{
|
||||||
@ -58,8 +50,6 @@ if ((damage _unit) > 0.2 ) then
|
|||||||
_unit addItem "FAK";
|
_unit addItem "FAK";
|
||||||
_unit action ["HealSoldierSelf", _unit];
|
_unit action ["HealSoldierSelf", _unit];
|
||||||
_unit setDamage 0;
|
_unit setDamage 0;
|
||||||
//uiSleep 1;
|
|
||||||
if ("FAK" in (items _unit)) then {_unit removeItem "FAK"};
|
if ("FAK" in (items _unit)) then {_unit removeItem "FAK"};
|
||||||
//_unit removeItem "FAK";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
// TODO: check that emplaced weapons that should be deleted are added to the scheduler.
|
|
||||||
// assumptions: this is always and only run on the server regardless if th event is triggered on an HC or other client.
|
// assumptions: this is always and only run on the server regardless if th event is triggered on an HC or other client.
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
@ -42,7 +42,6 @@ if (count(units (group _unit)) isEqualTo 0) then
|
|||||||
deleteGroup _group;
|
deleteGroup _group;
|
||||||
};
|
};
|
||||||
|
|
||||||
//diag_log format["_fnc_processAIKill: unit linked to crew of vehicle %1 | typeOf (vehicle _unit = %2)",vehicle _unit,typeOf (vehicle _unit)];
|
|
||||||
if !((vehicle _unit) isKindOf "Man") then
|
if !((vehicle _unit) isKindOf "Man") then
|
||||||
{
|
{
|
||||||
[_unit, ["Eject", vehicle _unit]] remoteExec ["action",(owner _unit)];
|
[_unit, ["Eject", vehicle _unit]] remoteExec ["action",(owner _unit)];
|
||||||
@ -58,8 +57,6 @@ _wp setWaypointBehaviour "COMBAT";
|
|||||||
(group _unit) setCombatMode "RED";
|
(group _unit) setCombatMode "RED";
|
||||||
_wp setWaypointCombatMode "RED";
|
_wp setWaypointCombatMode "RED";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ([_unit,_killer] call blck_fnc_processIlleagalAIKills) then {
|
if ([_unit,_killer] call blck_fnc_processIlleagalAIKills) then {
|
||||||
[_unit,_killer] call GMS_fnc_handlePlayerUpdates;
|
[_unit,_killer] call blck_fnc_handlePlayerUpdates;
|
||||||
};
|
};
|
||||||
|
@ -13,26 +13,12 @@
|
|||||||
|
|
||||||
See https://community.bistudio.com/wiki/Arma_3:_Event_Handlers#FiredNear for details on this event handler.
|
See https://community.bistudio.com/wiki/Arma_3:_Event_Handlers#FiredNear for details on this event handler.
|
||||||
|
|
||||||
this addEventHandler ["FiredNear", {
|
|
||||||
params ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_gunner"];
|
|
||||||
}];
|
|
||||||
|
|
||||||
unit: Object - Object the event handler is assigned to
|
|
||||||
firer: Object - Object which fires a weapon near the unit
|
|
||||||
distance: Number - Distance in meters between the unit and firer (max. distance ~69m)
|
|
||||||
weapon: String - Fired weapon
|
|
||||||
muzzle: String - Muzzle that was used
|
|
||||||
mode: String - Current mode of the fired weapon
|
|
||||||
ammo: String - Ammo used
|
|
||||||
Introduced with Arma 3 version 1.65
|
|
||||||
gunner: Object - gunner, whose weapons are fired
|
|
||||||
*/
|
*/
|
||||||
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params["_unit","_firedBy"];
|
params["_unit","_firedBy"];
|
||||||
//if ((side _unit) isEqualTo (side _firedBy) exitWith {}; // nearyby friendly fire
|
|
||||||
(group _unit) setBehaviour "COMBAT";
|
(group _unit) setBehaviour "COMBAT";
|
||||||
(group _unit) setCombatMode "RED";
|
(group _unit) setCombatMode "RED";
|
||||||
diag_log format["_fnc_processAIfiredNear: _unit %1 knows %2 about _firedBy %3",_unit, _unit knowsAbout _firedBy,_firedBy];
|
|
||||||
diag_log format["_fnc_processAIfiredNear: owner _unit = %1 | local _unit = %2",owner _unit, local _unit];
|
|
||||||
|
|
||||||
|
@ -10,17 +10,11 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
// assumptions:
|
|
||||||
// 1) if the muzzle that killed the AI was forbbiden then the kill does not count
|
|
||||||
// 2) if the vehicle the player was in when the player killed the AI, the kill does not count.
|
|
||||||
// data to check: blck_forbidenVehicles
|
|
||||||
// and blck_forbidenVehicleGuns
|
|
||||||
// blck_VK_RunoverDamage
|
|
||||||
// blck_RunGear
|
|
||||||
private["_missionType","_wasRunover","_launcher","_legal"];
|
private["_missionType","_wasRunover","_launcher","_legal"];
|
||||||
params["_unit","_killer"];
|
params["_unit","_killer"];
|
||||||
_legal = true;
|
_legal = true;
|
||||||
if (vehicle _killer == _killer) exitWith {true};
|
if (vehicle _killer == _killer) exitWith {true};
|
||||||
|
|
||||||
// Player not in vehicle, no further checks needed.
|
// Player not in vehicle, no further checks needed.
|
||||||
if (_killer == (driver (vehicle _killer))) then // If the killer is also the driver then the killer must have run the AI over
|
if (_killer == (driver (vehicle _killer))) then // If the killer is also the driver then the killer must have run the AI over
|
||||||
{
|
{
|
||||||
@ -43,13 +37,8 @@ if (_killer == (driver (vehicle _killer))) then // If the killer is also the dr
|
|||||||
[vehicle _killer] call GMS_fnc_applyVehicleDamagePenalty;
|
[vehicle _killer] call GMS_fnc_applyVehicleDamagePenalty;
|
||||||
[_killer] call GMS_fnc_msgIED;
|
[_killer] call GMS_fnc_msgIED;
|
||||||
_legal = false;
|
_legal = false;
|
||||||
diag_log format[
|
|
||||||
"_fnc_processIlleagalKills: _legal = %1 | (typeOf (vehicle _killer)) in blck_forbidenVehicles = %2 | (currentWeapon _killer) in blck_forbidenVehicleGuns) = %3",
|
|
||||||
_legal,(typeOf (vehicle _killer)) in blck_forbidenVehicles,
|
|
||||||
(currentWeapon _killer) in blck_forbidenVehicleGuns
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
//diag_log format["_fnc_testForIllegalKills: _legal = %1",_legal];
|
|
||||||
_legal
|
_legal
|
||||||
|
@ -12,13 +12,11 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params["_unit"];
|
params["_unit"];
|
||||||
//diag_log format["+--+ removing NVG for unit %1",_unit];
|
|
||||||
|
|
||||||
if (blck_useNVG) then
|
if (blck_useNVG) then
|
||||||
{
|
{
|
||||||
if (_unit getVariable ["hasNVG",false]) then
|
if (_unit getVariable ["hasNVG",false]) then
|
||||||
{
|
{
|
||||||
|
|
||||||
_unit unassignitem "NVGoggles"; _unit removeweapon "NVGoggles";
|
_unit unassignitem "NVGoggles"; _unit removeweapon "NVGoggles";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -11,8 +11,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
// Self explanatory
|
|
||||||
// [_group, _skill] call blck_setSkill;
|
|
||||||
params ["_unit","_skillsArrray"];
|
params ["_unit","_skillsArrray"];
|
||||||
private["_skillLevel"];
|
private["_skillLevel"];
|
||||||
{
|
{
|
||||||
|
@ -13,14 +13,6 @@ params["_coords","_charConfigs"];
|
|||||||
private["_char","_charGroup"];
|
private["_char","_charGroup"];
|
||||||
_charConfigs params["_classname","_posn","_dir","_simDamg","_animations","_headgear","_uniforms"];
|
_charConfigs params["_classname","_posn","_dir","_simDamg","_animations","_headgear","_uniforms"];
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnchar: _forEachIndex = %1 | _x = %2",_forEachIndex,_x];
|
|
||||||
}forEach _charConfigs;
|
|
||||||
diag_log format["_fnc_spawnchar: _this = %1",_this];
|
|
||||||
diag_log format["_fnc_spawnchar _classname = %1 | _posn = %2 | _dir = %3 | _animations = %4",_classname,_posn,_dir,_animations];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_charGroup = createGroup [blck_AI_Side, true];
|
_charGroup = createGroup [blck_AI_Side, true];
|
||||||
_char = _charGroup createUnit [_classname,[0,0,0], [], 0, "NONE"];
|
_char = _charGroup createUnit [_classname,[0,0,0], [], 0, "NONE"];
|
||||||
_char setCaptive true;
|
_char setCaptive true;
|
||||||
|
@ -17,7 +17,6 @@ _hostage remoteExec["GMS_fnc_initHostage", -2, true];
|
|||||||
_hostage setVariable["assetType",1,true];
|
_hostage setVariable["assetType",1,true];
|
||||||
_building = [_hostage,_coords,_hostageConfigs select 7] call blck_fnc_placeCharacterInBuilding;
|
_building = [_hostage,_coords,_hostageConfigs select 7] call blck_fnc_placeCharacterInBuilding;
|
||||||
_result = [_hostage,_building];
|
_result = [_hostage,_building];
|
||||||
//diag_log format["_fnd_spawnHostage: _result = %1",_result];
|
|
||||||
_result
|
_result
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,9 +16,7 @@ _leader = [_coords, _leaderConfigs] call blck_fnc_spawnCharacter;
|
|||||||
_leader remoteExec["GMS_fnc_initLeader", -2, true];
|
_leader remoteExec["GMS_fnc_initLeader", -2, true];
|
||||||
_leader setVariable["assetType",2,true];
|
_leader setVariable["assetType",2,true];
|
||||||
_leader setVariable["endAnimation",["Acts_CivilShocked_1"],true];
|
_leader setVariable["endAnimation",["Acts_CivilShocked_1"],true];
|
||||||
//diag_log format["_fnc_spawnLeader: _leaderConfigs = %1",_leaderConfigs];
|
|
||||||
_building = [_leader,_coords,_leaderConfigs select 7] call blck_fnc_placeCharacterInBuilding;
|
_building = [_leader,_coords,_leaderConfigs select 7] call blck_fnc_placeCharacterInBuilding;
|
||||||
//diag_log format["_fnc_spawnLeader: _building = %1",_building];
|
|
||||||
_result = [_leader,_building];
|
_result = [_leader,_building];
|
||||||
_result
|
_result
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ private _params = ["_pos","_numAI","_skillAI"];
|
|||||||
}forEach _params;
|
}forEach _params;
|
||||||
#endif
|
#endif
|
||||||
_paraGroup = [blck_AI_Side,true] call blck_fnc_createGroup;
|
_paraGroup = [blck_AI_Side,true] call blck_fnc_createGroup;
|
||||||
//diag_log format["_fnc_spawnParaUnits: _paraGroup = %1",_paraGroup];
|
|
||||||
#define infantryPatrolRadius 30
|
#define infantryPatrolRadius 30
|
||||||
#define infantryWaypointTimeout [5,7.5,10]
|
#define infantryWaypointTimeout [5,7.5,10]
|
||||||
[_pos,20,30,_paraGroup,"random","SAD","paraUnits",infantryPatrolRadius,infantryWaypointTimeout] call blck_fnc_setupWaypoints;
|
[_pos,20,30,_paraGroup,"random","SAD","paraUnits",infantryPatrolRadius,infantryWaypointTimeout] call blck_fnc_setupWaypoints;
|
||||||
@ -45,24 +44,15 @@ for "_i" from 1 to _numAI do
|
|||||||
_spawnPos = _pos getPos[1,_dir];
|
_spawnPos = _pos getPos[1,_dir];
|
||||||
_chute = createVehicle ["Steerable_Parachute_F", [_spawnPos select 0, _spawnPos select 1, 250], [], 0, "FLY"];
|
_chute = createVehicle ["Steerable_Parachute_F", [_spawnPos select 0, _spawnPos select 1, 250], [], 0, "FLY"];
|
||||||
[_chute] call blck_fnc_protectVehicle;
|
[_chute] call blck_fnc_protectVehicle;
|
||||||
// ["_pos","_aiGroup",["_skillLevel","red"],["_uniforms", blck_SkinList],["_headGear",blck_headgear],["_vests",blck_vests],["_backpacks",blck_backpacks],["_Launcher","none"],["_weaponList",[]],["_sideArms",[]],["_scuba",false]];
|
|
||||||
_unit = [getPos _chute,_paraGroup,_skillAI,_uniforms,_headGear,_vests,_backpacks,launcherType,_weapons,_sideArms,_isScuba] call blck_fnc_spawnUnit;
|
_unit = [getPos _chute,_paraGroup,_skillAI,_uniforms,_headGear,_vests,_backpacks,launcherType,_weapons,_sideArms,_isScuba] call blck_fnc_spawnUnit;
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
diag_log format["_fnc_spawnParaUnits: unit %1 = %2 dropping in chute %3",_i,_unit,_chute];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//_chute setPos [_spawnPos select 0, _spawnPos select 1, 125]; //(_offset select 2) - 10];
|
|
||||||
_unit assignAsDriver _chute;
|
_unit assignAsDriver _chute;
|
||||||
_unit moveInDriver _chute;
|
_unit moveInDriver _chute;
|
||||||
//_unit allowDamage true;
|
|
||||||
_unit setVariable["chute",_chute];
|
_unit setVariable["chute",_chute];
|
||||||
_dir = _dir + _arc;
|
_dir = _dir + _arc;
|
||||||
|
|
||||||
uiSleep 2;
|
uiSleep 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
blck_monitoredMissionAIGroups pushback _paraGroup;
|
blck_monitoredMissionAIGroups pushback _paraGroup;
|
||||||
|
|
||||||
_paraGroup
|
_paraGroup
|
||||||
|
@ -22,19 +22,10 @@ if (_headGear isEqualTo []) then {_headGear = [_skillLevel] call blck_fnc_sele
|
|||||||
if (_vests isEqualTo []) then {_vests = [_skillLevel] call blck_fnc_selectAIVests};
|
if (_vests isEqualTo []) then {_vests = [_skillLevel] call blck_fnc_selectAIVests};
|
||||||
if (_backpacks isEqualTo []) then {_backpacks = [_skillLevel] call blck_fnc_selectAIBackpacks};
|
if (_backpacks isEqualTo []) then {_backpacks = [_skillLevel] call blck_fnc_selectAIBackpacks};
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
if (isNull _aiGroup) exitWith {["NULL-GROUP Provided to _fnc_spawnUnit"] call blck_fnc_log};
|
||||||
if (blck_debugLevel >= 2) then
|
|
||||||
{
|
|
||||||
private _params = ["_pos","_aiGroup","_skillLevel","_uniforms","_headGear","_vests","_backpacks","_Launcher","_weaponList","_sideArms","_scuba","_garrison"]; //"_weaponList", "_Launcher"
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnUnit::-> _this select %1 (%2) = %3",_forEachIndex, _params select _forEachIndex, _this select _forEachIndex];
|
|
||||||
}forEach _this;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
if (isNull _aiGroup) exitWith {diag_log "[blckeagls] ERROR CONDITION:-->> NULL-GROUP Provided to _fnc_spawnUnit"};
|
|
||||||
|
|
||||||
_unit = ObjNull;
|
_unit = ObjNull;
|
||||||
//private _unitType = "";
|
|
||||||
if (blck_modType isEqualTo "Epoch") then
|
if (blck_modType isEqualTo "Epoch") then
|
||||||
{
|
{
|
||||||
"I_Soldier_EPOCH" createUnit [_pos, _aiGroup, "_unit = this", blck_baseSkill, "COLONEL"];
|
"I_Soldier_EPOCH" createUnit [_pos, _aiGroup, "_unit = this", blck_baseSkill, "COLONEL"];
|
||||||
@ -46,7 +37,6 @@ if (blck_modType isEqualTo "Epoch") then
|
|||||||
case "green":{_unit setVariable["Crypto",6 + floor(random(blck_maxMoneyGreen)),true];};
|
case "green":{_unit setVariable["Crypto",6 + floor(random(blck_maxMoneyGreen)),true];};
|
||||||
case "orange":{_unit setVariable["Crypto",8 + floor(random(blck_maxMoneyOrange)),true];};
|
case "orange":{_unit setVariable["Crypto",8 + floor(random(blck_maxMoneyOrange)),true];};
|
||||||
};
|
};
|
||||||
//diag_log format["_fnc_spawnUnit: for unit %1 Crypto set to %2",_unit,_unit getVariable "Crypto"];
|
|
||||||
};
|
};
|
||||||
if !(blck_modType isEqualTo "Epoch") then
|
if !(blck_modType isEqualTo "Epoch") then
|
||||||
{
|
{
|
||||||
@ -58,11 +48,10 @@ if !(blck_modType isEqualTo "Epoch") then
|
|||||||
case "green":{_unit setVariable["ExileMoney",6 + floor(random(blck_maxMoneyGreen)),true];};
|
case "green":{_unit setVariable["ExileMoney",6 + floor(random(blck_maxMoneyGreen)),true];};
|
||||||
case "orange":{_unit setVariable["ExileMoney",8 + floor(random(blck_maxMoneyOrange)),true];};
|
case "orange":{_unit setVariable["ExileMoney",8 + floor(random(blck_maxMoneyOrange)),true];};
|
||||||
};
|
};
|
||||||
//diag_log format["_fnc_spawnUnit: for unit %1 ExileMoney set to %2",_unit,_unit getVariable "ExileMoney"];
|
|
||||||
};
|
};
|
||||||
// findEmptyPosition [minDistance, maxDistance, vehicleType]
|
|
||||||
private _tempPos = _pos findEmptyPosition [0.1, 3, typeOf _unit];
|
private _tempPos = _pos findEmptyPosition [0.1, 3, typeOf _unit];
|
||||||
//diag_log format["_fnc_spawnUnit: _pos = %1 | _tempPos = %2",_pos,_tempPos];
|
|
||||||
if !(_tempPos isEqualTo []) then {_unit setPos _tempPos};
|
if !(_tempPos isEqualTo []) then {_unit setPos _tempPos};
|
||||||
|
|
||||||
[_unit] call blck_fnc_removeGear;
|
[_unit] call blck_fnc_removeGear;
|
||||||
@ -74,18 +63,8 @@ if (_scuba) then
|
|||||||
_skin = "";
|
_skin = "";
|
||||||
_counter = 1;
|
_counter = 1;
|
||||||
|
|
||||||
while {_skin isEqualTo "" && _counter < 10} do
|
_unit forceAddUniform (selectRandom _uniforms);
|
||||||
{
|
|
||||||
_unit forceAddUniform (selectRandom _uniforms);
|
|
||||||
_skin = uniform _unit;
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnUnit::-->> for unit _unit % uniform is %2",_unit, uniform _unit];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
_counter = _counter + 1;
|
|
||||||
};
|
|
||||||
//Sets AI Tactics
|
//Sets AI Tactics
|
||||||
_unit enableAI "ALL";
|
_unit enableAI "ALL";
|
||||||
if(_garrison) then
|
if(_garrison) then
|
||||||
@ -99,23 +78,24 @@ _unit setunitpos "AUTO";
|
|||||||
if !(_headGear isEqualTo []) then
|
if !(_headGear isEqualTo []) then
|
||||||
{
|
{
|
||||||
_unit addHeadgear (selectRandom _headGear);
|
_unit addHeadgear (selectRandom _headGear);
|
||||||
//diag_log format["Headgear for unit %1 = %2",_unit, headgear _unit];
|
|
||||||
};
|
};
|
||||||
if !(_vests isEqualTo []) then
|
if !(_vests isEqualTo []) then
|
||||||
{
|
{
|
||||||
_unit addVest (selectRandom _vests);
|
_unit addVest (selectRandom _vests);
|
||||||
//diag_log format["Vest for unit %1 = %2",_unit, vest _unit];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_weaponList isEqualTo []) then {_weaponList = call blck_fnc_selectAILoadout};
|
if (_weaponList isEqualTo []) then {_weaponList = call blck_fnc_selectAILoadout};
|
||||||
_weap = selectRandom _weaponList;
|
_weap = selectRandom _weaponList;
|
||||||
_unit addWeaponGlobal _weap;
|
_unit addWeaponGlobal _weap;
|
||||||
_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines");
|
_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines");
|
||||||
|
_unit addMagazines[selectRandom _ammochoices,3];
|
||||||
_optics = getArray (configfile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems");
|
_optics = getArray (configfile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems");
|
||||||
_pointers = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems");
|
_pointers = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems");
|
||||||
_muzzles = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems");
|
_muzzles = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems");
|
||||||
_underbarrel = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems");
|
_underbarrel = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _muzzles)};
|
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _muzzles)};
|
||||||
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _optics)};
|
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _optics)};
|
||||||
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _pointers)};
|
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _pointers)};
|
||||||
@ -129,7 +109,6 @@ if ((count(getArray (configFile >> "cfgWeapons" >> _weap >> "muzzles"))) > 1) th
|
|||||||
if !(_sideArms isEqualTo []) then
|
if !(_sideArms isEqualTo []) then
|
||||||
{
|
{
|
||||||
_weap = selectRandom _sideArms;
|
_weap = selectRandom _sideArms;
|
||||||
//diag_log format["[spawnUnit.sqf] _weap os %1",_weap];
|
|
||||||
_unit addWeaponGlobal _weap;
|
_unit addWeaponGlobal _weap;
|
||||||
_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines");
|
_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines");
|
||||||
_unit addMagazines [selectRandom _ammoChoices, 2];
|
_unit addMagazines [selectRandom _ammoChoices, 2];
|
||||||
@ -142,10 +121,9 @@ for "_i" from 1 to (1+floor(random(4))) do
|
|||||||
// Add First Aid or Grenade 50% of the time
|
// Add First Aid or Grenade 50% of the time
|
||||||
if (round(random 10) <= 5) then
|
if (round(random 10) <= 5) then
|
||||||
{
|
{
|
||||||
//diag_log format["spawnUnit.sqf] -- Item is %1", _item];
|
|
||||||
_unit addItem selectRandom blck_specialItems;
|
_unit addItem selectRandom blck_specialItems;
|
||||||
};
|
};
|
||||||
//diag_log format["_spawnUnit: _Launcher = %1",_Launcher];
|
|
||||||
if ( !(_Launcher isEqualTo "none") && !(_backpacks isEqualTo [])) then
|
if ( !(_Launcher isEqualTo "none") && !(_backpacks isEqualTo [])) then
|
||||||
{
|
{
|
||||||
_unit addWeaponGlobal _Launcher;
|
_unit addWeaponGlobal _Launcher;
|
||||||
@ -173,7 +151,7 @@ else
|
|||||||
};
|
};
|
||||||
|
|
||||||
_unit addWeapon selectRandomWeighted["",4,"Binocular",3,"Rangefinder",1];
|
_unit addWeapon selectRandomWeighted["",4,"Binocular",3,"Rangefinder",1];
|
||||||
|
//_unit addEventHandler ["HandleDamage",{_this call blck_EH_handleDamage;}];
|
||||||
_unit addEventHandler ["FiredNear",{_this call blck_EH_AIfiredNear;}];
|
_unit addEventHandler ["FiredNear",{_this call blck_EH_AIfiredNear;}];
|
||||||
_unit addEventHandler ["Reloaded", {_this call blck_EH_unitWeaponReloaded;}];
|
_unit addEventHandler ["Reloaded", {_this call blck_EH_unitWeaponReloaded;}];
|
||||||
_unit addMPEventHandler ["MPKilled", {[(_this select 0), (_this select 1)] call blck_EH_AIKilled;}];
|
_unit addMPEventHandler ["MPKilled", {[(_this select 0), (_this select 1)] call blck_EH_AIKilled;}];
|
||||||
|
@ -15,12 +15,10 @@ private ["_veh","_instigator","_group","_wp"];
|
|||||||
|
|
||||||
_veh = _this select 0;
|
_veh = _this select 0;
|
||||||
_instigator = _this select 3;
|
_instigator = _this select 3;
|
||||||
//diag_log format["_fnc_HandleAIVehicleHit: _veh = %1 | _instigator = %2",_veh,_instigator];
|
|
||||||
if (!(isPlayer _instigator)) exitWith {};
|
if (!(isPlayer _instigator)) exitWith {};
|
||||||
_crew = crew _veh;
|
_crew = crew _veh;
|
||||||
_group = group (_crew select 0);
|
_group = group (_crew select 0);
|
||||||
[_crew select 0,_instigator,50] call GMS_fnc_alertNearbyGroups;
|
[_crew select 0,_instigator,50] call GMS_fnc_alertNearbyGroups;
|
||||||
//diag_log format["_fnc_handleAIVehicleHit: calling blck_fnc_alertNearbyVehicles with _instigator = %1",_instigator];
|
|
||||||
[_instigator] call blck_fnc_alertNearbyVehicles;
|
[_instigator] call blck_fnc_alertNearbyVehicles;
|
||||||
_group setBehaviour "COMBAT";
|
_group setBehaviour "COMBAT";
|
||||||
_wp = [_group, currentWaypoint _group];
|
_wp = [_group, currentWaypoint _group];
|
||||||
|
@ -13,11 +13,9 @@
|
|||||||
params["_veh"];
|
params["_veh"];
|
||||||
if (blck_killEmptyStaticWeapons) then
|
if (blck_killEmptyStaticWeapons) then
|
||||||
{
|
{
|
||||||
//diag_log format["_processAIKill: disabling static %1 and setting its delete time",_veh];
|
|
||||||
_veh setDamage 1;
|
_veh setDamage 1;
|
||||||
_veh setVariable["blck_deleteAtTime",diag_tickTime + 60,true];
|
_veh setVariable["blck_deleteAtTime",diag_tickTime + 60,true];
|
||||||
}else {
|
}else {
|
||||||
//diag_log format["_processAIKill: releasing static %1 to players and setting a default delete timer",_veh];
|
|
||||||
[_veh] call blck_fnc_releaseVehicleToPlayers; //Call this from _processAIKill
|
[_veh] call blck_fnc_releaseVehicleToPlayers; //Call this from _processAIKill
|
||||||
_veh setVariable["blck_DeleteAt",diag_tickTime + blck_vehicleDeleteTimer,true];
|
_veh setVariable["blck_DeleteAt",diag_tickTime + blck_vehicleDeleteTimer,true];
|
||||||
};
|
};
|
@ -9,37 +9,29 @@
|
|||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//diag_log format["_fnc_handleEmptyVehicle: _this = %1",_this];
|
|
||||||
params["_veh"];
|
params["_veh"];
|
||||||
//diag_log format["_fnc_handleEmptyVehicle: vehicle %1 | count(crew _veh) = %2 | typoeOf _veh = %3 | description _veh = %4",_veh,count(crew _veh),typeOf _veh,gettext(configFile >> 'cfgWeapons' >> typeOf _veh >> 'displayName')];
|
|
||||||
if (isServer) then
|
if (isServer) then
|
||||||
{
|
{
|
||||||
if ({alive _x} count (crew _veh) == 0 || crew(_veh) isEqualTo []) then
|
if ({alive _x} count (crew _veh) == 0 || crew(_veh) isEqualTo []) then
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_handleEmptyVehicle: no units alive in vehicle %1",_veh, typeOf _veh,gettext (configFile >> 'cfgWeapons' >> typeOf _veh >> 'displayName')];
|
|
||||||
// TODO: Make sure this variable is properly set on all vehicles.
|
|
||||||
if (_veh getVariable["GRG_vehType","none"] isEqualTo "emplaced") then
|
if (_veh getVariable["GRG_vehType","none"] isEqualTo "emplaced") then
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_handleEmptyVehicle: emplaced weapon %1 being handled",_veh];
|
|
||||||
if (blck_killEmptyStaticWeapons) then
|
if (blck_killEmptyStaticWeapons) then
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_handleEmptyVehicle: disabling static %1 and setting its delete time",_veh];
|
|
||||||
_veh setDamage 1;
|
_veh setDamage 1;
|
||||||
_veh setVariable["blck_deleteAtTime",diag_tickTime + 60,true];
|
_veh setVariable["blck_deleteAtTime",diag_tickTime + 60,true];
|
||||||
}else {
|
}else {
|
||||||
//diag_log format["_fnc_handleEmptyVehicle: releasing static %1 to players and setting a default delete timer",_veh];
|
|
||||||
[_veh] call blck_fnc_releaseVehicleToPlayers; //Call this from _processAIKill
|
[_veh] call blck_fnc_releaseVehicleToPlayers; //Call this from _processAIKill
|
||||||
_veh setVariable["blck_deleteAtTime",diag_tickTime + blck_vehicleDeleteTimer,true];
|
_veh setVariable["blck_deleteAtTime",diag_tickTime + blck_vehicleDeleteTimer,true];
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
if (blck_killEmptyAIVehicles) then
|
if (blck_killEmptyAIVehicles) then
|
||||||
{
|
{
|
||||||
//diag_log format["_fnc_handleEmptyVehicle: disabling vehicle %1 and setting a delete time",_veh];
|
|
||||||
_veh setDamage 0.7;
|
_veh setDamage 0.7;
|
||||||
_veh setFuel 0;
|
_veh setFuel 0;
|
||||||
_veh setVariable["blck_deleteAtTime",diag_tickTime + 60];
|
_veh setVariable["blck_deleteAtTime",diag_tickTime + 60];
|
||||||
} else {
|
} else {
|
||||||
//diag_log format["_fnc_handleEmptyVehicle: releasing vehicle %1 to players and setting a default delete timer",_veh];
|
|
||||||
_veh setVariable["blck_deleteAtTime",diag_tickTime + blck_vehicleDeleteTimer,true];
|
_veh setVariable["blck_deleteAtTime",diag_tickTime + blck_vehicleDeleteTimer,true];
|
||||||
[_veh] call blck_fnc_releaseVehicleToPlayers;
|
[_veh] call blck_fnc_releaseVehicleToPlayers;
|
||||||
};
|
};
|
||||||
|
@ -9,18 +9,6 @@
|
|||||||
|
|
||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
this addEventHandler ["GetOut", {
|
|
||||||
params ["_vehicle", "_role", "_unit", "_turret"];
|
|
||||||
}];
|
|
||||||
|
|
||||||
vehicle: Object - Vehicle the event handler is assigned to
|
|
||||||
role: String - Can be either "driver", "gunner" or "cargo"
|
|
||||||
unit: Object - Unit that left the vehicle
|
|
||||||
Introduced with Arma 3 version 1.36
|
|
||||||
turret: Array - turret path
|
|
||||||
*/
|
|
||||||
|
|
||||||
//diag_log format["_fnc_handleAIgetOut: _this = %1",_this];
|
|
||||||
#define veh _this select 0
|
#define veh _this select 0
|
||||||
if ((isServer) || local (veh)) then {[veh] call blck_fnc_checkForEmptyVehicle};
|
if ((isServer) || local (veh)) then {[veh] call blck_fnc_checkForEmptyVehicle};
|
@ -8,46 +8,16 @@
|
|||||||
|
|
||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
_loadVehicleCrew
|
|
||||||
Expects the group has units and they are configured
|
|
||||||
*/
|
|
||||||
if (isNil "blck_blacklisted_vehicle_weapons") then {blck_blacklisted_vehicle_weapons = []};
|
if (isNil "blck_blacklisted_vehicle_weapons") then {blck_blacklisted_vehicle_weapons = []};
|
||||||
params["_veh","_group",["_crewCount",4]];
|
params["_veh","_group",["_crewCount",4]];
|
||||||
private _units = units _group;
|
private _units = units _group;
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_loadVehicleCrew: _veh = %1 | _group = %2 | group units = %4 | _crewCount = %3",_veh,_group,_crewCount, units _group];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
for "_i" from 1 to _crewCount do
|
for "_i" from 1 to _crewCount do
|
||||||
{
|
{
|
||||||
if (_units isEqualTo []) exitWith {};
|
if (_units isEqualTo []) exitWith {};
|
||||||
_crew = _units deleteAt 0;
|
_crew = _units deleteAt 0;
|
||||||
/*
|
|
||||||
Note that in documentation for the moveinAny command the order seats are filled is:
|
|
||||||
driver
|
|
||||||
commander
|
|
||||||
gunner
|
|
||||||
other turrets
|
|
||||||
cargo
|
|
||||||
|
|
||||||
https://community.bistudio.com/wiki/moveInAny
|
|
||||||
*/
|
|
||||||
_crew moveInAny _veh;
|
_crew moveInAny _veh;
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_loadVehicleCrew: loaded unit %1 into vehicle %2",_crew,_veh];
|
|
||||||
diag_log format["_fnc_loadVehicleCrew: new crew for vehicle %1 = %2",_veh, crew _veh];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
{deleteVehicle _x} forEach _units;
|
{deleteVehicle _x} forEach _units;
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_loadVehicleCrew: _veh = %1 | crew = %2 | driver = %3",_veh,crew _veh,driver _veh];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
@ -11,19 +11,16 @@
|
|||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
private ["_veh","_killer","_group","_wp"];
|
private ["_veh","_killer","_group","_wp"];
|
||||||
//diag_log format["_fnc_processAIVehicleKill: _this = %1",_this];
|
|
||||||
params["_veh","_killer","_killer"];
|
|
||||||
//params["_veh","_killer"];
|
|
||||||
|
|
||||||
|
params["_veh","_killer","_killer"];
|
||||||
{
|
{
|
||||||
_veh removealleventhandlers _x;
|
_veh removealleventhandlers _x;
|
||||||
} forEach ["GetIn","GetOut","fired","hit","hitpart","reloaded","dammaged","HandleDamage"];
|
} forEach ["GetIn","GetOut","fired","hit","hitpart","reloaded","dammaged","HandleDamage"];
|
||||||
|
|
||||||
{
|
{
|
||||||
_veh removeAllMPEventHandlers _x;
|
_veh removeAllMPEventHandlers _x;
|
||||||
} forEach ["MPHit","MPKilled"];
|
} forEach ["MPHit","MPKilled"];
|
||||||
|
|
||||||
//diag_log format["_fnc_processAIVehicleKill: _this = %1",_this];
|
|
||||||
//diag_log format["_fnc_processAIVehicleKill:: _veh = %1 and _killer = %2 units damage is %3",_veh,_killer, damage _veh];
|
|
||||||
|
|
||||||
if (!(isPlayer _killer)) exitWith {};
|
if (!(isPlayer _killer)) exitWith {};
|
||||||
|
|
||||||
|
@ -9,11 +9,10 @@
|
|||||||
|
|
||||||
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
http://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
*/
|
*/
|
||||||
// assummptions: since this is called after an AI Killed event that always runs on the server we can assume this code will too.
|
|
||||||
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
|
||||||
|
|
||||||
params["_veh"];
|
params["_veh"];
|
||||||
//diag_log format["_fnc_releaseVehicleToPlayers: _veh = %1",_veh];
|
|
||||||
[_veh] call blck_fnc_unlockVehicle;
|
[_veh] call blck_fnc_unlockVehicle;
|
||||||
{
|
{
|
||||||
_veh removealleventhandlers _x;
|
_veh removealleventhandlers _x;
|
||||||
|
@ -19,9 +19,9 @@ _nearbyPlayers = [position _vehicle, _vehicle getVariable["blck_vehicleSearchRan
|
|||||||
_cansee = [objNull, "VIEW"] checkVisibility [eyePos _x, _player];
|
_cansee = [objNull, "VIEW"] checkVisibility [eyePos _x, _player];
|
||||||
if (_cansee > 0) then
|
if (_cansee > 0) then
|
||||||
{
|
{
|
||||||
//_knowledgeGained = (_searchRadius - (_x distance _groupLeader))/_searchRadius;
|
_knowledgeGained = (_searchRadius - (_x distance _groupLeader))/_searchRadius;
|
||||||
_knowsAbout = _x knowsAbout _player;
|
_knowsAbout = _x knowsAbout _player;
|
||||||
_groupLeader reveal [_x, _knowsAbout + _kno_canseewledgeGained];
|
_groupLeader reveal [_x, _knowsAbout + _knowledgeGained];
|
||||||
};
|
};
|
||||||
}foreEach crew _vehicle;
|
}foreEach crew _vehicle;
|
||||||
};
|
};
|
||||||
|
@ -10,13 +10,10 @@ _pilot = (units _grpPilot) select 0;
|
|||||||
_heli = vehicle _pilot;
|
_heli = vehicle _pilot;
|
||||||
diag_log "reinforcements deployed:: send heli back to spawn";
|
diag_log "reinforcements deployed:: send heli back to spawn";
|
||||||
[[_heli], 300 /* 5 min*/] spawn blck_fnc_addObjToQue;
|
[[_heli], 300 /* 5 min*/] spawn blck_fnc_addObjToQue;
|
||||||
// select a random location abotu 2K from the mission
|
|
||||||
_spawnVector = round(random(360));
|
_spawnVector = round(random(360));
|
||||||
_spawnDistance = 2000;
|
_spawnDistance = 2000;
|
||||||
_pos = getPos _heli;
|
_pos = getPos _heli;
|
||||||
|
|
||||||
// Use the new functionality of getPos
|
|
||||||
// https://community.bistudio.com/wiki/getPos
|
|
||||||
_home = _pos getPos [_spawnDistance,_spawnVector];
|
_home = _pos getPos [_spawnDistance,_spawnVector];
|
||||||
|
|
||||||
// Send the heli back to base
|
// Send the heli back to base
|
||||||
@ -31,6 +28,4 @@ _grpPilot = group this;
|
|||||||
[_grpPilot,0] setWaypointTimeout [0.5,0.5,0.5];
|
[_grpPilot,0] setWaypointTimeout [0.5,0.5,0.5];
|
||||||
|
|
||||||
|
|
||||||
diag_log "reinforcements:: sending Heli Home";
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,23 +14,10 @@
|
|||||||
private["_veh"];
|
private["_veh"];
|
||||||
params["_vehType","_pos",["_crewCount",4]];
|
params["_vehType","_pos",["_crewCount",4]];
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 1) then {diag_log format["spawnVehicle.sqf: _vehType = %1 | _pos = %2",_vehType,_pos];};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private _veh = [_vehType,_pos] call blck_fnc_spawnVehicle;
|
private _veh = [_vehType,_pos] call blck_fnc_spawnVehicle;
|
||||||
_veh setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeSurfaceVehicle];
|
_veh setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeSurfaceVehicle];
|
||||||
_veh setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds];
|
_veh setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds];
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 1) then {diag_log format["spawnVehicle.sqf:: vehicle spawned is %1",_veh];};
|
|
||||||
#endif
|
|
||||||
// params["_veh",["_clearInventory",true]];
|
|
||||||
[_veh,_clearInventory] call blck_fnc_configureMissionVehicle;
|
[_veh,_clearInventory] call blck_fnc_configureMissionVehicle;
|
||||||
//[_veh,_group,_crewCount] call blck_fnc_loadVehicleCrew;
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 1) then {diag_log format["spawnVehicle:: returning parameter _veh = %1",_veh];};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_veh
|
_veh
|
||||||
|
|
||||||
|
@ -21,8 +21,6 @@ if (_backpacks isEqualTo []) then {_backpacks = [_skillAI] call blck_fnc_sele
|
|||||||
if (_weaponList isEqualTo []) then {_weaponList = [_skillAI] call blck_fnc_selectAILoadout};
|
if (_weaponList isEqualTo []) then {_weaponList = [_skillAI] call blck_fnc_selectAILoadout};
|
||||||
if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms};
|
if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms};
|
||||||
|
|
||||||
// params["_pos", "_center", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], ["_minDist",30], ["_maxDist",45],["_configureWaypoints",true], ["_uniforms",[]],
|
|
||||||
//["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_scuba",false]];
|
|
||||||
switch (toLower(_skillAI)) do
|
switch (toLower(_skillAI)) do
|
||||||
{
|
{
|
||||||
case "blue": {_minDist = 150;_maxDist = blck_maxPatrolRadiusHelisBlue};
|
case "blue": {_minDist = 150;_maxDist = blck_maxPatrolRadiusHelisBlue};
|
||||||
@ -48,13 +46,6 @@ if !(isNull _grpPilot) then
|
|||||||
_grpPilot setVariable["arc",0];
|
_grpPilot setVariable["arc",0];
|
||||||
_grpPilot setVariable["wpRadius",0];
|
_grpPilot setVariable["wpRadius",0];
|
||||||
_grpPilot setVariable["wpMode","SAD"];
|
_grpPilot setVariable["wpMode","SAD"];
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnMissionHeli - max radii are: blue %1 | red %2 | green %3 | orange %4",blck_maxPatrolRadiusHelisBlue,blck_maxPatrolRadiusHelisRed,blck_maxPatrolRadiusHelisGreen,blck_maxPatrolRadiusHelisOrange];
|
|
||||||
diag_log format["_fnc_spawnMissionHeli(59): _skillAI = %1 | _minDist = %2 | _maxDist = %3",_skillAI,_minDist,_maxDist];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define aircraftPatrolRadius 800
|
#define aircraftPatrolRadius 800
|
||||||
#define aircraftWaypointTimeout [1,1.5,2]
|
#define aircraftWaypointTimeout [1,1.5,2]
|
||||||
@ -68,52 +59,17 @@ if !(isNull _grpPilot) then
|
|||||||
} else {
|
} else {
|
||||||
_chopperType = _helis
|
_chopperType = _helis
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 1) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnMissionHeli(59): _skillAI = %1 | _minDist = %2 | _maxDist = %3",_skillAI,_minDist,_maxDist];
|
|
||||||
diag_log format["_fnc_spawnMissionHeli (78):: _chopperType selected = %1",_chopperType];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//_patrolHeli = createVehicle [_chopperType, _coords, [], 90, "FLY"];
|
|
||||||
_patrolHeli = [_chopperType,_coords,"FLY"] call blck_fnc_spawnVehicle;
|
_patrolHeli = [_chopperType,_coords,"FLY"] call blck_fnc_spawnVehicle;
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnMissionHeli (75): _patrolHeli = %1 | getPosATL _patrolHeli = %2",_patrolHeli,getposATL _patrolHeli];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
[_patrolHeli,2] call blck_fnc_configureMissionVehicle;
|
[_patrolHeli,2] call blck_fnc_configureMissionVehicle;
|
||||||
//_patrolHeli setVariable["blck_vehicle",true];
|
|
||||||
_patrolHeli setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeAir];
|
_patrolHeli setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeAir];
|
||||||
_patrolHeli setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds];
|
_patrolHeli setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds];
|
||||||
//_patrolHeli addEventHandler["GetOut",{_this remoteExec["blck_EH_vehicleGetOut",2]}];
|
|
||||||
//[_patrolHeli] call blck_fnc_protectVehicle;
|
|
||||||
_patrolHeli setFuel 1;
|
_patrolHeli setFuel 1;
|
||||||
_patrolHeli engineOn true;
|
_patrolHeli engineOn true;
|
||||||
_patrolHeli flyInHeight 100;
|
_patrolHeli flyInHeight 100;
|
||||||
//_patrolHeli setVehicleLock "LOCKED";
|
|
||||||
// params["_veh","_group",["_crewCount",4]];
|
|
||||||
[_patrolHeli,_grpPilot,_crewCount] call blck_fnc_loadVehicleCrew;
|
[_patrolHeli,_grpPilot,_crewCount] call blck_fnc_loadVehicleCrew;
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 1) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnMissionHeli (93):: heli %1 spawned with crew count of %2 | desired crew count = %3",_patrolHeli,count(crew _patrolHeli),_crewCount];
|
|
||||||
diag_log format["_fnc_spawnMissionHeli (89): _patrolHeli = %1 | getPosATL _patrolHeli = %2 | driver _patrolHeli = %4",_patrolHeli,getposATL _patrolHeli,driver _patrolHeli];
|
|
||||||
diag_log format["_fnc_spawnMissionHeli (133)::-->> Heli %1 outfited with a crew numbering %2",_patrolHeli, crew _patrolHeli];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
//diag_log format["[blckeagls] _fnc_spawnMissionHeli:: _patrolHeli %1 | _grpPilot %2 | _abort %3",_patrolHeli,_grpPilot,_abort];
|
|
||||||
_return = [_patrolHeli,units _grpPilot,_abort];
|
_return = [_patrolHeli,units _grpPilot,_abort];
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 0) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnMissionHeli:: function returning value for _return of %1",_return];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
_return;
|
_return;
|
||||||
|
@ -24,75 +24,32 @@ _noPara = 0;
|
|||||||
_aborted = false;
|
_aborted = false;
|
||||||
|
|
||||||
if (_skillAI isEqualTo "blue") then {
|
if (_skillAI isEqualTo "blue") then {
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugON) then {diag_log "_fnc_spawnMissionParatroops: BLUE difficulty settings applied";};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_chanceParatroops = blck_chanceParaBlue;
|
_chanceParatroops = blck_chanceParaBlue;
|
||||||
_noPara = blck_noParaBlue;
|
_noPara = blck_noParaBlue;
|
||||||
};
|
};
|
||||||
if (_skillAI isEqualTo "green") then {
|
if (_skillAI isEqualTo "green") then {
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugON) then {diag_log "_fnc_spawnMissionParatroops: GREEN difficulty settings applied";};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_chanceParatroops = blck_chanceParaGreen;
|
_chanceParatroops = blck_chanceParaGreen;
|
||||||
_noPara = blck_noParaGreen;
|
_noPara = blck_noParaGreen;
|
||||||
};
|
};
|
||||||
if (_skillAI isEqualTo "orange") then {
|
if (_skillAI isEqualTo "orange") then {
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugON) then {diag_log "_fnc_spawnMissionParatroops: ORANGE difficulty settings applied";};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_chanceParatroops = blck_chanceParaOrange;
|
_chanceParatroops = blck_chanceParaOrange;
|
||||||
_noPara = blck_noParaOrange;
|
_noPara = blck_noParaOrange;
|
||||||
};
|
};
|
||||||
if (_skillAI isEqualTo "red") then {
|
if (_skillAI isEqualTo "red") then {
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugON) then {diag_log "_fnc_spawnMissionParatroops: RED difficulty settings applied";};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_chanceParatroops = blck_chanceParaRed;
|
_chanceParatroops = blck_chanceParaRed;
|
||||||
_noPara = blck_noParaRed;
|
_noPara = blck_noParaRed;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then {diag_log format["_fnc_spawnMissionParatroops (47): _chanceParatroops %1",_chanceParatroops];};
|
|
||||||
if (blck_debugLevel > 2) then {diag_log format["_fnc_spawnMissionParatroops (48): _coords %1 | _numAI %2 | _skillAI %3 | _grpParatroops %4 | _heli %5",_coords,_noPara,_skillAI,_grpParatroops,_heli];};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ( (random(1) < _chanceParatroops)) then
|
if ( (random(1) < _chanceParatroops)) then
|
||||||
{
|
{
|
||||||
if (isNull _grpParatroops) then
|
if (isNull _grpParatroops) then
|
||||||
{
|
{
|
||||||
_grpParatroops = createGroup blck_AI_Side;
|
_grpParatroops = createGroup blck_AI_Side;
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnMissionParatroops (53):No group passed as a parameter, _grpParatroops %4 created",_grpParatroops];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
if (blck_debugLevel > 2) then
|
|
||||||
{
|
|
||||||
diag_log format["_fnc_spawnMissionParatroops (58): function running and group %1 successfully created; now calling blck_fnc_spawnParaUnits",_grpParatroops];
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//params["_missionPos","_paraGroup",["_numAI",3],"_skillAI","_weapons","_uniforms","_headGear",["_heli",objNull]];
|
|
||||||
_aborted = [_coords,_grpParatroops,_noPara,_skillAI,_weapons,_uniforms,_headGear,_heli] call blck_fnc_spawnParaUnits;
|
_aborted = [_coords,_grpParatroops,_noPara,_skillAI,_weapons,_uniforms,_headGear,_heli] call blck_fnc_spawnParaUnits;
|
||||||
//diag_log format["_fnc_spawnMissionParatroops: blck_fnc_spawnParaUnits returned a value of %1",_aborted];
|
|
||||||
};
|
};
|
||||||
#ifdef blck_debugMode
|
|
||||||
diag_log format["_fnc_spawnMissionParatroops: _aborted = %1",_aborted];
|
|
||||||
#endif
|
|
||||||
if (_aborted) then
|
if (_aborted) then
|
||||||
{
|
{
|
||||||
_return = [[],true];
|
_return = [[],true];
|
||||||
@ -100,9 +57,5 @@ if (_aborted) then
|
|||||||
_return = [(units _grpParatroops),false];
|
_return = [(units _grpParatroops),false];
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef blck_debugMode
|
|
||||||
diag_log format["_fnc_spawnMissionParatroops:-> _return = %1 | _abort = %2",_return,_aborted];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_return
|
_return
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user