Merge pull request #127 from Ghostrider-DbD-/V-6.88-Build-160

V 6.88 build 160
This commit is contained in:
Ghostrider [GRG] 2018-12-01 13:07:16 -05:00 committed by GitHub
commit 93bd01cf17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
107 changed files with 2696 additions and 5107 deletions

View File

@ -20,5 +20,4 @@ private _Groups_AI_Side = 0;
}forEach allGroups;
//diag_log format["_fnc_groupsOnAISide:: -- >> allGroups = %1 | _Groups_AI_Side = %2",allGroups, _Groups_AI_Side];
// Return the number of groups used.
_Groups_AI_Side

View File

@ -12,14 +12,14 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_obj","_difficulty"];
private _mod = [] call blck_fnc_getModType;
//diag_log format["_fnc_addMoneyToObject: _this = %1",_this];
#ifdef blck_debugMode
{
diag_log format["_fnc_addMoneyToOject: _this select %1 = %2",_foreachindex, _this select _foreachindex];
}forEach _this;
#endif
if (_mod isEqualTo "Exile") then
if (blck_modType isEqualTo "Exile") then
{
switch (_difficulty) do
{
@ -33,7 +33,7 @@ if (_mod isEqualTo "Exile") then
};
};
if (_mod isEqualTo "Epoch") then
if (blck_modType isEqualTo "Epoch") then
{
switch (_difficulty) do
{

View File

@ -21,7 +21,7 @@ switch (_returnMode) do
case 0:{_return = (_alive / _total)};
case 1:{_return = [_alive,_total]};
};
//diag_log format["_fnc_countAliveAI: _alive = %1 | _total = %2 | _return = %3",_alive,_total,_return];
_return

View File

@ -9,10 +9,10 @@
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["_markerName"];
_markerName = _this select 0;
deleteMarker _markerName;
_markerName = "label" + _markerName;
deleteMarker _markerName;
//diag_log format["deleteMarker complete script for _this = %1",_this];

View File

@ -11,8 +11,8 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_veh"];
clearWeaponCargoGlobal _veh;
clearMagazineCargoGlobal _veh;
clearBackpackCargoGlobal _veh;
clearItemCargoGlobal _veh;
params["_veh"];
clearWeaponCargoGlobal _veh;
clearMagazineCargoGlobal _veh;
clearBackpackCargoGlobal _veh;
clearItemCargoGlobal _veh;

View File

@ -1,9 +0,0 @@
// replaces blck_fnc_emptyObject
params["_object"];
clearWeaponCargoGlobal _object;
clearMagazineCargoGlobal _object;
clearBackpackCargoGlobal _object;
clearItemCargoGlobal _object;

View File

@ -24,13 +24,11 @@ _Arc = 360/_num;
for "_i" from 1 to _num do
{
_currentDir = _currentDir + _Arc;
//diag_log format["spawnEmplaced: _currentDir is %1 for cycle %2",_currentDir,_i];
_dist = round(_minDistance + (random(_maxDistance - _minDistance)));
_newpos = _center getPos [_dist, _currentDir];
//diag_log format["findPositionAlongRadius:: distance of pos %1 from center is %2",_newpos, _newpos distance _center];
_locs pushback _newpos;
};
//diag_log format["_fnc_findPositionsAlongARadius:: _locations = %1",_locations];
_locs

View File

@ -132,33 +132,4 @@ if ((count _coords) > 2) then
};
_coords;
/*
while {_findNew} do {
// test for water nearby
_dist = 100;
for [{_i=0}, {_i<360}, {_i=_i+20}] do
{
_xpos = (_coords select 0) + sin (_i) * _dist;
_ypos = (_coords select 1) + cos (_i) * _dist;
_newPos = [_xpos,_ypos,0];
if (surfaceIsWater _newPos) then
{
_findNew = true;
_i = 361;
};
};
if (toLower(worldName) isEqualTo "taviana") then
{
_tavTest = createVehicle ["SmokeShell",_coords,[], 0, "CAN_COLLIDE"];
_tavHeight = (getPosASL _tavTest) select 2;
deleteVehicle _tavTest;
if (_tavHeight > 100) then {_FindNew = true;};
};
_tries = _tries + 1;
};

View File

@ -12,10 +12,6 @@
//diag_log format["starting _fnc_mainThread with time = %1",diag_tickTime];
#ifdef GRGserver
diag_log "running GRGserver version of _fnc_mainThread";
#endif
private["_timer1sec","_timer5sec","_timer20sec","_timer5min","_timer5min"];
_timer1sec = diag_tickTime;
_timer5sec = diag_tickTime;
@ -26,23 +22,16 @@ _timer5min = diag_tickTime;
while {true} do
{
uiSleep 1;
//diag_log format["mainThread:: -- > time = %1",diag_tickTime];
if (diag_tickTime > _timer1sec) then
{
[] call blck_fnc_vehicleMonitor;
#ifdef GRGserver
[] call blck_fnc_broadcastServerFPS;
#endif
_timer1sec = diag_tickTime + 1;
//diag_log format["[blckeagls] _fnc_mainThread 1 Second Timer Handled | Timstamp %1",diag_tickTime];
};
if (diag_tickTime > _timer5sec) then
{
_timer5sec = diag_tickTime + 5;
[] call blck_fnc_missionGroupMonitor;
//[] call blck_fnc_missionGroupMonitor;
if (blck_simulationManager == blck_useBlckeaglsSimulationManagement) then {call blck_fnc_blckSimulationManager};
[] call blck_fnc_sm_missionPatrolMonitor;
//diag_log format["[blckeagls] _fnc_mainThread 5 Second Timer Handled | Timstamp %1",diag_tickTime];
};
if (diag_tickTime > _timer20sec) then
{
@ -52,35 +41,20 @@ while {true} do
[] call blck_fnc_scanForPlayersNearVehicles;
//[] call blck_fnc_cleanEmptyGroups;
_timer20sec = diag_tickTime + 20;
//diag_log format["[blckeagls] _fnc_mainThread 20 Second Timer Handled | Timstamp %1",diag_tickTime];
};
if ((diag_tickTime > _timer1min)) then
{
//diag_log format["_fnc_mainThread: 60 second events run at %1",diag_tickTime];
_timer1min = diag_tickTime + 60;
//diag_log format["_fnc_mainThread: blck_missionsRunning = %1 | blck_maxSpawnedMissions = %2", blck_missionsRunning,blck_maxSpawnedMissions];
[] call blck_fnc_spawnPendingMissions;
//diag_log format["_fnc_mainThread: blck_numberUnderwaterDynamicMissions = %1 | blck_dynamicUMS_MissionsRuning = %2",blck_numberUnderwaterDynamicMissions,blck_dynamicUMS_MissionsRuning];
if (blck_dynamicUMS_MissionsRuning < blck_numberUnderwaterDynamicMissions) then
{
//diag_log "Adding dynamic UMS Mission";
[] spawn blck_fnc_addDyanamicUMS_Mission;
};
//diag_log format["_fnc_mainThread: control returned to _fnc_mainThread from _fnc_addDynamicUMS_Mission at %1",diag_tickTime];
if (blck_useHC) then
{
//diag_log format["_mainThread:: calling blck_fnc_passToHCs at diag_tickTime = %1",diag_tickTime];
[] call blck_fnc_HC_passToHCs;
};
if (blck_useTimeAcceleration) then
{
[] call blck_fnc_timeAcceleration;
};
[] call blck_fnc_cleanEmptyGroups;
[] call bck_fnc_groupWaypointMonitor;
if (blck_dynamicUMS_MissionsRuning < blck_numberUnderwaterDynamicMissions) then {[] spawn blck_fnc_addDyanamicUMS_Mission};
if (blck_useHC) then {[] call blck_fnc_HC_passToHCs};
if (blck_useTimeAcceleration) then {[] call blck_fnc_timeAcceleration};
#ifdef blck_debugMode
//diag_log format["_fnc_mainThread: active SQFscripts include: %1",diag_activeSQFScripts];
diag_log format["_fnc_mainThread: active scripts include: %1",diag_activeScripts];
#endif
//diag_log format["[blckeagls] _fnc_mainThread 60 Second Timer Handled | Timstamp %1",diag_tickTime];
};
if (diag_tickTime > _timer5min) then
{

View File

@ -9,13 +9,12 @@
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["_mArray","_count"];
_mArray params["_missionType","_markerPos","_markerLabel","_markerLabelType","_markerColor","_markerType"];
//diag_log "++++++++++++++--- marker label arrow detected";
_name = "ai_count" + _name;
_textPos = [(_pos select 0) + (count toArray (_text) * 12), (_pos select 1) + (_size select 0), 0];
_MainMarker = createMarker [_name, _textPos];

View File

@ -9,7 +9,7 @@
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["_location","_MainMarker","_name"];
//diag_log format["blck_fnc_missionCompleteMarker:: _this = %1",_this];

View File

@ -1,4 +1,17 @@
/*
for ghostridergaming
By Ghostrider [GRG]
Copyright 2016
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
//diag_log format["_fnc_nearestPlayers: _this = %1",_this];
params["_coords","_range"];
private["_return","_playerClassNames","_epochClasses","_exileClasses"];

View File

@ -14,9 +14,7 @@
private["_blck_fn_configureRoundMarker"];
_blck_fn_configureRoundMarker = {
//diag_log format["_blck_fn_configureRoundMarker: _this = %1",_this];
// [[""OrangeMarker1"",[11736.1,9272.76,0],""Soylent Green"",""center"",""ColorPink"",[""ellipse"",[250,250],""Cross""]]]"
private["_name","_pos","_color","_size","_MainMarker","_arrowMarker","_labelMarker","_labelType"];
// [_missionType,_markerPos,_markerColor,_markerLabel, _mSize,_markerLabelType,_mShape,_mBrush]
params["_name","_pos","_color","_text","_size","_labelType","_mShape","_mBrush"];
if ((_pos distance [0,0,0]) < 10) exitWith {};
@ -74,7 +72,7 @@ _blck_fn_configureIconMarker = {
params["_mArray"];
private["_marker"];
_mArray params["_missionMarkerName","_markerPos","_markerLabel","_markerLabelType","_markerColor","_markerTypeInfo"];
// add defaults to provide backward compatibility for older missions that do not specify a brush.
_markerTypeInfo params["_mShape",["_mSize",[0,0]],["_mBrush","GRID"]];
//diag_log format["spawnMarker.sqf:: -- >> _missionMarkerName %1 | _markerPos %2 | _markerLabel %3 | _markerLabelType %4 | _markerColor %5 | _markerTypeInfo %6 | _mShape %7",_missionMarkerName,_markerPos,_markerLabel,_markerLabelType,_markerColor,_markerTypeInfo,_mShape];

View File

@ -1,4 +1,14 @@
/*
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";
params["_center","_emplaced","_garrisonGroup"];
private["_obj","_objects"];
@ -12,9 +22,7 @@
_obj setDir _objDir;
_unit = [_group] call blck_fnc_spawnUnit;
_unit moveInGunner _unit;
_wep addMPEventHandler["MPHit",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIVehicle_HandleDamage}];
//_empGroup setVariable["groupVehicle",_wep];
//_wep setVariable["vehicleGroup",_empGroup];
_wep addMPEventHandler["MPHit",{[_this] call blck_EH_AIVehicle_HandleDamage}];
_wep setVariable["GRG_vehType","emplaced"];
[_wep,false] call blck_fnc_configureMissionVehicle;
}forEach _emplaced;

View File

@ -1,12 +1,21 @@
/*
By Ghostrider [GRG]
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
params["_center","_landscape"];
// diag_log format["fnc_spawnMissionLandscapeRelative: _center = %1",_center];
private["_obj","_objects"];
_objects = [];
{
_x params["_objClassName","_objRelPos","_objDir"];
_obj = [_objClassName, _objRelPos vectorAdd _center, _objDir,enableSimulationForObject,enableDamageForObject,enableRopesforObject,"CAN_COLLIDE"] call blck_fnc_spawnSingleObject;
_objects pushBack _obj;
}forEach _landscape;
_landscape
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_center","_landscape"];
// diag_log format["fnc_spawnMissionLandscapeRelative: _center = %1",_center];
private["_obj","_objects"];
_objects = [];
{
_x params["_objClassName","_objRelPos","_objDir"];
_obj = [_objClassName, _objRelPos vectorAdd _center, _objDir,enableSimulationForObject,enableDamageForObject,enableRopesforObject,"CAN_COLLIDE"] call blck_fnc_spawnSingleObject;
_objects pushBack _obj;
}forEach _landscape;
_landscape

View File

@ -1,17 +1,27 @@
/*
By Ghostrider [GRG]
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
params["_center","_crates"];
private["_crate","_cratesSpawned"];
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_center","_crates"];
private["_crate","_cratesSpawned"];
_cratesSpawned = [];
{
_x params["_objClassName","_objRelPos","_crateLoot","_lootCounts","_objDir"];
_crate = [_objClassName, _objRelPos vectorAdd _center, _objDir] call blck_fnc_spawn_lootCrate;
//_crate setPosATL _objRelPos vectorAdd _center;
_cratesSpawned pushBack _crate;
//_crate setVariable ["LAST_CHECK", 100000];
_crate allowDamage false;
_crate enableRopeAttach false;
_crate
}forEach _crates;
_cratesSpawned
_cratesSpawned = [];
{
_x params["_objClassName","_objRelPos","_crateLoot","_lootCounts","_objDir"];
_crate = [_objClassName, _objRelPos vectorAdd _center, _objDir] call blck_fnc_spawn_lootCrate;
//_crate setPosATL _objRelPos vectorAdd _center;
_cratesSpawned pushBack _crate;
//_crate setVariable ["LAST_CHECK", 100000];
_crate allowDamage false;
_crate enableRopeAttach false;
_crate
}forEach _crates;
_cratesSpawned

View File

@ -1,10 +1,19 @@
/*
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";
params["_objClassName","_objPosn",["_objDir",0],["_enableSimulation",true],["_enableDamage",true],["_enableRopes",true],["_mode","NONE"]];
//diag_log format["_fnc_spawnSingleObject: _objClassName = %1 | _objPosn = %2 | _objPosn = %3",_objClassName,_objPosn,_objDir];
private _obj = createVehicle[_objClassName,_objPosn,[],0,_mode];
_obj setDir _objDir;
_obj allowDamage _enableDamage;
_obj enableDynamicSimulation _enableSimulation;
//diag_log format["created object %1 at %2 heading %3",_obj,getPosATL _obj, getDir _obj];
_obj
params["_objClassName","_objPosn",["_objDir",0],["_enableSimulation",true],["_enableDamage",true],["_enableRopes",true],["_mode","NONE"]];
//diag_log format["_fnc_spawnSingleObject: _objClassName = %1 | _objPosn = %2 | _objPosn = %3",_objClassName,_objPosn,_objDir];
private _obj = createVehicle[_objClassName,_objPosn,[],0,_mode];
_obj setDir _objDir;
_obj allowDamage _enableDamage;
_obj enableDynamicSimulation _enableSimulation;
//diag_log format["created object %1 at %2 heading %3",_obj,getPosATL _obj, getDir _obj];
_obj

View File

@ -0,0 +1,41 @@
/*
Managages simulation using blckeagls logic
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";
private["_playerType","_players"];
_playerType = ["LandVehicle","SHIP","AIR","TANK"];
switch (toLower(blck_modType)) do
{
case "exile": {_playerType = _playerType + ["Exile_Unit_Player"]};
case "epoch": {_playerType = _playerType + ["Epoch_Male_F","Epoch_Female_F"]};
};
{
private _group = _x;
_players = ((leader _group) nearEntities [_playerType, blck_simulationEnabledDistance]) select {isplayer _x};
if !(_players isEqualTo []) then
{
{
if !(simulationEnabled _x) then
{
_x enableSimulationGlobal true;
(_players select 0) reveal _x; // Force simulation on
};
}forEach (units _group);
}else{
{
if (simulationEnabled _x) then
{
_x enableSimulationGlobal false;
};
}forEach (units _x);
};
} forEach blck_monitoredMissionAIGroups;

View File

@ -42,8 +42,11 @@ _wp setWaypointCompletionRadius (_group getVariable["wpRadius",30]);
_wp setWaypointType "MOVE";
_wp setWaypointName "move";
_wp setWaypointBehaviour "COMBAT";
_wp setWaypointCombatMode "YELLOW";
_wp setWaypointTimeout [1,1.1,1.2];
_wp setWaypointCombatMode "RED";
_wp setWaypointTimeout [10,15,20];
_wp setWaypointLoiterRadius (_group getVariable["wpRadius",30]);
_wp setWaypointLoiterType "CIRCLE";
_wp setWaypointSpeed "LIMITED";
_group setCurrentWaypoint _wp;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then

View File

@ -1,8 +1,6 @@
/*
call as [] call blck_fnc_cleanEmptyGroups;
Deletes any empty groups and thereby prevents errors resulting from createGroup returning nullGroup.
removes empty or null groups from blck_monitoredMissionAIGroups
By Ghostrider [GRG]
3/18/17
--------------------------
License
--------------------------
@ -12,19 +10,14 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
#ifdef blck_debugMode
if (blck_debugLevel > 2) then
for "_i" from 0 to ((count blck_monitoredMissionAIGroups) - 1) do
{
diag_log format ["_fnc_cleanEmptyGroups:: -- >> group count = %1 ",(count allGroups)];
diag_log format ["_fnc_cleanEmptyGroups:: -- >> Group count AI side = %1", call blck_fnc_groupsOnAISide];
};
#endif
if (_i >= (count blck_monitoredMissionAIGroups)) exitWith {};
_grp = blck_monitoredMissionAIGroups deleteat 0;
//if (!(_grp isEqualTo grpNull) then
//{
if ({alive _x} count units _grp > 0) then { blck_monitoredMissionAIGroups pushBack _grp};
//};
};
private _grp = allGroups;
{
//diag_log format["_fnc_cleanEmptyGroups:: - >> type of object _x = %1",typeName _x];
if ((count units _x) isEqualTo 0) then {deleteGroup _x};
}forEach _grp;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log "_fnc_cleanEmptyGroups:: -- >> exiting function";};
#endif

View File

@ -1,8 +1,6 @@
/*
By Ghostrider [GRG]
Copyright 2016
--------------------------
License
--------------------------
@ -15,7 +13,6 @@
private["_groupSpawned"];
_groupSpawned = createGroup [blck_AI_Side, true];
//_groupSpawned setVariable["groupVehicle",objNull];
if (blck_simulationManager == blck_useDynamicSimulationManagement) then
{
_groupSpawned enableDynamicSimulation true;

View File

@ -1,9 +1,8 @@
// Sets the WP type for WP for the specified group and updates other atributes accordingly.
/*
for ghostridergaming
By Ghostrider [GRG]
Copyright 2016
Last modified 4/23/17
--------------------------
License

View File

@ -0,0 +1,126 @@
/*
Checks for groups that have not reached their waypoints within a proscribed period
and redirects them.
for ghostridergaming
By Ghostrider [GRG]
Copyright 2016
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
_fn_waypointComplete = {
private _group = _this select 0;
private _wp = currentWaypoint _group;
private _done = if (currentWaypoint _group) > (count (waypoints _group)) then {true} else {false};
_done
};
_fn_aliveGroupUnits = {
private _group = _this select 0;
private _units = {alive _x} count (units _group);
_units
};
{
private["_timeStamp","_index","_unit","_soldierType"];
// check for error conditions
if ( !(_x isEqualTo grpNull) && ([_x] call _fn_aliveGroupUnits > 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];
if (_timeStamp isEqualTo 0) then {
_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"];
//diag_log format["_fn_monitorGroupWaypoints::--> soldierType for group %1 = %2 and timeStamp = %3",_x,_soldierType,_timeStamp];
private _maxtime = 0;
switch (soldierType) do
{
case "infantry": {_maxtime = 60};
case "vehicle": {_maxtime = 90};
case "aircraft": {_maxtime = 90};
};
_private _updateNeeded = if (diag_tickTime > (_x getVariable "timeStamp") + 60) then
{
}
if (_soldierType isEqualTo "infantry") then
{
if (diag_tickTime > (_x getVariable "timeStamp") + 60) then
{
_units = [_x] call _fn_aliveGroupUnits;
if (count _units > 0) then
{
private _leader = leader _x;
(_leader) call blck_fnc_changeToMoveWaypoint;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: infantry group %1 stuck, waypoint reset",_x];};
#endif
/*
if ( (getPos _leader) distance2d (_group getVariable "patrolCenter") > 200) then
{
};
*/
};
};
};
if (_soldierType isEqualTo "vehicle") then
{
if (diag_tickTime > (_x getVariable "timeStamp") + 60) then
{
_units = [_x] call _fn_aliveGroupUnits;
if (count _units > 0) then
{
private _leader = leader _x;
(_leader) call blck_fnc_changeToMoveWaypoint;
//#ifdef blck_debugMode
if (true /*blck_debugLevel > 2*/) then {diag_log format["_fnc_missionGroupMonitor: vehicle group %1 stuck, waypoint reset",_x];};
//#endif
/*
if ( (getPos _leader) distance2d (_group getVariable "patrolCenter") > 200) then
{
};
*/
};
};
};
/*
if (_soldierType isEqualTo "helicopter") then
{
if ((diag_tickTime > (_x getVariable "timeStamp")) then
{
private _units = [_x] call _fn_aliveGroupUnits;
if (count _units > 0) then
{
private _leader = leader _x;
if (_leader distance (_group getVariable "patrolCenter") > blck_turnBackRadiusHelis) then
{
_leader call blck_fnc_changeToMoveWaypoint;
//#ifdef blck_debugMode
if (true ) then {diag_log format["_fnc_missionGroupMonitor: helicopter group %1 stuck, waypoint reset",_x];};
//#endif
//diag_log format["_fnc_missionGroupMonitor: helicopter group %1 stuck, waypoint reset",_x];
};
};
};
};
*/
} forEach blck_monitoredMissionAIGroups;

View File

@ -6,8 +6,7 @@
It uses a timestamp attached to the group that is cleared upon waypoint completion.
By Ghostrider-GRG-
Last modified 3/14/17
--------------------------
License
--------------------------
@ -17,184 +16,5 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
//diag_log format["_fnc_missionGroupMonitor (4/29:4:09 PM)::-->> running function at diag_tickTime = %1 with blck_fnc_missionGroupMonitor = %2",diag_tickTime,blck_monitoredMissionAIGroups];
#ifdef blck_debugMode
//diag_log format["_fnc_missionGroupMonitor:: blck_debugMode defined"];
#endif
_fn_allPlayers = {
private ["_players"];
_players = [];
{
if (isPlayer _x) then {_players pushback _x};
}forEach playableUnits;
//diag_log format["_fn_allPlayers::-->> result s %1",_players];
_players
};
_fn_aliveGroupUnits = {
private["_grp","_aliveUnits"];
_grp = _this select 0;
_aliveUnits = [];
{
if ( alive _x) then {_aliveUnits pushback _x};
} forEach (units _grp);
_aliveUnits
};
_fn_inCombat = {
private["_grp","_targets","_players","_aliveUnits"];
_grp = _this select 0;
_players = [] call _fn_allPlayers;
_aliveUnits = [_grp] call _fn_aliveGroupUnits;
_inCombat = false;
{
_targets = _x findNearestEnemy (position _x);
if !(isNull _targets) exitWith {_inCombat = true};
} forEach _aliveUnits;
//diag_log format["_fn_inCombat::-->> _grp to test is %1 and result is %2",_grp,_inCombat];
_inCombat;
};
_fn_removeEmptyOrNullGroups = {
//diag_log format["_fn_removeEmptyOrNullGroups::-->> excuting function at %1",diag_tickTime];
// Remove any null groups (which will occur if all units in the group are dead) or groups with no alive AI.
for "_i" from 0 to ((count blck_monitoredMissionAIGroups) - 1) do
{
private["_grp"];
if (_i >= (count blck_monitoredMissionAIGroups)) exitWith {};
_grp = blck_monitoredMissionAIGroups select _i;
if (_grp isEqualTo grpNull) then {
blck_monitoredMissionAIGroups set[_i, -1];
blck_monitoredMissionAIGroups = blck_monitoredMissionAIGroups - [-1];
//diag_log "_fnc_waypointMonitor::-->> deleting a NULL-GROUP";
};
if ({alive _x} count units _grp < 1) then {
blck_monitoredMissionAIGroups = blck_monitoredMissionAIGroups - [_grp];
//diag_log "_fnc_waypointMonitor::-->> deleting an empty group";
};
};
};
_fn_monitorGroupWaypoints = {
{
private["_timeStamp","_index","_unit","_soldierType"];
_timeStamp = _x getVariable ["timeStamp",0];
if (_timeStamp isEqualTo 0) then {
_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"];
//diag_log format["_fn_monitorGroupWaypoints::--> soldierType for group %1 = %2 and timeStamp = %3",_x,_soldierType,_timeStamp];
if (_soldierType isEqualTo "infantry") then
{
if (diag_tickTime > (_x getVariable "timeStamp") + 60) then
{
_units = [_x] call _fn_aliveGroupUnits;
if (count _units > 0) then
{
private _leader = leader _x;
(_leader) call blck_fnc_changeToMoveWaypoint;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: infantry group %1 stuck, waypoint reset",_x];};
#endif
/*
if ( (getPos _leader) distance2d (_group getVariable "patrolCenter") > 200) then
{
};
*/
};
};
};
if (_soldierType isEqualTo "vehicle") then
{
if (diag_tickTime > (_x getVariable "timeStamp") + 60) then
{
_units = [_x] call _fn_aliveGroupUnits;
if (count _units > 0) then
{
private _leader = leader _x;
(_leader) call blck_fnc_changeToMoveWaypoint;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: vehicle group %1 stuck, waypoint reset",_x];};
#endif
/*
if ( (getPos _leader) distance2d (_group getVariable "patrolCenter") > 200) then
{
};
*/
};
};
};
if (_soldierType isEqualTo "helicopter") then
{
if (diag_tickTime > (_x getVariable "timeStamp") + 60) then
{
_units = [_x] call _fn_aliveGroupUnits;
if (count _units > 0) then
{
private _leader = leader _x;
(_leader) call blck_fnc_changeToMoveWaypoint;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: helicopter group %1 stuck, waypoint reset",_x];};
#endif
/*
if ( (getPos _leader) distance2d (_group getVariable "patrolCenter") > 200) then
{
};
*/
};
};
};
} forEach blck_monitoredMissionAIGroups;
};
_fn_simulationMonitor = {
private["_playerType","_players"];
_playerType = ["LandVehicle","SHIP","AIR","TANK"];
if (blck_modType isEqualTo "Exile") then
{
_playerType = _playerType + ["Exile_Unit_Player"];
}else{
_playerType = _playerType + ["Epoch_Male_F","Epoch_Female_F"];
};
{
_players = ((leader _x) nearEntities [_playerType, blck_simulationEnabledDistance]) select {isplayer _x};
if (count _players > 0) then
{
{
if !(simulationEnabled _x) then
{
_x enableSimulationGlobal true;
(_players select 0) reveal _x; // Force simulation on
};
}forEach (units _x);
}else{
// Be sure simulation is off for all units in the group.
{
if (simulationEnabled _x) then
{
_x enableSimulationGlobal false;
};
}forEach (units _x);
};
} forEach blck_monitoredMissionAIGroups;
};
////////
// Start of main function
////////
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: executing function at %1",diag_tickTime];};
#endif
[] call _fn_removeEmptyOrNullGroups;
uiSleep 0.1;
[] call _fn_monitorGroupWaypoints;
if (blck_simulationManager == blck_useBlckeaglsSimulationManagement) then {[] call _fn_simulationMonitor};

View File

@ -80,7 +80,7 @@ if !(_soldierType isEqualTo "emplaced") then
_wp setWaypointStatements ["true","this call blck_fnc_changeToMoveWaypoint;"];
#endif
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
if (blck_debugLevel >= 3) then
{
_marker = createMarker [format["GroupMarker%1",_group],_newPos];
_group setVariable["wpMarker",_marker,true];
@ -90,7 +90,7 @@ if !(_soldierType isEqualTo "emplaced") then
//diag_log format["_fnc_setupWaypoints: configuring weapoints for group %2 mobile patrol with _soldierType = %1",_solderType,_group];
diag_log format["_fnc_setupWaypoints: soldier type for mobile _group %1 set to %2",_group, (_group getVariable["soldierType","null"])];
diag_log format["_fnc_setupWaypoints: all variables for the group have been set for group %1",_group];
diag_log format["_fnc_setupWaypoints:: -- >> wpMode %1 _dir %2 _dis 3",_group getVariable["wpMode","random"], _dir, _dis];
diag_log format["_fnc_setupWaypoints:: -- >> wpMode %1 _dir %2 _dis %3",_group getVariable["wpMode","random"], _dir, _dis];
diag_log format["_fnc_setupWaypoints:: -- >> group to update is %1 and new position is %2",_group, _newPos];
diag_log format["_fnc_setupWaypoints:: -- >> Waypoint statements for group %1 have been configured as %2",_group, waypointStatements _wp];
diag_log format["_fnc_setupWaypoints:: -- >> Waypoint marker for group %1 have been configured as %2 with text set to %3",_group, _group getVariable "wpMarker", markerText (_group getVariable "wpMarker")];

View File

@ -12,9 +12,9 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private["_numbertospawn","_groupSpawned","_safepos","_useLauncher","_launcherType"];
private["_numbertospawn","_groupSpawned","_safepos","_useLauncher","_launcherType","_infantryType"];
// _newGroup = [_groupSpawnPos,_minAI,_maxAI,_skillLevel,_coords,_minPatrolRadius,_maxPatrolRadius,_uniforms,_headGear,_vests,_backpacks,_weapons,_sideArms,true,_isScubaGroup]
params["_pos", "_center", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], ["_minDist",20], ["_maxDist",35],["_configureWaypoints",true], ["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_scuba",false]];
params["_pos", "_center", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], ["_minDist",30], ["_maxDist",45],["_configureWaypoints",true], ["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_scuba",false]];
if (_weaponList isEqualTo []) then {_weaponList = [_skillLevel] call blck_fnc_selectAILoadout};
if (_sideArms isEqualTo []) then {_sideArms = [_skillLevel] call blck_fnc_selectAISidearms};
if (_uniforms isEqualTo []) then {_uniforms = [_skillLevel] call blck_fnc_selectAIUniforms};
@ -96,9 +96,8 @@ if !(isNull _groupSpawned) then
if (_configureWaypoints) then
{
if (_scuba) then {_infantryType = "scuba"} else {_infantryType = "infantry"};
[_pos,_minDist,_maxDist,_groupSpawned,"random","SAD","infantry"] spawn blck_fnc_setupWaypoints;
[_pos,_minDist,_maxDist,_groupSpawned,"random","SAD",_infantryType] spawn blck_fnc_setupWaypoints;
};
//[_pos,_minDist,_maxDist,_groupSpawned,"random","SENTRY"] spawn blck_fnc_setupWaypoints;
//diag_log format["_fnc_spawnGroup: blck_fnc_setupWaypoints called for group %1",_groupSpawned];
#ifdef blck_debugMode
if (blck_debugLevel >= 1) then

View File

@ -1,5 +1,4 @@
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
@ -9,18 +8,12 @@
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_HC_XferGroup:: _this = %1",_this];
private["_group","_client","_unit","_tempEH"];
private["_group","_unit","_tempEH"];
_group = _this select 0;
//blck_HC_monitoredGroups pushBack _group;
_client = clientOwner;
{
_unit = _x;
_localEH = [];
_tempEH = ["reloaded",_unit addEventHandler ["reloaded", {_this call compile preprocessfilelinenumbers blck_EH_unitWeaponReloaded;}]];
_localEH pushBack _tempEH;
_x setVariable["localEH",_localEH,true];
_tempEH = _unit addEventHandler ["Reloaded", {_this call blck_EH_unitWeaponReloaded;}];
}forEach (units _group);
diag_log format["blckHC:: group %1 transferred to HC %1",_group,_client];
//diag_log format["blckHC:: group %1 transferred to HC %1",_group,_client];

View File

@ -15,11 +15,12 @@ params["_HC_List"];
if (count _HC_List == 0) exitWith {_result = objNull; _result};
if (count _HC_List == 1) exitWith {_result = _HC_List select 0; _result}:
private["_result","_fewestGroupsAssigned","_leastBurdened","_groupsAssigned"];
_fewestGroupsAssigned = [_HC_List select 0] call blck_fnc_HC_countGroupsAssigned;
_leastBurdened = _HC_List select 0;
_fewestGroupsAssigned = 1000000;
{
_groupsAssigned = [_x] call blck_fnc_HC_countGroupsAssigned;
if (_groupsAssigned < _fewestGroupsAssigned) then
_ownerHC = owner _x;
_groupsAssigned = {(groupOwner _x) isEqualTo _ownerHC} count allGroups;
diag_log format["_fnc_HC_leastBurdened: HC %1 | groupsAssigned %2",_x,_groupsAssigned];
if ([_x] call blck_fnc_HC_countGroupsAssigned < _fewestGroupsAssigned) then
{
_leastBurdened = _x;
_fewestGroupsAssigned = _groupsAssigned;

View File

@ -1,5 +1,4 @@
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
@ -20,52 +19,27 @@ blck_fnc_countGroupsAssigned = {
_result
};
//diag_log format["_fnc_passToHCs:: function called at server time %1",diag_tickTime];
private["_numTransfered","_clientId","_allGroups","_groupsOwned","_idHC","_id","_swap","_rc"];
_numTransfered = 0;
//_numTransfered = 0;
_idHC = -2;
blck_connectedHCs = call blck_fnc_HC_getListConnected; // Double check on this function; seems overly complicated.
blck_connectedHCs = entities "HeadlessClient_F";
//diag_log format["_fnc_passToHCs:: blck_connectedHCs = %1 | count _HCs = %2 | server FPS = %3",blck_connectedHCs,count blck_connectedHCs,diag_fps];
if ( (count blck_connectedHCs) > 0) then
if !(blck_connectedHCs isEqualTo []) then
{
_idHC = [blck_connectedHCs] call blck_fnc_HC_leastBurdened;
//diag_log format["passToHCs: evaluating passTos for HC %1 || owner HC = %2",_idHC, owner _idHC];
{
// Pass the AI
if (_x getVariable["blck_group",false]) then
{
//diag_log format["group belongs to blckeagls mission system so time check if we should transfer it"];
//diag_log format["Owner of group %1 is %2",_x,groupOwner _x];
if ((groupOwner _x) == 2) then
{
//diag_log format["blckeagls group %1 is on the server: we should be moved to HC %2 with _idHC %3",_x,_idHC];
//_x setVariable["owner",owner _idHC];
//_x setVariable["Group",group (driver _x)),true]
private _sgor = _x setGroupOwner (owner _idHC);
//diag_log format["setGroupOwner returned %1",_sgor];
//diag_log format["_veh %1 variable owner set to %2",getVariable _veh["owner",-1]];
//diag_log format["_veh %1 Group set to %2",_veh getVariable["Group",grpNull]];
if (_sgor) then
{
[_x] remoteExec["blck_fnc_HC_XferGroup",_idHC];
_numTransfered = _numTransfered + 1;
//diag_log format["group %1 transferred to %2",_x, groupOwner _x];
} else {
//diag_log format["something went wrong with the transfer of group %1",_x];
//_numTransfered = _numTransfered + 1;
};
};
} else {
//diag_log format["group %1 does not belong to blckeagls mission system",_x];
};
} forEach (allGroups);
diag_log format["[blckeagls] _passToHCs:: %1 groups transferred to HC %2",_numTransfered,_idHC];
//_numTransfered = 0;
// Note : the owner of a vehicle is the owner of the driver so vehicles are automatically transferred to the HC when the group to which the driver is assigned is transferred.
} else {
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log "_fnc_passToHCs:: No headless clients connected"};
#endif
//diag_log format["[blckeagls] _passToHCs:: %1 groups transferred to HC %2",_numTransfered,_idHC];
};

View File

@ -19,45 +19,33 @@
_fn_deleteObjects = {
params["_objects"];
#ifdef blck_debugMode
if (blck_debugLevel > 0) then {diag_log format["_fn_deleteObjects:: -> _objects = %1",_objects];};
#endif
{
#ifdef blck_debugMode
if (blck_debugLevel > 1) then {diag_log format["_fnc_cleanUpObjects: -> deleting object %1",_x];};
#endif
deleteVehicle _x;
} forEach _objects;
};
//diag_log format["_fnc_cleanUpObjects called at %1",diag_tickTime];
private["_oldObjs"];
for "_i" from 1 to (count blck_oldMissionObjects) do
{
if (_i <= count blck_oldMissionObjects) then
{
_oldObjs = blck_oldMissionObjects select (_i - 1);
//diag_log format["_fnc_cleanUpObjects ::-->> evaluating missionObjects = %1 with delete time of %3 and diag_tickTime %2",_oldObjs,diag_tickTime, _oldObjs select 1];
if (diag_tickTime > (_oldObjs select 1) ) then {
//diag_log format["_fn_deleteObjects:: (50) cleaning up mission objects %1",_oldObjs];
[_oldObjs select 0] call _fn_deleteObjects;
for "_i" from 1 to (count blck_oldMissionObjects) do {
if (_i <= count blck_oldMissionObjects) then {
_oldObjs = blck_oldMissionObjects deleteat 0;
_oldObjs params ["_objarr","_timer"];
if (diag_tickTime > _timer) then {
[_objarr] call _fn_deleteObjects;
uiSleep 0.1;
blck_oldMissionObjects set[(_i - 1), -1];
blck_oldMissionObjects = blck_oldMissionObjects - [-1];
#ifdef blck_debugMode
//diag_log format["_fn_deleteObjects:: blck_oldMissionObjects updated from %1",_obj];
if (blck_debugLevel > 1) then {diag_log format["_fn_deleteObjects:: (48) blck_oldMissionObjects updated to %1",blck_oldMissionObjects];};
#endif
}
else {
blck_oldMissionObjects pushback _oldObjs;
};
};
};
};

View File

@ -62,12 +62,6 @@ _fn_missionCleanup = {
diag_log format["_fnc_endMission: Mission Aborted, setting all timers to 0"];
};
#endif
/*
if (_endCondition == 2) then
{
[["warning",_endMsg,_blck_localMissionMarker select 2]] call blck_fnc_messageplayers;
};
*/
[_blck_localMissionMarker select 0] call blck_fnc_deleteMarker;
_cleanupCompositionTimer = 0;
_cleanupAliveAITimer = 0;

View File

@ -1,8 +1,4 @@
//////////////////////////////////////////////////////
// Attach a marker of type _marker to an object _crate
// by Ghostrider [GRG] based on code from Wicked AI for Arma 2 Dayz Epoch
// Last modified 8/2/15
/////////////////////////////////////////////////////
/*
--------------------------
License

View File

@ -1,8 +1,4 @@
//////////////////////////////////////////////////////
// Attach a marker of type _marker to an object _crate
// by Ghostrider [GRG] based on code from Wicked AI for Arma 2 Dayz Epoch
// Last modified 8/2/15
/////////////////////////////////////////////////////
/*
--------------------------
License

View File

@ -1,3 +1,11 @@
/*
--------------------------
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";
private _crate = _this select 0;
#ifdef blck_debugMode

View File

@ -189,24 +189,8 @@ private _params = [_coords,_minNoAI,_maxNoAI,_missionGroups,_aiDifficultyLevel,_
_temp = [_coords, _minNoAI,_maxNoAI,_missionGroups,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionAI;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {
diag_log format["missionSpawner :: (264) blck_fnc_spawnMissionAI returned a value of _temp = %1",_temp]; uiSleep 1;
};
_abort = _temp select 1;
if (blck_debugLevel > 2) then {
diag_log format["missionSpawner :: (269) blck_fnc_spawnMissionAI returned a value of _abort = %1",_abort]; uiSleep 1;
};
#endif
if (_abort) exitWith
{
if (blck_debugLevel > 1) then {
diag_log "missionSpawner:: (277) grpNull returned, mission termination criteria met, calling blck_fnc_endMission"
};
[_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_markerClass, 1] call blck_fnc_endMission;
};
if !(_abort) then
{
_blck_AllMissionAI append (_temp select 0);
@ -223,41 +207,17 @@ _assetSpawned = objNull;
if !(_hostageConfig isEqualTo []) then
{
_temp = [_coords,_hostageConfig] call blck_fnc_spawnHostage;
//diag_log format["_fnc_missionSpawner: _fnc_spawnHostage returned %1",_temp];
_assetSpawned = _temp select 0;
_objects pushBack (_temp select 1);
//diag_log format["_fnc_missionSpawner: _assetSpawned = %1",_assetSpawned];
//diag_log format["_fnc_missionSpawner: _fnc_spawnHostage returned object %1",_temp select 1];
_blck_AllMissionAI pushBack _assetSpawned;
};
if !(_enemyLeaderConfig isEqualTo []) then
{
_temp = [_coords,_enemyLeaderConfig] call blck_fnc_spawnLeader;
//diag_log format["_fnc_missionSpawner: _fnc_spawnLeader return _temp = %1",_temp];
_assetSpawned = _temp select 0;
_objects pushBack (_temp select 1);
//diag_log format["_fnc_missionSpawner: _assetSpawned = %1",_assetSpawned];
//diag_log format["_fnc_missionSpawner: building spawned by _fnc_spawnLeader = %1",_temp select 1];
_blck_AllMissionAI pushBack _assetSpawned;
//diag_log format["_fnc_missionSpawner (261): _blck_AllMissionAI",_blck_AllMissionAI];
};
#ifdef blck_debugMode
if (blck_debugLevel >= 1) then {
diag_log format["_fnc_missionSpawner: _assetSpawned = %1",_assetSpawned];
};
#endif
uiSleep delayTime;
_temp = [[],[],false];
_abort = false;
if (_abort) exitWith
{
[_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_markerClass, 1] call blck_fnc_endMission;
};
uiSleep delayTime;
@ -266,19 +226,7 @@ _abort = false;
// Deal with helicopter patrols
_temp = [];
#ifdef blck_debugMode
if (blck_debugLevel > 1) then
{
diag_log format["[blckeagls] missionSpawner:: (351) calling in heli patrol: Current mission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
};
#endif
_noChoppers = [_noChoppers] call blck_fnc_getNumberFromRange;
#ifdef blck_debugMode
if (blck_debugLevel > 1) then {diag_log format["_missionSpawner(322):: _noChoppers = %1 && _chancePara = %2",_noChoppers,_chancePara]};
#endif
if (_noChoppers > 0) then
{
for "_i" from 1 to (_noChoppers) do
@ -290,13 +238,11 @@ if (_noChoppers > 0) then
if (typeName _temp isEqualTo "ARRAY") then
{
_abort = _temp select 2;
blck_monitoredVehicles pushBack (_temp select 0);
_blck_AllMissionAI append (_temp select 1);
};
if (_abort) then
{
_objects pushback (_temp select 0);
[_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_markerClass, 1] call blck_fnc_endMission;
if !(_abort) then
{
blck_monitoredVehicles pushBack (_temp select 0);
_blck_AllMissionAI append (_temp select 1);
};
};
};
};
@ -306,35 +252,23 @@ uisleep 3;
if (count _garrisonedBuilding_ATLsystem > 0) then
{
_temp = [_coords, _garrisonedBuilding_ATLsystem, _aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_ATLsystem;
diag_log format["_missionspawner: garrisoned a building using ATL format, function returned %1",_temp];
// _return = [_group,_buildingsSpawned,_staticsSpawned];
_objects append (_temp select 1);
blck_monitoredVehicles append (_temp select 2);
_blck_AllMissionAI append (units (_temp select 0));
};
uiSleep 3;
diag_log format["_missionSpawner: _garrisonedBuildings_BuildingPosnSystem = %1",_garrisonedBuildings_BuildingPosnSystem];
if (count _garrisonedBuildings_BuildingPosnSystem > 0) then
{
// params["_center","_garrison","_aiDifficultyLevel","_uniforms","_headGear","_vests","_backpacks","_weaponList","_sideArms"];
_temp = [_coords, _garrisonedBuildings_BuildingPosnSystem, _aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_garrisonBuilding_RelPosSystem;
diag_log format["_missionspawner: garrisoned a building using relPos format, function returned %1",_temp];
// _return = [_group,_buildingsSpawned,_staticsSpawned];
_objects append (_temp select 1);
blck_monitoredVehicles append (_temp select 2);
_blck_AllMissionAI append (units (_temp select 0));
};
//////////////////////////
// Spawn Crates and Emplaced Weapons Last to try to force them to correct positions relative to spawned buildinga or other objects.
#ifdef blck_debugMode
if (blck_debugLevel > 0) then {diag_log format["missionSpawner:: (389) preparing to spawn emplaced weapons for _coords %4 | _markerClass %3 | blck_useStatic = %1 | _noEmplacedWeapons = %2",blck_useStatic,_noEmplacedWeapons,_markerClass,_coords];};
#endif
uiSleep 15;
private["_noEmplacedToSpawn"];
_noEmplacedToSpawn = [_noEmplacedWeapons] call blck_fnc_getNumberFromRange;
//diag_log format["_fnc_missionSpawner: -> _noEmplacedToSpawn = %1 | blck_useStatic = %2",_noEmplacedToSpawn,blck_useStatic];
if (blck_useStatic && (_noEmplacedToSpawn > 0)) then
{
_temp = [_coords,_missionEmplacedWeapons,useRelativePos,_noEmplacedToSpawn,_aiDifficultyLevel,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnEmplacedWeaponArray;
@ -350,10 +284,7 @@ if (blck_useStatic && (_noEmplacedToSpawn > 0)) then
_blck_AllMissionAI append (_temp select 1);
};
};
if (_abort) exitWith
{
[_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_markerClass, 1] call blck_fnc_endMission;
};
_vehToSpawn = [_noVehiclePatrols] call blck_fnc_getNumberFromRange;
if (blck_useVehiclePatrols && ((_vehToSpawn > 0) || count _missionPatrolVehicles > 0)) then
{
@ -413,7 +344,6 @@ if (_noPara > 0 && (random(1) < _chancePara) && _paraTriggerDistance == 0) then
};
};
// Define Triggers for mission end
private["_missionComplete","_endIfPlayerNear","_endIfAIKilled","_secureAsset","_crateStolen","_locations"];
_missionComplete = -1;
_startTime = diag_tickTime;
@ -425,7 +355,7 @@ switch (_endCondition) do
case "allKilledOrPlayerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = true;};
case "assetSecured": {_secureAsset = true; _endIfPlayerNear = false; _endIfAIKilled = false;};
};
//diag_log format["_fnc_missionSpawner: _secureAsset = %1",_secureAsset];
if (blck_showCountAliveAI) then
{
if !(_marker isEqualTo "") then
@ -450,7 +380,7 @@ if (_secureAsset) then {_minNoAliveForCompletion = _minNoAliveForCompletion + 1}
while {_missionComplete isEqualTo -1} do
{
#ifdef blck_debugMode
if (blck_debugLevel > 2) exitWith {uiSleep blck_triggerLoopCompleteTime;diag_log "_missionSpawner (492) scripted Mission End blck_debugLevel = 3";};
if (blck_debugLevel > 3) exitWith {uiSleep blck_triggerLoopCompleteTime;diag_log "_missionSpawner (492) scripted Mission End blck_debugLevel = 3";};
#endif
if (_endIfPlayerNear) then
@ -462,17 +392,20 @@ while {_missionComplete isEqualTo -1} do
{
if (({alive _x} count _blck_AllMissionAI) <= _minNoAliveForCompletion) then {_missionComplete = 1};
};
if (_spawnCratesTiming isEqualTo "atMissionSpawn") then
if (_spawnCratesTiming isEqualTo "atMissionSpawnGround") then
{
// Re-evaluate this - may not need the forEach
//{
if ({[_x] call blck_fnc_crateMoved} count _crates > 0) then
{
private _d = _x distance (_x getVariable ["crateSpawnPos",_coords]);
//diag_log format["crate %1 moved %2 at %3",_x,_d,diag_tickTime];
if (_d > 25) exitWith
{
_missionComplete = 1;
_crateStolen = true;
};
//}forEach _crates;
}forEach _crates;
};
if (_secureAsset) then
{
if !(alive _assetSpawned) then
@ -526,15 +459,9 @@ while {_missionComplete isEqualTo -1} do
if (_crateStolen) exitWith
{
diag_log format["missionSpawner:: (542) Crate Stolen Callening _fnc_endMission - > players near = %1 and ai alive = %2 and crates stolen = %3",[_locations,10,true] call blck_fnc_playerInRangeArray, {alive _x} count _blck_AllMissionAI, _crateStolen];
[_mines,_objects,_crates, _blck_AllMissionAI,"Crate Removed from Mission Site Before Mission Completion: Mission Aborted",_blck_localMissionMarker,_coords,_markerClass, 2] call blck_fnc_endMission;
};
/*
if ((_secureAsset) && !(alive _assetSpawned)) exitWith
{
[_mines,_objects,_crates, _blck_AllMissionAI,_assetKilledMsg,_blck_localMissionMarker,_coords,_markerClass, 2] call blck_fnc_endMission;
};
*/
if (_spawnCratesTiming in ["atMissionEndGround","atMissionEndAir"]) then
{
if (!(_secureAsset) || (_secureAsset && (alive _assetSpawned))) then
@ -574,15 +501,6 @@ if (_spawnCratesTiming isEqualTo "atMissionSpawnGround" && _loadCratesTiming isE
};
};
#ifdef blck_debugMode
if (blck_debugLevel > 0) then
{
diag_log format["[blckeagls] missionSpawner:: (586) Mission completion criteria fulfilled: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
diag_log format["missionSpawner :: (587) _endIfPlayerNear = %1 _endIfAIKilled= %2",_endIfPlayerNear,_endIfAIKilled];
diag_log format["[blckeagls] missionSpawner:: (588) calling endMission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
};
#endif
private["_result"];
// Force passing the mission name for informational purposes.
_blck_localMissionMarker set [2, _markerMissionName];
@ -594,20 +512,15 @@ if (blck_showCountAliveAI) then
}forEach blck_missionMarkers;
};
//diag_log format["_fnc_missionSpawner (557) Build 123: _secureAsset = %1 | {alive _assetSpawned} = %2 | assetType = %3",_secureAsset,alive _assetSpawned, _assetSpawned getVariable["assetType",-1]];
if (_secureAsset && (alive _assetSpawned)) then
{
if (_assetSpawned getVariable["assetType",0] isEqualTo 1) then
{
//diag_log "Processing Mission End for Hostage Rescue";
//_assetSpawned setCaptive false;
_assetSpawned setVariable["GMSAnimations",[""],true];
[_assetSpawned,""] remoteExec["switchMove",-2];;
uiSleep 0.1;
_assetSpawned enableAI "ALL";
private _newPos = (getPos _assetSpawned) getPos [1000, random(360)];
//diag_log format["processing domove for hostage with current pos = %1 and new pos = %2",getPos _assetSpawned, _newPos];
(group _assetSpawned) setCurrentWaypoint [group _assetSpawned, 0];
[group _assetSpawned,0] setWaypointPosition [_newPos,0];
[group _assetSpawned,0] setWaypointType "MOVE";
@ -615,7 +528,6 @@ if (_secureAsset && (alive _assetSpawned)) then
if (_assetSpawned getVariable["assetType",0] isEqualTo 2) then
{
//diag_log format["Processing Mission End for Arrest of Leader %1 with endAnimation %2",_assetSpawned,_assetSpawned getVariable["endAnimation",""]];
[_assetSpawned,""] remoteExec["switchMove",-2];
_assetSpawned setVariable["GMSAnimations",_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]],true];
[_assetSpawned,selectRandom(_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]])] remoteExec["switchMove",-2];
@ -625,7 +537,7 @@ if (_secureAsset && !(alive _assetSpawned)) then
{
_result = [_mines,_objects,_crates,_blck_AllMissionAI,_assetKilledMsg,_blck_localMissionMarker,_coords,_markerClass, -1] call blck_fnc_endMission;
};
//diag_log format["_fnc_missionSpawner (579) Build 123: <calling blck_fnc_endMission> _secureAsset = %1 | {alive _assetSpawned} = %2 | assetType = %3",_secureAsset,alive _assetSpawned, _assetSpawned getVariable["assetType",-1]];
if (!(_secureAsset) || (_secureAsset && (alive _assetSpawned))) then
{
_result = [_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_markerClass, 0] call blck_fnc_endMission;

View File

@ -21,4 +21,5 @@ _chute setPos [getPos _chute select 0, getPos _chute select 1, _dropHeight];
_crate setPos (getPos _chute);
_crate attachTo [_chute, [0,0,0]];
if (_crateVisualMarker) then {[_crate] spawn blck_fnc_crateMarker};
_chute

View File

@ -13,37 +13,29 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private ["_start","_bbr","_p1","_p2","_maxHeight","_signalCrate","_smokeShell","_light","_lightSource"];
params["_crate",["_time",60]];
_start = diag_tickTime;
//diag_log format["signalEnd.sqf: _this = %1, _crate = %2",_this, _crate];
_smokeShell = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
_lightSource = selectRandom ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"];
//diag_log format["signalEnd.sqf: _smokeShell = %1",_smokeShell];
// Determine crate height. Method is from:
// https://community.bistudio.com/wiki/boundingBoxReal
_bbr = boundingBoxReal _crate;
_p1 = _bbr select 0;
_p2 = _bbr select 1;
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
while {diag_tickTime - _start < (_time)} do // loop for 5 min accounting for the fact that smoke grenades do not last very long
private ["_start","_maxHeight","_smokeShell","_light","_lightSource"];
params["_crate",["_time",60]];
_start = diag_tickTime;
//diag_log format["signalEnd.sqf: _this = %1, _crate = %2",_this, _crate];
_smokeShell = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
_lightSource = selectRandom ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"];
while {diag_tickTime - _start < (_time)} do // loop for 5 min accounting for the fact that smoke grenades do not last very long
{
_smoke = _smokeShell createVehicle getPosATL _crate;
_smoke setPosATL (getPosATL _crate);
_smoke attachTo [_crate,[0,0,(0.5)]]; // put the smoke a fixed distance above the top of any object to make it as visible as possible
if(sunOrMoon < 0.2) then
{
_smoke = _smokeShell createVehicle getPosATL _crate;
_smoke setPosATL (getPosATL _crate);
_smoke attachTo [_crate,[0,0,(_maxHeight + 0.35)]]; // put the smoke a fixed distance above the top of any object to make it as visible as possible
if(sunOrMoon < 0.2) then
{
_light = _lightSource createVehicle getPosATL _crate;
_light setPosATL (getPosATL _crate);
_light attachTo [_crate,[0,0,(_maxHeight + 0.35)]];
};
uiSleep 120;
detach _smoke;
deleteVehicle _smoke;
if(sunOrMoon < 0.2) then
{
detach _light;
deleteVehicle _light;
};
_light = _lightSource createVehicle getPosATL _crate;
_light setPosATL (getPosATL _crate);
_light attachTo [_crate,[0,0,(0.55)]];
};
uiSleep 120;
detach _smoke;
deleteVehicle _smoke;
if(sunOrMoon < 0.2) then
{
detach _light;
deleteVehicle _light;
};
};

View File

@ -1,11 +1,6 @@
/*
spawn a crate at a specific location
returns the object (crate) that was created.
for ghostridergaming
By Ghostrider [GRG]
Copyright 2016
Last updated 12-5-17
--------------------------
License
--------------------------
@ -24,7 +19,7 @@ _crate allowDamage false;
_crate enableRopeAttach false;
[_crate] call blck_fnc_emptyObject;
uiSleep 1;
_crate setPosATL _coords;
_crate setPosATL [_coords select 0, _coords select 1, (_coords select 2) + 0.25];
_crate setDir _crateDir;
//_crate setVectorUp [0,0,1];
_crate setVectorUp surfaceNormal position _crate;

View File

@ -94,7 +94,7 @@ if (blck_debugLevel > 1) then
_empGroup setcombatmode "RED";
_empGroup setBehaviour "COMBAT";
[(_x select 1),0.01,0.02,_empGroup,"random","SAD","emplaced"] spawn blck_fnc_setupWaypoints;
if (isNull _empGroup) exitWith {_abort = _true};
if (isNull _empGroup) exitWith {_abort = true};
#ifdef blck_debugMode
if (blck_debugLevel > 1) then
@ -105,8 +105,7 @@ if (blck_debugLevel > 1) then
// params["_vehType","_pos",["_clearInventory",true]];
_wep = [(_x select 0),[0,0,0],false,true] call blck_fnc_spawnVehicle;
//_wep addEventHandler["HandleDamage",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIVehicle_HandleDamage}];
_wep addMPEventHandler["MPHit",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIVehicle_HandleDamage}];
_wep addMPEventHandler ["MPHit",{[_this] call blck_EH_AIVehicle_HandleDamage}];
//_empGroup setVariable["groupVehicle",_wep];
_wep setVariable["vehicleGroup",_empGroup];
#ifdef blck_debugMode
@ -119,6 +118,7 @@ if (blck_debugLevel > 1) then
_wep setVariable["GRG_vehType","emplaced"];
_wep setdir (random 359);
_wep setPos _pos;
_wep setdir (random 359);
[_wep,false] call blck_fnc_configureMissionVehicle;
_emplacedWeps pushback _wep;
_units = units _empGroup;

View File

@ -70,7 +70,7 @@ if ( (count _missionGroups > 0) && _noAIGroups > 0) then
else
{
_newAI = units _newGroup;
//blck_monitoredMissionAIGroups pushback _newGroup;
blck_monitoredMissionAIGroups pushback _newGroup;
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{
@ -152,6 +152,7 @@ if (_missionGroups isEqualTo [] && _noAIGroups > 0) then
{
_newAI = units _newGroup;
blck_monitoredMissionAIGroups pushback _newGroup;
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{
@ -181,6 +182,7 @@ if (_missionGroups isEqualTo [] && _noAIGroups > 0) then
{
_newAI = units _newGroup;
blck_monitoredMissionAIGroups pushback _newGroup;
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{
@ -201,6 +203,7 @@ if (_missionGroups isEqualTo [] && _noAIGroups > 0) then
{
_newAI = units _newGroup;
blck_monitoredMissionAIGroups pushback _newGroup;
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{
@ -229,6 +232,7 @@ if (_missionGroups isEqualTo [] && _noAIGroups > 0) then
};
_newAI = units _newGroup;
blck_monitoredMissionAIGroups pushback _newGroup;
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{
@ -247,6 +251,7 @@ if (_missionGroups isEqualTo [] && _noAIGroups > 0) then
else
{
_newAI = units _newGroup;
blck_monitoredMissionAIGroups pushback _newGroup;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then
{

View File

@ -23,32 +23,16 @@ if (_backpacks isEqualTo []) then {_backpacks = [_skillAI] call blck_fnc_sele
if (_weaponList isEqualTo []) then {_weaponList = [_skillAI] call blck_fnc_selectAILoadout};
if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms};
//{
//diag_log format["_fnc_spawnMissionVehiclePatrols: %1 = %2",_x select 0, _x select 1];
//}forEach [["uniforms",_uniforms],["headgear",_headGear],["vests",_vests],["backpacks",_backpacks],["primary weapons",_weaponList],["secondary weapons",_sideArms]];
#ifdef blck_debugMode
if (blck_debugLevel >=2) then
{
private _params = ["_coords","_noVehiclePatrols","_skillAI","_missionPatrolVehicles","_useRelativePos","_uniforms","_headGear","_vests","_backpacks","_weaponList","_sideArms","_isScubaGroup"];
{
diag_log format["_fnc_spawnMissionVehiclePatrols:: param %1 | isEqualTo %2 | _forEachIndex %3",_params select _forEachIndex,_this select _forEachIndex, _forEachIndex];
}forEach _this;
};
#endif
private["_vehGroup","_patrolVehicle","_vehiclePatrolSpawns","_missionAI","_missiongroups","_vehicles","_return","_vehiclePatrolSpawns","_vehicle","_return","_abort","_spawnPos","_v"];
_vehicles = [];
_missionAI = [];
_abort = false;
//_useRelativePos = false;
if (_missionPatrolVehicles isEqualTo []) then
{
_useRelativePos = false;
_vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius;
{
_v = [_skillAI] call blck_fnc_selectPatrolVehicle;
//diag_log format["_fnc_spawnMissionVehiclePatrols (36):: position = %1 and vehicle = %2",_x, _v];
_missionPatrolVehicles pushBack [_v, _x];
}forEach _vehiclePatrolSpawns;
};
@ -74,54 +58,21 @@ if (_missionPatrolVehicles isEqualTo []) then
{
_abort = true;
};
//if !(isNull _vehGroup) then
//{
//blck_monitoredMissionAIGroups pushBack _vehGroup;
//};
#ifdef blck_debugMode
if (blck_debugLevel > 1) then
{
diag_log format["_fnc_spawnMissionVehiclePatrols (73): group spawned = %1",_vehGroup];
//diag_log format["_fnc_spawnMissionVehiclePatrols (74):: -> _missionType = %3 _vehGroup = %1 and units _vehGroup = %2",_vehGroup, units _vehGroup,_missionType];
};
#endif
#ifdef blck_debugMode
if (blck_debugLevel > 1) then
{
diag_log format["_fnc_spawnMissionVehiclePatrols(66): will spawn vehicle %1 at position %2",_vehicle,_spawnPos];
};
#endif
blck_monitoredMissionAIGroups pushBack _vehGroup;
//params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull]];
_patrolVehicle = [_coords,_spawnPos,_vehicle,30,45,_vehGroup,true] call blck_fnc_spawnVehiclePatrol;
//_vehGroup setVariable["groupVehicle",_vehicle];
#ifdef blck_debugMode
if (blck_debugLevel > 1) then
{
diag_log format["_fnc_spawnMissionVehiclePatrols (76):: - > patrol vehicle spawned was %1",_patrolVehicle];
};
#endif
_patrolVehicle = [_coords,_spawnPos,_vehicle,40,60,_vehGroup,true] call blck_fnc_spawnVehiclePatrol;
if !(isNull _patrolVehicle) then
{
_patrolVehicle setVariable["vehicleGroup",_vehGroup];
_vehicles pushback _patrolVehicle;
blck_monitoredVehicles pushBack _patrolVehicle;
_missionAI append (units _vehGroup);
};
#ifdef blck_debugMode
if (blck_debugLevel > 1) then
{
diag_log format["_fnc_spawnMissionVehiclePatrols(91):: -- > _vehicles updated to %1",_vehicles];
};
#endif
} forEach _missionPatrolVehicles;
blck_monitoredVehicles append _vehicles;
_return = [_vehicles, _missionAI, _abort];
_return

View File

@ -68,11 +68,7 @@ if (count _readyToSpawnQue > 0) then
// _mission = [_compiledMissionsList,format["%1%2",_marker,_i],_difficulty,_tMin,_tMax,_waitTime,[0,0,0]];
_missionMarker = _missionToSpawn select 1;
_missionDifficulty = _missionToSpawn select 2;
//diag_log format["_fnc_spawnPendingMissions: _missionMarker %1",_missionMarker];
//diag_log format["_fnc_spawnPendingMissions: _missionDifficulty %1",_missionDifficulty];
//diag_log format["_fnc_spawnPendingMissions: _compiledMission %1",_compiledMission];
[_coords,_missionMarker,_missionDifficulty] spawn _compiledMission;
//diag_log format["_fnc_spawnPendingMissions: blck_missionsRunning = %1", blck_missionsRunning];
};
true

View File

@ -13,7 +13,10 @@
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_coords","_missionLandscape",["_min",3],["_max",15],["_nearest",1]];
private["_objects","_wreck","_dir","_dirOffset"];
#define objectSpawnRadius 15
#define maxObjectSpawnRadius 25
#define minObjectSpawnRadius 15
private _objectSpawnRange = maxObjectSpawnRadius - minObjectSpawnRadius;
_objects = [];
_wreck = createVehicle ["RoadCone_L_F", _coords]; // To designate the mission center
_wreck allowDamage true;
@ -22,21 +25,15 @@ _wreck enableSimulationGlobal false;
_wreck enableDynamicSimulation false;
_objects pushBack _wreck;
{
//Random Position Objects based on distance in array
// https://community.bistudio.com/wiki/BIS_fnc_findSafePos
private _posX = ((_coords select 0) + random(objectSpawnRadius)) * (selectRandom[1,-1]);
private _posY = ((_coords select 1) + random(objectSpawnRadius)) * (selectRandom[1,-1]);
_pos = [_coords,_min,_max,_nearest,0,5,0] call BIS_fnc_findSafePos;
_wreck = createVehicle[_x, _pos, [], 2];
private _dir = random(360);
private _radius = minObjectSpawnRadius + random(maxObjectSpawnRadius);
_wreck = createVehicle[_x, _coords getPos[_radius,_dir], [], 2];
//diag_log format["_fnc_spawnRandomLandscape: _x = %1 | _wreck = %2",_x,_wreck];
_wreck allowDamage true;
_wreck enableSimulation false;
_wreck enableSimulationGlobal false;
_wreck enableDynamicSimulation false;
_dirOffset = random(30) * ([1,-1] call BIS_fnc_selectRandom);
_dir = _dirOffset +([_wreck,_coords] call BIS_fnc_dirTo);
_wreck setDir _dir;
//_wreck setDir (_wreck relativeDir _coords);
_wreck setDir (_wreck getRelDir _coords);
_objects pushback _wreck;
sleep 0.1;
} forEach _missionLandscape;

View File

@ -31,13 +31,13 @@ private["_index","_element","_waitTime"];
if (_index > -1) then
{
#ifdef blck_debugMode
if (blck_debuglevel > 2) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions began as %1",blck_pendingMissions];};
if (blck_debuglevel > 4) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions began as %1",blck_pendingMissions];};
#endif
_element = blck_pendingMissions select _index;
#ifdef blck_debugMode
if (blck_debuglevel > 2) then {diag_log format["_fnc_updateMissionQue:: -- >> _element before update = %1",_element];};
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]];
@ -59,7 +59,7 @@ if (_index > -1) then
blck_pendingMissions set [_index, _element];
#ifdef blck_debugMode
if (blck_debuglevel > 2) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions after update = %1",blck_pendingMissions];};
if (blck_debuglevel > 4) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions after update = %1",blck_pendingMissions];};
#endif
};

View File

@ -12,41 +12,16 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
/*
_fn_deleteAIfromList = {
params["_aiList"];
#ifdef blck_debugMode
if (blck_debugLevel > 0) then {diag_log format["_fn_deleteAIfromList:: _aiList = %1",_aiList];};
#endif
{
#ifdef blck_debugMode
if (blck_debugLevel > 1) then {diag_log format["_fn_deleteAIfromList:: -> deleteing AI Unit %1",_x];};
#endif
[_x] call blck_fnc_deleteAI;
}forEach _aiList;
};
#ifdef blck_debugMode
if (blck_debugLevel > 1) then {diag_log format["_fnc_cleanupAliveAI called at %1",diag_tickTime];};
#endif
*/
for "_i" from 1 to (count blck_liveMissionAI) do
{
if ((_i) <= count blck_liveMissionAI) then
{
for "_i" from 1 to (count blck_liveMissionAI) do {
if ((_i) <= count blck_liveMissionAI) then {
_units = blck_liveMissionAI deleteat 0;
_units params ["_unitsarr","_timer"];
if (diag_tickTime > _timer) then {
{
if (alive _x) then {
if (!isNull objectParent _x) then {
[objectParent _x] call blck_fnc_deleteAIvehicle;
};
[_x] call blck_fnc_deleteAI;
if ((alive _x) && !(isNull objectParent _x)) then {
[objectParent _x] call blck_fnc_deleteAIvehicle;
};
[_x] call blck_fnc_deleteAI;
} forEach _unitsarr;
uiSleep 0.1;
#ifdef blck_debugMode
@ -57,5 +32,4 @@ for "_i" from 1 to (count blck_liveMissionAI) do
blck_liveMissionAI pushback _units;
};
};
};
};

View File

@ -18,7 +18,7 @@ if (blck_debugLevel > 2) then {diag_log format["fnc_cleanupDeadAI called at time
private["_aiList","_ai"];
_aiList = +blck_deadAI;
{
if ( diag_tickTime > _x getVariable ["blck_cleanupAt",0] ) then // DBD_DeleteAITimer
if (diag_tickTime > _x getVariable ["blck_cleanupAt",0]) then
{
_ai = _x;
_nearplayer = (_ai nearEntities 1500) select {isplayer _x};

View File

@ -16,7 +16,7 @@ private ["_obj"];
if !(_characterBuildingConfigs isEqualTo []) then
{
_obj = createVehicle[(_characterBuildingConfigs select 0),_center vectorAdd (_characterBuildingConfigs select 1),[],0,"CAN_COLLIDE"];
diag_log format["_fnc_placeCharacterInBuilding: _obj = %1",_obj];
//diag_log format["_fnc_placeCharacterInBuilding: _obj = %1",_obj];
_obj setDir (_characterBuildingConfigs select 2);
_obj allowDamage true;
_obj enableDynamicSimulation true;

View File

@ -15,12 +15,9 @@
private["_group","_isLegal","_weapon","_lastkill","_kills","_message","_killstreakMsg"];
params["_unit","_killer","_isLegal"];
// if blck_cleanupAt > 0 then the death was already processed.
if (_unit getVariable["blck_cleanupAt",-1] > 0) exitWith {};
//diag_log format["_fnc_processAIKills:: function called with _this = %1",_this];
_unit setVariable ["blck_cleanupAt", (diag_tickTime) + blck_bodyCleanUpTimer, true];
//diag_log format["_fnc_processAIKills: _unit = %1 | vehicle unit = %2",_unit, vehicle _unit];
blck_deadAI pushback _unit;
_group = group _unit;
@ -51,7 +48,6 @@ if ((diag_tickTime - _lastkill) < 240) then
_killer setVariable["blck_kills",0];
};
//_unit action ["Eject", vehicle _unit];
[_unit, ["Eject", vehicle _unit]] remoteExec ["action",(owner _unit)];
if (blck_useKillMessages) then
{
@ -65,18 +61,14 @@ if (blck_useKillMessages) then
_message = format["[blck] %1 killed with %2 from %3 meters",name _killer,getText(configFile >> "CfgWeapons" >> _weapon >> "DisplayName"), round(_unit distance _killer)];
};
_message =_message + _killstreakMsg;
//diag_log format["[blck] unit killed message is %1",_message,""];
[["aikilled",_message,"victory"],allPlayers] call blck_fnc_messageplayers;
};
[_unit,_killer] call blck_fnc_rewardKiller;
if (blck_showCountAliveAI) then
{
//diag_log "_fnc_processAIKills: Updating Map Marker AI Counts - blck_missionMarkers items are";
{
//diag_log format["_fnc_processAIKills: blck_missionMarkers itm %1 = %2",_forEachIndex,_x];
[_x select 0, _x select 1, _x select 2] call blck_fnc_updateMarkerAliveCount;
} forEach blck_missionMarkers;
//call blck_fnc_updateAllMarkerAliveCounts;
};

View File

@ -80,9 +80,9 @@ if ( blck_VK_GunnerDamage ) then
if ((currentWeapon _killer) in blck_forbidenVehicleGuns) then { _legal = false;};
};
if (blck_VK_Gear) then {[_unit] call _fn_deleteAIGear;};
if !(_legal) then
{
if (blck_VK_Gear) then {[_unit] call _fn_deleteAIGear;};
[_unit, vehicle _killer] call _fn_targetVehicle;
[vehicle _killer] call _fn_applyVehicleDamage;
[_killer] call _fn_msgIED;

View File

@ -14,24 +14,15 @@
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_unit","_killer"];
//diag_log format["rewardKiller:: _unit = %1 and _killer %2",_unit,_killer];
private["_reward","_maxReward","_dist","_killstreakReward","_distanceBonus","_newKillerScore","_newKillerFrags","_money"];
//diag_log format["[blckeagls] rewardKiller:: - _modType = %1",_modType];
//if (_modType isEqualTo "Epoch") exitWith {}; // Have players pull crypto from AI bodies now that this feature is available.
if (blck_modType isEqualTo "Epoch") then
if (toLower(blck_modType) isEqualTo "epoch") then
{
//diag_log "calculating reward for Epoch";
if ( (vehicle _killer) in blck_forbidenVehicles || (currentWeapon _killer) in blck_forbidenVehicleGuns ) then
{
_reward = 0;
}
else
{
// Give the player money for killing an AI
_maxReward = 50;
_dist = _unit distance _killer;
_reward = 0;
@ -40,9 +31,9 @@ if (blck_modType isEqualTo "Epoch") then
if (_dist < 100) then { _reward = _maxReward - (_maxReward / 1.5); _reward };
if (_dist < 800) then { _reward = _maxReward - (_maxReward / 2); _reward };
if (_dist > 800) then { _reward = _maxReward - (_maxReward / 4); _reward };
//diag_log format["_fnc_rewardPlayer: _killer %1 | _dist %2 | _reward %3 ",_killer,_dist,_reward];
//diag_log format["_fnc_rewardPlayer: blck_addAIMoney %1 | blck_useKillScoreMessage %2",blck_addAIMoney,blck_useKillScoreMessage];
private _killstreakReward=+(_kills*2);
//diag_log format["fnd_rewardKiller:: _bonus returned will be %1",_reward];
if (blck_addAIMoney) then
{
[_killer,_reward + _killstreakReward] call blck_fnc_giveTakeCrypto;
@ -54,44 +45,22 @@ if (blck_modType isEqualTo "Epoch") then
};
};
/*
_player setVariable ["ExileHunger", _data select 4];
_player setVariable ["ExileThirst", _data select 5];
_player setVariable ["ExileAlcohol", _data select 6];
_player setVariable ["ExileTemperature", _data select 44];
_player setVariable ["ExileWetness", _data select 45];
*/
if (blck_modType isEqualTo "Exile") then
if (toLower(blck_modType) isEqualTo "exile") then
{
private["_distanceBonus","_overallRespectChange","_newKillerScore","_newKillerFrags","_maxReward","_money","_message"];
/*
// Temporary fix for the Loss of Respect Bug.
diag_log format["GMS_fnc_rewardKiller.sqf:: _killer name = %2 | ExileScore = %1 | Kills %3",_killer getVariable [ "ExileScore", 0 ], name _killer, _killer getVariable["ExileKills",0]];
diag_log format["GMS_fnc_rewardKiller.sqf:: _killer = %1 | vehicle _killer = %2 | objectParent _killer %3",_killer, vehicle _killer, objectParent _killer];
diag_log format["GMS_fnc_rewardKiller.sqf:: _killer is gunner = %1 | killer is driver = %2",_killer isEqualTo gunner objectParent _killer,_killer isEqualTo driver objectParent _killer];
diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileOwnerUID = %1 ",_killer getVariable["ExileOwnerUID",0]]; // ExileOwnerUID
diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileHunger = %1 ",_killer getVariable["ExileHunger",0]]; // ExileOwnerUID
diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileThirst = %1 ",_killer getVariable["ExileThirst",0]]; // ExileOwnerUID
diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileAlcohol = %1 ",_killer getVariable["ExileAlcohol",0]]; // ExileOwnerUID
diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileWetness = %1 ",_killer getVariable["ExileWetness",0]]; // ExileOwnerUID
*/
if ( (isPlayer _killer) && (_killer getVariable["ExileHunger",0] > 0) && (_killer getVariable["ExileThirst",0] > 0) ) then
{
_distanceBonus = floor((_unit distance _killer)/100);
_killstreakBonus = 3 * (_killer getVariable["blck_kills",0]);
_respectGained = 25 + _distanceBonus + _killstreakBonus;
_score = _killer getVariable ["ExileScore", 0];
//diag_log format["GMS_fnc_rewardKiller.sqf:: ExileScore = %1",_killer getVariable ["ExileScore", 0]];
_score = _score + (_respectGained);
//diag_log format["GMS_fnc_rewardKiller.sqf:: _new = %1",_score];
_killer setVariable ["ExileScore", _score];
format["setAccountScore:%1:%2", _score,getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
_newKillerFrags = _killer getVariable ["ExileKills", 0];
_newKillerFrags = _newKillerFrags + 1;
_killer setVariable ["ExileKills", _newKillerFrags];
format["addAccountKill:%1", getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
//_message = ["showFragRequest",_respectGained];
_killer call ExileServer_object_player_sendStatsUpdate;
if (blck_useKillScoreMessage) then
{
@ -99,21 +68,3 @@ if (blck_modType isEqualTo "Exile") then
};
};
};
/*
if (_overallRespectChange > 0) then {
_score = _killer getVariable ["ExileScore", 0];
_score = _score + _overallRespectChange;
_killer setVariable ["ExileScore", _score];
format["setAccountScore:%1:%2", _score,_killerPlayerUID] call ExileServer_system_database_query_fireAndForget;
[_killer, "showFragRequest", [_killerRespectPoints]] call A3XAI_sendExileMessage;
};
//["systemChatRequest", [_killMessage]] call ExileServer_system_network_send_broadcast; //To-do: Non-global version
_newKillerFrags = _killer getVariable ["ExileKills", 0];
_killer setVariable ["ExileKills", _newKillerFrags + 1];
format["addAccountKill:%1", _killerPlayerUID] call ExileServer_system_database_query_fireAndForget;
_killer call ExileServer_object_player_sendStatsUpdate;
};

View File

@ -67,6 +67,6 @@ for "_i" from 1 to _numAI do
};
//blck_monitoredMissionAIGroups pushback _paraGroup;
blck_monitoredMissionAIGroups pushback _paraGroup;
_paraGroup

View File

@ -193,9 +193,9 @@ if (blck_debugLevel > 2) then
};
#endif
_unit addEventHandler ["Reloaded", {_this call compile preprocessfilelinenumbers blck_EH_unitWeaponReloaded;}];
_unit addMPEventHandler ["MPKilled", {[(_this select 0), (_this select 1)] call compile preprocessfilelinenumbers blck_EH_AIKilled;}]; // changed to reduce number of concurrent threads, but also works as spawn blck_AIKilled; }];
_unit addMPEventHandler ["MPHit",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIHit;}];
_unit addEventHandler ["Reloaded", {_this call blck_EH_unitWeaponReloaded;}];
_unit addMPEventHandler ["MPKilled", {[(_this select 0), (_this select 1)] call blck_EH_AIKilled;}];
_unit addMPEventHandler ["MPHit",{[_this] call blck_EH_AIHit;}];
switch (_skillLevel) do
{

View File

@ -1,16 +0,0 @@
/*
Killed handler for _units
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 format["_EH_processAIVehicleKill: _this = %1",_this];
if !(isDedicated) exitWith {};
_this call blck_fnc_processAIVehicleKill;

View File

@ -23,15 +23,11 @@ if (blck_debugLevel > 1) then
};
#endif
//if (!(alive _veh)) exitWith {};
if (!(isPlayer _instigator)) exitWith {};
_crew = crew _veh;
_group = group (_crew select 0);
// Tell the vehicle crew something about the player who caused the damage
[_crew select 0,_instigator] call blck_fnc_alertGroupUnits;
// Tell nearby vehicles something about the player who caused the damage
[_instigator] call blck_fnc_alertNearbyVehicles;
// Ask for help from the nearest group of infantry, especially if they have launchers
_nearestGroup = [getPos _veh] call blck_fnc_findNearestInfantryGroup;
[(units _nearestGroup) select 0,_instigator] call blck_fnc_alertGroupUnits;

View File

@ -1,14 +0,0 @@
/*
By Ghostrider [GRG]
Copyright 2016
Scans vehicles local to the machine the script is run on.
--------------------------
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["_vehicle"];

View File

@ -1,64 +0,0 @@
/*
By Ghostrider [GRG]
Copyright 2016
Last updated 3-14-17
spawns a vehicle of _vehType and mans it with units in _group.
returns _veh, the vehicle spawned.
--------------------------
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 "Vehicle Decommisioning handler activated";
params["_veh"];
if (_veh getVariable["GRG_vehType","none"] isEqualTo "emplaced") then // Deal with a static weapon
{
if (blck_killEmptyStaticWeapons) then
{
if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of destroyed where vehicle = %1",_veh];};
_veh setDamage 1;
_veh setVariable["blck_DeleteAt",diag_tickTime + 60];
} else {
[_veh] call blck_fnc_releaseVehicleToPlayers;
};
}else { // Deal with vehicles
if (blck_killEmptyAIVehicles) then
{
if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle destroyed where vehicle = %1",_veh];};
{
_veh setHitPointDamage [_x, 1];
} forEach ["HitLFWheel","HitLF2Wheel","HitRFWheel","HitRF2Wheel","HitEngine","HitLBWheel","HitLMWheel","HitRBWheel","HitRMWheel","HitTurret","HitGun","HitTurret","HitGun","HitTurret","HitGun","HitTurret","HitGun"];
_veh setVariable["blck_DeleteAt",diag_tickTime + 60];
} else {
if (blck_debugLevel > 0) then {diag_log format["_fnc_vehicleMonitor:: case of release vehicle = %1 to player with blck_monitoredVehicles = %2",_veh, blck_monitoredVehicles];};
blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
if (blck_debugLevel > 0) then {diag_log format["_fnc_vehicleMonitor:: blck_monitoredVehicles updated to %1", blck_monitoredVehicles];};
[_veh] call blck_fnc_releaseVehicleToPlayers;
};
};
/*
_ai_veh = _this select 0;
_if (_ai_veh getVariable["disabled",false]) exitWith {};
_ai_veh setVariable["disabled",true];
//_ai_veh_type = typeof _ai_veh;
//_ai_veh_name = name _ai_veh;
_ai_veh setFuel 0;
_ai_veh setVehicleAmmo 0;
_ai_veh setAmmoCargo 0;
_s = ["MOTOR",
"wheel_1_1_steering","wheel_2_1_steering","wheel_1_2_steering","wheel_2_2_steering",
"wheel_1_3_steering","wheel_2_3_steering","wheel_1_4_steering","wheel_2_4_steering"];
{_ai_veh setHit [_x,1]} forEach _s;

View File

@ -11,13 +11,13 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_veh"];
//diag_log format["blck_fnc_deleteAIvehicle: _veh %1 deleted",_veh];
{
_veh removeAllEventHandlers _x;
}forEach ["Hit","HitPart","GetIn","GetOut","Fired","FiredNear","HandleDamage","Reloaded"];
{
_veh removeAllMPEventHandlers _x;
}forEach ["MPHit","MPKilled"];
blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
deleteVehicle _veh;
params["_veh"];
//diag_log format["blck_fnc_deleteAIvehicle: _veh %1 deleted",_veh];
{
_veh removeAllEventHandlers _x;
}forEach ["Hit","HitPart","GetIn","GetOut","Fired","FiredNear","HandleDamage","Reloaded"];
{
_veh removeAllMPEventHandlers _x;
}forEach ["MPHit","MPKilled"];
blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
deleteVehicle _veh;

View File

@ -11,6 +11,6 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_veh"];
{[_x] call blck_fnc_deleteAI;} forEach (crew _veh);
[_veh] call blck_fnc_deleteAIvehicle;
params["_veh"];
{[_x] call blck_fnc_deleteAI;} forEach (crew _veh);
[_veh] call blck_fnc_deleteAIvehicle;

View File

@ -31,21 +31,16 @@ if (blck_debugLevel > 1) then
};
#endif
//if (!(alive _veh)) exitWith {};
if (!(isPlayer _instigator)) exitWith {};
_crew = crew _veh;
if !(count _crew == 0) then
{
_group = group (_crew select 0);
// Tell the vehicle crew something about the player who caused the damage
};
// Tell nearby vehicles something about the player who caused the damage
[_instigator] call blck_fnc_alertNearbyVehicles;
// Ask for help from the nearest group of infantry, especially if they have launchers
_nearestGroup = [getPos _veh] call blck_fnc_findNearestGroup;
[(units _nearestGroup) select 0,_instigator] call blck_fnc_alertGroupUnits;
_group setBehaviour "COMBAT";
_wp = [_group, currentWaypoint _group];
_wp setWaypointBehaviour "COMBAT";

View File

@ -10,41 +10,29 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
// Needs optimization for headless clients
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_veh"];
blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
//diag_log format["_fnc_releaseVehicleToPlayersl: _veh = %1 | (owner _veh) = %2",_veh,(owner _veh)];
//diag_log format["_fnc_releaseVehicleToPlayersl: initial lock state of vehicle 51 = %2",_veh,locked _veh];
//_veh setVehicleLock "UNLOCKED" ;
_locked = true;
_count = 0;
_timeIn = diag_tickTime;
while {_count < 2} do
{
//diag_log format["_fnc_releaseVehicleToPlayersl: attempting to unlock vehicle %1",_veh];
[_veh,"UNLOCKED"] remoteExec ["setVehicleLock",0]; // unlock on all clients so we don't have to worry about any change of ownership when the driver is ejected.
// a bit of bandwidth seems worth ensuring that vehicles do in fact get unlocked.
uiSleep 0.1;
_count = _count + 1;
diag_log format["_fnc_releaseVehicleToPlayersl: locked state of vehicle %1 = ^%2",_veh, locked _veh];
//if ((_veh locked) isEqualTo "UNLOCKED" || (diag_tickTime - _timeIn) > 5) then {_locked = false};
};
// {player setAmmo [primaryWeapon player, 1];} remoteExec ["bis_fnc_call", 0];
//{[_veh setVehicleLock "UNLOCKED"];} remoteExec ["BIS_fnc_call",(owner _veh)];
//diag_log format["_fnc_releaseVehicleToPlayersl: _veh = %1 | isLocal _veh = %3 | (owner _veh) = %2",_veh,(owner _veh),Local _veh];
if (local _veh) then {
_veh lock false;
}
else {
if (isserver) then {
[_veh,false] remoteExecCall ["lock",_veh]; // let the machine, where the vehicle is local unlock it (only the server knows, who the owner is!!!)
}
else {
[[_veh,false],["lock",_veh]] remoteExecCall ["remoteExecCall", 2]; // If run on HC, move to the server. Server will remoteexec on local machine
};
};
//diag_log format["_fnc_releaseVehicleToPlayers: _veh=%1 | owner = %2 | lock = %3",_veh,owner _veh, locked _veh];
{
_veh removealleventhandlers _x;
} forEach ["GetIn","GetOut","fired","hit","hitpart","reloaded","dammaged","HandleDamage"];
{
_veh removeAllMPEventHandlers _x;
} forEach ["MPHit","MPKilled"];
_veh setVariable["blck_DeleteAt",diag_tickTime + blck_vehicleDeleteTimer,true];
_veh setVariable["blck_DeleteAt",nil];
if ((damage _veh) > 0.6) then {_veh setDamage 0.6};
#ifdef blck_debugMode
if (blck_debugLevel > 2) then
{
diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle released to players where vehicle = %1",_veh];
};
#endif
//diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle released to players where vehicle = %1",_veh];

View File

@ -8,45 +8,42 @@ params["_vehicle","_searchRadius","_detectionOdds"];
private["_player","_detectionOdds","_nearbyPlayers","_knowsAbout","_cansee","_knowledgeGained"];
_nearbyPlayers = [position _vehicle, _vehicle getVariable["blck_vehicleSearchRange",500]] call blck_fnc_nearestPlayers;
if (blck_revealMode isEqualTo "detailed") then
{
private["_crew","_group"];
_crew = crew _vehicle;
_group = group(_crew select 0);
{
if (random(1) < _detectionOdds) then
switch blck_revealMode do {
case "detailed": {
private["_crew"];
_crew = crew _vehicle;
if !(_crew isequalto []) then {
{
if (random(1) < _detectionOdds) then {
_player = _x;
{
_cansee = [objNull, "VIEW"] checkVisibility [eyePos _x, position _player];
if (_cansee > 0) then {
_knowledgeGained = _cansee;
}
else {
_knowledgeGained = _x knowsAbout _player;
if (_knowledgeGained == 0) then {_knowledgeGained = 0.1};
};
_x reveal[_player,_knowledgeGained];
}forEach _crew;
};
}forEach _nearbyPlayers;
};
};
case "basic": {
{
_player = _x;
{
_cansee = [objNull, "VIEW"] checkVisibility [eyePos _x, position _player];
if (_cansee > 0) then
{
_knowledgeGained = _cansee;
} else {
_knowledgeGained = _x knowsAbout _player;
if (_knowledgeGained == 0) then {_knowledgeGained = 0.1};
if (random(1) < _detectionOdds) then {
_knowsAbout = (_vehicle) knowsAbout _player;
if (_knowsAbout > 0) then {
_knowledgeGained = _knowsAbout;
}
else {
_knowledgeGained = (_searchRadius - (_x distance _vehicle))/_searchRadius;
};
_x reveal[_player,_knowledgeGained];
//diag_log format["_fnc_revealNearbyPlayers: player %1 revealed to unit %2",_player,_x];
}forEach _crew;
};
}forEach _nearbyPlayers;
};
if (blck_revealMode isEqualTo "basic") then
{
{
_player = _x;
if (random(1) < _detectionOdds) then
{
_knowsAbout = (_vehicle) knowsAbout _player;
if (_knowsAbout > 0) then
{
_knowledgeGained = _knowsAbout;
} else {
_knowledgeGained = (_searchRadius - (_x distance _vehicle))/_searchRadius;
_x reveal[_player, _knowledgeGained];
};
_x reveal[_player, _knowledgeGained];
};
}forEach _nearbyPlayers;
}forEach _nearbyPlayers;
};
};

View File

@ -21,12 +21,6 @@ if (_backpacks isEqualTo []) then {_backpacks = [_skillAI] call blck_fnc_sele
if (_weaponList isEqualTo []) then {_weaponList = [_skillAI] call blck_fnc_selectAILoadout};
if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms};
/*
{
diag_log format["_fnc_spawnMissionHeli: parameter %1 = %2",_foreachIndex,_x];
}forEach [_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms];
*/
#ifdef blck_debugMode
if (blck_debugLevel > 0) then
{
@ -44,19 +38,6 @@ if (isNull _grpPilot) then
if !(isNull _grpPilot) then
{
_grpPilot setBehaviour "COMBAT";
_grpPilot setCombatMode "RED";
_grpPilot setSpeedMode "NORMAL";
_grpPilot allowFleeing 0;
_grpPilot setVariable["patrolCenter",_coords];
_grpPilot setVariable["minDis",15];
_grpPilot setVariable["maxDis",30];
_grpPilot setVariable["timeStamp",diag_tickTime];
_grpPilot setVariable["arc",0];
_grpPilot setVariable["wpRadius",30];
_grpPilot setVariable["wpMode","SAD"];
// [_pos,_minDist,_maxDist,_groupSpawned,"random","SAD","infantry"] spawn blck_fnc_setupWaypoints;
diag_log format["_fnc_spawnMissionHeli - max radii are: blue %1 | red %2 | green %3 | orange %4",blck_maxPatrolRadiusHelisBlue,blck_maxPatrolRadiusHelisRed,blck_maxPatrolRadiusHelisGreen,blck_maxPatrolRadiusHelisOrange];
switch (toLower(_skillAI)) do
{
case "blue": {_minDist = 150;_maxDist = blck_maxPatrolRadiusHelisBlue};
@ -65,8 +46,22 @@ if !(isNull _grpPilot) then
case "orange" : {_minDist = 150;_maxDist = blck_maxPatrolRadiusHelisOrange};
default {_minDist = 150; _maxDist = 500};
};
diag_log format["_fnc_spawnMissionHeli(59): _skillAI = %1 | _minDist = %2 | _maxDist = %3",_skillAI,_minDist,_maxDist];
_grpPilot setBehaviour "COMBAT";
_grpPilot setCombatMode "RED";
_grpPilot setSpeedMode "NORMAL";
_grpPilot allowFleeing 0;
_grpPilot setVariable["patrolCenter",_coords];
_grpPilot setVariable["minDis",_minDist];
_grpPilot setVariable["maxDis",_maxDist];
_grpPilot setVariable["timeStamp",diag_tickTime];
_grpPilot setVariable["arc",0];
_grpPilot setVariable["wpRadius",30];
_grpPilot setVariable["wpMode","SAD"];
//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];
[_coords,_minDist,_maxDist,_grpPilot,"random","SAD","pilot"] call blck_fnc_setupWaypoints;
blck_monitoredMissionAIGroups pushBack _grpPilot;
//create helicopter and spawn it
if (( typeName _helis) isEqualTo "ARRAY") then
@ -79,7 +74,8 @@ if !(isNull _grpPilot) then
#ifdef blck_debugMode
if (blck_debugLevel > 1) then
{
diag_log format["_fnc_spawnMissionHeli (78):: _chopperType selected = %1",_chopperType];
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

View File

@ -15,7 +15,7 @@
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private["_vehType","_safepos","_veh","_unitNumber"];
params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull],["_setWaypoints",true]];
params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",40],["_maxDis",60],["_group",grpNull],["_setWaypoints",true]];
#ifdef blck_debugMode
if (blck_debugLevel > 1) then
{
@ -35,11 +35,10 @@ if (blck_debugLevel > 1) then
if !(isNull _group) then
{ // exitWith {diag_log "[blckeagls] ERROR CONDITION:-->> NULL-GROUP Provided to _fnc_spawnVehiclePatrol"; objNull;};
if !(isNull _group) then {
_veh = [_vehType,_pos] call blck_fnc_spawnVehicle;
// _veh addEventHandler["HandleDamage",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIVehicle_HandleDamage}];
_veh addMPEventHandler["MPHit",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIVehicle_HandleHit}];
// _veh addEventHandler["HandleDamage",{ [_this] call blck_EH_AIVehicle_HandleDamage}];
_veh addMPEventHandler["MPHit",{ [_this] call blck_EH_AIVehicle_HandleHit}];
_veh setVariable["blck_vehicleSearchRadius",blck_playerDetectionRangeGroundVehicle];
_veh setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds];

View File

@ -11,75 +11,62 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private ["_vehList","_veh","_isEmplaced","_ownerIsPlayer","_allCrewDead","_deleteNow","_evaluate"];
private ["_vehList"];
_vehList = +blck_monitoredVehicles;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: function called at %1 with _vehList %2 and blck_monitoredVehicles %3",diag_tickTime,_vehList,blck_monitoredVehicles];};
#endif
//diag_log format["_fnc_vehicleMonitor:: function called at %1 with _vehList %2 ",diag_tickTime,_vehList,blck_monitoredVehicles];
{
/*
Determine state of vehicle
_isEmplaced
_ownerIsPlayer
_allCrewDead
private["_veh","_isEmplaced","_allCrewDead","_evaluate","_deleteAtTime"];
_veh = _x; // (purely for clarity at this point, _x could be used just as well)
_isEmplaced = _veh getVariable["GRG_vehType","none"] isEqualTo "emplaced";
_allCrewDead = {alive _x} count (crew _veh) == 0;
_evaluate = 0;
_deleteAtTime = _veh getVariable ["blck_deleteAtTime",diag_tickTime + 1];
_handleReloadRefuel (0)
_scheduleDeletion (2) [_allCrewDead && !_isEmplaced && !_scheduled] // all vehicles other than statics
_disableNow and schedule for deletion (1) [_allCrewDead && _isEmplaced] // emplaced weapons
_deleteNow (3)
_releaseToPlayer (4) [_allCrewDead && !_isEmplaced && _ownerIsPlayer]
_default (5) reload rearm
*/
if (true) then
if (diag_tickTime > _deleteAtTime) then
{
private["_veh","_isEmplaced","_ownerIsPlayer","_allCrewDead","_deleteNow","_evaluate"];
_veh = _x; // (purely for clarity at this point, _x could be used just as well)
_isEmplaced = _veh getVariable["GRG_vehType","none"] isEqualTo "emplaced";
_ownerIsPlayer = if (owner _veh > 2 && !(owner _veh in blck_connectedHCs)) then {true} else {false};
_allCrewDead = if (({alive _x} count (crew _veh)) == 0) then {true} else {false};
_evaluate = 0;
if (_allCrewDead && _isEmplaced && (_veh getVariable["blck_deleteAt",0] == 0)) then {_evaluate = 1};
if (_allCrewDead && !(_isEmplaced) && (_veh getVariable["blck_deleteAt",0] == 0)) then {_evaluate = 2};
if ((_veh getVariable["blck_deleteAt",0] > 0) && (diag_tickTime > (_veh getVariable["blck_deleteAt",0]))) then {_evaluate = 3};
if (/*_ownerIsPlayer*/ (owner _veh > 2) && !(owner _veh in blck_connectedHCs)) then {_evaluate = 4};
//diag_log format["_fnc_vehicleMonitor: vehicle = %1 | owner = %2 | crew = %2",_veh, owner _veh, {alive _x} count (crew _veh)];
switch (_evaluate) do
_evaluate = 3;
} else {
if (_allCrewDead) then
{
case 0:{[_veh] call blck_fnc_reloadVehicleAmmo;};
case 1:{
if (blck_killEmptyStaticWeapons) then
{
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of destroyed where vehicle = %1",_veh];};
#endif
_veh setDamage 1;
_veh setVariable["blck_DeleteAt",diag_tickTime + 60];
}else {
[_veh] call blck_fnc_releaseVehicleToPlayers;
};
};
case 2:{
if (blck_killEmptyAIVehicles) then
{
_veh setDamage 0.7;
_veh setVariable["blck_DeleteAt",diag_tickTime + 60];
} else {
[_veh] call blck_fnc_releaseVehicleToPlayers;
};
};
case 3:{
[_veh] call blck_fnc_destroyVehicleAndCrew;
};
case 4:{
_veh setVariable["blck_DeleteAt",nil];
blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
_evaluate = if (_isEmplaced) then {1} else {2};
};
};
//diag_log format["_fnc_vehicleMonitor: vehicle = %1 | owner = %2 | crew = %3 | _evaluate = %4",_veh, owner _veh, {alive _x} count (crew _veh), _evaluate];
switch (_evaluate) do
{
case 0:{[_veh] call blck_fnc_reloadVehicleAmmo;};
case 1:{
if (blck_killEmptyStaticWeapons) then
{
if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of destroyed where vehicle = %1",_veh];};
_veh setDamage 1;
_veh setVariable["blck_deleteAtTime",diag_tickTime + 60];
}else {
//diag_log format["_fnc_vehicleMonitor: calling _fnc_releaseVehicleToPlayers for vehicle %1",_veh];
[_veh] call blck_fnc_releaseVehicleToPlayers;
};
};
case 2:{
if (blck_killEmptyAIVehicles) then
{
//if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of destroyed where vehicle = %1",_veh];};
_veh setDamage 0.7;
_veh setFuel 0;
_veh setVariable["blck_deleteAtTime",diag_tickTime + 60];
} else {
//diag_log format["_fnc_vehicleMonitor: calling _fnc_releaseVehicleToPlayers for vehicle %1",_veh];
[_veh] call blck_fnc_releaseVehicleToPlayers;
};
};
case 3:{
//diag_log format["_fnc_releaseVehicleToPlayers: destroying vehicle and crew for vehicle %1 at time %2",_veh,diag_tickTime];
[_veh] call blck_fnc_destroyVehicleAndCrew;
};
};
}forEach _vehList;

View File

@ -13,159 +13,156 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
// General functions
blck_fnc_waitTimer = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_waitTimer.sqf";
blck_fnc_timedOut = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_timedOut.sqf";
blck_fnc_FindSafePosn = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_findSafePosn.sqf";
blck_fnc_randomPosition = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_randomPosn.sqf";// find a randomPosn. see script for details.
blck_fnc_findPositionsAlongARadius = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_findPositionsAlongARadius.sqf";
blck_fnc_giveTakeCrypto = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_giveTakeCrypto.sqf";
blck_fnc_timeAcceleration = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\TimeAccel\GMS_fnc_Time.sqf";
blck_fnc_getModType = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getModType.sqf"; // Test if Epoch or Exile is loaded
blck_fnc_groupsOnAISide = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_GroupsOnAISide.sqf"; // Returns the number of groups on the side used by AI
blck_fnc_emptyObject = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_emptyObject.sqf";
blck_fnc_playerInRange = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_playerInRange.sqf";
blck_fnc_playerInRangeArray = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_playerInRangeArray.sqf"; // GMS_fnc_playerInRangeArray
blck_fnc_mainThread = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_mainThread.sqf";
blck_fnc_allPlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_allPlayers.sqf";
blck_fnc_addItemToCrate = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_addItemToCrate.sqf";
blck_fnc_loadLootItemsFromArray = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_loadLootItemsFromArray.sqf";
blck_fnc_getNumberFromRange = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getNumberFromRange.sqf";
blck_fnc_spawnMarker = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMarker.sqf";
blck_fnc_missionCompleteMarker = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_missionCompleteMarker.sqf";
blck_fnc_deleteMarker = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_deleteMarker.sqf";
blck_fnc_updateMarkerAliveCount = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_updateMarkerAliveCount.sqf";
blck_fnc_addMoneyToObject = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_addMoneyToObject.sqf";
blck_fnc_spawnMissionEmplacedRelative = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionEmplacedRelative.sqf";
blck_fnc_spawnMissionLootBoxesRelative = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionLootBoxesRelative.sqf";
blck_fnc_spawnSingleObject = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnSingleObject.sqf";
blck_fnc_emptyObjectInventory = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_emptyObjectInventory.sqf";
blck_fnc_spawnMissionLandscapeRelative = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionLandscapeRelative.sqf";
blck_fnc_nearestPlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_nearestPlayers.sqf";
//blck_fnc_getTraderCitiesEpoch = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitiesEpoch.sqf";
//blck_fnc_getTraderCitesExile = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesExile.sqf";
private _functions = [
// General functions
["blck_fnc_waitTimer","\q\addons\custom_server\Compiles\Functions\GMS_fnc_waitTimer.sqf"],
["blck_fnc_timedOut","\q\addons\custom_server\Compiles\Functions\GMS_fnc_timedOut.sqf"],
["blck_fnc_FindSafePosn","\q\addons\custom_server\Compiles\Functions\GMS_fnc_findSafePosn.sqf"],
["blck_fnc_randomPosition","\q\addons\custom_server\Compiles\Functions\GMS_fnc_randomPosn.sqf"], // find a randomPosn. see script for details.
["blck_fnc_findPositionsAlongARadius","\q\addons\custom_server\Compiles\Functions\GMS_fnc_findPositionsAlongARadius.sqf"],
["blck_fnc_giveTakeCrypto","\q\addons\custom_server\Compiles\Functions\GMS_fnc_giveTakeCrypto.sqf"],
["blck_fnc_timeAcceleration","\q\addons\custom_server\Compiles\TimeAccel\GMS_fnc_Time.sqf"],
["blck_fnc_groupsOnAISide","\q\addons\custom_server\Compiles\Functions\GMS_fnc_GroupsOnAISide.sqf"], // Returns the number of groups on the side used by AI
["blck_fnc_emptyObject","\q\addons\custom_server\Compiles\Functions\GMS_fnc_emptyObject.sqf"],
["blck_fnc_playerInRange","\q\addons\custom_server\Compiles\Functions\GMS_fnc_playerInRange.sqf"],
["blck_fnc_playerInRangeArray","\q\addons\custom_server\Compiles\Functions\GMS_fnc_playerInRangeArray.sqf"],
["blck_fnc_mainThread","\q\addons\custom_server\Compiles\Functions\GMS_fnc_mainThread.sqf"],
["blck_fnc_allPlayers","\q\addons\custom_server\Compiles\Functions\GMS_fnc_allPlayers.sqf"],
["blck_fnc_addItemToCrate","\q\addons\custom_server\Compiles\Functions\GMS_fnc_addItemToCrate.sqf"],
["blck_fnc_loadLootItemsFromArray","\q\addons\custom_server\Compiles\Functions\GMS_fnc_loadLootItemsFromArray.sqf"],
["blck_fnc_getNumberFromRange","\q\addons\custom_server\Compiles\Functions\GMS_fnc_getNumberFromRange.sqf"],
["blck_fnc_spawnMarker","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMarker.sqf"],
["blck_fnc_missionCompleteMarker","\q\addons\custom_server\Compiles\Functions\GMS_fnc_missionCompleteMarker.sqf"],
["blck_fnc_deleteMarker","\q\addons\custom_server\Compiles\Functions\GMS_fnc_deleteMarker.sqf"],
["blck_fnc_updateMarkerAliveCount","\q\addons\custom_server\Compiles\Functions\GMS_fnc_updateMarkerAliveCount.sqf"],
["blck_fnc_addMoneyToObject","\q\addons\custom_server\Compiles\Functions\GMS_fnc_addMoneyToObject.sqf"],
["blck_fnc_spawnMissionEmplacedRelative","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionEmplacedRelative.sqf"],
["blck_fnc_spawnMissionLootBoxesRelative","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionLootBoxesRelative.sqf"],
["blck_fnc_spawnSingleObject","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnSingleObject.sqf"],
//["blck_fnc_emptyObjectInventory","\q\addons\custom_server\Compiles\Functions\GMS_fnc_emptyObjectInventory.sqf"],
["blck_fnc_spawnMissionLandscapeRelative","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionLandscapeRelative.sqf"],
["blck_fnc_nearestPlayers","\q\addons\custom_server\Compiles\Functions\GMS_fnc_nearestPlayers.sqf"],
#ifdef GRGserver
blck_fnc_broadcastServerFPS = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_broadcastServerFPS.sqf";
diag_log "blck_functions loaded using GRGserver settings ---- >>>> ";
#endif
// Player-related functions
["blck_fnc_rewardKiller","\q\addons\custom_server\Compiles\Units\GMS_fnc_rewardKiller.sqf"],
["blck_fnc_MessagePlayers","\q\addons\custom_server\Compiles\Functions\GMS_fnc_AIM.sqf"], // Send messages to players regarding Missions
// Player-related functions
blck_fnc_rewardKiller = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_rewardKiller.sqf";
blck_fnc_MessagePlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_AIM.sqf"; // Send messages to players regarding Missions
// Mission-related functions
["blck_fnc_selectAILoadout","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAILoadout.sqf"],
["blck_fnc_selectAISidearms","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAISidearms.sqf"],
["blck_fnc_selectAIUniforms","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAIUniforms.sqf"],
["blck_fnc_selectAIHeadgear","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAIHeadgear.sqf"],
["blck_fnc_selectAIVests","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAIVests.sqf"],
["blck_fnc_selectAIBackpacks","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAIBackpacks.sqf"],
["blck_fnc_selectChanceHeliPatrol","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectChanceHeliPatrol.sqf"],
["blck_fnc_selectMissionHelis","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectMissionHelis.sqf"],
["blck_fnc_selectNumberAirPatrols","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectNumberAirPatrols.sqf"],
["blck_fnc_selectNumberParatroops","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectNumberParatroops.sqf"],
["blck_fnc_selectChanceParatroops","\q\addons\custom_server\Compiles\Missions\GMS_fnc_selecctChanceParatroops.sqf"],
["blck_fnc_addMissionToQue","\q\addons\custom_server\Compiles\Missions\GMS_fnc_addMissionToQue.sqf"],
["blck_fnc_updateMissionQue","\q\addons\custom_server\Compiles\Missions\GMS_fnc_updateMissionQue.sqf"],
["blck_fnc_spawnPendingMissions","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnPendingMissions.sqf"],
["blck_fnc_addLiveAItoQue","\q\addons\custom_server\Compiles\Missions\GMS_fnc_addLiveAItoQue.sqf"],
["blck_fnc_addObjToQue","\q\addons\custom_server\Compiles\Missions\GMS_fnc_addObjToQue.sqf"],
["blck_fnc_spawnCrate","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnCrate.sqf"], // Simply spawns a crate of a specified type at a specific position.
["blck_fnc_spawnMissionCrates","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionCrates.sqf"],
["blck_fnc_cleanupObjects","\q\addons\custom_server\Compiles\Missions\GMS_fnc_cleanUpObjects.sqf"],
["blck_fnc_spawnCompositionObjects","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnBaseObjects.sqf"],
["blck_fnc_spawnRandomLandscape","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnRandomLandscape.sqf"],
["blck_fnc_spawnMissionVehiclePatrols","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionVehiclePatrols.sqf"],
["blck_fnc_spawnEmplacedWeaponArray","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnEmplacedWeaponArray.sqf"],
["blck_fnc_spawnMissionAI","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionAI.sqf"],
["blck_fnc_spawnMissionLootVehicles","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionLootVehicles.sqf"],
["blck_fnc_fillBoxes","\q\addons\custom_server\Compiles\Missions\GMS_fnc_fillBoxes.sqf"], // Adds items to an object according to passed parameters. See the script for details.
["blck_fnc_smokeAtCrates","\q\addons\custom_server\Compiles\Missions\GMS_fnc_smokeAtCrates.sqf"], // Spawns a wreck and adds smoke to it
["blck_fnc_spawnMines","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMines.sqf"], // Deploys mines at random locations around the mission center
["blck_fnc_clearMines","\q\addons\custom_server\Compiles\Missions\GMS_fnc_clearMines.sqf"], // clears mines in an array passed as a parameter
["blck_fnc_signalEnd","\q\addons\custom_server\Compiles\Missions\GMS_fnc_signalEnd.sqf"], // deploy smoke grenades at loot crates at the end of the mission.
["blck_fnc_endMission","\q\addons\custom_server\Compiles\Missions\GMS_fnc_endMission.sqf"],
["blck_fnc_paraDropObject","\q\addons\custom_server\Compiles\Missions\GMS_fnc_paraDropObject.sqf"],
["blck_fnc_loadMissionCrate","\q\addons\custom_server\Compiles\Missions\GMS_fnc_loadMissionCrate.sqf"],
["blck_fnc_crateMoved","\q\addons\custom_server\Compiles\Missions\GMS_fnc_crateMoved.sqf"],
["blck_fnc_crateMarker","\q\addons\custom_server\Compiles\Missions\GMS_fnc_crateMarker.sqf"],
["blck_fnc_garrisonBuilding_RelPosSystem","\q\addons\custom_server\Compiles\Missions\GMS_fnc_garrisonBuilding_relPosSystem.sqf"],
["blck_fnc_garrisonBuilding_ATLsystem","\q\addons\custom_server\Compiles\Missions\GMS_fnc_garrisonBuilding_ATLsystem.sqf"],
["blck_fnc_spawnGarrisonInsideBuilding_ATL","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnGarrisonInsideBuilding_ATL.sqf"],
["blck_fnc_spawnGarrisonInsideBuilding_relPos","\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf"],
// Group-related functions
["blck_fnc_spawnGroup","\q\addons\custom_server\Compiles\Groups\GMS_fnc_spawnGroup.sqf"], // Spawn a single group and populate it with AI units]
["blck_fnc_setupWaypoints","\q\addons\custom_server\Compiles\Groups\GMS_fnc_setupWaypoints.sqf"], // Set default waypoints for a group
["blck_fnc_missionGroupMonitor","\q\addons\custom_server\Compiles\Groups\GMS_fnc_missionGroupMonitor.sqf"], // Monitors active groups for those that are stuck in an SAD waypoint but not in combat
["blck_fnc_changeToSADWaypoint","\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToSADWaypoint.sqf"],
["blck_fnc_changeToMoveWaypoint","\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToMoveWaypoint.sqf"],
["blck_fnc_changeToSentryWaypoint","\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToSentryWaypoint.sqf"],
// ["blck_fnc_setNextWaypoint","\q\addons\custom_server\Compiles\Groups\GMS_fnc_setNextWaypoint.sqf"],
["blck_fnc_cleanEmptyGroups","\q\addons\custom_server\Compiles\Groups\GMS_fnc_cleanEmptyGroups.sqf"], // GMS_fnc_cleanEmptyGroups
["blck_fnc_findNearestInfantryGroup","\q\addons\custom_server\Compiles\Groups\GMS_fnc_findNearestInfantryGroup.sqf"],
["blck_fnc_create_AI_Group","\q\addons\custom_server\Compiles\Groups\GMS_fnc_create_AI_Group.sqf"], // create a group for which other functions spawn AI.
["blck_fnc_blckSimulationManager","\q\addons\custom_server\Compiles\Groups\GMS_fnc_blckSimulationMonitor.sqf"],
["bck_fnc_groupWaypointMonitor","\q\addons\custom_server\Compiles\Groups\GMS_fnc_groupWaypointMonitor.sqf"],
// Functions specific to vehicles, whether wheeled, aircraft or static
["blck_fnc_spawnVehicle","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehicle.sqf"],
["blck_fnc_spawnVehiclePatrol","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehiclePatrol.sqf"],
["blck_fnc_protectVehicle","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_protectVehicle.sqf"],
["blck_fnc_configureMissionVehicle","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_configureMissionVehicle.sqf"],
["blck_fnc_vehicleMonitor","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_vehicleMonitor.sqf"],
["blck_fnc_spawnMissionReinforcements","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnMissionReinforcements.sqf"],
["blck_fnc_spawnMissionHeli","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnMissionHeli.sqf"],
["blck_EH_AIVehicle_HandleHit","\q\addons\custom_server\Compiles\Vehicles\GMS_EH_AIVehicle_Hit.sqf"],
["blck_fnc_HandleAIVehicleHit","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_HandleAIVehicleHit.sqf"],
["blck_EH_VehicleKilled","\q\addons\custom_server\Compiles\Vehicles\GMS_EH_VehicleKilled.sqf"],
["blck_fnc_processAIVehicleKill","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_processAIVehicleKill.sqf"],
["blck_fnc_selectPatrolVehicle","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_selectPatrolVehicle.sqf"],
["blck_fnc_releaseVehicleToPlayers","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_releaseVehicleToPlayers.sqf"],
["blck_fnc_deleteAIVehicle","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_deleteAIVehicle.sqf"],
["blck_fnc_destroyVehicleAndCrew","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_destroyVehicleAndCrew.sqf"],
["blck_fnc_reloadVehicleAmmo","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_reloadVehicleAmmo.sqf"],
["blck_fnc_scanForPlayersNearVehicles","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_scanForPlayersNearVehicles.sqf"],
["blck_fnc_revealNearbyPlayers","\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_revealNearbyPlayers.sqf"],
// Mission-related functions
blck_fnc_selectAILoadout = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAILoadout.sqf";
blck_fnc_selectAISidearms = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAISidearms.sqf";
blck_fnc_selectAIUniforms = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAIUniforms.sqf";
blck_fnc_selectAIHeadgear = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAIHeadgear.sqf";
blck_fnc_selectAIVests = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAIVests.sqf";
blck_fnc_selectAIBackpacks = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAIBackpacks.sqf";
blck_fnc_selectChanceHeliPatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectChanceHeliPatrol.sqf";
blck_fnc_selectMissionHelis = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectMissionHelis.sqf";
blck_fnc_selectNumberAirPatrols = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectNumberAirPatrols.sqf";
blck_fnc_selectNumberParatroops = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectNumberParatroops.sqf";
blck_fnc_selectChanceParatroops = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selecctChanceParatroops.sqf";
blck_fnc_addMissionToQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_addMissionToQue.sqf"; //
blck_fnc_updateMissionQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_updateMissionQue.sqf"; //
blck_fnc_spawnPendingMissions = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnPendingMissions.sqf"; //
blck_fnc_addLiveAItoQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_addLiveAItoQue.sqf";
blck_fnc_addObjToQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_addObjToQue.sqf"; //
blck_fnc_spawnCrate = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnCrate.sqf"; // Simply spawns a crate of a specified type at a specific position.
blck_fnc_spawnMissionCrates = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionCrates.sqf";
blck_fnc_cleanupObjects = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_cleanUpObjects.sqf";
blck_fnc_spawnCompositionObjects = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnBaseObjects.sqf";
blck_fnc_spawnRandomLandscape = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnRandomLandscape.sqf";
blck_fnc_spawnMissionVehiclePatrols = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionVehiclePatrols.sqf";
blck_fnc_spawnEmplacedWeaponArray = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnEmplacedWeaponArray.sqf";
blck_fnc_spawnMissionAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionAI.sqf";
blck_fnc_spawnMissionLootVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionLootVehicles.sqf";
blck_fnc_fillBoxes = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_fillBoxes.sqf"; // Adds items to an object according to passed parameters. See the script for details.
blck_fnc_smokeAtCrates = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_smokeAtCrates.sqf"; // Spawns a wreck and adds smoke to it
blck_fnc_spawnMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMines.sqf"; // Deploys mines at random locations around the mission center
blck_fnc_clearMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_clearMines.sqf"; // clears mines in an array passed as a parameter
blck_fnc_signalEnd = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_signalEnd.sqf"; // deploy smoke grenades at loot crates at the end of the mission.
blck_fnc_endMission = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_endMission.sqf";
blck_fnc_paraDropObject = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_paraDropObject.sqf";
blck_fnc_loadMissionCrate = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_loadMissionCrate.sqf";
blck_fnc_crateMoved = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_crateMoved.sqf";
blck_fnc_crateMarker = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_crateMarker.sqf";
blck_fnc_garrisonBuilding_RelPosSystem = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_garrisonBuilding_relPosSystem.sqf";
blck_fnc_garrisonBuilding_ATLsystem = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_garrisonBuilding_ATLsystem.sqf";
blck_fnc_spawnGarrisonInsideBuilding_ATL = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnGarrisonInsideBuilding_ATL.sqf";
blck_fnc_spawnGarrisonInsideBuilding_relPos = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnGarrisonInsideBuilding_relPos.sqf";
// Group-related functions
blck_fnc_spawnGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_spawnGroup.sqf"; // Spawn a single group and populate it with AI units]
blck_fnc_setupWaypoints = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_setupWaypoints.sqf"; // Set default waypoints for a group
blck_fnc_missionGroupMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_missionGroupMonitor.sqf"; // Monitors active groups for those that are stuck in an SAD waypoint but not in combat
blck_fnc_changeToSADWaypoint = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToSADWaypoint.sqf";
blck_fnc_changeToMoveWaypoint = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToMoveWaypoint.sqf";
blck_fnc_changeToSentryWaypoint = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToSentryWaypoint.sqf"; //
//blck_fnc_setNextWaypoint = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_setNextWaypoint.sqf";
blck_fnc_cleanEmptyGroups = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_cleanEmptyGroups.sqf"; // GMS_fnc_cleanEmptyGroups
blck_fnc_findNearestInfantryGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_findNearestInfantryGroup.sqf";
blck_fnc_create_AI_Group = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_create_AI_Group.sqf"; // create a group for which other functions spawn AI.
// Functions specific to vehicles, whether wheeled, aircraft or static
blck_fnc_spawnVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehicle.sqf";
blck_fnc_spawnVehiclePatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehiclePatrol.sqf";
blck_fnc_protectVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_protectVehicle.sqf";
blck_fnc_configureMissionVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_configureMissionVehicle.sqf";
blck_fnc_vehicleMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_vehicleMonitor.sqf";
blck_fnc_spawnMissionReinforcements = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnMissionReinforcements.sqf";
blck_fnc_spawnMissionHeli = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnMissionHeli.sqf";
blck_EH_AIVehicle_HandleHit = "\q\addons\custom_server\Compiles\Vehicles\GMS_EH_AIVehicle_Hit.sqf";
blck_fnc_HandleAIVehicleHit = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_HandleAIVehicleHit.sqf";
blck_EH_VehicleKilled = "\q\addons\custom_server\Compiles\Vehicles\GMS_EH_VehicleKilled.sqf";
blck_fnc_processAIVehicleKill = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_processAIVehicleKill.sqf";
blck_fnc_selectPatrolVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_selectPatrolVehicle.sqf";
blck_fnc_releaseVehicleToPlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_releaseVehicleToPlayers.sqf";
blck_fnc_deleteAIVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_deleteAIVehicle.sqf";
blck_fnc_destroyVehicleAndCrew = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_destroyVehicleAndCrew.sqf";
blck_fnc_reloadVehicleAmmo = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_reloadVehicleAmmo.sqf";
blck_fnc_scanForPlayersNearVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_scanForPlayersNearVehicles.sqf";
blck_fnc_revealNearbyPlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_revealNearbyPlayers.sqf";
// functions to support Units
["blck_fnc_removeGear","\q\addons\custom_server\Compiles\Units\GMS_fnc_removeGear.sqf"], // Strip an AI unit of all gear.
["blck_fnc_spawnUnit","\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnUnit.sqf"], // spawn individual AI
["blck_EH_AIKilled","\q\addons\custom_server\Compiles\Units\GMS_EH_AIKilled.sqf"], // Event handler to process AI deaths
["blck_EH_AIHit","\q\addons\custom_server\Compiles\Units\GMS_EH_AIHit.sqf"],
["blck_EH_unitWeaponReloaded","\q\addons\custom_server\Compiles\Units\GMS_EH_unitWeaponReloaded.sqf"],
["blck_EH_animDone","\q\addons\custom_server\Compiles\Units\GMS_EH_animDone.sqf"],
["blck_fnc_processAIKill","\q\addons\custom_server\Compiles\Units\GMS_fnc_processAIKill.sqf"],
["blck_fnc_removeLaunchers","\q\addons\custom_server\Compiles\Units\GMS_fnc_removeLaunchers.sqf"],
["blck_fnc_removeNVG","\q\addons\custom_server\Compiles\Units\GMS_fnc_removeNVG.sqf"],
["blck_fnc_alertNearbyUnits","\q\addons\custom_server\Compiles\Units\GMS_fnc_alertNearbyUnits.sqf"],
["blck_fnc_alertGroupUnits","\q\addons\custom_server\Compiles\Units\GMS_fnc_alertGroupUnits.sqf"],
["blck_fnc_alertNearbyVehicles","\q\addons\custom_server\Compiles\Units\GMS_fnc_alertNearbyVehicles.sqf"],
["blck_fnc_processIlleagalAIKills","\q\addons\custom_server\Compiles\Units\GMS_fnc_processIlleagalAIKills.sqf"],
["blck_fnc_cleanupDeadAI","\q\addons\custom_server\Compiles\Units\GMS_fnc_cleanupDeadAI.sqf"], // handles deletion of AI bodies and gear when it is time.
["blck_fnc_setSkill","\q\addons\custom_server\Compiles\Units\GMS_fnc_setSkill.sqf"],
["blck_fnc_cleanupAliveAI","\q\addons\custom_server\Compiles\Units\GMS_fnc_cleanupAliveAI.sqf"],
["blck_fnc_deleteAI","\q\addons\custom_server\Compiles\Units\GMS_fnc_deleteAI.sqf"],
["blck_fnc_processAIHit","\q\addons\custom_server\Compiles\Units\GMS_fnc_processAIHit.sqf"],
["blck_fnc_spawnHostage","\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnHostage.sqf"],
["blck_fnc_spawnLeader","\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnLeader.sqf"],
["blck_fnc_spawnCharacter","\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnCharacter.sqf"],
["blck_fnc_spawnParaUnits","\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnParaUnits.sqf"],
["blck_fnc_nextAnim","\q\addons\custom_server\Compiles\Units\GMS_fnc_nextAnim.sqf"],
["blck_fnc_placeCharacterInBuilding","\q\addons\custom_server\Compiles\Units\GMS_fnc_placeCharacterInBuilding.sqf"],
// functions to support Units
blck_fnc_removeGear = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_removeGear.sqf"; // Strip an AI unit of all gear.
blck_fnc_spawnUnit = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnUnit.sqf"; // spawn individual AI
blck_EH_AIKilled = "\q\addons\custom_server\Compiles\Units\GMS_EH_AIKilled.sqf"; // Event handler to process AI deaths
blck_EH_AIHit = "\q\addons\custom_server\Compiles\Units\GMS_EH_AIHit.sqf";
blck_EH_AIFiredNear = "\q\addons\custom_server\Compiles\Units\GMS_EH_AIFiredNear.sqf";
blck_EH_unitWeaponReloaded = "\q\addons\custom_server\Compiles\Units\GMS_EH_unitWeaponReloaded.sqf";
blck_EH_animDone = "\q\addons\custom_server\Compiles\Units\GMS_EH_animDone.sqf";
blck_fnc_processAIKill = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_processAIKill.sqf";
blck_fnc_removeLaunchers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_removeLaunchers.sqf";
blck_fnc_removeNVG = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_removeNVG.sqf";
blck_fnc_alertNearbyUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertNearbyUnits.sqf";
blck_fnc_alertGroupUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertGroupUnits.sqf";
blck_fnc_alertNearbyVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertNearbyVehicles.sqf";
blck_fnc_processIlleagalAIKills = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_processIlleagalAIKills.sqf";
blck_fnc_cleanupDeadAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_cleanupDeadAI.sqf"; // handles deletion of AI bodies and gear when it is time.
blck_fnc_setSkill = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_setSkill.sqf";
blck_fnc_cleanupAliveAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_cleanupAliveAI.sqf";
blck_fnc_deleteAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_deleteAI.sqf";
blck_fnc_processAIHit = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_processAIHit.sqf";
blck_fnc_spawnHostage = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnHostage.sqf";
blck_fnc_spawnLeader = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnLeader.sqf";
blck_fnc_spawnCharacter = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnCharacter.sqf";
blck_fnc_spawnParaUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnParaUnits.sqf";
blck_fnc_nextAnim = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_nextAnim.sqf";
blck_fnc_placeCharacterInBuilding = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_placeCharacterInBuilding.sqf";
// HC support functions
["blck_fnc_HC_XferGroup","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferGroup.sqf"],
//["blck_fnc_onPlayerDisconnected","\q\addons\custom_server\Compiles\HC\GMS_fnc_onPlayerDisconnected.sqf"],
//["blck_fnc_HC_monitor","\q\addons\custom_server\Compiles\HC\GMS_fnc_HCmonitor.sqf"],
["blck_fnc_HC_passToHCs","\q\addons\custom_server\Compiles\HC\GMS_fnc_passToHCs.sqf"],
//["blck_fnc_HC_getListConnected","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_getListConnected.sqf"],
["blck_fnc_HC_leastBurdened","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_leastBurdened.sqf"],
["blck_fnc_HC_countGroupsAssigned","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_countGroupsAssigned.sqf"]
];
// HC support functions
blck_fnc_HC_XferGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferGroup.sqf";
//blck_fnc_HC_XferVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferVehicle.sqf";
blck_fnc_onPlayerDisconnected = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_onPlayerDisconnected.sqf";
//blck_fnc_HC_groupsAssigned = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_groupsAssigned.sqf";
blck_fnc_HC_monitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HCmonitor.sqf";
//blck_fnc_HC_vehicleMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_vehicleMonitor.sqf";
//blck_fnc_HC_monitorHC = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_monitorHC.sqf";
blck_fnc_HC_passToHCs = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_passToHCs.sqf";
blck_fnc_HC_getListConnected = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_getListConnected.sqf";
blck_fnc_HC_leastBurdened = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_leastBurdened.sqf";
blck_fnc_HC_countGroupsAssigned = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_countGroupsAssigned.sqf";
{
_x params ["_name","_path"];
missionnamespace setvariable [_name,compileFinal preprocessFileLineNumbers _path];
} foreach _functions;
onPlayerDisconnected {[_name,_owner] call blck_fnc_onPlayerDisconnected;};
diag_log "[blckeagls] Functions Loaded";
blck_functionsCompiled = true;

View File

@ -14,10 +14,15 @@
diag_log "[blckeagls] loading variables";
// blck_debugON = false; Moved to blck_configs.sqf because of script loading order issues.
// blck_debugLevel = 0; Moved to blck_configs.sqf because of script loading order issues.
blck_minFPS = 8;
// radius within whih missions are triggered. The trigger causes the crate and AI to spawn.
#ifdef blck_milServer
blck_TriggerDistance = 1500;
#else
blck_TriggerDistance = 1500;
#endif
////////////////////////////////////////////////
// Do Not Touch Anything Below This Line
///////////////////////////////////////////////
@ -35,26 +40,9 @@ blck_activeMissions = [];
blck_deadAI = [];
blck_connectedHCs = [];
blck_missionMarkers = [];
//blck_groupsOnHC = [];
//blck_vehiclesOnHC = [];
//blck_HC_monitoredVehicles = [];
//blck_HC_monitoredGroups = [];
if (blck_simulationManager == 2) then
{
"Group" setDynamicSimulationDistance 1800;
enableDynamicSimulationSystem true;
};
blck_heliCrashSites = [];
// radius within whih missions are triggered. The trigger causes the crate and AI to spawn.
#ifdef blck_milServer
blck_TriggerDistance = 1500;
#else
blck_TriggerDistance = 1500;
#endif
blck_mainThreadUpdateInterval = 60;
blck_revealMode = "detailed"; //""basic" /*group or vehicle level reveals*/,detailed /*unit by unit reveals*/";
diag_log "[blckeagls] Variables Loaded";
blck_variablesLoaded = true;

View File

@ -0,0 +1,91 @@
_blck_lightlyArmed_ARMA3 = [
"B_G_Offroad_01_armed_F",
"O_G_Offroad_01_armed_F",
"B_MRAP_01_gmg_F",
"B_MRAP_01_hmg_F",
"O_MRAP_02_gmg_F",
"O_MRAP_02_hmg_F",
"I_MRAP_03_hmg_F",
"I_MRAP_03_gmg_F",
"B_APC_Wheeled_01_cannon_F",
"I_APC_Wheeled_03_cannon_F"
];
_blck_tracked_APC_ARMA3 = [
"B_APC_Tracked_01_rcws_F",
"B_APC_Tracked_01_CRV_F",
"B_APC_Tracked_01_AA_F",
"O_APC_Tracked_02_cannon_F",
"O_APC_Tracked_02_AA_F",
"O_APC_Wheeled_02_rcws_F",
"I_APC_tracked_03_cannon_F"
];
_blck_Tanks_ARMA3 = [
//"B_MBT_01_arty_F",
"B_MBT_01_mlrs_F",
"B_MBT_01_TUSK_F",
"O_MBT_02_cannon_F",
//"O_MBT_02_arty_F",
"I_MBT_03_cannon_F"
];
_blck_APC_CUP = [
"CUP_B_Mastiff_GMG_GB_D",
"CUP_B_Mastiff_HMG_GB_D",
"CUP_B_Ridgback_HMG_GB_D",
"CUP_B_Ridgback_GMG_GB_D",
"CUP_B_M1128_MGS_Desert",
"CUP_B_M1135_ATGMV_Desert_Slat",
"CUP_B_M1133_MEV_Desert_Slat",
"CUP_B_LAV25M240_desert_USMC",
"CUP_B_M1129_MC_MK19_Desert_Slat",
"CUP_B_LAV25_HQ_desert_USMC",
"CUP_B_BRDM2_ATGM_CDF",
"CUP_B_BTR60_CDF",
"CUP_B_M1130_CV_M2_Desert_Slat",
"CUP_B_M1126_ICV_MK19_Desert_Slat",
"CUP_O_BTR90_RU",
"CUP_O_GAZ_Vodnik_BPPU_RU",
"CUP_B_M1126_ICV_M2_Desert",
"CUP_B_M1126_ICV_MK19_Desert",
"CUP_B_M1130_CV_M2_Desert",
"CUP_B_M1126_ICV_M2_Desert_Slat",
"CUP_B_M1133_MEV_Desert",
"CUP_O_GAZ_Vodnik_AGS_RU",
"CUP_O_GAZ_Vodnik_PK_RU"
];
_blck_Tanks_CUP = [
"CUP_B_M2A3Bradley_USA_D",
"CUP_B_M113_desert_USA",
"CUP_B_M163_USA",
"CUP_B_M6LineBacker_USA_D",
"CUP_B_M1A1_DES_US_Army",
"CUP_B_M1A2_TUSK_MG_DES_US_Army",
"CUP_B_AAV_USMC",
"CUP_B_M270_DPICM_USA",
"CUP_B_ZSU23_CDF",
"CUP_B_BMP2_CDF",
"CUP_B_T72_CDF",
"CUP_I_T34_NAPA",
"CUP_B_Challenger2_NATO",
"CUP_B_FV432_Bulldog_GB_D_RWS",
"CUP_B_FV432_Bulldog_GB_D",
"CUP_B_FV510_GB_D_SLAT",
"CUP_B_MCV80_GB_D_SLAT",
"CUP_O_2S6_RU",
"CUP_O_BMP3_RU",
"CUP_O_T90_RU",
"CUP_O_T55_SLA",
"CUP_O_BMP1P_TKA",
"CUP_B_M270_DPICM_USA",
"CUP_B_M2Bradley_USA_W",
"CUP_B_FV510_GB_D",
"CUP_B_MCV80_GB_D",
"CUP_B_M7Bradley_USA_D",
"CUP_O_2S6_RU",
"CUP_O_BMP1_TKA"
];

View File

@ -20,11 +20,13 @@
blck_debugON = false; // Do not touch ...
blck_debugLevel = 0; // Do not touch ...
#ifdef blck_milServer
execVM "\q\addons\custom_server\Configs\blck_configs_mil.sqf";
if (true) exitWith {};
if (true) exitWith
{
diag_log format["[blckeagls] Running configs for militarized servers build %1",blck_buildNumber];
execVM "\q\addons\custom_server\Configs\blck_configs_mil.sqf";
};
#endif
//diag_log "[blckeagls] Loading configurations for Non-militarized servers: blck_configs.sqf";
diag_log format["[blckeagls] Loading configurations for Non-militarized servers build %1",blck_buildNumber];
/*
**************************************
Configurations begin here
@ -42,7 +44,7 @@
blck_spawnMapAddons = true; // When true map addons will be spawned based on parameters define in custum_server\MapAddons\MapAddons_init.sqf
blck_spawnStaticLootCrates = true; // When true, static loot crates will be spawned and loaded with loot as specified in custom_server\SLS\SLS_init_Epoch.sqf (or its exile equivalent).
blck_simulationManager = blck_useBlckeaglsSimulationManagement;
blck_simulationManager = blck_useBlckeaglsSimulationManager;
diag_log format["[blckeagls] blck_configs: blck_simulationManager = %1",blck_simulationManager];
/*
blck_simulationManagementOff - no simulation management occurs
@ -51,7 +53,7 @@
*/
// Note that you can define map-specific variants in custom_server\configs\blck_custom_config.sqf
blck_useTimeAcceleration = false; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below.
blck_useTimeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below.
blck_timeAccelerationDay = 0.25; // Daytime time accelearation
blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation
blck_timeAccelerationNight = 12; // Nighttim time acceleration
@ -71,7 +73,7 @@
***********************************************************/
////////
// Headless Client Configurations
blck_useHC = false; // Experimental (do not use if you allow players to claim mission vehicles).
blck_useHC = true; // Experimental (death messages and rewards not yet working).
///////////////////////////////
// Kill message configurations
@ -211,19 +213,17 @@
// Enable / Disable Missions
////////////////////
// Maximum number of missions shown on the map at any one time.
// Change this value to reduce the number of spawned missions at any one time.
blck_maxSpawnedMissions = 4;
//Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups.
blck_enableOrangeMissions = 1;
blck_enableGreenMissions = 1;
blck_enableRedMissions = 2;
blck_enableBlueMissions = 2;
blck_enableBlueMissions = 1;
blck_numberUnderwaterDynamicMissions = 3; // Values from -1 (no UMS) to N (N Underwater missions will be spawned; static UMS units and subs will be spawned.
// Maximum number of missions shown on the map at any one time.
// Change this value to reduce the number of spawned missions at any one time.
//blck_maxSpawnedMissions = 9; // Set this to a value lower than the total number of missions if you want only some of the types of missions running at any one time.
blck_maxSpawnedMissions = blck_enableOrangeMissions + blck_enableGreenMissions + blck_enableRedMissions + blck_enableBlueMissions + blck_numberUnderwaterDynamicMissions;
////////////////////
// MISSION TIMERS
////////////////////
@ -240,7 +240,7 @@
blck_TMax_Green = 300;
blck_TMax_Blue = 200;
blck_TMax_Red = 250;
blck_TMax_UMS = 200;
blck_TMax_UMS = 400;
///////////////////////////////
// AI VEHICLE PATROL PARAMETERS
@ -283,6 +283,8 @@
GENERAL AI SETTINGS
****************************************************************/
// When true, AI loadouts will be set from the class names in CfgPricing rather than the settings in the mod-specific configuration files
blck_useConfigsGeneratedLoadouts = true;
blck_groupBehavior = "SENTRY"; // Suggested choices are "SAD", "SENTRY", "AWARE" https://community.bistudio.com/wiki/ArmA:_AI_Combat_Modes
blck_combatMode = "RED"; // Change this to "YELLOW" if the AI wander too far from missions for your tastes.
@ -298,8 +300,7 @@
blck_launcherCleanup = true;// When true, launchers and launcher ammo are removed from dead AI.
blck_minimumPatrolRadius = 22; // AI will patrol within a circle with radius of approximately min-max meters. note that because of the way waypoints are completed they may more more or less than this distance.
blck_maximumPatrolRadius = 35;
//This defines how long after an AI dies that it's body disappears.
blck_bodyCleanUpTimer = 60*40; // time in seconds after which dead AI bodies are deleted
// Each time an AI is killed, the location of the killer will be revealed to all AI within this range of the killed AI, set to -1 to disable
@ -360,33 +361,22 @@
blck_maxMoneyRed = 15;
blck_maxMoneyBlue = 10;
private["_modType"];
_modType = [] call blck_fnc_getModType;
if (_modType isEqualTo "Epoch") then
if (toLower(blck_modType) isEqualTo "epoch") then
{
diag_log format["[blckeagls] Loading Mission System using Parameters for %1",_modType];
diag_log format["[blckeagls] Loading Mission System using Parameters for %1",blck_modType];
execVM "\q\addons\custom_server\Configs\blck_configs_epoch.sqf";
waitUntil {(isNil "blck_configsEpochLoaded") isEqualTo false;};
waitUntil{blck_configsEpochLoaded};
blck_configsEpochLoaded = nil;
//diag_log "[blckeagles] Running getTraderCitiesEpoch to get location of trader cities";
execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesEpoch.sqf";
};
if (_modType isEqualTo "Exile") then
if (toLower(blck_modType) isEqualTo "exile") then
{
diag_log format["[blckeagls] Loading Mission System using Parameters for %1",_modType];
diag_log format["[blckeagls] Loading Mission System using Parameters for %1",blck_modType];
execVM "\q\addons\custom_server\Configs\blck_configs_exile.sqf";
waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;};
waitUntil{blck_configsExileLoaded};
blck_configsExileLoaded = nil;
if (blck_blacklistTraderCities || blck_blacklistSpawns || blck_listConcreteMixerZones) then {execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesExile.sqf";};
};
waitUntil{!isNil "blck_useConfigsGeneratedLoadouts"};
waitUntil {!isNil "blck_maximumItemPriceInAI_Loadouts"};
if (blck_useConfigsGeneratedLoadouts) then
{
diag_log format["[blckeagles] Dynamic Configs Enabled"];
diag_log format["[blckeagls] Dynamic Configs Enabled"];
execVM "\q\addons\custom_server\Configs\blck_dynamicConfigs.sqf";
//waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;};
//waitUntil{blck_dynamicConfigsLoaded};
//blck_dynamicConfigsLoaded = nil;
};
blck_configsLoaded = true;

View File

@ -11,7 +11,7 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
diag_log format["[blckeagls] loading configurations for Epoch for blckeagls build %1",blck_buildNumber];
////////////
// Epoch-specific settings
////////////
@ -47,8 +47,6 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_allowSalesAtBlackMktTraders = true; // Allow vehicles to be sold at Halvjes black market traders.
// When true, AI loadouts will be set from the class names in CfgPricing rather than the settings in the mod-specific configuration files
blck_useConfigsGeneratedLoadouts = false;
blck_maximumItemPriceInAI_Loadouts = 100;
_blck_lightlyArmed_ARMA3 = [
@ -517,7 +515,7 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_vests_green = blck_vests;
blck_vests_orange = blck_vests;
//CraftingFood
//CraftingFood
blck_Meats=[
"SnakeCarcass_EPOCH","RabbitCarcass_EPOCH","ChickenCarcass_EPOCH","GoatCarcass_EPOCH","SheepCarcass_EPOCH","DogCarcass_EPOCH","ItemTrout","ItemSeaBass","ItemTuna"
];
@ -525,7 +523,8 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"WhiskeyNoodle","ItemSodaAlpineDude","ItemSodaOrangeSherbet","ItemSodaPurple","ItemSodaMocha","ItemSodaBurst","ItemSodaRbull","FoodWalkNSons"
];
blck_Food = [
"HotAxeSauce_epoch","gyro_wrap_epoch","icecream_epoch","redburger_epoch","bluburger_epoch","krypto_candy_epoch","ItemBakedBeans","ItemRiceBox","ItemPowderMilk","ItemCereals","FoodBioMeat","FoodMeeps","FoodSnooter","sardines_epoch","meatballs_epoch","scam_epoch","sweetcorn_epoch","honey_epoch","CookedSheep_EPOCH","CookedGoat_EPOCH","SnakeMeat_EPOCH",
"HotAxeSauce_epoch","gyro_wrap_epoch","icecream_epoch","redburger_epoch","bluburger_epoch","krypto_candy_epoch","ItemBakedBeans","ItemRiceBox","ItemPowderMilk","ItemCereals",
"FoodBioMeat","FoodMeeps","FoodSnooter","sardines_epoch","meatballs_epoch","scam_epoch","sweetcorn_epoch","honey_epoch","CookedSheep_EPOCH","CookedGoat_EPOCH","SnakeMeat_EPOCH",
"CookedRabbit_EPOCH","CookedChicken_EPOCH","CookedDog_EPOCH","ItemTroutCooked","ItemSeaBassCooked","ItemTunaCooked","TacticalBacon"
];
blck_ConsumableItems = blck_Meats + blck_Drink + blck_Food;
@ -588,13 +587,13 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["MMG_01_tan_F","150Rnd_93x64_Mag"],
["MMG_02_black_F","130Rnd_338_Mag"],
@ -726,14 +725,14 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["MMG_01_tan_F","150Rnd_93x64_Mag"],
["MMG_02_black_F","130Rnd_338_Mag"],
@ -874,7 +873,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
@ -1000,7 +999,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
@ -1009,7 +1008,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
@ -1099,4 +1098,4 @@ blck_supportLoot = blck_BoxLoot_Orange;
blck_crateTypes = ["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F","Box_NATO_Wps_F","I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F"]; // Default crate type.
diag_log "[blckeagls] Configurations for Epoch Loaded";
blck_configsEpochLoaded = true;

View File

@ -48,10 +48,6 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_allowSalesAtBlackMktTraders = true; // Allow vehicles to be sold at Halvjes black market traders.
// When true, AI loadouts will be set from the class names in CfgPricing rather than the settings in the mod-specific configuration files
blck_useConfigsGeneratedLoadouts = false;
blck_maximumItemPriceInAI_Loadouts = 100;
_blck_lightlyArmed_ARMA3 = [
"B_G_Offroad_01_armed_F",
"O_G_Offroad_01_armed_F",
@ -533,7 +529,7 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_vests_green = blck_vests;
blck_vests_orange = blck_vests;
//CraftingFood
//CraftingFood
blck_Meats=[
"SnakeCarcass_EPOCH","RabbitCarcass_EPOCH","ChickenCarcass_EPOCH","GoatCarcass_EPOCH","SheepCarcass_EPOCH","DogCarcass_EPOCH","ItemTrout","ItemSeaBass","ItemTuna"
];
@ -603,13 +599,13 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["MMG_01_tan_F","150Rnd_93x64_Mag"],
["MMG_02_black_F","150Rnd_93x64_Mag"],
@ -716,14 +712,14 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_02_camo_F","10Rnd_338_Mag"],
["srifle_DMR_03_F","10Rnd_338_Mag"],
@ -827,7 +823,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
@ -926,7 +922,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
@ -935,7 +931,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
@ -995,4 +991,4 @@ for examples of how you can do this see \Major\Compositions.sqf
blck_crateTypes = ["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F","Box_NATO_Wps_F","I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F"]; // Default crate type.
diag_log "[blckeagls] Configurations for Epoch Loaded";
blck_configsEpochLoaded = true;

View File

@ -15,10 +15,12 @@
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
#ifdef blck_milServer
execVM "\q\addons\custom_server\Configs\blck_configs_exile_mil.sqf";
if (true) exitWith {};
if (true) exitWith
{
diag_log "[blckeagls] running blck_configs_exile_mil for militarized servers";
execVM "\q\addons\custom_server\Configs\blck_configs_exile_mil.sqf";
};
#endif
diag_log "[blckeagls] Loading Exile-specific configs for Non-militarized servers: blck_configs_exile.sqf";
////////////
// Exile-specific settings
@ -54,9 +56,7 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_crateMoneyRed = [175, 300];
blck_crateMoneyGreen = [300, 500];
blck_crateMoneyOrange = [500, 750];
// When true, AI loadouts will be set from the class names in CfgPricing rather than the settings in the mod-specific configuration files
blck_useConfigsGeneratedLoadouts = false;
blck_maximumItemPriceInAI_Loadouts = 1000;
_blck_armed_vehicles_Exile = [
@ -662,6 +662,25 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"Exile_Item_Moobar",
"Exile_Item_InstantCoffee"
];
#ifdef blck_addCarParts
blck_carParts = [
"Exile_Item_CarWheel",
"DDR_Item_Tailrotor",
"DDR_Item_Main_Rotor",
"DDR_Item_Engine",
"DDR_Item_Glass",
"DDR_Item_Fuel_Tank",
"DDR_Item_Fishing_Net",
"DDR_Item_Fiberglass"
];
#endif
#ifdef useCUP
#endif
#ifdef useRHS
#endif
blck_ConsumableItems = blck_Meats + blck_Drink + blck_Food;
blck_throwableExplosives = ["HandGrenade","MiniGrenade"];
blck_otherExplosives = ["1Rnd_HE_Grenade_shell","3Rnd_HE_Grenade_shell","DemoCharge_Remote_Mag","SatchelCharge_Remote_Mag"];
@ -673,7 +692,18 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_buildingMaterials = ["Exile_Item_ExtensionCord","Exile_Item_JunkMetal","Exile_Item_LightBulb","Exile_Item_MetalBoard",
"Exile_Item_MetalPole","Exile_Item_MetalScrews","Exile_Item_Cement","Exile_Item_Sand"];
blck_tools = ["Exile_Item_Matches","Exile_Item_CookingPot","Exile_Melee_Axe","Exile_Melee_SledgeHammmer","Exile_Item_Handsaw","Exile_Item_Pliers"];
#ifdef blck_addCarParts
blck_carParts = [
"Exile_Item_CarWheel",
"DDR_Item_Tailrotor",
"DDR_Item_Main_Rotor",
"DDR_Item_Engine",
"DDR_Item_Glass",
"DDR_Item_Fuel_Tank",
"DDR_Item_Fishing_Net",
"DDR_Item_Fiberglass"
];
#endif
/***************************************************************************************
DEFAULT CONTENTS OF LOOT CRATES FOR EACH MISSION
Note however that these configurations can be used in any way you like or replaced with mission-specific customized loot arrays
@ -700,14 +730,14 @@ for examples of how you can do this see \Major\Compositions.sqf
#endif
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["MMG_01_tan_F","150Rnd_93x64_Mag"],
["MMG_02_black_F","130Rnd_338_Mag"],
@ -799,14 +829,14 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["MMG_01_tan_F","150Rnd_93x64_Mag"],
["MMG_02_black_F","130Rnd_338_Mag"],
@ -894,7 +924,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
@ -974,14 +1004,14 @@ for examples of how you can do this see \Major\Compositions.sqf
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
@ -1152,5 +1182,3 @@ blck_highPoweredLoot = [
blck_crateTypes = ["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F","Box_NATO_Wps_F","I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F"]; // Default crate type.
diag_log format["[blckeagls] Configurations for Exile Loaded"];
blck_configsExileLoaded = true;

File diff suppressed because it is too large Load Diff

View File

@ -47,8 +47,6 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_crateMoneyGreen = [300, 500];
blck_crateMoneyOrange = [500, 750];
// When true, AI loadouts will be set from the class names in CfgPricing rather than the settings in the mod-specific configuration files
blck_useConfigsGeneratedLoadouts = false;
blck_maximumItemPriceInAI_Loadouts = 1000;
_blck_armed_vehicles_Exile = [
@ -90,7 +88,7 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
//"O_MBT_02_arty_F",
"I_MBT_03_cannon_F"
];
#ifdef useCUP
_blck_APC_CUP = [
"CUP_B_Mastiff_GMG_GB_D",
"CUP_B_Mastiff_HMG_GB_D",
@ -148,7 +146,7 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
//"CUP_O_2S6_RU",
//"CUP_O_BMP1_TKA""
];
#endif
blck_AIPatrolVehicles =
[
//"Exile_Car_Offroad_Armed_Guerilla01",
@ -160,9 +158,9 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
//"Exile_Car_HMMWV_M134_Desert",
"Exile_Car_HMMWV_M2_Desert",
"B_LSV_01_armed_F",
//"_MRAP_02_gmg_ghex_F",
"_MRAP_02_gmg_ghex_F",
//"O_MRAP_02_hmg_ghex_F",
//"O_MRAP_03_gmg_ghex_F",
"O_MRAP_03_gmg_ghex_F",
//"O_MRAP_03_hmg_ghex_F",
"B_MBT_01_cannon_F",
"B_MBT_01_cannon_F", // Duplicate to increase chance that these will spawn relative to others
@ -189,9 +187,11 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"B_LSV_01_armed_F"
];
#ifdef useCUP
blck_AIPatrolVehiclesRed = _blck_lightlyArmed_ARMA3 + _blck_APC_CUP;
blck_AIPatrolVehiclesGreen = _blck_Tanks_ARMA3 + _blck_Tanks_CUP;
blck_AIPatrolVehiclesOrange = _blck_Tanks_ARMA3 + _blck_Tanks_CUP;
#endif
if (toLower(worldName) isEqualTo "namalsk") then
{
@ -674,7 +674,18 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"Exile_Item_Moobar",
"Exile_Item_InstantCoffee"
];
#ifdef blck_addCarParts
blck_carParts = [
"Exile_Item_CarWheel",
"DDR_Item_Tailrotor",
"DDR_Item_Main_Rotor",
"DDR_Item_Engine",
"DDR_Item_Glass",
"DDR_Item_Fuel_Tank",
"DDR_Item_Fishing_Net",
"DDR_Item_Fiberglass"
];
#endif
#ifdef useCUP
#endif
@ -720,14 +731,14 @@ for examples of how you can do this see \Major\Compositions.sqf
#endif
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["MMG_01_tan_F","150Rnd_93x64_Mag"],
["MMG_02_black_F","150Rnd_93x64_Mag"],
@ -775,7 +786,10 @@ for examples of how you can do this see \Major\Compositions.sqf
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
[// Materials and supplies
#ifdef blck_addCarParts
["Exile_Item_CarWheel",3,6],["DDR_Item_Tailrotor",1,3],["DDR_Item_Main_Rotor",1,3],["DDR_Item_Engine",2,4],["DDR_Item_Glass",3,6],["DDR_Item_Fuel_Tank",2,4],["DDR_Item_Fiberglass",3,6],
#endif
["Exile_Item_Matches",1,2],["Exile_Item_CookingPot",1,2],["Exile_Item_Rope",1,2],["Exile_Item_DuctTape",1,8],["Exile_Item_ExtensionCord",1,8],["Exile_Item_FuelCanisterEmpty",1,2],
["Exile_Item_JunkMetal",1,10],["Exile_Item_LightBulb",1,10],["Exile_Item_MetalBoard",1,10],["Exile_Item_MetalPole",1,10],["Exile_Item_CamoTentKit",1,10],["Exile_Item_WorkBenchKit",1,10],
["Exile_Item_WoodWindowKit",1,10],["Exile_Item_WoodWallKit",1,10],["Exile_Item_WoodStairsKit",1,10],["Exile_Item_WoodGateKit",1,10],["Exile_Item_WoodDoorwayKit",1,10],["Exile_Item_MetalBoard",1,10],
@ -818,14 +832,14 @@ for examples of how you can do this see \Major\Compositions.sqf
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_02_camo_F","10Rnd_338_Mag"],
["srifle_DMR_03_F","10Rnd_338_Mag"],
@ -866,7 +880,10 @@ for examples of how you can do this see \Major\Compositions.sqf
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
[// Materials and supplies
#ifdef blck_addCarParts
["Exile_Item_CarWheel",3,6],["DDR_Item_Tailrotor",1,3],["DDR_Item_Main_Rotor",1,3],["DDR_Item_Engine",2,4],["DDR_Item_Glass",3,6],["DDR_Item_Fuel_Tank",2,4],["DDR_Item_Fiberglass",3,6],
#endif
["Exile_Item_Matches",1,2],["Exile_Item_CookingPot",1,2],["Exile_Item_Rope",1,2],["Exile_Item_DuctTape",1,8],["Exile_Item_ExtensionCord",1,8],["Exile_Item_FuelCanisterEmpty",1,2],
["Exile_Item_JunkMetal",1,5],["Exile_Item_LightBulb",1,5],["Exile_Item_MetalBoard",1,5],["Exile_Item_MetalPole",1,5],["Exile_Item_CamoTentKit",1,5],["Exile_Item_WorkBenchKit",1,5],
["Exile_Item_MetalBoard",1,5],["Exile_Item_MetalWire",3,10],["Exile_Item_MetalScrews",3,10],["Exile_Item_ExtensionCord",1,5],["Exile_Item_MetalPole",1,5],["Exile_Item_Sand",2,5],["Exile_Item_Cement",2,5]
@ -910,7 +927,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
@ -947,6 +964,9 @@ for examples of how you can do this see \Major\Compositions.sqf
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
#ifdef blck_addCarParts
["Exile_Item_CarWheel",3,6],["DDR_Item_Tailrotor",1,3],["DDR_Item_Main_Rotor",1,3],["DDR_Item_Engine",2,4],["DDR_Item_Glass",3,6],["DDR_Item_Fuel_Tank",2,4],["DDR_Item_Fiberglass",3,6],
#endif
["Exile_Item_Matches",1,2],["Exile_Item_CookingPot",1,2],["Exile_Item_Rope",1,2],["Exile_Item_DuctTape",1,3],["Exile_Item_ExtensionCord",1,2],["Exile_Item_FuelCanisterEmpty",1,2],
["Exile_Item_JunkMetal",1,6],["Exile_Item_LightBulb",1,6],["Exile_Item_MetalBoard",1,6],["Exile_Item_MetalPole",1,6],["Exile_Item_CamoTentKit",1,6],["Exile_Item_MetalWire",1,4]
],
@ -990,14 +1010,14 @@ for examples of how you can do this see \Major\Compositions.sqf
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_DMR_01_F","10Rnd_762x54_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["LMG_Mk200_F","200Rnd_65x39_cased_Box_Tracer"],
["Arifle_MX_SW_F","100Rnd_65x39_caseless_mag_Tracer"],
["Arifle_MX_SW_Black_F","100Rnd_65x39_caseless_mag_Tracer"],
["LMG_Zafir_F","150Rnd_762x51_Box_Tracer"],
["LMG_Zafir_F","150Rnd_762x54_Box"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
@ -1021,7 +1041,10 @@ for examples of how you can do this see \Major\Compositions.sqf
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
[// Materials and supplies
#ifdef blck_addCarParts
["Exile_Item_CarWheel",3,6],["DDR_Item_Tailrotor",1,3],["DDR_Item_Main_Rotor",1,3],["DDR_Item_Engine",2,4],["DDR_Item_Glass",3,6],["DDR_Item_Fuel_Tank",2,4],["DDR_Item_Fiberglass",3,6],
#endif
["Exile_Item_Matches",1,2],["Exile_Item_CookingPot",1,2],["Exile_Item_Rope",1,2],["Exile_Item_DuctTape",1,8],["Exile_Item_ExtensionCord",1,8],["Exile_Item_FuelCanisterEmpty",1,2],
["Exile_Item_JunkMetal",1,5],["Exile_Item_LightBulb",1,5],["Exile_Item_MetalBoard",1,5],["Exile_Item_MetalPole",1,5],["Exile_Item_CamoTentKit",1,5],["Exile_Item_WorkBenchKit",1,5],
["Exile_Item_MetalBoard",1,5],["Exile_Item_MetalWire",3,10],["Exile_Item_MetalScrews",3,10],["Exile_Item_ExtensionCord",1,5],["Exile_Item_MetalPole",1,5],["Exile_Item_Sand",2,5],["Exile_Item_Cement",2,5]
@ -1166,4 +1189,3 @@ blck_highPoweredLoot = [
diag_log format["[blckeagls] Configurations for Exile Loaded"];
blck_configsExileLoaded = true;

View File

@ -11,8 +11,7 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
diag_log "[blckeagls] Loading blck_configs_mil.sqf for Militarized Servers";
diag_log format["[blckeagls] Loading blck_configs_mil.sqf for Militarized Servers for blckeagls build %1",blck_buildNumber];
/***************************************************************
BLCKEAGLS SUPPLEMENTAL MODULES
@ -49,7 +48,7 @@
***********************************************************/
////////
// Headless Client Configurations
blck_useHC = false; // Experimental (do not use if you allow players to claim mission vehicles).
blck_useHC = true; //
///////////////////////////////
// Kill message configurations
@ -65,7 +64,7 @@
// When set to true,"dot", ext will be to the right of a black dot at the center the mission marker.
blck_labelMapMarkers = [true,"center"];
blck_preciseMapMarkers = false; // Map markers are/are not centered at the loot crate
blck_showCountAliveAI = false;
blck_showCountAliveAI = true;
//Minimum distance between missions
blck_MinDistanceFromMission = 1500;
@ -83,9 +82,9 @@
blck_SmokeAtMissions = [false,"random"]; // set to [false,"anything here"] to disable this function altogether.
blck_useSignalEnd = true; // When true a smoke grenade/chemlight will appear at the loot crate for 2 min after mission completion.
blck_missionEndCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear"
blck_killPercentage = 0.9; // The mission will complete if this fraction of the total AI spawned has been killed.
blck_killPercentage = 0.99999999999; // The mission will complete if this fraction of the total AI spawned has been killed.
// This facilitates mission completion when one or two AI are spawned into objects.
blck_spawnCratesTiming = "atMissionEndAir"; // Choices: "atMissionSpawnGround","atMissionStartAir","atMissionEndGround","atMissionEndAir".
blck_spawnCratesTiming = "atMissionSpawnGround"; // Choices: "atMissionSpawnGround","atMissionStartAir","atMissionEndGround","atMissionEndAir".
// Crates spawned in the air will be spawned at mission center or the position(s) defined in the mission file and dropped under a parachute.
// This sets the default value but can be overridden by defining _spawnCrateTiming in the file defining a particular mission.
blck_loadCratesTiming = "atMissionSpawn"; // valid choices are "atMissionCompletion" and "atMissionSpawn";
@ -202,6 +201,10 @@
// Enable / Disable Missions
////////////////////
// Maximum number of missions shown on the map at any one time.
// Change this value to reduce the number of spawned missions at any one time.
blck_maxSpawnedMissions = 4;
//Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups.
blck_enableOrangeMissions = 1;
blck_enableGreenMissions = 1;
@ -209,11 +212,6 @@
blck_enableBlueMissions = 2;
blck_numberUnderwaterDynamicMissions = 2; // Values from 0 (no UMS) to N (N Underwater missions will be spawned; static UMS units and subs will be spawned.
// Maximum number of missions shown on the map at any one time.
// Change this value to reduce the number of spawned missions at any one time.
//blck_maxSpawnedMissions = 9; // Set this to a value lower than the total number of missions if you want only some of the types of missions running at any one time.
blck_maxSpawnedMissions = blck_enableOrangeMissions + blck_enableGreenMissions + blck_enableRedMissions + blck_enableBlueMissions + blck_numberUnderwaterDynamicMissions;
////////////////////
// MISSION TIMERS
////////////////////
@ -270,7 +268,8 @@
GENERAL AI SETTINGS
****************************************************************/
// When true, AI loadouts will be set from the class names in CfgPricing rather than the settings in the mod-specific configuration files
blck_useConfigsGeneratedLoadouts = true;
blck_groupBehavior = "SAD"; // Suggested choices are "SAD", "SENTRY", "AWARE" https://community.bistudio.com/wiki/ArmA:_AI_Combat_Modes
blck_combatMode = "RED"; // Change this to "YELLOW" if the AI wander too far from missions for your tastes.
blck_groupFormation = "WEDGE"; // Possibilities include "WEDGE","VEE","FILE","DIAMOND"
@ -287,7 +286,7 @@
blck_maximumPatrolRadius = 35;
//This defines how long after an AI dies that it's body disappears.
blck_bodyCleanUpTimer = 40*60; // time in seconds after which dead AI bodies are deleted
blck_bodyCleanUpTimer = 80*60; // time in seconds after which dead AI bodies are deleted
// Each time an AI is killed, the location of the killer will be revealed to all AI within this range of the killed AI, set to -1 to disable
// values are ordered as follows [blue, red, green, orange];
@ -347,33 +346,22 @@
blck_maxMoneyRed = 30;
blck_maxMoneyBlue = 20;
private["_modType"];
_modType = [] call blck_fnc_getModType;
if (_modType isEqualTo "Epoch") then
if (toLower(blck_modType) isEqualTo "epoch") then
{
diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",_modType];
diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",blck_modType];
execVM "\q\addons\custom_server\Configs\blck_configs_epoch_mil.sqf";
waitUntil {(isNil "blck_configsEpochLoaded") isEqualTo false;};
waitUntil{blck_configsEpochLoaded};
blck_configsEpochLoaded = nil;
//diag_log "[blckeagls] Running getTraderCitiesEpoch to get location of trader cities";
//execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesEpoch.sqf";
};
if (_modType isEqualTo "Exile") then
if (toLower(blck_modType) isEqualTo "exile") then
{
diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",_modType];
diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",blck_modType];
execVM "\q\addons\custom_server\Configs\blck_configs_exile_mil.sqf";
waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;};
waitUntil{blck_configsExileLoaded};
blck_configsExileLoaded = nil;
//if (blck_blacklistTraderCities || blck_blacklistSpawns || blck_listConcreteMixerZones) then {execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesExile.sqf";};
};
waitUntil{!isNil "blck_useConfigsGeneratedLoadouts"};
waitUntil {!isNil "blck_maximumItemPriceInAI_Loadouts"};
if (blck_useConfigsGeneratedLoadouts) then
{
diag_log format["[blckeagles] Dynamic Configs Enabled"];
diag_log format["[blckeagls] Dynamic Configs Enabled"];
execVM "\q\addons\custom_server\Configs\blck_dynamicConfigs.sqf";
waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;};
waitUntil{blck_dynamicConfigsLoaded};
blck_dynamicConfigsLoaded = nil;
};
blck_configsLoaded = true;
blck_configsLoaded = true;

View File

@ -3,6 +3,7 @@
for ghostridergaming
By Ghostrider [GRG]
Copyright 2016
Last Modified 3-14-17
--------------------------
License
@ -16,21 +17,6 @@
diag_log "[blckeagls] Loading Configuration Overides";
/*
See the examples below as a guide for adding configs that are unique for each of several servers.
*/
/*
private["_startTime"];
_startTime = diag_tickTime;
_world = toLower format ["%1", worldName];
private["_nightAccel","_dayAccel","_duskAccel"];
switch (_world) do {
case "altis":{_nightAccel = 3;_dayAccel=0.5; _duskAccel = 3;};
case "napf":{_nightAccel = 12; _dayAccel = 2;_duskAccel = 6;};
case "namalsk":{_nightAccel = 12; _dayAccel = 2;_duskAccel = 6;};
case "tanoa":{_nightAccel = 12; _dayAccel = 3.2;_duskAccel = 6;};
};
switch (toLower (worldName)) do
{
case "altis":
@ -82,9 +68,9 @@ switch (toLower (worldName)) do
blck_maxCrashSites = 1; // recommended settings: 3 for Altis, 2 for Tanoa, 1 for smaller maps. Set to -1 to disable
blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below.
blck_timeAccelerationDay = ((_serverUpTime + 2)/_daylight); // Daytime time accelearation
blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation
blck_timeAccelerationNight = (3/_nightTime); // Nighttim time acceleration
blck_timeAccelerationDay = 1.5; // Daytime time accelearation
blck_timeAccelerationDusk = 6; // Dawn/dusk time accelearation
blck_timeAccelerationNight = (12); // Nighttim time acceleration
};
case "esseker":
{
@ -116,28 +102,133 @@ switch (toLower (worldName)) do
_sunset = _arr select 1;
_time = dayTime;
_daylight = _sunset - _sunrise;
systemChat format["%1",_daylight];
systemChat format["TimeAcelDay = %1", _daylight / 2.5];
blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below.
blck_timeAccelerationDay = (_daylight / 2.5); // Daytime time accelearation
blck_timeAccelerationDusk = 8; // Dawn/dusk time accelearation
blck_timeAccelerationNight = ((24 - _daylight) / 1.5); // Nighttim time acceleration
blck_enableOrangeMissions = -1;
blck_enableGreenMissions = -1;
blck_enableRedMissions = -2;
blck_enableBlueMissions = -1;
blck_numberUnderwaterDynamicMissions = -3;
blck_enableHunterMissions = -1;
blck_enableScoutsMissions = -1;
blck_enableOrangeMissions = 1;
blck_enableGreenMissions = 1;
blck_enableRedMissions = 1;
blck_enableBlueMissions = 1;
blck_numberUnderwaterDynamicMissions = 3;
blck_enableHunterMissions = 1;
blck_enableScoutsMissions = 1;
blck_maxCrashSites = 3;
};
};
case "lythium":
{
blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below.
blck_timeAccelerationDay = 5.5; // Daytime time accelearation
blck_timeAccelerationDusk = 7; // Dawn/dusk time accelearation
blck_timeAccelerationNight = 8; // Nighttim time acceleration
blck_enableOrangeMissions = 1;
blck_enableGreenMissions = 1;
blck_enableRedMissions = 1;
blck_enableBlueMissions = 1;
blck_enableHunterMissions = 1;
blck_enableScoutsMissions = 1;
blck_maxCrashSites = 3;
blck_numberUnderwaterDynamicMissions = -3;
};
};
*/
if (blck_debugON || (blck_debugLevel > 0)) then // These variables are found in \custom_server\compiles\blck_variables.sqf
{
// Used primarily for debugging.
diag_log "[blckeagls] Debug seting is ON, Custom configurations used";
/*
You can define configs for additional mods or loadouts here
*/
/*
//blck_useTimeAcceleration = false; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below.
//blck_timeAccelerationDay = 1; // Daytime time accelearation
//blck_timeAccelerationDusk = 18; // Dawn/dusk time accelearation
//blck_timeAccelerationNight = 24; // Nighttim time acceleration
blck_useHC = true;
blck_maxSpawnedMissions = 15;
blck_mainThreadUpdateInterval = 10;
blck_enableOrangeMissions = -1;
blck_enableGreenMissions = -1;
blck_enableRedMissions = 1;
blck_enableBlueMissions = -1;
blck_numberUnderwaterDynamicMissions = -3;
blck_enableHunterMissions = -1;
blck_enableScoutsMissions = -1;
blck_maxCrashSites = -3;
//blck_killEmptyStaticWeapons = false;
//blck_killEmptyAIVehicles = true;
blck_cleanupCompositionTimer = 20; // Time after mission completion at which items in the composition are deleted.
blck_AliveAICleanUpTimer = 20; // Time after mission completion at which any remaining live AI are deleted.
blck_bodyCleanUpTimer = 20;
blck_vehicleDeleteTimer = 20;
//blck_MissionTimeout = 30;
//blck_noPatrolHelisOrange = 1;
//blck_chanceHeliPatrolOrange = 1;
//blck_chanceParaOrange = 1;
//blck_chanceHeliPatrolBlue = -1;
//blck_noPatrolHelisBlue = -1;
//blck_chanceParaBlue = -1; // [0 - 1] set to 0 to deactivate and 1 to always have paratroops spawn over the center of the mission. This value can be a range as well [0.1,0.3]
//blck_noParaBlue = -3; // [1-N]
//blck_paraTriggerDistanceBlue = 400;
//blck_chanceHeliPatrolBlue = 1;
//blck_SpawnEmplaced_Orange = 1; // Number of static weapons at Orange Missions
//blck_SpawnEmplaced_Green = 1; // Number of static weapons at Green Missions
//blck_SpawnEmplaced_Blue = 1; // Number of static weapons at Blue Missions
//blck_SpawnEmplaced_Red = 1;
//blck_SpawnVeh_Orange = 1; // Number of vehicles at Orange Missions
//blck_SpawnVeh_Green = 1; // Number of vehicles at Green Missions
//blck_SpawnVeh_Blue = 1; // Number of vehicles at Blue Missions
blck_SpawnVeh_Red = 1;
blck_TMin_Blue = 7;
blck_TMin_Red = 10;
blck_TMin_Green = 13;
blck_TMin_Orange = 16;
blck_TMin_Hunter = 20;
blck_TMin_Scouts = 20;
blck_TMin_Crashes = 5;
blck_TMin_UMS = 20;
//Maximum Spawn time between missions in seconds
blck_TMax_Blue = 12;
blck_TMax_Red = 15;
blck_TMax_Green = 17;
blck_TMax_Orange = 21;
blck_TMax_Hunter = 22;
blck_TMax_Scouts = 22;
blck_TMax_Crashes = 15;
blck_TMax_UMS = 25;
blck_MinAI_Orange = 1;
blck_MaxAI_Orange = 2;
blck_AIGrps_Orange = 0;
//blck_MinAI_Blue = 1;
//blck_MaxAI_Blue = 2;
//blck_AIGrps_Blue = 1;
//blck_AIPatrolVehicles = ["Exile_Car_MB4WDOpen"];
/*
blck_SkillsBlue = [
["aimingAccuracy",0.01],
["aimingShake",0.01],
["aimingSpeed",0.01],
["endurance",0.01],
["spotDistance",0.01],
["spotTime",0.01],
["courage",0.01],
["reloadSpeed",0.80],
["commanding",0.8],
["general",1.00]
];
*/
};
#ifdef blck_useCUP
blck_CUPWeapons = [
"CUP_lmg_L7A2",
"CUP_lmg_L110A1",
@ -626,6 +717,9 @@ blck_CUPHeadgear = [
"CUP_H_USMC_Helmet_Pilot",
"CUP_H_USMC_Officer_Cap"
];
#endif
#ifdef blck_useRHS
blck_RHS_Weapons = [
"rhs_weap_hk416d10",
"rhs_weap_hk416d10_LMT",
@ -1083,6 +1177,8 @@ blck_RHS_WeaponsSAF = [
"rhs_weap_g36kv_ag36",
"rhs_weap_m84"
];
#endif
blck_NIA_WeaponsLMG = [
"hlc_lmg_M249E2",
@ -1266,4 +1362,3 @@ blck_NIA_WeaponsSniper = [
"hlc_rifle_psg1",
"hlc_rifle_psg1A1"
];
*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,7 @@
//#define blck_milServer
//#define blck_useCUP
//#define blck_useRHS
//#define blck_addCarParts (For Exile should you wish to use some of the advanced repair scripts).
////////////////////////////
// Do not touch anything below this line
///////////////////////////
@ -24,7 +24,6 @@
//#define blck_debugMode
#define blck_triggerLoopCompleteTime 40*60
#define onFoot 1
#define inVehicle 2
@ -57,3 +56,6 @@
#define blck_turnBackRadiusVehicles 1000
#define blck_turnBackRadiusHelis 1000
#define blck_turnBackRadiusJets 1500
#define blck_buildNumber 167
#define blck_versionNumber 6.88

View File

@ -94,12 +94,12 @@ _misc = [];
_baseClasses = [];
_classnameList = [];
diag_log format["blck_modType = %1",blck_modType];
if (blck_modType isEqualTo "Epoch") then
//diag_log format["blck_modType = %1",blck_modType];
if (toLower(blck_modType) isEqualTo "epoch") then
{
_classnameList = (missionConfigFile >> "CfgPricing" ) call BIS_fnc_getCfgSubClasses;
};
if (blck_modType isEqualTo "Exile") then
if (toLower(blck_modType) isEqualTo "exile") then
{
_classnameList = (missionConfigFile >> "CfgExileArsenal" ) call BIS_fnc_getCfgSubClasses;
};
@ -110,18 +110,16 @@ if (blck_modType isEqualTo "Exile") then
_itemCategory = _temp select 0;
_itemType = _temp select 1;
_price = blck_maximumItemPriceInAI_Loadouts;
if (blck_modType isEqualTo "Epoch") then
if (toLower(blck_modType) isEqualTo "epoch") then
{
_price = getNumber(missionConfigFile >> "CfgPricing" >> _x >> "price");
};
if (blck_modType isEqualTo "Exile") then
if (toLower(blck_modType) isEqualTo "exile") then
{
_price = getNumber(missionConfigFile >> "CfgExileArsenal" >> _x >> "price");
};
//diag_log format["_fnc_dynamicConfigsConfigurator: _price = %1",_price];
if (_price < blck_maximumItemPriceInAI_Loadouts) then
{
//if (_itemCategory != "") then {diag_log format["_fnc_dynamicConfigsConfigurator: _itemCategory = %1 | _itemType = %2",_itemCategory,_itemType]};
if (_itemCategory isEqualTo "Weapon") then
{
switch (_itemType) do
@ -136,14 +134,11 @@ if (blck_modType isEqualTo "Exile") then
case "Launcher": {if !(_x in blck_blacklistedLaunchersAndSwingWeapons) then {_wpnLauncher pushBack _x}};
case "RocketLauncher": {if !(_x in blck_blacklistedLaunchersAndSwingWeapons) then {_wpnLauncher pushBack _x}};
case "Throw": {if !(_x in blck_blacklistedItems) then {_wpnThrow pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
};
};
if (_itemCategory isEqualTo "Item") then
{
//diag_log format["Evaluating Item class name %1",_x];
switch (_itemType) do
{
case "AccessoryMuzzle": {if !(_x in blck_blacklistedAttachments) then {_wpnMuzzles pushBack _x}};
@ -153,22 +148,13 @@ if (blck_modType isEqualTo "Exile") then
case "Binocular": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}};
case "Compass": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}};
case "GPS": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}};
case "NVGoggles": {if !(_x in blck_blacklistedItems) then {_NVG pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
//case "": {if !(_x in ) then { pushBack _x}};
case "NVGoggles": {if !(_x in blck_blacklistedItems) then {_NVG pushBack _x}};
};
};
if (_itemCategory isEqualTo "Equipment") then
{
//diag_log format["Evaluating Equipment class name %1",_x];
switch (_itemType) do
{
case "Glasses": {if !(_x in blck_blacklistedItems) then {_glasses pushBack _x}};
@ -219,4 +205,4 @@ blck_backpacks_orange = blck_backpacks;
blck_explosives = _wpnThrow;
blck_configsLoaded = true;
diag_log format["Compilation of dynamic AI Loadouts complete at %1",diag_tickTime];

View File

@ -30,34 +30,36 @@ blck_fnc_sm_AddVehicle = compileFinal preprocessFileLineNumbers "\q\addons\cust
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";
*/
blck_fnc_sm_monitorStaticUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorStaticPatrols.sqf";
blck_fnc_sm_monitorInfantry = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorInfantry.sqf";
blck_fnc_sm_monitorScuba = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorScuba.sqf";
blck_fnc_sm_monitorVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorVehicles.sqf";
blck_fnc_sm_monitorAircraft = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorAircraft.sqf";
blck_fnc_sm_monitorShips = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorShips.sqf";
blck_fnc_sm_monitorSubs = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorSubs.sqf";
blck_fnc_sm_monitorEmplaced = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorEmplaced.sqf";
blck_fnc_sm_monitorGarrisonsASL = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorGarrisonsASL.sqf";
blck_fnc_sm_monitorGarrisons_relPos = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorGarrisons_relPos.sqf";
blck_fnc_sm_spawnVehiclePatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnVehiclePatrol.sqf";
blck_fnc_sm_spawnAirPatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnAirPatrol.sqf";
blck_fnc_sm_spawnEmplaced = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnEmplaced.sqf";
//blck_fnc_sm_spawnInfantryPatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_sm_spawnInfantryPatrol.sqf";
blck_fnc_sm_missionPatrolMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorStaticPatrols.sqf";
//blck_fnc_sm_checkForPlayerNearMission = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_checkForPlayerNearMission.sqf";
blck_fnc_sm_spawnAirPatrols = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnAirPatrols.sqf";
blck_fnc_sm_spawnEmplaceds = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnEmplaced.sqf";
blck_fnc_sm_spawnInfantryPatrols = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnInfantryPatrols.sqf";
blck_fnc_sm_spawnLootContainers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnLootContainers.sqf";
blck_fnc_sm_spawnObjects = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnObjects.sqf";
blck_fnc_sm_spawnVehiclePatrols = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnVehiclePatrols.sqf";
blck_fnc_sm_spawnBuildingGarrison_ASL = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnBuildingGarrisonASL.sqf";
blck_fnc_sm_spawnBuildingGarrison_relPos = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnBuildingGarrison_relPos.sqf";
blck_fnc_sm_spawnObjectASLVectorDirUp = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnObjectASLVectorDirUp.sqf";
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_missionPatrolMonitor","\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_monitorStaticPatrols.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"]
];
{
_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_sm_functionsLoaded = true;

View File

@ -17,26 +17,17 @@
#include "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_init_functions.sqf";
#include "\q\addons\custom_server\Missions\Static\GMS_StaticMissions_Lists.sqf";
private["_mod","_map","_missionMod","_missionMap","_missionLocation","_missionDataFile"];
blck_sm_monitoring = 0;
blck_sm_groupDespawnTime = 30;
blck_sm_patrolRespawnInterval = 30;
uiSleep 10;
_map = toLower worldName;
{
if ((_map) isEqualTo toLower(_x select 1)) then
if ((toLower worldName) isEqualTo toLower(_x select 1)) then
{
if ((blck_ModType isEqualTo "Epoch") && (toLower(_x select 0) isEqualTo "epoch")) then
{
call compilefinal preprocessFileLineNumbers format["\q\addons\custom_server\Missions\Static\missions\%1",(_x select 2)];
};
if ((blck_ModType isEqualTo "Exile") && (toLower(_x select 0) isEqualTo "exile")) then
if ((toLower blck_modType) isEqualTo (toLower(_x select 0))) then
{
call compilefinal preprocessFileLineNumbers format["\q\addons\custom_server\Missions\Static\missions\%1",(_x select 2)];
};
};
uiSleep 1;
}forEach _staticMissions;
diag_log "[blckeagls] GMS_StaticMissions Initialized.sqf <Loaded>";

View File

@ -1,66 +0,0 @@
/*
This is a simple mission using randomly placed AI infantry, static weapons and vehicle patrols.
Please see staticMissionExample2.sqf for a more complete overview of how to configure static missions.
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"];
_mission = "static mission example 1";
_missionCenter = [24415,18909,0]; // I pulled this from the position of the marker.
_difficulty = "red"; // Skill level of AI (blue, red, green etc)
_crateLoot = blck_BoxLoot_Red;
_lootCounts = blck_lootCountsRed;
_markerLabel = "";
_markerType = ["ELIPSE",[200,200],"GRID"];
// An alternative would be:
// _markerType = ["mil_triangle",[0,0]]; // You can replace mil_triangle with any other valid Arma 3 marker type https://community.bistudio.com/wiki/cfgMarkers
_markerColor = "ColorRed"; // This can be any valid Arma Marker Color
_markerMissionName = "Bad Guys Town";
_missionLandscapeMode = "precise"; // acceptable values are "random","precise"
// In precise mode objects will be spawned at the relative positions specified.
// In the random mode, objects will be randomly spawned within the mission area.
_missionLandscape = [
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
// If this array is empty a single loot chest will be added at the center. If you add items loot chest(s) will be spawned in specific positions.
//
// [["box_classname1",_customLootArray1,[px,py,pz],["box_classname2",_customLootArray2,[px2,py2,pz2]]
// where _customLootArray follows the same format as blck_BoxLoot_Red and the other pre-defined arrays and
// where _customlootcountsarray1 also follows the same format as the predefined arrays like blck_lootCountsRed
_missionLootVehicles = []; // [ ["vehicleClassName", [px, py, pz] /* possition at which to spawn*/, _loot /* pointer to array of loot (see below)];
// When blank nothing is spawned.
// You can use the same format used for _missionLootBoxes to add vehicles with/without loot.
_noEmplacedWeapons = [2,3];
_missionEmplacedWeapons = []; // example [ ["emplacedClassName",[px, py, pz] /* position to spawn weapon */, difficulty /* difficulty of AI manning weapon (blue, red etc)] ];
// can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
// If the number of possible locations exceeds the number of emplaced weapons specified above then only some of the locations in the array will have emplaced weapons spawned.
// If you leave this array blank then emplaced weapons will be spawned at random locations around the mission using the default list of emplace weapons.
_minNoAI = blck_MinAI_Red; // Modify as needed
_maxNoAI = blck_MaxAI_Red; // Modify as needed.
_noAIGroups = blck_AIGrps_Red; // Modify as needed
_aiGroupParameters = [];
_noVehiclePatrols = blck_SpawnVeh_Red; // Modified as needed; can be a numberic value (e.g. 3) or range presented as [2,4]
_vehiclePatrolParameters = []; //[ ["vehicleClassName",[px,py,pz] /* center of patrol area */, difficulty /* blue, red etc*/] ]
// When empty vehicle patrols will be scattered randomely around the mission.
// Allows you to define the location of the center of the patrol, vehicle type spawned, radius to patrol, and AI difficulty (blue, red, green etc).
// If _noVehiclePatrols is less than the number of locations specified only _noVehiclePatrols patrols will be spawned.
_noEmplacedWeapons = blck_SpawnEmplaced_Red; // Modified as needed; can be a numberic value (e.g. 3) or range presented as [2,4]
_aircraftTypes = blck_patrolHelisRed; // You can use one of the pre-defined lists in blck_configs or your own custom array.
_noAirPatrols = blck_noPatrolHelisRed; // You can use one of the pre-defined values or a custom one. acceptable values are integers (1,2,3) or a range such as [2,4];
_airPatrols = [];
// Change _useMines to true/false below to enable mission-specific settings.
_useMines = blck_useMines;
_uniforms = blck_SkinList; // You can replace this list with a custom list of uniforms if you like.
_headgear = blck_headgear; // You can replace this list with a custom list of headgear.
_weapons = blck_WeaponList_Orange; // You can replace this list with a customized list of weapons, or another predifined list from blck_configs_epoch or blck_configs_exile as appropriate.
#include "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_spawnMission.sqf";

View File

@ -1,135 +0,0 @@
/*
This is a simple mission using precisely placed loot crates and infantry, static weapons and vehicle patrols.
See the accompanying example mission in the exampleMission folder to get an idea how I laid this out.
Note that I exported the mission using the exportAll function of M3EDEN editor.
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"];
_mission = "static mission example #2"; // Included for additional documentation. Not intended to be spawned as a mission per se.
_missionCenter = [22907,16789,0]; // I pulled this from the position of the marker.
_difficulty = "red"; // Skill level of AI (blue, red, green etc)
diag_log format["[blckeagls static missions] STARTED initializing middions %1 position at %2 difficulty %3",_mission,_missionCenter,_difficulty];
_crateLoot = blck_BoxLoot_Orange; // You can use a customized _crateLoot configuration by defining an array here. It must follow the following format shown for a hypothetical loot array called _customLootArray
/*
_customLootArray =
// Loot is grouped as [weapons],[magazines],[items] in order to be able to use the correct function to load the item into the crate later on.
// Each item consist of the following information ["ItemName",minNum, maxNum] where min is the smallest number added and min+max is the largest number added.
[
[// Weapons
["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"]
],
[//Magazines
["10Rnd_93x64_DMR_05_Mag" ,1,5]
],
[ // Optics
["optic_KHS_tan",1,3]
],
[// Materials and supplies
["Exile_Item_MetalScrews",3,10]
//
],
[//Items
["Exile_Item_MountainDupe",1,3]
],
[ // Backpacks
["B_OutdoorPack_tan",1,2]
]
];
*/
_lootCounts = blck_lootCountsRed; // You can use a customized set of loot counts or one that is predefined but it must follow the following format:
// values are: number of things from the weapons, magazines, optics, materials(cinder etc), items (food etc) and backpacks arrays to add, respectively.
// blck_lootCountsOrange = [[6,8],[24,32],[5,10],[25,35],16,1]; // Orange
_markerLabel = "";
//_markerType = ["ELIPSE",[200,200],"GRID"];
// An alternative would be:
_markerType = ["mil_triangle",[0,0]]; // You can replace mil_triangle with any other valid Arma 3 marker type https://community.bistudio.com/wiki/cfgMarkers
_markerColor = "ColorRed"; // This can be any valid Arma Marker Color
_markerMissionName = "Bad People Live Here";
_missionLandscapeMode = "precise"; // acceptable values are "random","precise"
// In precise mode objects will be spawned at the relative positions specified.
// In the random mode, objects will be randomly spawned within the mission area.
_missionLandscape = [ // Paste appropriate lines from M3EDEN output here.
["Land_Cargo_HQ_V2_F",[22894.7,16766,3.19],[[0,1,0],[0,0,1]],[true,false]],
["Land_Cargo_HQ_V1_F",[22918.1,16761.9,3.18151],[[0,1,0],[0,0,1]],[true,false]],
["Land_Cargo_HQ_V3_F",[22907.6,16740.3,3.17544],[[0,1,0],[0,0,1]],[true,false]],
["Land_Dome_Small_F",[22908.2,16808.8,3.19],[[0,1,0],[0,0,1]],[true,false]]
]; // list of objects to spawn as landscape using output from M3EDEN editor.
_missionLootBoxes = [ // Paste appropriate lines from M3EDEN editor output here, then add the appropriate lootArray
// [["box_classname1",_customLootArray1,[px,py,pz],...,_customLootArray1],["box_classname2",,[px2,py2,pz2],...,_customLootArray2]
// where _customLootArray follows the same format as blck_BoxLoot_Red and the other pre-defined arrays and
// where _customlootcountsarray1 also follows the same format as the predefined arrays like blck_lootCountsRed
[selectRandom blck_crateTypes,[22917.4,16763,6.30803],[[0,1,0],[0,0,1]],[true,false], _crateLoot, [[1,2],[4,6],[2,6],[5,8],6,1] ],
[selectRandom blck_crateTypes,[22893,16766.8,6.31652],[[0,1,0],[0,0,1]],[true,false], _crateLoot, _lootCounts],
// 0 1 2 3 4 5
[selectRandom blck_crateTypes,[22904.8,16742.5,6.30195],[[0,1,0],[0,0,1]],[true,false], _crateLoot, _lootCounts]
]; // If this array is empty a single loot chest will be added at the center. If you add items loot chest(s) will be spawned in specific positions.
_missionLootVehicles = [ // Paste appropriate lines from the output of M3EDEN Editor here and add the loot crate type and loot counts at the end of each entry as shown in the example below.
// Many vehicles have less inventory capacity than crates so you may have to modify _lootcounts to avoid having stuff spawned all over the ground.
//["Exile_Car_Van_Box_Guerilla02",[22896.8,16790.1,3.18987],[[0,1,0],[0,0,1]],[true,false], _crateLoot, [[1,2],[4,6],[2,6],[5,8],6,1]],
//["Exile_Car_Van_Fuel_Guerilla02",[22919,16782.7,3.18132],[[0,1,0],[0.00129187,0,0.999999]],[true,false],_crateLoot, _lootCounts]
]; // [ ["vehicleClassName", [px, py, pz] /* possition at which to spawn*/, _loot /* pointer to array of loot (see below)];
// When blank nothing is spawned.
// You can use the same format used for _missionLootBoxes to add vehicles with/without loot.
_noEmplacedWeapons = blck_SpawnEmplaced_Red; // Modified as needed; can be a numberic value (e.g. 3) or range presented as [2,4]
//format: _noEmplacedWeapons = [2,3]; // a range of values
// or _noEmplacedWeapons = 3; // a constant number of emplaced weps per misison
// Note that this value is ignored if you define static weapon positions and types in the array below.
_missionEmplacedWeapons = [
//["B_G_Mortar_01_F",[22867.3,16809.1,3.17968],"red",0,0],
//["B_HMG_01_high_F",[22944.3,16820.5,3.14243],"green",0,0]
]; // example [ ["emplacedClassName",[px, py, pz] /* position to spawn weapon */, difficulty /* difficulty of AI manning weapon (blue, red etc)] ];
// can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
// If the number of possible locations exceeds the number of emplaced weapons specified above then only some of the locations in the array will have emplaced weapons spawned.
// If you leave this array blank then emplaced weapons will be spawned at random locations around the mission using the default list of emplace weapons.
_minNoAI = blck_MinAI_Red; // Modify as needed
_maxNoAI = blck_MaxAI_Red; // Modify as needed.
_noAIGroups = blck_AIGrps_Red; // Modify as needed; note that these values are ignored of you specify AI patrols in the array below.
_aiGroupParameters = [
// [ [px, py, pz] /* position*/, "difficulty", 4 /*Number to Spawn*/, 150 /*radius of patrol*/]
//[[22920.4,16887.3,3.19144],"red",[1,2], 75,120],
[[22993.3,16830.8,5.6292],"red",4, 75,9000],
[[22947.8,16717,6.80305],"red",4, 75,900],
[[22849,16720.4,7.33123],"red",4, 75,9000],
[[22832.9,16805.6,4.59315],"red",4, 75,900],
[[22909.8,16778.6,3.19144],"red",4, 75,900],
[[22819.4,16929.5,5.33892],"red",4, 75,900],
[[22819.4,16929.5,5.33892],"red",4, 75,900]
];
_noVehiclePatrols = blck_SpawnVeh_Red; // Modified as needed; can be a numberic value (e.g. 3) or range presented as [2,4];
// Note that this value is ignored if you define vehicle patrols in the array below.
_vehiclePatrolParameters = [
["B_G_Offroad_01_armed_F",[22819.4,16929.5,3.17413],"red", 600,900],
["B_G_Offroad_01_repair_F",[22809.5,16699.2,8.78706],"green", 600,900]
]; //[ ["vehicleClassName",[px,py,pz] /* center of patrol area */, difficulty /* blue, red etc*/, patrol radius] ]
// When this array is empty, vehicle patrols will be scattered randomely around the mission.
// Allows you to define the location of the center of the patrol, vehicle type spawned, radius to patrol, and AI difficulty (blue, red, green etc).
_aircraftTypes = blck_patrolHelisRed; // You can use one of the pre-defined lists in blck_configs or your own custom array.
_noAirPatrols = blck_noPatrolHelisRed; // You can use one of the pre-defined values or a custom one. acceptable values are integers (1,2,3) or a range such as [2,4];
// Note: this value is ignored if you specify air patrols in the array below.
_airPatrols = [
["Exile_Chopper_Huey_Armed_Green",[22923.4,16953,3.19],"red",1000,900]//,
//[selectRandom _aircraftTypes,[22830.2,16618.1,11.4549],"green",1000,0]
];
// Change _useMines to true/false below to enable mission-specific settings.
_useMines = blck_useMines; // Set to false if you have vehicles patrolling nearby.
_uniforms = blck_SkinList; // You can replace this list with a custom list of uniforms if you like.
_headgear = blck_headgear; // You can replace this list with a custom list of headgear.
_weapons = blck_WeaponList_Orange; // You can replace this list with a customized list of weapons, or another predifined list from blck_configs_epoch or blck_configs_exile as appropriate.
#include "\q\addons\custom_server\Missions\Static\Code\GMS_fnc_sm_initializeMission.sqf";
diag_log format["[blckeagls static missions] COMPLETED initializing middions %1 position at %2 difficulty %3",_mission,_missionCenter,_difficulty];

View File

@ -20,4 +20,3 @@ _staticMissions = [
//["Exile","Altis","staticMissionExample2_Exile.sqf"]
];
//diag_log "[blckeagls] GMS_UMS_StaticMissions_Lists.sqf <Loaded>";

View File

@ -9,42 +9,19 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
//if (!isServer) exitWith{};
//diag_log "[blckeagls] GMS__UMS_StaticMissions_init.sqf <Initializing Static Missions>";
//static mission descriptor for code: [position,level, numAI or [min,maxAI],patrolRadius, respawn, group[groupNull],spawnedAt[0],respawn[0]]
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
#include "\q\addons\custom_server\Missions\UMS\GMS_UMS_StaticMissions_Lists.sqf";
//while{ (isNil "blck_sm_functionsLoaded"; uiSleep 0.1];
uiSleep 3;
private["_mod","_map","_missionMod","_missionMap","_missionLocation","_missionDataFile"];
//diag_log "[blckeagls] GMS__UMS_StaticMissions_init.sqf <Getting Mod Type>";
_mod = toLower(call blck_fnc_getModType);
//diag_log format["[blckeagls] GMS__UMS_StaticMissions_init.sqf <mod type = %1>",_mod];
//diag_log format["[blckeagls] GMS__UMS_StaticMissions_init <_staticMissions> = %1",_staticMissions];
//diag_log "[blckeagls] GMS__UMS_StaticMissions_init.sqf <Getting map name>";
_map = toLower worldName;
//diag_log format["[blckeagls] GMS__UMS_StaticMissions_init.sqf <map name = %1>",_map];
{
diag_log format["[blckeagls] GMS__UMS_StaticMissions_init.sqf <Evaluating Mission = %1>",_x];
diag_log format["[blckeagls] GMS__UMS_StaticMissions_init.sqf <worldName = %1 | _mod = %2>",_map,_mod];
if ((_map) isEqualTo toLower(_x select 1)) then
diag_log format["[blckeagls] GMS__UMS_StaticMissions_init.sqf <worldName = %1 | _mod = %2>",toLower worldName,(toLower blck_modType)];
if ((toLower worldName) isEqualTo toLower(_x select 1)) then
{
if ((_mod isEqualTo "epoch") && (toLower(_x select 0) isEqualTo "epoch")) then
{
call compilefinal preprocessFileLineNumbers format["\q\addons\custom_server\Missions\UMS\staticMissions\%1",(_x select 2)];
};
if ((_mod isEqualTo "exile") && (toLower(_x select 0) isEqualTo "exile")) then
if ((toLower blck_modType) isEqualTo (toLower(_x select 0))) then
{
call compilefinal preprocessFileLineNumbers format["\q\addons\custom_server\Missions\UMS\staticMissions\%1",(_x select 2)];
};
};
uiSleep 1;
}forEach _staticMissions;
//diag_log "[blckeagls] GMS__UMS_StaticMissions_init.sqf <Static Missions Loaded>";
}forEach _staticMissions;

View File

@ -9,7 +9,7 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private _modType = call blck_fnc_getModType;
waitUntil{!isNil "blck_cratetypes"};
blck_UMS_uniforms =
[
"U_I_Wetsuit",
@ -37,7 +37,7 @@ blck_UMS_weapons =
"arifle_SDAR_F"
];
if (_modType isEqualTo "Exile") then
if ((tolower blck_modType) isEqualTo "exile") then
{
blck_UMS_submarines =
[
@ -52,14 +52,13 @@ if (_modType isEqualTo "Exile") then
"Exile_Container_SupplyBox"
];
};
if (_modType isEqualTo "Epoch") then
if ((tolower blck_modType) isEqualTo "epoch") then
{
blck_UMS_submarines =
[
"B_SDV_01_EPOCH"
];
blck_UMS_crates = blck_crateTypes;
};
blck_UMS_unarmedSurfaceVessels =

View File

@ -19,4 +19,4 @@ blck_fnc_findShoreLocation = compileFinal preprocessFileLineNumbers "q\addons\cu
blck_fnc_addDyanamicUMS_Mission = compileFinal preprocessFileLineNumbers "q\addons\custom_server\Missions\UMS\code\GMS_fnc_addDynamicUMS_Mission.sqf";
blck_fnc_findWaterDepth = compileFinal preprocessFileLineNumbers "q\addons\custom_server\Missions\UMS\code\GMS_UMS_fnc_findWaterDepth.sqf";
diag_log "<GMS_UMS_functions.sqf> Functions compiled";
diag_log "[blckeagls] UMS functions Functions compiled";

View File

@ -1,133 +0,0 @@
/*
This is a simple mission using precisely placed loot crates and infantry, static weapons and vehicle patrols.
See the accompanying example mission in the exampleMission folder to get an idea how I laid this out.
Note that I laid out the mission in EDEN editor, exported the mission using the exportAll function of M3EDEN editor. then copied, pasted and apporpriately edidet the specific categories of items to be spawned.
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines","_difficulty","_mission","_missionCenter"];
_mission = "UMS mission example #2"; // Included for additional documentation. Not intended to be spawned as a mission per se.
_missionCenter = [22584.9,15304.8,0]; // I pulled this from the position of the marker.
_difficulty = "red"; // Skill level of AI (blue, red, green etc)
diag_log format["[blckeagls UMS missions] STARTED initializing mission %1 position at %2 difficulty %3",_mission,_missionCenter,_difficulty];
_crateLoot = blck_BoxLoot_Orange; // You can use a customized _crateLoot configuration by defining an array here. It must follow the following format shown for a hypothetical loot array called _customLootArray
/*
_customLootArray =
// Loot is grouped as [weapons],[magazines],[items] in order to be able to use the correct function to load the item into the crate later on.
// Each item consist of the following information ["ItemName",minNum, maxNum] where min is the smallest number added and min+max is the largest number added.
[
[// Weapons
["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"]
],
[//Magazines
["10Rnd_93x64_DMR_05_Mag" ,1,5]
],
[ // Optics
["optic_KHS_tan",1,3]
],
[// Materials and supplies
["Exile_Item_MetalScrews",3,10]
//
],
[//Items
["Exile_Item_MountainDupe",1,3]
],
[ // Backpacks
["B_OutdoorPack_tan",1,2]
]
];
*/
_lootCounts = blck_lootCountsRed; // You can use a customized set of loot counts or one that is predefined but it must follow the following format:
// values are: number of things from the weapons, magazines, optics, materials(cinder etc), items (food etc) and backpacks arrays to add, respectively.
// blck_lootCountsOrange = [[6,8],[24,32],[5,10],[25,35],16,1]; // Orange
_markerLabel = "";
//_markerType = ["ELIPSE",[200,200],"GRID"];
// An alternative would be:
_markerType = ["mil_triangle",[0,0]]; // You can replace mil_triangle with any other valid Arma 3 marker type https://community.bistudio.com/wiki/cfgMarkers
_markerColor = "ColorRed"; // This can be any valid Arma Marker Color
_markerMissionName = "Bad Fishermen Live Here";
_missionLandscapeMode = "precise"; // acceptable values are "random","precise"
// In precise mode objects will be spawned at the relative positions specified.
// In the random mode, objects will be randomly spawned within the mission area.
_missionLandscape = [ // Paste appropriate lines from M3EDEN output here.
// ["Land_Cargo_HQ_V2_F",[22894.7,16766,3.19],[[0,1,0],[0,0,1]],[true,false]],
["Land_Boat_05_wreck_F",[22571.5,15278.9,0],[[0,1,0],[0,0,1]],[true,false]]
]; // list of objects to spawn as landscape using output from M3EDEN editor.
_missionLootBoxes = [ // Paste appropriate lines from M3EDEN editor output here, then add the appropriate lootArray
// [["box_classname1",_customLootArray1,[px,py,pz],...,_customLootArray1],["box_classname2",,[px2,py2,pz2],...,_customLootArray2]
// where _customLootArray follows the same format as blck_BoxLoot_Red and the other pre-defined arrays and
// where _customlootcountsarray1 also follows the same format as the predefined arrays like blck_lootCountsRed
// ["Box_NATO_Ammo_F",[22893,16766.8,6.31652],[[0,1,0],[0,0,1]],[true,false], _crateLoot, _lootCounts],
[selectRandom blck_UMS_crates,[22584.9,15282.2,-1],[[0,1,0],[0,0,1]],[true,false], _crateLoot, _lootCounts]
]; // If this array is empty a single loot chest will be added at the center. If you add items loot chest(s) will be spawned in specific positions.
_missionLootVehicles = [ // Paste appropriate lines from the output of M3EDEN Editor here and add the loot crate type and loot counts at the end of each entry as shown in the example below.
// Many vehicles have less inventory capacity than crates so you may have to modify _lootcounts to avoid having stuff spawned all over the ground.
//["Exile_Car_Van_Box_Guerilla02",[22896.8,16790.1,3.18987],[[0,1,0],[0,0,1]],[true,false], _crateLoot, [[1,2],[4,6],[2,6],[5,8],6,1]],
["B_T_Boat_Transport_01_F",[22570.1,15235.3,-4.49949],[[0,1,0],[0,0,1]],[true,false],_crateLoot, _lootCounts]
]; // [ ["vehicleClassName", [px, py, pz] /* possition at which to spawn*/, _loot /* pointer to array of loot (see below)];
// When blank nothing is spawned.
// You can use the same format used for _missionLootBoxes to add vehicles with/without loot.
_noEmplacedWeapons = blck_SpawnEmplaced_Red; // Modified as needed; can be a numberic value (e.g. 3) or range presented as [2,4]
//format: _noEmplacedWeapons = [2,3]; // a range of values
// or _noEmplacedWeapons = 3; // a constant number of emplaced weps per misison
// Note that this value is ignored if you define static weapon positions and types in the array below.
_missionEmplacedWeapons = [
//["B_G_Mortar_01_F",[22867.3,16809.1,3.17968],"red",0,0],
//["B_HMG_01_high_F",[22944.3,16820.5,3.14243],"green",0,0]
];
// example [ ["emplacedClassName",[px, py, pz] /* position to spawn weapon */, difficulty /* difficulty of AI manning weapon (blue, red etc)] ];
// can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
// If the number of possible locations exceeds the number of emplaced weapons specified above then only some of the locations in the array will have emplaced weapons spawned.
// If you leave this array blank then emplaced weapons will be spawned at random locations around the mission using the default list of emplace weapons.
_minNoAI = blck_MinAI_Red; // Modify as needed
_maxNoAI = blck_MaxAI_Red; // Modify as needed.
_noAIGroups = blck_AIGrps_Red; // Modify as needed; note that these values are ignored of you specify AI patrols in the array below.
_aiGroupParameters = [
// [ [px, py, pz] /* position*/, "difficulty", 4 /*Number to Spawn*/, 150 /*radius of patrol*/]
];
_aiScubaGroupParameters = [
// [ [px, py, pz] /* position*/, "difficulty", 4 /*Number to Spawn*/, 150 /*radius of patrol*/]
[[22584.9,15304.8,-4.27578],"red",4, 75,0],
[[22613.5,15269.1,-4.28332],"red",4, 75,0],
[[22549,15288.9,0],"red",4, 75,60]
];
_noVehiclePatrols = blck_SpawnVeh_Red; // Modified as needed; can be a numberic value (e.g. 3) or range presented as [2,4];
// Note that this value is ignored if you define vehicle patrols in the array below.
_vehiclePatrolParameters = [
["B_T_Boat_Armed_01_minigun_F",[22578.6,15273.3,-0.0354593],"red",4, 75,0],
["B_T_Boat_Transport_01_F",[22570.1,15235.3,-4.49949],"red",4, 75,60]
]; //[ ["vehicleClassName",[px,py,pz] /* center of patrol area */, difficulty /* blue, red etc*/, patrol radius] ]
// When this array is empty, vehicle patrols will be scattered randomely around the mission.
// Allows you to define the location of the center of the patrol, vehicle type spawned, radius to patrol, and AI difficulty (blue, red, green etc).
_submarinePatrolParameters = [
["B_SDV_01_F",[22584.9,15304.8,-1],"red",4, 75,0],
["B_SDV_01_F",[22609.9,15299.8,-1],"red",4, 75,0]
];
_aircraftTypes = blck_patrolHelisRed; // You can use one of the pre-defined lists in blck_configs or your own custom array.
_noAirPatrols = blck_noPatrolHelisRed; // You can use one of the pre-defined values or a custom one. acceptable values are integers (1,2,3) or a range such as [2,4];
// Note: this value is ignored if you specify air patrols in the array below.
_airPatrols = [
//["Exile_Chopper_Huey_Armed_Green",[22923.4,16953,3.19],"red",1000,0],
[selectRandom _aircraftTypes,_missionCenter,"green",1000,60]
];
// Change _useMines to true/false below to enable mission-specific settings.
_useMines = false; // Set to false if you have vehicles patrolling nearby.
#include "\q\addons\custom_server\Missions\UMS\code\GMS_fnc_sm_initializeUMSStaticMission.sqf";
diag_log format["[blckeagls static missions] COMPLETED initializing middions %1 position at %2 difficulty %3",_mission,_missionCenter,_difficulty];

View File

@ -1,495 +0,0 @@
_fn_isInside = { // returns true if an object is inside, underneath or on top of a building otherwise returns false.
//////////////////////
// Determin if a unit is inside a building using two separate checkVisibility
//////////////////////
// lineIntersects [ eyePos player, aimPos chopper, player, chopper]
params["_u",["_category","House"]];
private ["_u","_pos","_above","_below"];
_pos = getPosASL _u;
_above = lineIntersects [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u];
_below = lineintersects [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 2],_u];
diag_log format["_fn_isInside: _u %1 | _category = %5 | typeOf _u %4 | _above %2 | _below %3 ",_u,_above,_below,typeOf _u, _category];
// If there is something above or below the object do a quick double-check to make sure there is a building there and not something else.
if (_above) then // test if any surfaces above are from buildingPos
{
_surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,100];
_above = false;
{
//diag_log format["_fn_isInside: _x-2 = %2 | typeOf _x = %3",_x,_x select 2,typeOf (_x select 2)];
if ((_x select 2) isKindOf _category) then {_above = true};
}forEach _surfacesAbove;
};
if (_below) then
{
_surfacesBelow = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 10],_u,_u,true,100];
_above = false;
{
//diag_log format["_fn_isInside: _x-2 = %2 | typeOf _x = %3",_x,_x select 2,typeOf (_x select 2)];
if ((_x select 2) isKindOf _category) then {_above = true};
}forEach _surfacesBelow;
};
_isInside = if (_above || _below) then {true} else {false};
//diag_log format["_fn_isInside: _isInside = %1",_isInside];
_isInside
};
_fn_buildingContainer = { // returns the builing containing an object or objNull
private["_u","_pos","_building","_surfacesAbove","_surfacesBelow"];
params["_u",["_category","House"]];
_pos = getPosASL _u;
private _building = objNull;
// lineIntersectsSurfaces [begPosASL, endPosASL, ignoreObj1, ignoreObj2, sortMode, maxResults, LOD1, LOD2, returnUnique]
_surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,10];
diag_log format["_surfacesAbove = %1",_surfacesAbove];
{
if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)};
} forEach _surfacesAbove;
if (_building isEqualTo objNull) then
{
_surfacesBelow = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 10],_u,_u,true,100];
diag_log format["_surfacesBelow = %1",_surfacesBelow];
{
if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)};
} forEach _surfacesBelow;
};
diag_log format["_fn_buildingContainer: _u = %1 | _building = %2",_u,_building];
_building
};
_fn_isInfantry = { // returns true if a unit is on foot otherwise returns false.
//////////////////////
// Determine if a unit isinfantry rather than a unit manning a turret or vehicle
//////////////////////
_u = _this select 0;
private _isInfantry = if ((_u isKindOf "Man") && (vehicle _u) isEqualTo _u) then {true} else {false};
//diag_log format["_fn_isInfantry: _isInfantry = %1",_isInfantry];
_isInfantry
};
diag_log "========== <START> ==========================";
///////////////////
// Define some values for our AI
// Change values of these variables to suit your needs
///////////////////
#define aiDifficulty "Red"
#define minAI 3
#define maxAI 6
#define minPatrolRadius 30
#define maxPatrolRadius 45
#define AI_respawnTime 600
#define aiVehiclePatrolRadius 75
#define vehiclePatrolRespawnTime 600
#define staticWeaponRespawnTime 600
#define aiAircraftPatrolRespawnTime 600
#define aiAircraftPatrolRadius 1700
#define oddsOfGarrison 0.67
#define maxGarrisonStatics 3
#define maxGarrisonUnits 4
#define typesGarrisonStatics [] // When empty a static will be randomly chosen from the defaults for blckeagls
#define garrisonMarkerObject "Sign_Sphere100cm_F" // This can be anything you like. I find this large sphere easy to see and convenient.
#define unitMarkerObject "Sign_Arrow_Direction_Green_F" // This can be anything. I chose this arrow type because it allows you to easily indicate direction.
#define objectAtMissionCenter "RoadCone_L_F"
#define lootVehicleMarker "Sign_Arrow_F"
#define landVehicles "LandVehicle"
///////////////////
// Define the coordinates of the center of the mission.
///////////////////
CENTER = [0,0,0];
if (isNil "CENTER" || CENTER isEqualTo [0,0,0]) then
{
hint "Please define a center point for your mission";
_obj = allMissionObjects objectAtMissionCenter;
_obj1 = _obj select 0;
diag_log format["Determining position of first roadcone found which is located at %1 with player found at %2",getPos _obj1,position Player];
if (count _obj > 0) then
{
CENTER = [3,3,0] vectorAdd (getPosATL _obj1);
};
hint format["Position of Road Cone at %1 used to define mission center",CENTER];
diag_log format["Position of Road Cone at %1 used to define mission center",CENTER];
diag_log format["Player located at position %1",position player];
};
///////////////////
// Identify any buildings in which a garrison should be spawned using the Arma building positions.
// Tell the script which buildings to garrison by placing an object inside that designates them as such.
// I use a large yellow sphere for this purpose.
// The function below assembles a list of such buildings for use in defining the data for mission buildings.
///////////////////
_cb = "";
//////////////////
// *** OPTIONAL ****
// Place a marker over your mission and configure it as you would like to to appear in the tame.
// The marker configuration will be included in the output of this script.
// Note ** Only the first marker placed will be processed **
// Configure Marker
/////////////////
/*
_markerType = ["ELIPSE",[175,175],"GRID"];
_markerType = ["mil_triangle",[0,0]];
*/
_allmkr = allMapMarkers;
diag_log format["_allmkr = %1",_allmkr];
if (count _allmkr == 0) then
//if !(typeName _mk isEqualTo "STRING") then
{
hint "No Marker Found, no Marker Definitions Will Be generated";
uiSleep 5;
} else {
_mk = _allmkr select 0;
diag_log format["_mk = %1",_mk];
if ((getMarkerType _mk) in ["ELIPSE","RECTANGLE"]) then
{
_cb = _cb + format['_markerType = ["%1",%2,%3];%4',getMarkerType _mk,getMarkerSize _mk,markerBrush _mk,endl];
} else {
_cb = _cb + format['_markerType = ["%1",[0,0]];%2',getMarkerType _mk,endl];
};
_cb = _cb + format['_markerColor = "%1";%2',markerColor _mk,endl];
_cb = _cb + format['_markerLabel = "%1";%2',MarkerText _mk,endl];
_cb = _cb + format["%1%1",endl];
};
////////////////////////
// Begin pulling data here
///////////////////////
_cb = _cb + format["_garrisonedBuildings_BuildingPosnSystem = [",endl];
private _garrisonedBuildings = [];
private _allStatics = [];
_helpers = allMissionObjects garrisonMarkerObject;
//diag_log format["_helpers = %1",_helpers];
{
if ( (typeOf _x) isEqualTo garrisonMarkerObject) then
{
private _isInside = [_x] call _fn_isInside;
if (_isInside) then
{
_building = [_x] call _fn_buildingContainer;
_garrisonedBuildings pushbackunique _building;
_garrisonedBuildings pushbackunique _x;
// data structure ["building Classname",[/*building pos*/],/*building dir*/,/*odds of garrison*/, /*Max Statics*/,/*types statics*/,/*max units*/],
// 1 2 3 4 5 6 7 8 9
_line = format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true',oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits];
systemChat _line;
//diag_log _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
};
};
} forEach _helpers;
_cb = _cb + format["%1];%1%1",endl];
_logging = format["_garrisonedBuildings = %1",_garrisonedBuildings];
//diag_log _logging;
systemChat _logging;
//diag_log format["_cb = %1%2",endl,_cb];
_configuredStatics = [];
_configuredUnits = [];
/*
This bit will set up the garrison for each building having units and / or statics inside it or on top.
Coding must ensure that nothing is repeated but everything is captured.
*/
_fn_configureGarrisonForBuildingATL = {
private["_b","_staticsInBuilding","_unitsInBuilding","_staticsText","_unitsText","_buildingGarrisonATL","_staticsInBuilding","_unitsInBuilding","_count"];
_b = _this select 0;
_count = 0;
if (_b in _garrisonedBuildings) exitWith {""};
_staticsText = "";
_unitsText = "";
_buildingGarrisonATL = "";
_staticsInBuilding = nearestObjects[getPosATL _building,["StaticWeapon"],sizeOf (typeOf _building)];
{
if !(_x in _configuredStatics) then
{
_isInside = [_x] call _fn_isInside;
if (_isInside) then {_building = [_x] call _fn_buildingContainer};
if (_b isEqualTo _building) then
{
_configuredStatics pushBackUnique _x;
if (_staticsText isEqualTo "") then
{
_staticsText = format['["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff (getPosATL _b),getDir _x];
} else {
_staticsText = _staticsText + format[',["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff (getPosATL _b),getDir _x];
};
};
};
} forEach _staticsInBuilding;
_unitsInBuilding = nearestObjects[getPosATL _building,[unitMarkerObject],sizeOf (typeOf _building)];
{
if !(_x in _configuredUnits) then
{
_isInside = [_x] call _fn_isInside;
if (_isInside) then {_building = [_x] call _fn_buildingContainer};
if (_b isEqualTo _building) then
{
_configuredUnits pushBackUnique _x;
if (_unitsText isEqualTo "") then
{
_unitsText = format["[%1,%2]",(getPosATL _x) vectorDiff (getPosATL _b),getDir _x];
} else {
_unitsText = _unitsText + format[",[%1,%2]",(getPosATL _x) vectorDiff (getPosATL _b),getDir _x];
};
_count = _count + 1;
};
};
} forEach _unitsInBuilding;
if ( !(_staticsText isEqualTo "") || !(_unitsText isEqualTo "")) then
{
_buildingGarrisonATL = format[' ["%1",%2,%3,%4,%5,[%6],[%7]]',typeOf _b,(getPosATL _b) vectorDiff CENTER,getDir _b,'true','true',_staticsText,_unitsText];
_garrisonedBuildings pushBackUnique _b;
};
_buildingGarrisonATL
};
private _count = 0;
_cb = _cb + "_garrisonedBuilding_ATLsystem = [";
{
private _isInside = [_x] call _fn_isInside;
if (_isInside) then
{
private _building = [_x] call _fn_buildingContainer;
private _include = if ( !(_building in _garrisonedBuildings) && !((typeOf _building) isEqualTo unitMarkerObject) && !((typeOf _building) isEqualTo garrisonMarkerObject)) then {true} else {false};
if (_include) then
{
//diag_log format["_x = %1 | _building = %1",_x,_building];
private _buildingGarrisonInformation = [_building] call _fn_configureGarrisonForBuildingATL;
//diag_log format["_buildingGarrisonInformation = %1",_buildingGarrisonInformation];
if (_count == 0) then
{
_cb = _cb + format["%1%2",endl,_buildingGarrisonInformation];
} else {
_cb = _cb + format[",%1%2",endl,_buildingGarrisonInformation];
};
_count = _count + 1;
};
};
} forEach ((allMissionObjects "StaticWeapon") + (allMissionObjects unitMarkerObject));
_cb = _cb + format["%1];%1%1",endl];
///////////////////
// Configure info remaining mission landscape
///////////////////
_land = allMissionObjects "Static";
_cb = _cb + format["_missionLandscape = [",endl];
{
diag_log format["evaluating mission landscape: _x = %1 | typeOf _x = %1",_x, typeOf _x];
//diag_log format["evaluating mission landscape: _x %1 | typeOf _x %1",_x, _x isKindOf "Helper_Base_F"];
if !(_x in _garrisonedBuildings && !((typeOf _x) isEqualTo unitMarkerObject) && !((typeOf _x) isEqualTo garrisonMarkerObject)) then
{
_line = format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true'];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
};
}forEach allMissionObjects "Static";
_cb = _cb + format["%1];%1%1",endl];
///////////////////
// Configure loot boxes
///////////////////
_cb = _cb + "_missionLootBoxes = [";
{
_line = format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff CENTER, '_crateLoot','_lootCounts',getDir _x];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
}forEach ((allMissionObjects "ReammoBox") + (allMissionObjects "ReammoBox_F"));
_cb = _cb + format["%1];%1%1",endl];
///////////////////
// Setup Info for loot vehicles
///////////////////
_missionLootVehicles = [];
_missionVehicles = ((allMissionObjects "Car") + (allMissionObjects "Tank") + allMissionObjects "Ship");
_lootVehicleMarkers = allMissionObjects lootVehicleMarker;
diag_log format["_lootVehicleMarkers = %1",_lootVehicleMarkers];
_cb = _cb + format["_missionLootVehicles = ["];
{
_kindOf = "nothing";
_isInside = [_x,"Car"] call _fn_isInside;
if (_isInside) then {_kindOf = "Car"};
if !(_isInside) then {_isInside = [_x,"Ship"] call _fn_isInside};
if (_isInside) then {_kindOf = "Ship"};
if (_isInside) then
{
_object = [_x,_kindOf] call _fn_buildingContainer;
diag_log format["object %1 is inside object %2",_x,_object];
_missionLootVehicles pushBack _object;
_line = format[' ["%1",%2,%3,%4,%5]',typeOf _object,(getPosATL _x) vectorDiff CENTER, '_crateLoot','_lootCounts',getDir _x];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
};
} forEach allMissionObjects lootVehicleMarker;
_cb = _cb + format["%1];%1%1",endl];
///////////////////
// Setup Info for vehicle patrols
///////////////////
_cb = _cb + format["_missionPatrolVehicles = ["];
{
if ( !((typeOf _x) isKindOf "SDV_01_base_F") && !(_x in _missionLootVehicles) ) then
{
_line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
};
}forEach ((allMissionObjects "Car") + (allMissionObjects "Tank") + allMissionObjects "Ship");
_cb = _cb + format["%1];%1%1",endl];
_cb = _cb + "_submarinePatrolParameters = [";
{
if ((typeOf _x) isKindOf "SDV_01_base_F") then
{
_line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
};
}forEach allMissionObjects "Ship";
_cb = _cb + format["%1];%1%1",endl];
///////////////////
// Configs for Air Patrols
///////////////////
_cb = _cb + "_airPatrols = [";
//[selectRandom _aircraftTypes,[22830.2,16618.1,11.4549],"blue",1000,60]
{
_line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true'];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
}forEach allMissionObjects "Air";
_cb = _cb + format["%1];%1%1",endl];
///////////////////
// Setup info for remaining static/emplaced weapons
///////////////////
_cb = _cb + format["_missionEmplacedWeapons = ["];
{
if !(_x in _configuredStatics) then
{
// ["B_HMG_01_high_F",[22883.5,16757.6,6.31652],"blue",0,10]
_line = format[' ["%1",%2,%3]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true'];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
};
}forEach allMissionObjects "StaticWeapon";
_cb = _cb + format["%1];%1%1",endl];
///////////////////
// Setup information for infantry groups spawning outside buildings
///////////////////
_cb = _cb + format["_missionGroups = ["];
{
//[[22920.4,16887.3,3.19144],"red",[1,2], 75,120],
_isInside = [_x] call _fn_isInside;
_isInfantry = [_x] call _fn_isInfantry;
//diag_log format["_missionGroups: _unit %1 | _isInside %2 _isInfantry %3",_x,_isInside,_isInfantry];
if (_isInfantry) then
{
if (!(surfaceIsWater (getPos _x)) && !(_isInside) && !(isPlayer _x)) then
{
_line = format[' [%1,%2,%3,"%4",%5,%6]',(getPosATL _x) vectorDiff CENTER,minAI,maxAI,aiDifficulty,minPatrolRadius,maxPatrolRadius];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
};
};
}forEach allMissionObjects "Man";
_cb = _cb + format["%1];%1%1",endl];
_cb = _cb + "_scubaGroupParameters = [";
{
//[[22920.4,16887.3,3.19144],"red",[1,2], 75,120],
_isInside = [_x] call _fn_isInside;
_isInfantry = [_x] call _fn_isInfantry;
//diag_log format["_missionGroups: _unit %1 | _isInside %2 _isInfantry %3",_x,_isInside,_isInfantry];
if (_isInfantry) then
{
if ((surfaceIsWater (getPos _x)) && !(_isInside) && !(isPlayer _x)) then
{
_line = format[' [%1,%2,%3,"%4",%5,%6]',(getPosATL _x) vectorDiff CENTER,minAI,maxAI,aiDifficulty,minPatrolRadius,maxPatrolRadius];
systemChat _line;
if (_forEachIndex == 0) then
{
_cb = _cb + format["%1%2",endl,_line];
} else {
_cb = _cb + format[",%1%2",endl,_line];
};
};
};
}forEach allMissionObjects "Man";
_cb = _cb + format["%1];%1%1",endl];
///////////////////
// All done, notify the user and copy the output to the clipboard
///////////////////
_msg = "All Objects organzied, formated and copied to the Clipboard";
hint _msg;
systemChat _msg;
systemChat format["_cb has %1 characters",count _cb];
copyToClipboard _cb;
diag_log "DONE";

View File

@ -3,7 +3,7 @@
By Ghostrider [GRG]
Copyright 2016
--------------------------
License
--------------------------
@ -14,29 +14,259 @@
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
_lootBoxes =
[
/*[
"altis", // map name
"Camp1", // a name for this region for logging and debuging purpses and to help identify the definition down the road when changing things on the server
2, // number of locations specified from the list below at which to spawn crates
[ // format here is [[position x, y, z], direction, exact / loose placement (true/false), smoke near crate (true/false]
[[23555.9,18422.7,0.730287],0,true, false], // loadout (0-4), false=random placement near position, true = show smoke at position
[[23542.1,18435.9,0.00143886],0,true, false],
[[23514,18452.5,0.00143886],0,true, false],
[[23534.2,18418.8,0.00143886],0,false, true]
]
],
[ "altis",
"refuel",
2,
[ // format here is [[position x, y, z], direction, exact / loose placement (true/false), smoke near crate (true/false]
[[22963.8,17041.3,0.00143886],0,false, false],
[[22942.8,17038,0.00143886],0,false, false],
[[22948.7,17054,0.00143886],0,false, false]
] // No comma after this last one
] // No comma after this last one
*/
#ifdef GRG_TestServer
["altis","APTrader",10,
[
[[14658.1, 16790.9, 18.3795],0,false,false],
[[14660, 16788.5, 18.3795],0,false,false],
[[17518.4,13260.7,12.7337],0,false,false],
[[17528.1,13270.2,12.725],0,false,false],
[[17537.4,13278.2,12.706],0,false,false],
[[17547.9,13286,12.6121],0,false,false],
[[17599.5,13240.5,13.327],0,false,false],
[[17593.1,13231.9,13.4375],0,false,false],
[[17586.5,13224.6,13.5832],0,false,false],
[[17580.5,13217.8,13.6708],0,false,false]
]
],
#endif
// Ferres
/*
["altis","Ferres", 4, // Number of crates to select from the array of possible possitions below. Note that there can be multiple arrays of this type.
[
[[21693.887,7731.0264,13.955027],0,true, true], // crate position 1, loadout (0-4), true=random placement near position, true = show smoke at position
[[21850.063,7504.3203,14.677059],0,true, true],
[[21693.674,7431.4141,15.578629],0,true, true],
[[21631.227,7773.9927,14.149431],0,true, true],
[[21572.559,7462.2661,17.827536],0,true, true],
[[21801.348,7631.4448,13.80711],0,true, true],
[[21508.932,7585.6309,15.844649],0,true, true],
[[21547.027,7695.6738,15.754698],0,true, true]
]
],*/
#ifndef blck_milServer
// Dump
["altis","Dump", 4, // Number of crates to select from the array of possible possitions below. Note that there can be multiple arrays of this type.
[
[[5791,20314.5,0],0,false,true], // crate position 1, loadout (0-4), false=random placement near position, true = show smoke at position
[[5902.33,20272.7,0],0,false,true],
[[5955.21,20136.2,0],0,false,true],
[[5908.32,20088.3,0],0,false,true],
[[55843.54,20171.6,0],0,false,true],
[[5775.42,20163.3,0],0,false,true],
[[5979.18,20206.5,0],0,false,true],
[[5943.89,20076.7,0],0,false,true]
]
],
// Beach #1
["altis","Beach", 4, // Number of crates to select from the array of possible possitions below. Note that there can be multiple arrays of this type.
[
[[22769.8,7051.28,0],0,false,true], // crate position 1, loadout (0-4), true=random placement near position, true = show smoke at position
[[22934.3,6990.53,0],0,false,true],
[[22831.7,7003.24,0],0,false,true],
[[22666.6,7009.22,0],0,false,true],
[[22634.6,6985.3,0],0,false,true],
[[22583.4,6935.63,0],0,false,true],
[[22651.1,7060.75,0],0,false,true]
]
],
["altis","Pack-1", 1, // Number of crates to select from the array of possible possitions below. Note that there can be multiple arrays of this type.
[
[[14269.6,13016.2,0],0,false,false], // crate position 1, loadout (0-4), true=random placement near position, true = show smoke at position
[[14359.9,13047.7,0],0,false,false],
[[14293.5,12956.9,0],0,false,false]
]
],
["altis","Pack-2", 4, // Number of crates to select from the array of possible possitions below. Note that there can be multiple arrays of this type.
[
[[26810,24557.2,0.00140762],0,false,false], // crate position 1, loadout (0-4), true=random placement near position, true = show smoke at position
[[26746,24652.6,0.520973],0,false,false],
[[26798.1,24668.3,0.001297],0,false,false],
[[26873,24635.1,17.4495],0,false,false],
[[26940.7,24642.2,0.732187],0,false,false],
[[26955.5,24658.4,0.739138],0,false,false],
[[26943.8,24666.2,0.722866],0,false,false],
[[26930.2,24651.9,0.727114],0,false,false],
[[26965.5,24684.1,7.63653],0,false,false],
[[26928.3,24714.8,7.63206],0,false,false],
[[26940.7,24730.5,7.76619],0,false,false],
[[26952,24750.5,0.602812],0,false,false],
[[26932.7,24730.8,0.635454],0,false,false],
[[26931.2,24739,0.724504],0,false,false],
[[26968.1,24700.1,0.599913],0,false,false],
[[26847.9,24821.4,0.340788],0,false,false],
[[26783.4,24788.2,12.5849],0,false,false],
[[26729.8,24759.1,0.296225],0,false,false]
]
],
#endif
["taviana","Zoo", 3, // Number of crates to select from the array of possible possitions below. Note that there can be multiple arrays of this type.
[
[[18614.1,3029.22,0],0,false, true], // crate position 1, loadout (0-4), true=random placement near position, true = show smoke at position
[[19215.7,2260.17,0],0,false, true],
[[19073.2,2775.83,0],0,false, true],
[[18632.1,2967.54,0],0,false, true],
[[18671.2,2869.73,0],0,false, true]
]
],
// Power Plant
["taviana","NPP", 3, // Number of crates to select from the array of possible possitions below. Note that there can be multiple arrays of this type.
[
[[9478.98,4481.12,0],0,false, false], // crate position 1, loadout (0-4), true=random placement near position, true = show smoke at position
[[9584.39,4474.86,0],0,false, false],
[[9485.74,4303.65,0],0,false, false],
[[9549.64,4236.95,0],0,false, false],
[[9347.52,4656.96,0],0,false, false],
[[9427.53,4585.94,0],0,false, false],
[[9542.42,4603.89,0],0,false, false]
]
],
["bornholm","Stronghold1",4,
// Stronghold 1
[
[[16776.3,2841.59,0.115455],2,true, false],
[[16885.1,2763.64,0.0635304],4,true, false],
[[16953.7,2588.12,0.0866053],2,true, false],
[[17028.5,2645.56,0.0632489],4,true, false],
[[16818.7,2627.68,0.0635295],2,true, false],
[[16828.1,2794.94,0.086482],4,true, false],
[[16776.8,2842.19,0.115454],2,true, false]
]
],
["bornholm","Stronghold2", 4,
// Stronghold 2
[
[[4342.52,19974.5,1.5059],2,false, false],
[[4364.01,19957.2,1.7643],4,false, false],
[[4337.55,19886.1,0.923979],2,false, false],
[[4317.76,19915.3,0.336912],4,false, false],
[[4261.73,19957,0.0783005],2,false, false],
[[4280.66,19961.2,0.180275],4,false, false],
[[4318.1,19916.5,0.514435],2,false, false]
]
],
["bornholm","Object99",4,// ** Note that there is no comma after the last entry.
// Object 99 blah blah
[
/*
// Darthrogues Obj 99
[[7231.91,11975.8,0.836342],2,false, false],
[[7266.08,11981.6,1.0471],4,false, false],
[[7337.64,12011.6,12.7679],2,false, false],
[[7264.35,12020.1,0.661186],4,false, false],
[[7204.27,12058.5,0.632904],2,false, false],
[[7265.46,12128.6,0.00143433],4,false, false],
[[7250.85,12142.9,3.16084],2,false, false],
[[7215.93,12121.1,0.224915],4,false, false],
[[7207.59,12159.8,0.73732],2,false, false],
[[7184.07,12231.1,8.72117],4,false, false],
[[7172.28,12021.2,0.664284],2,false, false],
[[7147.93,12056.5,0.848099],4,false, false],
[[7137.67,12110.8,4.0068],2,false, false],
[[7166,12138,3.86438],4,false, false],
[[7130.52,12207.9,0.56971],4,false, false]
*/
// Mr. Squirrel's Obj 69
[[7253.48,12101.4,0],2,false, false],
[[7276.15,12118.1,0],4,false, false],
[[7158.4,12068.5,0],2,false, false],
[[7128.27,12206.9,0],4,false, false],
[[7167.57,12218.9,0],2,false, false],
[[7218.71,12188.5,0],4,false, false],
[[7209.02,12166.9,0],2,false, false],
[[7233.2,12067.5,0],4,false, false],
[[7167.75,12038.4,0],2,false, false],
[[7106.96,12119.2,0],4,false, false],
[[7161.82,12126.7,0],2,false, false],
[[7096.61,12195.9,0],4,false, false],
[[7083.88,12141.1,0],2,false, false],
[[7060.33,12146.2,0],4,false, false],
[[7135.81,12168.1,0],2,false, false],
[[7055.72,12159.2,0.38678],4,false, false],
[[7119.19,12100.2,0.801155],2,false, false],
[[7124.51,12095.7,1.16968],4,false, false]
]
],
["bornholm","Mafia Island", 4,
[// Mafia Island
[[19296.5, 22308.8, 0],2,false, false],
[[19279, 22352.2, 0],4,false, false],
[[19213.8, 22358.6, 0],2,false, false],
[[19190.4, 22367.4, 0],4,false, false],
[[19204.3, 22314.9, 0],2,false, false],
[[19368.7, 22347.3, 0],4,false, false],
[[19462.8, 22306.1, 0],2,false, false],
[[19321.4, 22240.1, 3.46751],4,false, false]
]
],
["bornholm","Science Compound", 4,
[// Science Compound
[[7922.43,7347, 0],2,false, false],
[[7926.59,7427.49, 0],4,false, false],
[[7929.08,7421.45, 0],2,false, false],
[[7984.89,7474.71, 0],4,false, false],
[[7974.01,7472.63, 0],2,false, false],
[[7934.56,7572.23, 0],4,false, false],
[[7945.09,7587.68, 0],2,false, false],
[[7949.19,7567.18,0],4,false, false]
]
],
//[[21572.559,7462.2661,17.827536],4,true, true]
//[[21801.348,7631.4448,13.80711],1,true, true],
//[[21508.932,7585.6309,15.844649],2,true, true],
//[[21547.027,7695.6738,15.754698],3,true, true]
[ "lythium", "RaiderBase", 3,
[
[[18950.6,13115.8,233.078],1,true, false], // loadout (0-4), false=random placement near position, true = show smoke at position
[[18958,13095.9,231.687],2,true, false],
[[19048.7,13134,229.004],2,true, false],
[[19062.3,13126.6,229.646],1,true, false],
[[19032.2,13087.3,227.428],3,true, false],
[[18988,13192.7,223.058],1,true, false],
[[19076.2,13105.2,231.051],3,true, false]
]
],
[ "lythium","chemical", 4,
[
[[9081.29,19774.8,704.102],1,true, false], // loadout (0-4), false=random placement near position, true = show smoke at position
[[9081.29,19774.8,704.102],2,true, false],
[[8926.25,19856.5,728.456],2,true, false],
[[8999.95,19917.9,714.447],1,true, false],
[[9391.22,19888,713.624],3,true, false],
[[9026.12,20360,687.103],1,true, false],
[[8972.81,20222.4,714.263],3,true, false],
[[9406.59,19506.8,635.903],3,true, false],
[[7715.5,20352.6,822.616],3,true, false]
]
],
[ "lythium","nwaste", 4,
[
[[19123.5,1726.78,77.169],1,true, false], // loadout (0-4), false=random placement near position, true = show smoke at position
[[19000.5,1657.84,79.3068],2,true, false],
[[19028.6,1525.28,80.0602],2,true, false],
[[19076.7,1536.15,78.7828],1,true, false],
[[19393.5,1784.66,32.3623],3,true, false],
[[19391,1783.63,32.5241],1,true, false],
[[19255.1,2204.95,46.3486],3,true, false],
[[19398.7,2323,42.8409],3,true, false]
]
],
[ "lythium","mine", 4,
[
[[4114.84,905.004,357.621],1,true, false], // loadout (0-4), false=random placement near position, true = show smoke at position
[[3714.22,760.414,383.659],2,true, false],
[[3774.63,684.883,384.924],2,true, false],
[[3747.2,777.427,384.203],1,true, false],
[[3761.07,611.827,383.125],3,true, false],
[[3709.12,780.889,383.27],1,true, false],
[[3712.96,805.05,382.848],3,true, false],
[[3688.47,713.877,382.692],3,true, false],
[[4373.19,607.184,370.77],3,true, false]
]
]
];

View File

@ -1,8 +1,6 @@
/*
for ghostridergaming
By Ghostrider [GRG]
Copyright 2016
Last Modified 8-23-17
--------------------------
License
@ -71,7 +69,6 @@ _fn_spawnCrate = {
_crate = [[0,0,0],_selectedCrateType] call blck_fnc_spawnCrate;
_crate setPosATL _pos;
_crate setDir round(random(360));
//uiSleep 1;
_crate setVectorUp surfaceNormal _pos;
_crate
};
@ -81,7 +78,7 @@ _fn_setupCrates = {
private["_crate"];
_crate = [_location,_randomPos] call _fn_SpawnCrate;
while {_lootType == 0} do {_lootType = round(random(3));};
_lootType = selectrandom [1,2,3];
switch(_lootType) do
{
// format here is [_arrayOfLoot, crateToLoad, magazinesToAddForEachWeaponLoaded]
@ -102,37 +99,31 @@ _fn_setupCrates = {
_crate
};
//diag_log "[blckeagls] SLS System: Functions Initialized!";
private["_cratePosnList","_no","_ar","_x","_cratePos","_lootType","_randomPos","_useSmoke"];
private["_cratePos","_lootType","_randomPos","_useSmoke"];
{
_map = _x select 0;
_name = _x select 1;
_no = _x select 2;
_ar = _x select 3;
private["_index"];
_index = 1;
if (blck_debugON) then
_x params ["_map","_name","_no","_ar"];
private["_index"];
_index = 1;
if (blck_debugON) then
{
diag_log format["[blckeagls] SLS :: main function: Location name = %3 |count _ar = %1 | _index = %2", count _ar, _index, _name];
diag_log format["[blckeagls] SLS :: main function: count _ar = %1", _ar];
};
if ((tolower _map) isEqualto (toLower(worldName))) then
{
for "_i" from 1 to _no do
{
diag_log format["[blckeagls] SLS :: main function: Location name = %3 |count _ar = %1 | _index = %2", count _ar, _index, _name];
diag_log format["[blckeagls] SLS :: main function: count _ar = %1", _ar];
};
if (_map isEqualto (toLower(worldName))) then
{
_usedLocations = [];
for "_i" from 1 to _no do
// Pick a random element and be sure it has not already been selected
_ar = _ar call Bis_fnc_arrayshuffle;
_crateParams = _ar deleteat 0;
if (blck_debugON) then
{
// Pick a random element and be sure it has not already been selected_crateParams
_crateParams = selectRandom _ar;
while {_crateParams in _usedLocations} do {_crateParams = selectRandom _ar;}; // selectRandom is about 5X faster than BIS_fnc_selectRandom in my testing.
if (blck_debugON) then
{
diag_log format["[blckeagls] SLS:: spawning crate spawning crate at location name %1 with parameters of %2 --->>> %1",_name,_crateParams];
};
_usedLocations pushback _crateParams;
_crateParams params["_cratePos","_lootType","_randomPos","_useSmoke"]; // params is about 5x faster in my testing over _this select 0 where many local variables are defined by parsing _this.
[_cratePos,_lootType,_randomPos,_useSmoke] call _fn_setupCrates;
diag_log format["[blckeagls] SLS:: spawning crate spawning crate at location name %1 with parameters of %2 --->>> %1",_name,_crateParams];
};
// _crateParams params["_cratePos","_lootType","_randomPos","_useSmoke"];
_crateParams call _fn_setupCrates;
};
};
} forEach _lootBoxes;

View File

@ -15,14 +15,13 @@
#endif
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
if not (isNull( configFile >> "CfgPatches" >> "a3_epoch_server" )) then
if ((tolower blck_modType) isEqualto "epoch") then
{
[] execVM "\q\addons\custom_server\SLS\SLS_init_epoch.sqf";
call compile preprocessfilelinenumbers "\q\addons\custom_server\SLS\SLS_init_epoch.sqf";
};
if not (isNull ( configFile >> "CfgPatches" >> "exile_server" ) ) then
if ((tolower blck_modType) isEqualto "exile") then
{
[] execVM "\q\addons\custom_server\SLS\SLS_init_exile.sqf";
call compile preprocessfilelinenumbers "\q\addons\custom_server\SLS\SLS_init_exile.sqf";
};
diag_log "[blckeagls] SLS System: Static loot crates ran successfully!";
blck_SLSComplete = true;
blck_SLSComplete = true;

View File

@ -12,14 +12,8 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private["_blck_WorldName"];
_blck_WorldName = toLower format ["%1", worldName];
_blck_worldSize = worldSize;
diag_log format["[blckeagls] Loading Map-specific settings with worldName = %1",_blck_WorldName];
switch (_blck_WorldName) do
diag_log format["[blckeagls] Loading Map-specific settings with worldName = %1",worldName];
switch (toLower worldName) do
{// These may need some adjustment - including a test for shore or water should help as well to avoid missions spawning on water.
case "altis":{
diag_log "[blckeagls] Altis-specific settings for Epoch loaded";
@ -63,7 +57,5 @@ switch (_blck_WorldName) do
case "takistan":{blck_mapCenter = [5500, 6500, 0];blck_mapRange = 5000;};
case "lythium":{blck_mapCenter = [10000,10000,0];blck_mapRange = 8500;};
case "malden":{blck_mapCenter = [6000,7000,0];blck_mapRange = 5500;};
default {_blck_WorldName = "default";blck_mapCenter = [6322,7801,0]; blck_mapRange = 6000};
};
blck_worldSet = true;
default {blck_mapCenter = [6322,7801,0]; blck_mapRange = 6000};
};

View File

@ -10,26 +10,21 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
if (blck_modType isEqualTo "Epoch") then
if ((tolower blck_modType) isEqualTo "epoch") then
{
_blckListPrior = blck_locationBlackList;
private _config = configFile >> "CfgEpoch";
private _configWorld = _config >> worldname;
private _telePos = getArray(configFile >> "CfgEpoch" >> worldName >> "telePos" );
//diag_log format["[blckeagls] _fnc_getTraderCities: _config = %1 | _configWorld = %2",_config,_configWorld];
//diag_log format["[blckegle] _fnc_getTraderCities: count _telePos = %1 || _telepos = %2",count _telePos,_telePos];
//if (true) exitWith {};
{
blck_locationBlackList pushback [_x select 3, 1000];
#ifdef blck_debugMode
if (blck_debugON) then {diag_log format["[blckeagls] _fnc_getTraderCitiesEpoch:: -- >> Added epoch trader city location at %1", (_x select 3)];};
#endif
} foreach _telePos; // (getArray(_configWorld >> "telePos"));
diag_log format["[blckeagls] blckListPrior = %1",_blckListPrior];
diag_log format["[blckeagls] ] blck_locationBlackList = %1",blck_locationBlackList];
} foreach _telePos;
};
if (blck_modType isEqualTo "Exile") then
if ((tolower blck_modType) isEqualTo "exile") then
{
if (blck_blacklistTraderCities || blck_blacklistSpawns || blck_listConcreteMixerZones) then
{

View File

@ -1,11 +1,4 @@
/*
AI Mission for Epoch and Exile Mods to Arma 3
Credist to blckeagls who wrote the initial mission script for A3 Epoch
To Narines for debugging that original version
To cynwncler for many helpful comments along the way
And mostly importantly,
To Vampire, KiloSwiss, blckeagls, theFUCHS, lazylink, Mark311 and Buttface (Face) who wrote the pionering mission and roaming AI systems upon which this one is based and who's code is used with modification in some parts of this addon.
By Ghostrider-GRG-
--------------------------
@ -15,46 +8,17 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
if (hasInterface) exitWith{};
if (hasInterface || isServer) exitWith{};
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
if !(isNil "blck_Initialized") exitWith{};
private["_blck_loadingStartTime"];
_blck_loadingStartTime = diag_tickTime;
private _blck_loadingStartTime = diag_tickTime;
#include "\q\addons\custom_server\init\build.sqf";
diag_log format["[blckeagls] Loading Headless Client Version %2 Build Date %1",_blck_versionDate,_blck_version];
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf";
waitUntil {(isNil "blck_variablesLoaded") isEqualTo false;};
waitUntil{blck_variablesLoaded};
blck_variablesLoaded = nil;
//if !(blck_debugON) then {uiSleep 60;};
// compile functions
//call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf";
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf";
waitUntil {(isNil "blck_functionsCompiled") isEqualTo false;};
waitUntil{blck_functionsCompiled};
blck_functionsCompiled = nil;
diag_log format["[blckeagls] debug mode settings:blck_debugON = %1 blck_debugLevel = %2",blck_debugON,blck_debugLevel];
//call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_configs.sqf";
//call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_custom_config.sqf";
diag_log format["[blckeagls] Loading Headless Client Version %2 | Build Date %1 | loaded in %4 seconds",_blck_versionDate,blck_versionNumber,blck_buildNumber,diag_tickTime - _blck_loadingStartTime];
execVM "\q\addons\custom_server\Configs\blck_configs.sqf";
waitUntil {(isNil "blck_configsLoaded") isEqualTo false;};
waitUntil{blck_configsLoaded};
blck_configsLoaded = nil;
// Load any user-defined specifications or overrides
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_custom_config.sqf";
#ifdef GRGserver
diag_log "[blckeagls] Running GRG Version";
#endif
switch (blck_simulationManager) do
case 1: {diag_log "[blckeagls] dynamic simulation manager enabled"};
case 2: {diag_log "[blckeagls] blckeagls simulation manager enabled"};
case 0: {diag_log "[blckeagls] simulation management disabled"};
};
diag_log format["[blckeagls] for HC version %1 Build %2 Loaded in %3 seconds",_blck_versionDate,_blck_version,diag_tickTime - _blck_loadingStartTime]; //,blck_modType];
[] spawn blck_fnc_HC_monitor;

View File

@ -10,42 +10,46 @@
*/
if ( !(isServer) || hasInterface) exitWith{};
if !(isNil "blck_Initialized") exitWith{};
// find and set Mod
blck_modType = if (!isNull (configFile >> "CfgPatches" >> "exile_server")) then {"Exile"} else {if (!isnull (configFile >> "CfgPatches" >> "a3_epoch_server")) then {"Epoch"} else {""}};
publicVariable "blck_modType";
//#include "blck_defines.hpp";
if ((tolower blck_modType) isEqualto "epoch") then {
diag_log "[blckeagls] Waiting until EpochMod is ready...";
waituntil {!isnil "EPOCH_SERVER_READY"};
};
if ((toLower blck_modType) isEqualTo "exile") then
{
diag_log "[blckeagls] Waiting until ExileMod is ready ...";
waitUntil {!isNil "PublicServerIsLoaded"};
};
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
if !(isNil "blck_Initialized") exitWith{};
private _blck_loadingStartTime = diag_tickTime;
#include "\q\addons\custom_server\init\build.sqf";
diag_log format["[blckeagls] Loading Server Mission System Version %2 Build Date %1",_blck_versionDate,_blck_version];
diag_log format["[blckeagls] Loading Server Mission System Version"];
// compile functions
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf";
waitUntil {(isNil "blck_functionsCompiled") isEqualTo false;};
waitUntil{blck_functionsCompiled};
blck_functionsCompiled = nil;
diag_log format["[blckeagls] functions compiled at %1",diag_tickTime];
diag_log format["[blckeagls] functions compiled in %1 seconds",diag_tickTime-_blck_loadingStartTime];
blck_modType = call blck_fnc_getModType;
publicVariable "blck_modType";
execVM "\q\addons\custom_server\Configs\blck_configs.sqf";
waitUntil {(isNil "blck_configsLoaded") isEqualTo false;};
waitUntil{blck_configsLoaded};
blck_configsLoaded = nil;
call compile preprocessfilelinenumbers "\q\addons\custom_server\Configs\blck_configs.sqf";
waitUntil{(!isNil "blck_useHC") && (!isNil "blck_simulationManager") && (!isNil "blck_debugOn")};
diag_log format["[blckeagls] blck_useHC = %1 | blck_simulationManager = %2 ",blck_useHC,blck_simulationManager];
diag_log format["[blckeagls] debug mode settings:blck_debugON = %1 blck_debugLevel = %2",blck_debugON,blck_debugLevel];
// Load any user-defined specifications or overrides
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_custom_config.sqf";
diag_log format["[blckeagls] configurations loaded at %1",diag_tickTime];
//diag_log format["[blckeagls] configurations loaded at %1",diag_tickTime];
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf";
waitUntil {(isNil "blck_variablesLoaded") isEqualTo false;};
waitUntil{blck_variablesLoaded};
blck_variablesLoaded = nil;
diag_log format["[blckeagls] blck_variables loaded at %1",diag_tickTime];
if (blck_simulationManager == 2) then
{
"Group" setDynamicSimulationDistance 1800;
enableDynamicSimulationSystem true;
};
// spawn map addons to give the server time to position them before spawning in crates etc.
if (blck_spawnMapAddons) then
@ -54,21 +58,19 @@ if (blck_spawnMapAddons) then
}else{
diag_log "[blckeagls] Map Addons disabled";
};
blck_spawnMapAddons = nil;
// find and set Mapcenter and size
diag_log "[blckeagls] Loading Map-specific information";
execVM "\q\addons\custom_server\init\GMS_fnc_findWorld.sqf";
waitUntil {(isNil "blck_worldSet") isEqualTo false;};
waitUntil{blck_worldSet};
blck_worldSet = nil;
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\init\GMS_fnc_findWorld.sqf";
// set up the lists of available missions for each mission category
diag_log "[blckeagls] Loading Mission Lists";
//diag_log "[blckeagls] Loading Mission Lists";
#include "\q\addons\custom_server\Missions\GMS_missionLists.sqf";
diag_log "[blckeagls] Mission Lists Loaded Successfully";
[] execVM "\q\addons\custom_server\Missions\Static\GMS_StaticMissions_init.sqf";
[] execVM "q\addons\custom_server\Missions\UMS\GMS_UMS_init.sqf"; // loads functions and spawns any static missions.
call compile preprocessfilelinenumbers "\q\addons\custom_server\Missions\Static\GMS_StaticMissions_init.sqf";
call compile preprocessfilelinenumbers "q\addons\custom_server\Missions\UMS\GMS_UMS_init.sqf"; // loads functions and spawns any static missions.
diag_log "[blckeagls] blck_init_server: ->> Static and UMS systems initialized.";
switch (blck_simulationManager) do
@ -78,33 +80,28 @@ switch (blck_simulationManager) do
case 0: {diag_log "[blckeagls] simulation management disabled"};
};
diag_log format["[blckeagls] version %1 Build %2 Loaded in %3 seconds",_blck_versionDate,_blck_version,diag_tickTime - _blck_loadingStartTime]; //,blck_modType];
diag_log format["[blckeagls] version %1 Build %2 Loaded in %3 seconds",blck_versionNumber,blck_buildNumber,diag_tickTime - _blck_loadingStartTime]; //,blck_modType];
diag_log format["blckeagls] waiting for players to join ---- >>>>"];
if !(blck_debugON || (blck_debugLevel isEqualTo 0)) then
if ( !(blck_debugON) && (blck_debugLevel isEqualTo 0)) then
{
waitUntil{{isPlayer _x}count allPlayers > 0};
diag_log "[blckeagls] Player Connected, spawning missions";
} else {
diag_log "[blckeagls] spawning Missions";
diag_log "[blckeagls] Debug mode ON, proceding without players";
};
if (blck_spawnStaticLootCrates) then
{
// Start the static loot crate spawner
diag_log "[blckeagls] SLS:: -- >> Static Loot Spawner Started";
[] execVM "\q\addons\custom_server\SLS\SLS_init.sqf";
waitUntil {(isNil "blck_SLSComplete") isEqualTo false;};
waitUntil {blck_SLSComplete};
blck_SLSComplete = nil;
call compile preprocessfilelinenumbers "\q\addons\custom_server\SLS\SLS_init.sqf";
diag_log "[blckeagls] SLS:: -- >> Static Loot Spawner Done";
}else{
diag_log "[blckeagls] SLS:: -- >> Static Loot Spawner disabled";
};
if (true /*blck_blacklistTraderCities*/) then
if (blck_blacklistTraderCities) then
{
execVM "\q\addons\custom_server\init\GMS_fnc_getTraderCites.sqf";
call compile preprocessfilelinenumbers "\q\addons\custom_server\init\GMS_fnc_getTraderCites.sqf";
};
//Start the mission timers

View File

@ -1,14 +0,0 @@
private["_startTime"];
_startTime = diag_tickTime;
[] spawn {
while {true} do
{
blck_serverFPS = diag_FPS;
publicVariable "blck_serverFPS";
uiSleep 3;
};
};

View File

@ -1,6 +1,7 @@
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private ["_version","_versionDate"];
blck_version = "6.86 Build 156";
blck_version = format["6.88 Build %1",blck_buildNumber];
_blck_version = blck_version;
_blck_versionDate = "10-22-18 1:30 AM";
_blck_versionDate = "12-1-18 8:00 AM";
blck_pvs_version = _blck_version;
publicVariable blck_pvs_version;

View File

@ -0,0 +1,18 @@
uiSleep 5;
diag_log format["<< ---- START TEST Crate Loading ---- >>"];
_coords = [12000,12000,0];
//_loot = blck_supportLoot; //[causes problems] blck_highPoweredLoot; // [causes problems] blck_contructionLoot ; //blck_BoxLoot_Orange;
_loot = blck_supportLoot;
_lootCounts = [100,100,100,100,100,100];
_aiDifficultyLevel = "Orange";
for "_i" from 1 to 100 do
{
diag_log format["testCrateLoading: pass %1",_i];
_crateType = selectRandom blck_crateTypes;
_crate = [_coords,_crateType] call blck_fnc_spawnCrate;
[_crate,_loot,_lootCounts] call blck_fnc_fillBoxes;
uiSleep 5;
diag_log format["testCrateLoading: crate inventory = %1",getItemCargo _crate];
};

View File

@ -5,9 +5,11 @@ Read the faq and config files for specific information.
Some general tips are:
First, create a backup of all files.
Second, if your rpt log shows errors after a change, revert to the defaults and try again.
Third, settings that determine how messages are displayed are your mission file (i.e, epoch.Altis.pbo) in debug\blckClient.sqf.
Here you can use dynamic messages, hints, or titleText/cutText to display your messages.
Third, settings that determine how messages are displayed can be configured in your mission file (i.e, epoch.Altis.pbo) in debug\blckClient.sqf.
Here you can use dynamic messages, hints, Toasts or titleText/cutText to display your messages.
Lastly, settings for the missions themselves have been moved to @epochhive\custom_server\configs.
There are two different config files, one for exile and a second for epoch.

Some files were not shown because too many files have changed in this diff Show More