Ver 6.88 Build 167 Final RC

This commit is contained in:
Chris Cardozo 2018-12-01 12:59:38 -05:00
parent ba32d2930b
commit 6560123a60
30 changed files with 209 additions and 366 deletions

View File

@ -24,10 +24,6 @@ while {true} do
uiSleep 1; uiSleep 1;
if (diag_tickTime > _timer1sec) then if (diag_tickTime > _timer1sec) then
{ {
[] call blck_fnc_vehicleMonitor;
#ifdef GRGserver
[] call blck_fnc_broadcastServerFPS;
#endif
_timer1sec = diag_tickTime + 1; _timer1sec = diag_tickTime + 1;
}; };
if (diag_tickTime > _timer5sec) then if (diag_tickTime > _timer5sec) then

View File

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

View File

@ -8,15 +8,12 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/ http://creativecommons.org/licenses/by-nc-sa/4.0/
*/ */
//#include "\q\addons\custom_server\Configs\blck_defines.hpp"; #include "\q\addons\custom_server\Configs\blck_defines.hpp";
//diag_log format["_fnc_HC_XferGroup:: _this = %1",_this]; private["_group","_unit","_tempEH"];
private["_group","_client","_unit","_tempEH"];
_group = _this select 0; _group = _this select 0;
//blck_HC_monitoredGroups pushBack _group;
_client = clientOwner;
{ {
_unit = _x; _unit = _x;
_tempEH = ["reloaded",_unit addEventHandler ["reloaded", {_this call compile preprocessfilelinenumbers blck_EH_unitWeaponReloaded;}]]; _tempEH = _unit addEventHandler ["Reloaded", {_this call blck_EH_unitWeaponReloaded;}];
}forEach (units _group); }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

@ -20,10 +20,10 @@ blck_fnc_countGroupsAssigned = {
}; };
private["_numTransfered","_clientId","_allGroups","_groupsOwned","_idHC","_id","_swap","_rc"]; private["_numTransfered","_clientId","_allGroups","_groupsOwned","_idHC","_id","_swap","_rc"];
_numTransfered = 0; //_numTransfered = 0;
_idHC = -2; _idHC = -2;
blck_connectedHCs = entities "HeadlessClient_F"; 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]; //diag_log format["_fnc_passToHCs:: blck_connectedHCs = %1 | count _HCs = %2 | server FPS = %3",blck_connectedHCs,count blck_connectedHCs,diag_fps];
if !(blck_connectedHCs isEqualTo []) then if !(blck_connectedHCs isEqualTo []) then
{ {
_idHC = [blck_connectedHCs] call blck_fnc_HC_leastBurdened; _idHC = [blck_connectedHCs] call blck_fnc_HC_leastBurdened;
@ -36,13 +36,10 @@ if !(blck_connectedHCs isEqualTo []) then
if (_sgor) then if (_sgor) then
{ {
[_x] remoteExec["blck_fnc_HC_XferGroup",_idHC]; [_x] remoteExec["blck_fnc_HC_XferGroup",_idHC];
_numTransfered = _numTransfered + 1; //_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];
}; };
}; };
}; };
} forEach (allGroups); } forEach (allGroups);
diag_log format["[blckeagls] _passToHCs:: %1 groups transferred to HC %2",_numTransfered,_idHC]; //diag_log format["[blckeagls] _passToHCs:: %1 groups transferred to HC %2",_numTransfered,_idHC];
}; };

View File

@ -397,7 +397,7 @@ while {_missionComplete isEqualTo -1} do
{ {
{ {
private _d = _x distance (_x getVariable ["crateSpawnPos",_coords]); private _d = _x distance (_x getVariable ["crateSpawnPos",_coords]);
diag_log format["crate %1 moved %2 at %3",_x,_d,diag_tickTime]; //diag_log format["crate %1 moved %2 at %3",_x,_d,diag_tickTime];
if (_d > 25) exitWith if (_d > 25) exitWith
{ {
_missionComplete = 1; _missionComplete = 1;

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 (_weaponList isEqualTo []) then {_weaponList = [_skillAI] call blck_fnc_selectAILoadout};
if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms}; if (_sideArms isEqualTo []) then {[_skillAI] call blck_fnc_selectAISidearms};
//{
//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"]; private["_vehGroup","_patrolVehicle","_vehiclePatrolSpawns","_missionAI","_missiongroups","_vehicles","_return","_vehiclePatrolSpawns","_vehicle","_return","_abort","_spawnPos","_v"];
_vehicles = []; _vehicles = [];
_missionAI = []; _missionAI = [];
_abort = false; _abort = false;
//_useRelativePos = false;
if (_missionPatrolVehicles isEqualTo []) then if (_missionPatrolVehicles isEqualTo []) then
{ {
_useRelativePos = false; _useRelativePos = false;
_vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius; _vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius;
{ {
_v = [_skillAI] call blck_fnc_selectPatrolVehicle; _v = [_skillAI] call blck_fnc_selectPatrolVehicle;
//diag_log format["_fnc_spawnMissionVehiclePatrols (36):: position = %1 and vehicle = %2",_x, _v];
_missionPatrolVehicles pushBack [_v, _x]; _missionPatrolVehicles pushBack [_v, _x];
}forEach _vehiclePatrolSpawns; }forEach _vehiclePatrolSpawns;
}; };
@ -76,49 +60,19 @@ if (_missionPatrolVehicles isEqualTo []) then
}; };
blck_monitoredMissionAIGroups pushBack _vehGroup; 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
//params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull]]; //params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull]];
_patrolVehicle = [_coords,_spawnPos,_vehicle,40,60,_vehGroup,true] call blck_fnc_spawnVehiclePatrol; _patrolVehicle = [_coords,_spawnPos,_vehicle,40,60,_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
if !(isNull _patrolVehicle) then if !(isNull _patrolVehicle) then
{ {
_patrolVehicle setVariable["vehicleGroup",_vehGroup]; _patrolVehicle setVariable["vehicleGroup",_vehGroup];
_vehicles pushback _patrolVehicle; _vehicles pushback _patrolVehicle;
blck_monitoredVehicles pushBack _patrolVehicle;
_missionAI append (units _vehGroup); _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; } forEach _missionPatrolVehicles;
blck_monitoredVehicles append _vehicles;
_return = [_vehicles, _missionAI, _abort]; _return = [_vehicles, _missionAI, _abort];
_return _return

View File

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

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

@ -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

@ -15,35 +15,24 @@
params["_veh"]; params["_veh"];
blck_monitoredVehicles = blck_monitoredVehicles - [_veh]; blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
//diag_log format["_fnc_releaseVehicleToPlayersl: _veh = %1 | (owner _veh) = %2",_veh,(owner _veh)]; //diag_log format["_fnc_releaseVehicleToPlayersl: _veh = %1 | isLocal _veh = %3 | (owner _veh) = %2",_veh,(owner _veh),Local _veh];
//diag_log format["_fnc_releaseVehicleToPlayersl: initial lock state of vehicle 51 = %2",_veh,locked _veh]; if (local _veh) then {
//_veh setVehicleLock "UNLOCKED" ; _veh lock false;
_locked = true; }
_count = 0; else {
_timeIn = diag_tickTime; if (isserver) then {
while {_count < 2} do [_veh,false] remoteExecCall ["lock",_veh]; // let the machine, where the vehicle is local unlock it (only the server knows, who the owner is!!!)
{ }
//diag_log format["_fnc_releaseVehicleToPlayersl: attempting to unlock vehicle %1",_veh]; else {
[_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. [[_veh,false],["lock",_veh]] remoteExecCall ["remoteExecCall", 2]; // If run on HC, move to the server. Server will remoteexec on local machine
// a bit of bandwidth seems worth ensuring that vehicles do in fact get unlocked. };
uiSleep 0.1; };
_count = _count + 1; //diag_log format["_fnc_releaseVehicleToPlayers: _veh=%1 | owner = %2 | lock = %3",_veh,owner _veh, locked _veh];
//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};
};
{ {
_veh removealleventhandlers _x; _veh removealleventhandlers _x;
} forEach ["GetIn","GetOut","fired","hit","hitpart","reloaded","dammaged","HandleDamage"]; } forEach ["GetIn","GetOut","fired","hit","hitpart","reloaded","dammaged","HandleDamage"];
{ {
_veh removeAllMPEventHandlers _x; _veh removeAllMPEventHandlers _x;
} forEach ["MPHit","MPKilled"]; } forEach ["MPHit","MPKilled"];
_veh setVariable["blck_DeleteAt",diag_tickTime + blck_vehicleDeleteTimer,true]; _veh setVariable["blck_DeleteAt",nil];
if ((damage _veh) > 0.6) then {_veh setDamage 0.6}; 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

View File

@ -14,73 +14,59 @@
private ["_vehList"]; private ["_vehList"];
_vehList = +blck_monitoredVehicles; _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]; //diag_log format["_fnc_vehicleMonitor:: function called at %1 with _vehList %2 ",diag_tickTime,_vehList,blck_monitoredVehicles];
// Needs debugging for HC operation.
{ {
/* private["_veh","_isEmplaced","_allCrewDead","_evaluate","_deleteAtTime"];
Determine state of vehicle _veh = _x; // (purely for clarity at this point, _x could be used just as well)
_isEmplaced
_ownerIsPlayer _isEmplaced = _veh getVariable["GRG_vehType","none"] isEqualTo "emplaced";
_allCrewDead _allCrewDead = {alive _x} count (crew _veh) == 0;
_evaluate = 0;
_deleteAtTime = _veh getVariable ["blck_deleteAtTime",diag_tickTime + 1];
_handleReloadRefuel (0) if (diag_tickTime > _deleteAtTime) then
_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
{ {
private["_veh","_isEmplaced","_ownerIsPlayer","_allCrewDead","_evaluate","_deleteat"]; _evaluate = 3;
_veh = _x; // (purely for clarity at this point, _x could be used just as well) } else {
if (_allCrewDead) then
_isEmplaced = _veh getVariable["GRG_vehType","none"] isEqualTo "emplaced";
_ownerIsPlayer = owner _veh > 2 && !(owner _veh in blck_connectedHCs);
_allCrewDead = {alive _x} count (crew _veh) == 0;
_evaluate = 0;
_deleteat = _veh getVariable ["blck_deleteAt",0];
if (_allCrewDead && _isEmplaced && _deleteat == 0) then {_evaluate = 1};
if (_allCrewDead && !(_isEmplaced) && _deleteat == 0) then {_evaluate = 2};
if (_deleteat > 0 && diag_tickTime > _deleteat) then {_evaluate = 3};
if (_ownerIsPlayer) 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
{ {
case 0:{[_veh] call blck_fnc_reloadVehicleAmmo;}; _evaluate = if (_isEmplaced) then {1} else {2};
case 1:{ };
if (blck_killEmptyStaticWeapons) then };
{
#ifdef blck_debugMode //diag_log format["_fnc_vehicleMonitor: vehicle = %1 | owner = %2 | crew = %3 | _evaluate = %4",_veh, owner _veh, {alive _x} count (crew _veh), _evaluate];
if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of destroyed where vehicle = %1",_veh];}; switch (_evaluate) do
#endif {
_veh setDamage 1; case 0:{[_veh] call blck_fnc_reloadVehicleAmmo;};
_veh setVariable["blck_DeleteAt",diag_tickTime + 60]; case 1:{
}else { if (blck_killEmptyStaticWeapons) then
[_veh] call blck_fnc_releaseVehicleToPlayers; {
}; if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of destroyed where vehicle = %1",_veh];};
}; _veh setDamage 1;
case 2:{ _veh setVariable["blck_deleteAtTime",diag_tickTime + 60];
if (blck_killEmptyAIVehicles) then }else {
{ //diag_log format["_fnc_vehicleMonitor: calling _fnc_releaseVehicleToPlayers for vehicle %1",_veh];
_veh setDamage 0.7; [_veh] call blck_fnc_releaseVehicleToPlayers;
_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];
}; };
}; };
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; }forEach _vehList;

View File

@ -150,10 +150,10 @@ private _functions = [
// HC support functions // HC support functions
["blck_fnc_HC_XferGroup","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferGroup.sqf"], ["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_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_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_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_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_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"] ["blck_fnc_HC_countGroupsAssigned","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_countGroupsAssigned.sqf"]
]; ];
@ -163,11 +163,6 @@ private _functions = [
missionnamespace setvariable [_name,compileFinal preprocessFileLineNumbers _path]; missionnamespace setvariable [_name,compileFinal preprocessFileLineNumbers _path];
} foreach _functions; } foreach _functions;
#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
onPlayerDisconnected {[_name,_owner] call blck_fnc_onPlayerDisconnected;}; onPlayerDisconnected {[_name,_owner] call blck_fnc_onPlayerDisconnected;};

View File

@ -44,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_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_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_simulationManagementOff; blck_simulationManager = blck_useBlckeaglsSimulationManager;
diag_log format["[blckeagls] blck_configs: blck_simulationManager = %1",blck_simulationManager]; diag_log format["[blckeagls] blck_configs: blck_simulationManager = %1",blck_simulationManager];
/* /*
blck_simulationManagementOff - no simulation management occurs blck_simulationManagementOff - no simulation management occurs
@ -107,7 +107,7 @@
blck_SmokeAtMissions = [false,"random"]; // set to [false,"anything here"] to disable this function altogether. 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_useSignalEnd = true; // When true a smoke grenade/chemlight will appear at the loot crate for 2 min after mission completion.
blck_missionEndCondition = "allKilledOrPlayerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear" blck_missionEndCondition = "allKilledOrPlayerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear"
blck_killPercentage = 0.999999999; // The mission will complete if this fraction of the total AI spawned has been killed. blck_killPercentage = 0.999999; // The mission will complete if this fraction of the total AI spawned has been killed.
// This facilitates mission completion when one or two AI are spawned into objects. // This facilitates mission completion when one or two AI are spawned into objects.
blck_spawnCratesTiming = "atMissionSpawnGround"; // Choices: "atMissionSpawnGround","atMissionEndGround","atMissionEndAir". blck_spawnCratesTiming = "atMissionSpawnGround"; // Choices: "atMissionSpawnGround","atMissionEndGround","atMissionEndAir".
// Crates spawned in the air will be spawned at mission center or the position(s) defined in the mission file and dropped under a parachute. // 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.
@ -176,7 +176,7 @@
_blck_armed_hurons = ["B_Heli_Transport_03_F","B_Heli_Transport_03_black_F"]; _blck_armed_hurons = ["B_Heli_Transport_03_F","B_Heli_Transport_03_black_F"];
_blck_armed_attackHelis = ["B_Heli_Attack_01_F"]; _blck_armed_attackHelis = ["B_Heli_Attack_01_F"];
_blck_armed_heavyAttackHelis = ["O_Heli_Attack_02_F","O_Heli_Attack_02_black_F"]; _blck_armed_heavyAttackHelis = ["O_Heli_Attack_02_F","O_Heli_Attack_02_black_F"];
_blck_fighters = [ _blck_fighters = [
"O_Plane_CAS_02_F", // /ti-199 Neophron (CAS) "O_Plane_CAS_02_F", // /ti-199 Neophron (CAS)
"I_Plane_Fighter_03_AA_F", // A-143 Buzzard (AA) "I_Plane_Fighter_03_AA_F", // A-143 Buzzard (AA)
"I_Plane_Fighter_04_F", // A-149 Gryphon "I_Plane_Fighter_04_F", // A-149 Gryphon
@ -214,12 +214,8 @@
//////////////////// ////////////////////
// Maximum number of missions shown on the map at any one time. // Maximum number of missions shown on the map at any one time.
#ifdef GRGserver
blck_maxSpawnedMissions = 15;
#else
// Change this value to reduce the number of spawned missions at any one time. // Change this value to reduce the number of spawned missions at any one time.
blck_maxSpawnedMissions = 4; blck_maxSpawnedMissions = 4;
#endif
//Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups. //Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups.
blck_enableOrangeMissions = 1; blck_enableOrangeMissions = 1;
@ -228,12 +224,6 @@
blck_enableBlueMissions = 1; 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. blck_numberUnderwaterDynamicMissions = 3; // Values from -1 (no UMS) to N (N Underwater missions will be spawned; static UMS units and subs will be spawned.
#ifdef GRGserver
blck_enableHunterMissions = 1;
blck_enableScoutsMissions = 2;
blck_maxcrashsites = 4;
#endif
//////////////////// ////////////////////
// MISSION TIMERS // MISSION TIMERS
//////////////////// ////////////////////
@ -244,12 +234,6 @@
blck_TMin_Blue = 120; blck_TMin_Blue = 120;
blck_TMin_Red = 150; blck_TMin_Red = 150;
blck_TMin_UMS = 180; blck_TMin_UMS = 180;
#ifdef GRGserver
blck_TMin_Hunter = 120;
blck_TMin_Scouts = 115;
blck_TMin_Crashes = 115;
#endif
//Maximum Spawn time between missions in seconds //Maximum Spawn time between missions in seconds
blck_TMax_Orange = 360; blck_TMax_Orange = 360;
@ -257,11 +241,6 @@
blck_TMax_Blue = 200; blck_TMax_Blue = 200;
blck_TMax_Red = 250; blck_TMax_Red = 250;
blck_TMax_UMS = 400; blck_TMax_UMS = 400;
#ifdef GRGserver
blck_TMax_Hunter = 200;
blck_TMax_Scouts = 200;
blck_TMax_Crashes = 200;
#endif
/////////////////////////////// ///////////////////////////////
// AI VEHICLE PATROL PARAMETERS // AI VEHICLE PATROL PARAMETERS
@ -297,6 +276,8 @@
blck_SpawnEmplaced_Blue = 1; // Number of static weapons at Blue Missions blck_SpawnEmplaced_Blue = 1; // Number of static weapons at Blue Missions
blck_SpawnEmplaced_Red = 1; // Number of static weapons at Red Missions blck_SpawnEmplaced_Red = 1; // Number of static weapons at Red Missions
/**************************************************************** /****************************************************************
GENERAL AI SETTINGS GENERAL AI SETTINGS
@ -321,7 +302,7 @@
blck_maximumPatrolRadius = 35; blck_maximumPatrolRadius = 35;
//This defines how long after an AI dies that it's body disappears. //This defines how long after an AI dies that it's body disappears.
blck_bodyCleanUpTimer = 60*60; // time in seconds after which dead AI bodies are deleted 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 // 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]; // values are ordered as follows [blue, red, green, orange];
blck_AliveAICleanUpTimer = 60*20; // Time after mission completion at which any remaining live AI are deleted. blck_AliveAICleanUpTimer = 60*20; // Time after mission completion at which any remaining live AI are deleted.
@ -380,61 +361,7 @@
blck_maxMoneyRed = 15; blck_maxMoneyRed = 15;
blck_maxMoneyBlue = 10; blck_maxMoneyBlue = 10;
#ifdef GRGserver if (toLower(blck_modType) isEqualTo "epoch") then
blck_AIAlertDistance = [250,450,650,800]; // Radius within which AI will be notified of enemy activity. Depricated as a group-sed system is used now. The group is informed of the enemy location when a group member is hit or killed.
//blck_AIAlertDistance = [150,225,400,500];
// How precisely player locations will be revealed to AI after an AI kill
// values are ordered as follows [blue, red, green, orange];
blck_AIIntelligence = [0.3, 0.5, 0.7, 0.9];
blck_baseSkill = 0.7; // The overal skill of the AI - range 0.1 to 1.0.
/***************************************************************
MISSION TYPE SPECIFIC AI SETTINGS
**************************************************************/
//This defines the skill, minimum/Maximum number of AI and how many AI groups are spawned for each mission type
// Orange Missions
blck_MinAI_Orange = 20;
blck_MaxAI_Orange = 25;
blck_AIGrps_Orange = 5;
blck_SkillsOrange = [
["aimingAccuracy",[0.25,0.36]],["aimingShake",[0.45,0.55]],["aimingSpeed",[0.65,0.75]],["endurance",1.00],["spotDistance",1.0],["spotTime",0.7],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]
];
// Green Missions
blck_MinAI_Green = 16;
blck_MaxAI_Green = 21;
blck_AIGrps_Green = 4;
blck_SkillsGreen = [
["aimingAccuracy",[0.2,0.3]],["aimingShake",[0.4,0.5]],["aimingSpeed",[0.55,0.7]],["endurance",0.9],["spotDistance",0.9],["spotTime",0.65],["courage",0.9],["reloadSpeed",0.9],["commanding",0.9],["general",0.75]
];
// Red Missions
blck_MinAI_Red = 12;
blck_MaxAI_Red = 15;
blck_AIGrps_Red = 3;
blck_SkillsRed = [
["aimingAccuracy",[0.2,0.25]],["aimingShake",[0.35,0.4]],["aimingSpeed",0.6],["endurance",0.80],["spotDistance",0.7],["spotTime",0.6],["courage",0.80],["reloadSpeed",0.70],["commanding",0.8],["general",0.70]
];
// Blue Missions
blck_MinAI_Blue = 8;
blck_MaxAI_Blue = 12;
blck_AIGrps_Blue = 2;
blck_SkillsBlue = [
["aimingAccuracy",[0.08,16]],["aimingShake",[0.25,0.35]],["aimingSpeed",0.5],["endurance",0.50],["spotDistance",0.6],["spotTime",0.6],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60]
];
// Add some money to AI; only works with Exile for now.
blck_maxMoneyOrange = 25;
blck_maxMoneyGreen = 20;
blck_maxMoneyRed = 15;
blck_maxMoneyBlue = 10;
#endif
if (toLower(blck_modType) isEqualTo "epoch") then
{ {
diag_log format["[blckeagls] Loading Mission System using Parameters for %1",blck_modType]; diag_log format["[blckeagls] Loading Mission System using Parameters for %1",blck_modType];
execVM "\q\addons\custom_server\Configs\blck_configs_epoch.sqf"; execVM "\q\addons\custom_server\Configs\blck_configs_epoch.sqf";

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. 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 = true;
blck_maximumItemPriceInAI_Loadouts = 100;
_blck_lightlyArmed_ARMA3 = [ _blck_lightlyArmed_ARMA3 = [
"B_G_Offroad_01_armed_F", "B_G_Offroad_01_armed_F",
"O_G_Offroad_01_armed_F", "O_G_Offroad_01_armed_F",

View File

@ -662,6 +662,25 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"Exile_Item_Moobar", "Exile_Item_Moobar",
"Exile_Item_InstantCoffee" "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_ConsumableItems = blck_Meats + blck_Drink + blck_Food;
blck_throwableExplosives = ["HandGrenade","MiniGrenade"]; blck_throwableExplosives = ["HandGrenade","MiniGrenade"];
blck_otherExplosives = ["1Rnd_HE_Grenade_shell","3Rnd_HE_Grenade_shell","DemoCharge_Remote_Mag","SatchelCharge_Remote_Mag"]; 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", 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"]; "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"]; 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 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 Note however that these configurations can be used in any way you like or replaced with mission-specific customized loot arrays

View File

@ -88,7 +88,7 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
//"O_MBT_02_arty_F", //"O_MBT_02_arty_F",
"I_MBT_03_cannon_F" "I_MBT_03_cannon_F"
]; ];
#ifdef useCUP
_blck_APC_CUP = [ _blck_APC_CUP = [
"CUP_B_Mastiff_GMG_GB_D", "CUP_B_Mastiff_GMG_GB_D",
"CUP_B_Mastiff_HMG_GB_D", "CUP_B_Mastiff_HMG_GB_D",
@ -146,7 +146,7 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
//"CUP_O_2S6_RU", //"CUP_O_2S6_RU",
//"CUP_O_BMP1_TKA"" //"CUP_O_BMP1_TKA""
]; ];
#endif
blck_AIPatrolVehicles = blck_AIPatrolVehicles =
[ [
//"Exile_Car_Offroad_Armed_Guerilla01", //"Exile_Car_Offroad_Armed_Guerilla01",
@ -187,9 +187,11 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"B_LSV_01_armed_F" "B_LSV_01_armed_F"
]; ];
#ifdef useCUP
blck_AIPatrolVehiclesRed = _blck_lightlyArmed_ARMA3 + _blck_APC_CUP; blck_AIPatrolVehiclesRed = _blck_lightlyArmed_ARMA3 + _blck_APC_CUP;
blck_AIPatrolVehiclesGreen = _blck_Tanks_ARMA3 + _blck_Tanks_CUP; blck_AIPatrolVehiclesGreen = _blck_Tanks_ARMA3 + _blck_Tanks_CUP;
blck_AIPatrolVehiclesOrange = _blck_Tanks_ARMA3 + _blck_Tanks_CUP; blck_AIPatrolVehiclesOrange = _blck_Tanks_ARMA3 + _blck_Tanks_CUP;
#endif
if (toLower(worldName) isEqualTo "namalsk") then if (toLower(worldName) isEqualTo "namalsk") then
{ {
@ -672,7 +674,18 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"Exile_Item_Moobar", "Exile_Item_Moobar",
"Exile_Item_InstantCoffee" "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 #ifdef useCUP
#endif #endif
@ -773,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_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] ["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_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_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], ["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],
@ -864,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_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] ["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_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_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] ["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]
@ -945,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] ["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,3],["Exile_Item_ExtensionCord",1,2],["Exile_Item_FuelCanisterEmpty",1,2], ["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] ["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]
], ],
@ -1019,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_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] ["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_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_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] ["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]

View File

@ -64,7 +64,7 @@
// When set to true,"dot", ext will be to the right of a black dot at the center the mission marker. // 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_labelMapMarkers = [true,"center"];
blck_preciseMapMarkers = false; // Map markers are/are not centered at the loot crate blck_preciseMapMarkers = false; // Map markers are/are not centered at the loot crate
blck_showCountAliveAI = false; blck_showCountAliveAI = true;
//Minimum distance between missions //Minimum distance between missions
blck_MinDistanceFromMission = 1500; blck_MinDistanceFromMission = 1500;
@ -84,7 +84,7 @@
blck_missionEndCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear" blck_missionEndCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear"
blck_killPercentage = 0.99999999999; // 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. // 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. // Crates spawned in the air will be spawned at mission center or the position(s) defined in the mission file and dropped under a parachute.
// This sets the default value but can be overridden by defining _spawnCrateTiming in the file defining a particular mission. // This sets the default value but can be overridden by defining _spawnCrateTiming in the file defining a particular mission.
blck_loadCratesTiming = "atMissionSpawn"; // valid choices are "atMissionCompletion" and "atMissionSpawn"; blck_loadCratesTiming = "atMissionSpawn"; // valid choices are "atMissionCompletion" and "atMissionSpawn";
@ -204,7 +204,7 @@
// Maximum number of missions shown on the map at any one time. // 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. // Change this value to reduce the number of spawned missions at any one time.
blck_maxSpawnedMissions = 4; 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. //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_enableOrangeMissions = 1;
blck_enableGreenMissions = 1; blck_enableGreenMissions = 1;
@ -222,7 +222,7 @@
blck_TMin_Blue = 120; blck_TMin_Blue = 120;
blck_TMin_Red = 150; blck_TMin_Red = 150;
blck_TMin_UMS = 180; blck_TMin_UMS = 180;
//Maximum Spawn time between missions in seconds //Maximum Spawn time between missions in seconds
blck_TMax_Orange = 360; blck_TMax_Orange = 360;
blck_TMax_Green = 300; blck_TMax_Green = 300;
@ -346,21 +346,18 @@
blck_maxMoneyRed = 30; blck_maxMoneyRed = 30;
blck_maxMoneyBlue = 20; blck_maxMoneyBlue = 20;
if (toLower(blck_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",blck_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"; execVM "\q\addons\custom_server\Configs\blck_configs_epoch_mil.sqf";
waitUntil {(isNil "blck_configsEpochLoaded") isEqualTo false;};
waitUntil{blck_configsEpochLoaded};
blck_configsEpochLoaded = nil;
}; };
if (toLower(blck_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",blck_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"; execVM "\q\addons\custom_server\Configs\blck_configs_exile_mil.sqf";
}; };
waitUntil{!isNil "blck_useConfigsGeneratedLoadouts"}: waitUntil{!isNil "blck_useConfigsGeneratedLoadouts"};
waitUntil {!isNil "blck_maximumItemPriceInAI_Loadouts"}: waitUntil {!isNil "blck_maximumItemPriceInAI_Loadouts"};
if (blck_useConfigsGeneratedLoadouts) then if (blck_useConfigsGeneratedLoadouts) then
{ {
diag_log format["[blckeagls] Dynamic Configs Enabled"]; diag_log format["[blckeagls] Dynamic Configs Enabled"];

View File

@ -148,14 +148,14 @@ if (blck_debugON || (blck_debugLevel > 0)) then // These variables are found in
blck_maxSpawnedMissions = 15; blck_maxSpawnedMissions = 15;
blck_mainThreadUpdateInterval = 10; blck_mainThreadUpdateInterval = 10;
blck_enableOrangeMissions = 1; blck_enableOrangeMissions = -1;
blck_enableGreenMissions = 1; blck_enableGreenMissions = -1;
blck_enableRedMissions = 1; blck_enableRedMissions = 1;
blck_enableBlueMissions = 1; blck_enableBlueMissions = -1;
blck_numberUnderwaterDynamicMissions = 3; blck_numberUnderwaterDynamicMissions = -3;
blck_enableHunterMissions = 1; blck_enableHunterMissions = -1;
blck_enableScoutsMissions = 1; blck_enableScoutsMissions = -1;
blck_maxCrashSites = 3; blck_maxCrashSites = -3;
//blck_killEmptyStaticWeapons = false; //blck_killEmptyStaticWeapons = false;
//blck_killEmptyAIVehicles = true; //blck_killEmptyAIVehicles = true;
@ -163,7 +163,7 @@ if (blck_debugON || (blck_debugLevel > 0)) then // These variables are found in
blck_AliveAICleanUpTimer = 20; // Time after mission completion at which any remaining live AI are deleted. blck_AliveAICleanUpTimer = 20; // Time after mission completion at which any remaining live AI are deleted.
blck_bodyCleanUpTimer = 20; blck_bodyCleanUpTimer = 20;
blck_vehicleDeleteTimer = 20; blck_vehicleDeleteTimer = 20;
blck_MissionTimeout = 30; //blck_MissionTimeout = 30;
//blck_noPatrolHelisOrange = 1; //blck_noPatrolHelisOrange = 1;
//blck_chanceHeliPatrolOrange = 1; //blck_chanceHeliPatrolOrange = 1;
@ -183,7 +183,7 @@ if (blck_debugON || (blck_debugLevel > 0)) then // These variables are found in
//blck_SpawnVeh_Orange = 1; // Number of vehicles at Orange Missions //blck_SpawnVeh_Orange = 1; // Number of vehicles at Orange Missions
//blck_SpawnVeh_Green = 1; // Number of vehicles at Green Missions //blck_SpawnVeh_Green = 1; // Number of vehicles at Green Missions
//blck_SpawnVeh_Blue = 1; // Number of vehicles at Blue Missions //blck_SpawnVeh_Blue = 1; // Number of vehicles at Blue Missions
//blck_SpawnVeh_Red = 1; blck_SpawnVeh_Red = 1;
blck_TMin_Blue = 7; blck_TMin_Blue = 7;
blck_TMin_Red = 10; blck_TMin_Red = 10;

View File

@ -11,19 +11,19 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/ http://creativecommons.org/licenses/by-nc-sa/4.0/
*/ */
#define blck_buildNumber 164
#define useAPEX #define useAPEX
//#define blck_milServer //#define blck_milServer
//#define blck_useCUP //#define blck_useCUP
//#define blck_useRHS //#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 // Do not touch anything below this line
/////////////////////////// ///////////////////////////
//#define blck_debugMode //#define blck_debugMode
#define blck_triggerLoopCompleteTime 40*60
#define blck_triggerLoopCompleteTime 40*60
#define onFoot 1 #define onFoot 1
#define inVehicle 2 #define inVehicle 2
@ -56,3 +56,6 @@
#define blck_turnBackRadiusVehicles 1000 #define blck_turnBackRadiusVehicles 1000
#define blck_turnBackRadiusHelis 1000 #define blck_turnBackRadiusHelis 1000
#define blck_turnBackRadiusJets 1500 #define blck_turnBackRadiusJets 1500
#define blck_buildNumber 167
#define blck_versionNumber 6.88

View File

@ -9,6 +9,7 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/ http://creativecommons.org/licenses/by-nc-sa/4.0/
*/ */
#include "\q\addons\custom_server\Configs\blck_defines.hpp"; #include "\q\addons\custom_server\Configs\blck_defines.hpp";
waitUntil{!isNil "blck_cratetypes"};
blck_UMS_uniforms = blck_UMS_uniforms =
[ [
"U_I_Wetsuit", "U_I_Wetsuit",
@ -58,7 +59,6 @@ if ((tolower blck_modType) isEqualTo "epoch") then
"B_SDV_01_EPOCH" "B_SDV_01_EPOCH"
]; ];
blck_UMS_crates = blck_crateTypes; blck_UMS_crates = blck_crateTypes;
}; };
blck_UMS_unarmedSurfaceVessels = 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_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"; 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,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- By Ghostrider-GRG-
-------------------------- --------------------------
@ -15,36 +8,17 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/ 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"; #include "\q\addons\custom_server\Configs\blck_defines.hpp";
if !(isNil "blck_Initialized") exitWith{}; if !(isNil "blck_Initialized") exitWith{};
private["_blck_loadingStartTime"]; private _blck_loadingStartTime = diag_tickTime;
_blck_loadingStartTime = diag_tickTime;
#include "\q\addons\custom_server\init\build.sqf"; #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";
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf";
// compile functions
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf"; call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf";
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";
// 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

@ -28,7 +28,7 @@ if ((toLower blck_modType) isEqualTo "exile") then
private _blck_loadingStartTime = diag_tickTime; private _blck_loadingStartTime = diag_tickTime;
#include "\q\addons\custom_server\init\build.sqf"; #include "\q\addons\custom_server\init\build.sqf";
diag_log format["[blckeagls] Loading Server Mission System Version",blck_buildNumber]; diag_log format["[blckeagls] Loading Server Mission System Version"];
// compile functions // compile functions
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf"; call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf";
@ -80,7 +80,7 @@ switch (blck_simulationManager) do
case 0: {diag_log "[blckeagls] simulation management disabled"}; 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 ---- >>>>"]; 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

View File

@ -2,6 +2,6 @@
private ["_version","_versionDate"]; private ["_version","_versionDate"];
blck_version = format["6.88 Build %1",blck_buildNumber]; blck_version = format["6.88 Build %1",blck_buildNumber];
_blck_version = blck_version; _blck_version = blck_version;
_blck_versionDate = "11-21-18 4:00 PM"; _blck_versionDate = "12-1-18 8:00 AM";
blck_pvs_version = _blck_version; blck_pvs_version = _blck_version;
publicVariable blck_pvs_version; publicVariable blck_pvs_version;

View File

@ -5,9 +5,11 @@ Read the faq and config files for specific information.
Some general tips are: Some general tips are:
First, create a backup of all files. First, create a backup of all files.
Second, if your rpt log shows errors after a change, revert to the defaults and try again. 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. 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. There are two different config files, one for exile and a second for epoch.

26
FAQ.txt
View File

@ -2,13 +2,14 @@ This addon includes several modules which will be discussed in the following ord
1. The core, dynamic mission system 1. The core, dynamic mission system
2. A static mission system 2. A static mission system
3. A custom time acceleration module 3. A custom time acceleration module
4. A module to execute scripts for custom bases (map addons) and so forths. 4. A module to execute scripts for custom bases (map addons) and so forth.
5. A module to spawn loot crates in specific locations at server startup. 5. A module to spawn loot crates in specific locations at server startup.
6. Tools to export mission layouts designed in the editor for use with mission templates. This allows you to quickly add content to your server. Tools are available for both static and dynamic missions.
1. Core Mission System. 1. Core Mission System.
The core mission system is configured to run 4 different classes of mission (Blue, Red, Green and Orange) simultaneously. The core mission system is configured to run 5 different classes of mission (Blue, Red, Green and Orange, and underwater/surface) simultaneously.
Reducing value for ...\custom_serer\configs\blck_configs.sqf\blck_maxSpawnedMissions will reduce the number of missions running on the server. Reducing value for ...\custom_serer\configs\blck_configs.sqf\blck_maxSpawnedMissions will reduce the number of missions running on the server at any one time.
General settings include: General settings include:
the ability set whether and how messages to players regarding missions spawned or completed are displayed, the ability set whether and how messages to players regarding missions spawned or completed are displayed,
@ -29,6 +30,7 @@ General settings include:
Loot can also be configured for each mission class or mission. You can modify the number of weapons, magazines, items, construction materials, etc. Loot can also be configured for each mission class or mission. You can modify the number of weapons, magazines, items, construction materials, etc.
You can also adjust the choices for each of these types of items. You can also adjust the choices for each of these types of items.
The equipment selected for each class of mission can also be specified(uniforms, vests, headgear, backpcks, weapons, pistols). The equipment selected for each class of mission can also be specified(uniforms, vests, headgear, backpcks, weapons, pistols).
Alternatively, AI loadouts can be determined by the mission system based on what is available at server startup. When loadouts are dynamically configured the items spawned in CfgLoot are used. Note that an upper limit on price is available.
Whether kills by guns mounted on vehicles are to be penalized (gunes that are prohobited are listed in blck_config.sys). Whether kills by guns mounted on vehicles are to be penalized (gunes that are prohobited are listed in blck_config.sys).
Whether to spawn a smoking wreck near the mission to be used as a visual landmark. Whether to spawn a smoking wreck near the mission to be used as a visual landmark.
Whether to spawn mines (recommended only when no vehcle patrols are spawned). Whether to spawn mines (recommended only when no vehcle patrols are spawned).
@ -39,17 +41,17 @@ Where possible, I have tried group weapons based on desirability from low rank (
The missions themselves are spawned from templates which can be used to define most aspects of the missions including: The missions themselves are spawned from templates which can be used to define most aspects of the missions including:
the messages sent to players; the messages sent to players;
text used to label the mark Text used to label the mark
type of marker used to label the map Type of marker used to label the map
number of AI groups and number of AI and, if desired their spawn locations. Number of AI groups and number of AI and, if desired their spawn locations.
(optional) loot chest positions and loot to be loaded (optional) loot chest positions and loot to be loaded
type and location of any objects, buildings, or other entities that give the mission character Type and location of any objects, buildings, or other entities that give the mission character
number and (optional) locations of static weapons Number and (optional) locations of static weapons
number, type, and spawn location(s) of vehicle patrols Number, type, and spawn location(s) of vehicle patrols
To create and run new missions simply: To create and run new missions simply:
layout an AI base in the Arma 3 editor, layout an AI base in the Arma 3 editor,
export the base as an .sqf using Maca's EDEN PLuging uing relative positions. export the base as an .sqf using the tools provided.
Define the above parameters (nu. AI groups, No AI, etc) Define the above parameters (nu. AI groups, No AI, etc)
add this information to the mission template and modify any messages accordingly add this information to the mission template and modify any messages accordingly
Add the name of the file (e.g., "newAImission" to the list of missions to be spawned of that class in ...\custom)server\missions\GMS_missionLists.sqf Add the name of the file (e.g., "newAImission" to the list of missions to be spawned of that class in ...\custom)server\missions\GMS_missionLists.sqf
@ -66,8 +68,8 @@ You can shorten the time after which bodies or scenery are deleted if you believ
Additional Modules Available: Additional Modules Available:
Suport is provided for groups of AI, vehicles, aircraft, static weapons, subs, surface vessels. Suport is provided for groups of AI, vehicles, aircraft, static weapons, subs, surface vessels.
The positions of these is defined by templates (see custom_server\Missions\Static\Missions folder for examples) or by calls to functions to add these elements. The positions of these are defined by templates (see custom_server\Missions\Static\Missions folder for examples) or by calls to functions to add these elements.
The recommended way to place static units of various types is to add their spawn information to a new template then add the name/mod to custom_server\Missions\Static\GMS_StaticMissions_Lists.sqf. The recommended way to place static units of various types is to lay out their positions in the editor then export the data using the tools provided to create a new mission with these definitions.
Alternatively you can set up calls to the functions that initialize spawns for these units in blck_custom_configs.sqf or an include that is incorporated into it. Alternatively you can set up calls to the functions that initialize spawns for these units in blck_custom_configs.sqf or an include that is incorporated into it.
See the directions for creating static missions for more information. See the directions for creating static missions for more information.

View File

@ -63,17 +63,12 @@ You can use blck_custom_config.sqf to code any overrides you like. An example fo
//////////////////////// ////////////////////////
// What is this blck_debugON variable about? // What is this blck_debugON variable about?
It turns on accelerated mission spawning by default and activates additional logging. I use it to speed things up for debugging. Best to leave this one alone.
You can turn it on or of in custom_server\Compiles\blck_variables.sqf.
Be careful about what you change in this file.
/////////////////////////////////////////// ///////////////////////////////////////////
// Further customization // Further customization
Just about anything about the missions can be modified. The mission template (see Missions\Orange\supply_camp.sqf and Missions\Blue\default.sqf for examples) allows you to define mission specific parameters. Just about anything about the missions can be modified.
To create a new mission, make a copy of a mission template (e.g., custom_server\Blue\default.sqf). Edit the parameters to your liking and rename to file appropriately.
To add a new mission, create a new mission template, then add the file name (e.g., "newmissions.sqf") to the mission list found in custom_server\Missions.
That mission will now be spawned whenever it is selected from teh list.
Please see the FAQ for more information Please see the FAQ for more information

View File

@ -2,4 +2,4 @@
Known issues Known issues
1. AI Vehicles MAY not be unlocked when an HC is connected.

View File

@ -1,3 +1,6 @@
I am way behind on these.
If you find something that is not listed here please post it on the github.
setVariable.txt setVariable.txt
!="blck_AIState" !="blck_AIState"

View File

@ -4,12 +4,14 @@ Loosely based on the AI mission system by blckeagls ver 2.0.2
Contributions by Narines: bug fixes, testing, infinite ammo fix. Contributions by Narines: bug fixes, testing, infinite ammo fix.
Ideas or code from that by He-Man, Vampire and KiloSwiss have been used for certain functions. Ideas or code from that by He-Man, Vampire and KiloSwiss have been used for certain functions.
Many thanks for new Coding and ideas from Grahame. Many thanks for new Coding and ideas from Grahame.
A huge thank you to Ignaz-HeMan for many changes to resolve bugs and improve coding efficiency.
Significant Changes: Significant Changes:
===================== =====================
6.88 6.88 Build 167
This update consists primarily of a set of bug fixes and code tweaks. This update consists primarily of a set of bug fixes and code tweaks.
Many thanks to HeMan for his time in effort spent going through the scripts to troublehsoot and improve them. Many thanks to HeMan for his time in effort spent going through the scripts to troublehsoot and improve them.
The most important bug fix has been resolution of issues with use of headless clients.
6.86 Build 156 6.86 Build 156
Added support for spawning infantry and statics inside buildings for forming a garrison using either of two methods. Added support for spawning infantry and statics inside buildings for forming a garrison using either of two methods.