Version 6.82 Build 133

This commit is contained in:
Ghostrider-GRG- 2018-06-02 07:29:00 -04:00
parent 8fcac0f0cd
commit 597f3056bf
24 changed files with 1647 additions and 460 deletions

View File

@ -0,0 +1,27 @@
/*
By Ghostrider [GRG]
Copyright 2016
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params ["_AIList",["_returnMode",0]];
private["_alive","_total","_return"];
_total = count _AIList;
_alive = {alive _x} count _AIList;
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

@ -16,13 +16,13 @@
diag_log "running GRGserver version of _fnc_mainThread"; diag_log "running GRGserver version of _fnc_mainThread";
#endif #endif
private["_modType","_timer1sec","_timer5sec","_timer20sec","_timer5min","_timer5min"]; private["_timer1sec","_timer5sec","_timer20sec","_timer5min","_timer5min"];
_timer1sec = diag_tickTime; _timer1sec = diag_tickTime;
_timer5sec = diag_tickTime; _timer5sec = diag_tickTime;
_timer20sec = diag_tickTime; _timer20sec = diag_tickTime;
_timer1min = diag_tickTime; _timer1min = diag_tickTime;
_timer5min = diag_tickTime; _timer5min = diag_tickTime;
_modType = [] call blck_fnc_getModType;
while {true} do while {true} do
{ {
uiSleep 1; uiSleep 1;

View File

@ -11,11 +11,10 @@
*/ */
params["_pos"]; params["_pos"];
private["_nearestGroup","_modType"]; private["_nearestGroup"];
_modType = call blck_fnc_getModType; if (blck_modType == "Epoch") then {_units = (_pos) nearEntities ["I_Soldier_EPOCH", 100]};
if (_modType == "Epoch") then {_units = (_pos) nearEntities ["I_Soldier_EPOCH", 100]}; if (blck_modType == "Exile") then {_units = (_pos) nearEntities ["i_g_soldier_unarmed_f", 100]};
if (_modType == "Exile") then {_units = (_pos) nearEntities ["i_g_soldier_unarmed_f", 100]};
_nearestGroup = group (_units select 0); _nearestGroup = group (_units select 0);
{ {

View File

@ -156,10 +156,9 @@ _fn_monitorGroupWaypoints = {
}; };
_fn_simulationMonitor = { _fn_simulationMonitor = {
private["_playerType","_modType","_players"]; private["_playerType","_players"];
_modType = call blck_fnc_getModType;
//diag_log format["_fn_simulationMonitor"" _modType = %1",_modType]; if (blck_modType isEqualTo "Exile") then
if (_modType isEqualTo "Exile") then
{ {
_playerType = ["Exile_Unit_Player"]; _playerType = ["Exile_Unit_Player"];
}else{ }else{

View File

@ -0,0 +1,43 @@
/*
Dynamic Loot Crate Spaw System for Exile Mod for Arma 3
by
Ghostrider [GRG]
for ghostridergaming
4-6-16
Spawn a crate on land or in the air
--------------------------
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","_light","_beacon","_start","_maxHeight","_bbr","_p1","_p2"];
params["_crate"];
//_crate = _this select 0;
_start = diag_tickTime;
// If night, attach a chemlight
_signal = "SmokeShellOrange";
if (sunOrMoon < 0.2) then
{
_signal = "FlareYellow_F";
};
_bbr = boundingBoxReal _crate;
_p1 = _bbr select 0;
_p2 = _bbr select 1;
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
while {(diag_tickTime - _start) < 3*60} do
{
_beacon = _signal createVehicle getPosATL _crate;
_beacon setPos (getPos _crate);
_beacon attachTo [_crate,[0,0,(_maxHeight + 0.05)]];
uiSleep 30;
deleteVehicle _beacon;
};
true

View File

@ -0,0 +1,43 @@
/*
Dynamic Loot Crate Spaw System for Exile Mod for Arma 3
by
Ghostrider [GRG]
for ghostridergaming
4-6-16
Spawn a crate on land or in the air
--------------------------
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","_light","_beacon","_start","_maxHeight","_bbr","_p1","_p2"];
params["_crate"];
//_crate = _this select 0;
_start = diag_tickTime;
// If night, attach a chemlight
_signal = "SmokeShellOrange";
if (sunOrMoon < 0.2) then
{
_signal = "FlareYellow_F";
};
_bbr = boundingBoxReal _crate;
_p1 = _bbr select 0;
_p2 = _bbr select 1;
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
while {(diag_tickTime - _start) < 3*60} do
{
_beacon = _signal createVehicle getPosATL _crate;
_beacon setPos (getPos _crate);
_beacon attachTo [_crate,[0,0,(_maxHeight + 0.05)]];
uiSleep 30;
deleteVehicle _beacon;
};
true

View File

@ -16,12 +16,12 @@ private["_cleanupAliveAITimer","_cleanupCompositionTimer","_isScubaMission"];
_fn_missionCleanup = { _fn_missionCleanup = {
params["_mines","_objects","_blck_AllMissionAI","_mission","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]]; params["_mines","_objects","_blck_AllMissionAI","_mission","_cleanupAliveAITimer","_cleanupCompositionTimer",["_isScubaMission",false]];
diag_log format["_fn_missionCleanup: blck_missionsRunning Started at %1", blck_missionsRunning]; //diag_log format["_fn_missionCleanup: blck_missionsRunning Started at %1", blck_missionsRunning];
[_mines] call blck_fnc_clearMines; [_mines] call blck_fnc_clearMines;
[_objects, _cleanupCompositionTimer] call blck_fnc_addObjToQue; [_objects, _cleanupCompositionTimer] call blck_fnc_addObjToQue;
[_blck_AllMissionAI, (_cleanupAliveAITimer)] call blck_fnc_addLiveAItoQue; [_blck_AllMissionAI, (_cleanupAliveAITimer)] call blck_fnc_addLiveAItoQue;
blck_missionsRunning = blck_missionsRunning - 1; blck_missionsRunning = blck_missionsRunning - 1;
diag_log format["_fn_missionCleanup: blck_missionsRunning reset to %1", blck_missionsRunning]; //diag_log format["_fn_missionCleanup: blck_missionsRunning reset to %1", blck_missionsRunning];
blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords]; blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords];
if !(_isScubaMission) then if !(_isScubaMission) then
{ {
@ -82,7 +82,7 @@ _fn_missionCleanup = {
}; };
if (_endCondition == 0) then // Normal Mission End State if (_endCondition == 0) then // Normal Mission End State
{ {
diag_log format["_fnc_endMission: mission end condition == 0 | setting all timers to 0"]; //diag_log format["_fnc_endMission: mission end condition == 0 | setting all timers to 0"];
private["_cleanupAliveAITimer","_cleanupCompositionTimer"]; private["_cleanupAliveAITimer","_cleanupCompositionTimer"];
if (blck_useSignalEnd) then if (blck_useSignalEnd) then
{ {

View File

@ -462,7 +462,7 @@ switch (_endCondition) do
case "allKilledOrPlayerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = true;}; case "allKilledOrPlayerNear": {_secureAsset = false; _endIfPlayerNear = true;_endIfAIKilled = true;};
case "assetSecured": {_secureAsset = true; _endIfPlayerNear = false; _endIfAIKilled = false;}; case "assetSecured": {_secureAsset = true; _endIfPlayerNear = false; _endIfAIKilled = false;};
}; };
//diag_log format["_fnc_missionSpawner: _secureAsset = %1",_secureAsset];
if (blck_showCountAliveAI) then if (blck_showCountAliveAI) then
{ {
if !(_marker isEqualTo "") then if !(_marker isEqualTo "") then
@ -475,7 +475,6 @@ if (blck_showCountAliveAI) then
_crateStolen = false; _crateStolen = false;
_locations = [_coords]; _locations = [_coords];
private _spawnPara = if (random(1) < _chancePara) then {true} else {false}; private _spawnPara = if (random(1) < _chancePara) then {true} else {false};
//diag_log format["_fnc_missionSpawner (477): _spawnPara = %1 | _chancePara = %2",_spawnPara,_chancePara];
{ {
_locations pushback (getPos _x); _locations pushback (getPos _x);
_x setVariable["crateSpawnPos", (getPos _x)]; _x setVariable["crateSpawnPos", (getPos _x)];
@ -519,7 +518,19 @@ while {_missionComplete isEqualTo -1} do
_missionComplete = 1 _missionComplete = 1
} else { } else {
//if (_assetSpawned getVariable["blck_AIState",0] > 0 && (({alive _x} count _blck_AllMissionAI) isEqualTo 1)) then {_missionComplete = 1}; //if (_assetSpawned getVariable["blck_AIState",0] > 0 && (({alive _x} count _blck_AllMissionAI) isEqualTo 1)) then {_missionComplete = 1};
if ( ([_blck_AllMissionAI] call blck_fnc_countAliveAI < 0.15) && (_assetSpawned getVariable["blck_AIState",0] > 0) ) then {_missionComplete = 1}; _result = [_blck_AllMissionAI, 1] call blck_fnc_countAliveAI;
// _result is an array of [no alive, total spawned];
//private _noneAlive = if (_result select 0 isEqualTo 0) then {true} else {false};
//private _aiCountBelowThreshold = if ((_result select 0)/(_result select 1) < _thresholdPercentageKilled) then {true} else {false};
//diag_log format["_fnc_missionSpawner: _noneAlive = %1 | _result = %2 | PercentageKilled = %3",_noneAlive,_result,(_result select 0)/(_result select 1)];
if (((_result select 0)/(_result select 1)) < 0.18) then
{
if (_assetSpawned getVariable["blck_unguarded",0] isEqualTo 0) then {_assetSpawned setVariable["blck_unguarded",1,true]};
if ((_assetSpawned getVariable["blck_AIState",0] > 0)) then {
_missionComplete = 1:
_assetSpawned allowdamage false;
};
};
}; };
}; };
if (_spawnPara) then if (_spawnPara) then
@ -612,18 +623,18 @@ if (blck_showCountAliveAI) then
}forEach blck_missionMarkers; }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]]; //diag_log format["_fnc_missionSpawner (557) Build 123: _secureAsset = %1 | {alive _assetSpawned} = %2 | assetType = %3",_secureAsset,alive _assetSpawned, _assetSpawned getVariable["assetType",-1]];
if (_assetSpawned getVariable["assetType",0] isEqualTo 1) then if (_assetSpawned getVariable["assetType",0] isEqualTo 1) then
{ {
diag_log "Processing Mission End for Hostage Rescue"; //diag_log "Processing Mission End for Hostage Rescue";
_assetSpawned setCaptive false; _assetSpawned setCaptive false;
_assetSpawned setVariable["GMSAnimations",[""],true]; _assetSpawned setVariable["GMSAnimations",[""],true];
[_assetSpawned,""] remoteExec["switchMove",-2];; [_assetSpawned,""] remoteExec["switchMove",-2];;
uiSleep 0.1; uiSleep 0.1;
_assetSpawned enableAI "ALL"; _assetSpawned enableAI "ALL";
private _newPos = (getPos _assetSpawned) getPos [1000, random(360)]; 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]; //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) setCurrentWaypoint [group _assetSpawned, 0];
[group _assetSpawned,0] setWaypointPosition [_newPos,0]; [group _assetSpawned,0] setWaypointPosition [_newPos,0];
[group _assetSpawned,0] setWaypointType "MOVE"; [group _assetSpawned,0] setWaypointType "MOVE";
@ -631,19 +642,19 @@ if (_assetSpawned getVariable["assetType",0] isEqualTo 1) then
if (_assetSpawned getVariable["assetType",0] isEqualTo 2) 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",""]]; //diag_log format["Processing Mission End for Arrest of Leader %1 with endAnimation %2",_assetSpawned,_assetSpawned getVariable["endAnimation",""]];
[_assetSpawned,""] remoteExec["switchMove",-2]; [_assetSpawned,""] remoteExec["switchMove",-2];
_assetSpawned setVariable["GMSAnimations",_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]],true]; _assetSpawned setVariable["GMSAnimations",_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]],true];
[_assetSpawned,selectRandom(_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]])] remoteExec["switchMove",-2]; [_assetSpawned,selectRandom(_assetSpawned getVariable["endAnimation",["AidlPercMstpSnonWnonDnon_AI"]])] remoteExec["switchMove",-2];
}; };
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]]; //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]];
_result = [_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_markerClass, 0] call blck_fnc_endMission; _result = [_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_markerClass, 0] call blck_fnc_endMission;
#ifdef blck_debugMode #ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["[blckeagls] missionSpawner:: (507)end of mission: blck_fnc_endMission has returned control to _fnc_missionSpawner"]}; if (blck_debugLevel > 2) then {diag_log format["[blckeagls] missionSpawner:: (507)end of mission: blck_fnc_endMission has returned control to _fnc_missionSpawner"]};
#endif #endif
diag_log format["_fnc_missionSpawner (643) Mission Completed | _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; //diag_log format["_fnc_missionSpawner (643) Mission Completed | _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName];
blck_missionsRun = blck_missionsRun + 1; blck_missionsRun = blck_missionsRun + 1;
diag_log format["_fnc_missionSpawner (644): Total Dyanamic Land and UMS Run = %1", blck_missionsRun]; diag_log format["_fnc_missionSpawner (644): Total Dyanamic Land and UMS Run = %1", blck_missionsRun];

View File

@ -20,5 +20,5 @@ _crate setVariable["chute",_chute];
_chute setPos [getPos _chute select 0, getPos _chute select 1, _dropHeight]; _chute setPos [getPos _chute select 0, getPos _chute select 1, _dropHeight];
_crate setPos (getPos _chute); _crate setPos (getPos _chute);
_crate attachTo [_chute, [0,0,0]]; _crate attachTo [_chute, [0,0,0]];
if (_crateVisualMarker) then {[_crate] spawn fn_DLS_visualMarker;}; if (_crateVisualMarker) then {[_crate] spawn blck_fnc_crateMarker};

View File

@ -72,7 +72,7 @@ if (count _readyToSpawnQue > 0) then
//diag_log format["_fnc_spawnPendingMissions: _missionDifficulty %1",_missionDifficulty]; //diag_log format["_fnc_spawnPendingMissions: _missionDifficulty %1",_missionDifficulty];
//diag_log format["_fnc_spawnPendingMissions: _compiledMission %1",_compiledMission]; //diag_log format["_fnc_spawnPendingMissions: _compiledMission %1",_compiledMission];
[_coords,_missionMarker,_missionDifficulty] spawn _compiledMission; [_coords,_missionMarker,_missionDifficulty] spawn _compiledMission;
diag_log format["_fnc_spawnPendingMissions: blck_missionsRunning = %1", blck_missionsRunning]; //diag_log format["_fnc_spawnPendingMissions: blck_missionsRunning = %1", blck_missionsRunning];
}; };
true true

View File

@ -1,200 +0,0 @@
/*
blck_fnc_spawnUnit
Original Code by blckeagls
Modified by Ghostrider
--------------------------
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 ["_i","_weap","_skin","_unit","_skillLevel","_aiSkills","_launcherRound","_index","_ammoChoices","_modType","_optics","_pointers","_muzzles","_underbarrel","_legalOptics"];
params["_pos","_aiGroup",["_skillLevel","red"],["_uniforms", blck_SkinList],["_headGear",blck_headgear],["_vests",blck_vests],["_backpacks",blck_backpacks],["_Launcher","none"],["_weaponList",[]],["_sideArms",[]],["_scuba",false]];
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{
private _params = ["_pos","_aiGroup","_skillLevel","_uniforms","_headGear","_vests","_backpacks","_Launcher","_weaponList","_sideArms","_scuba"]; //"_weaponList", "_Launcher"
{
diag_log format["_fnc_spawnUnit::-> _this select %1 (%2) = %3",_forEachIndex, _params select _forEachIndex, _this select _forEachIndex];
}forEach _this;
};
#endif
if (isNull _aiGroup) exitWith {diag_log "[blckeagls] ERROR CONDITION:-->> NULL-GROUP Provided to _fnc_spawnUnit"};
_unit = ObjNull;
_modType = call blck_fnc_getModType;
if (_modType isEqualTo "Epoch") then
{
"I_Soldier_EPOCH" createUnit [[0,0,0], _aiGroup, "_unit = this", blck_baseSkill, "COLONEL"];
_unit setVariable ["LAST_CHECK",28800,true];
switch(_skillLevel) do
{
case "blue":{_unit setVariable["Crypto",2 + floor(random(blck_maxMoneyBlue)),true];};
case "red":{_unit setVariable["Crypto",4 + floor(random(blck_maxMoneyRed)),true];};
case "green":{_unit setVariable["Crypto",6 + floor(random(blck_maxMoneyGreen)),true];};
case "orange":{_unit setVariable["Crypto",8 + floor(random(blck_maxMoneyOrange)),true];};
};
};
if (_modType isEqualTo "Exile") then
{
"i_g_soldier_unarmed_f" createUnit [[0,0,0], _aiGroup, "_unit = this", blck_baseSkill, "COLONEL"];
switch(_skillLevel) do
{
case "blue":{_unit setVariable["ExileMoney",2 + floor(random(blck_maxMoneyBlue)),true];};
case "red":{_unit setVariable["ExileMoney",4 + floor(random(blck_maxMoneyRed)),true];};
case "green":{_unit setVariable["ExileMoney",6 + floor(random(blck_maxMoneyGreen)),true];};
case "orange":{_unit setVariable["ExileMoney",8 + floor(random(blck_maxMoneyOrange)),true];};
};
};
// findEmptyPosition [minDistance, maxDistance, vehicleType]
_unit setPos ( _pos findEmptyPosition [0.1,3,(typeOf _unit)]);
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{
diag_log format["_fnc_spawnUnit::-->> unit spawned = %1",_unit];
};
#endif
[_unit] call blck_fnc_removeGear;
if (_scuba) then
{
_unit swiminDepth (_pos select 2);
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{
diag_log format["_fnc_spawnUnit:: -- >> unit depth = %1 and underwater for unit = %2",_pos select 2, underwater _unit];
};
#endif
};
_skin = "";
_counter = 1;
//diag_log format["_fnc_spawnUnit: _uniforms = %1",_uniforms];
while {_skin isEqualTo "" && _counter < 10} do
{
_unit forceAddUniform (selectRandom _uniforms);
_skin = uniform _unit;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then
{
diag_log format["_fnc_spawnUnit::-->> for unit _unit % uniform is %2",_unit, uniform _unit];
};
#endif
_counter =+1;
};
//Sets AI Tactics
_unit enableAI "ALL";
_unit allowDammage true;
_unit setBehaviour "COMBAT";
_unit setunitpos "AUTO";
if !(_headGear isEqualTo []) then
{
_unit addHeadgear (selectRandom _headGear);
//diag_log format["Headgear for unit %1 = %2",_unit, headgear _unit];
};
if !(_vests isEqualTo []) then
{
_unit addVest (selectRandom _vests);
//diag_log format["Vest for unit %1 = %2",_unit, vest _unit];
};
if (_weaponList isEqualTo []) then {_weaponList = call blck_fnc_selectAILoadout};
_weap = selectRandom _weaponList;
_unit addWeaponGlobal _weap;
_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines");
_optics = getArray (configfile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems");
_pointers = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems");
_muzzles = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems");
_underbarrel = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems");
_legalOptics = _optics - blck_blacklistedOptics;
_unit addMagazines [selectRandom _ammoChoices, 3];
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _muzzles)};
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _legalOptics)};
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _pointers)};
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _muzzles)};
if (random 1 < 0.4) then {_unit addPrimaryWeaponItem (selectRandom _underbarrel)};
if ((count(getArray (configFile >> "cfgWeapons" >> _weap >> "muzzles"))) > 1) then
{
_unit addMagazine "1Rnd_HE_Grenade_shell";
};
if !(_sideArms isEqualTo []) then
{
_weap = selectRandom _sideArms;
//diag_log format["[spawnUnit.sqf] _weap os %1",_weap];
_unit addWeaponGlobal _weap;
_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines");
_unit addMagazines [selectRandom _ammoChoices, 2];
};
for "_i" from 1 to (1+floor(random(4))) do
{
_unit addItem (selectRandom blck_ConsumableItems);
};
// Add First Aid or Grenade 50% of the time
if (round(random 10) <= 5) then
{
//diag_log format["spawnUnit.sqf] -- Item is %1", _item];
_unit addItem selectRandom blck_specialItems;
};
//diag_log format["_spawnUnit: _Launcher = %1",_Launcher];
if ( !(_Launcher isEqualTo "none") && !(_backpacks isEqualTo [])) then
{
_unit addWeaponGlobal _Launcher;
_unit addBackpack (selectRandom _backpacks);
for "_i" from 1 to 3 do
{
_unit addItemToBackpack (getArray (configFile >> "CfgWeapons" >> _Launcher >> "magazines") select 0); // call BIS_fnc_selectRandom;
};
_unit setVariable["Launcher",_launcher,true];
} else {
if ( random (1) < blck_chanceBackpack && !(_backpacks isEqualTo [])) then
{
_unit addBackpack selectRandom _backpacks;
};
};
if(sunOrMoon < 0.2 && blck_useNVG)then
{
_unit addWeapon selectRandom blck_NVG;
_unit setVariable ["hasNVG", true,true];
}
else
{
_unit setVariable ["hasNVG", false,true];
};
#ifdef blck_debugMode
if (blck_debugLevel > 2) then
{
diag_log format["_fnc_spawnUnit:: --> unit loadout = %1", getUnitLoadout _unit];
};
#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;}];
switch (_skillLevel) do
{
case "blue": {_index = 0;_aiSkills = blck_SkillsBlue;};
case "red": {_index = 1;_aiSkills = blck_SkillsRed;};
case "green": {_index = 2;_aiSkills = blck_SkillsGreen;};
case "orange": {_index = 3;_aiSkills = blck_SkillsOrange;};
default {_index = 0;_aiSkills = blck_SkillsBlue;};
};
[_unit,_aiSkills] call blck_fnc_setSkill;
_unit setVariable ["alertDist",blck_AIAlertDistance select _index,true];
_unit setVariable ["intelligence",blck_AIIntelligence select _index,true];
_unit setVariable ["GMS_AI",true,true];
_unit

View File

@ -71,10 +71,13 @@ blck_fnc_spawnMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_s
blck_fnc_clearMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_clearMines.sqf"; // clears mines in an array passed as a parameter blck_fnc_clearMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_clearMines.sqf"; // clears mines in an array passed as a parameter
blck_fnc_signalEnd = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_signalEnd.sqf"; // deploy smoke grenades at loot crates at the end of the mission. blck_fnc_signalEnd = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_signalEnd.sqf"; // deploy smoke grenades at loot crates at the end of the mission.
blck_fnc_endMission = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_endMission.sqf"; blck_fnc_endMission = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_endMission.sqf";
blck_fnc_missionAIareDead = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionAIareDead.sqf"; //blck_fnc_missionAIareDead = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionAIareDead.sqf";
blck_fnc_countAliveAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_countAliveAI.sqf";
blck_fnc_paraDropObject = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_paraDropObject.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_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_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_crateMapMarker = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_crateMapMarker.sqf";
// Group-related functions // 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_spawnGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_spawnGroup.sqf"; // Spawn a single group and populate it with AI units]

View File

@ -193,13 +193,8 @@
// Enable / Disable Missions // Enable / Disable Missions
//////////////////// ////////////////////
// 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;
@ -208,12 +203,6 @@
blck_enableBlueMissions = 2; blck_enableBlueMissions = 2;
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 = 1;
blck_maxcrashsites = 4;
#endif
//////////////////// ////////////////////
// MISSION TIMERS // MISSION TIMERS
//////////////////// ////////////////////
@ -224,12 +213,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;
@ -237,11 +220,6 @@
blck_TMax_Blue = 200; blck_TMax_Blue = 200;
blck_TMax_Red = 250; blck_TMax_Red = 250;
blck_TMax_UMS = 200; blck_TMax_UMS = 200;
#ifdef GRGserver
blck_TMax_Hunter = 200;
blck_TMax_Scouts = 200;
blck_TMax_Crashes = 200;
#endif
/////////////////////////////// ///////////////////////////////
// AI VEHICLE PATROL PARAMETERS // AI VEHICLE PATROL PARAMETERS
@ -360,60 +338,6 @@
blck_maxMoneyRed = 15; blck_maxMoneyRed = 15;
blck_maxMoneyBlue = 10; blck_maxMoneyBlue = 10;
#ifdef GRGserver
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
private["_modType"]; private["_modType"];
_modType = [] call blck_fnc_getModType; _modType = [] call blck_fnc_getModType;
if (_modType isEqualTo "Epoch") then if (_modType isEqualTo "Epoch") then

View File

@ -650,13 +650,6 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"Exile_Item_InstantCoffee" "Exile_Item_InstantCoffee"
]; ];
#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"];

View File

@ -202,12 +202,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;
@ -216,12 +212,6 @@
blck_enableBlueMissions = 2; 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. blck_numberUnderwaterDynamicMissions = 2; // Values from 0 (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 = 3;
#endif
//////////////////// ////////////////////
// MISSION TIMERS // MISSION TIMERS
//////////////////// ////////////////////
@ -232,12 +222,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;
@ -245,11 +229,6 @@
blck_TMax_Blue = 200; blck_TMax_Blue = 200;
blck_TMax_Red = 250; blck_TMax_Red = 250;
blck_TMax_UMS = 200; blck_TMax_UMS = 200;
#ifdef GRGserver
blck_TMax_Hunter = 200;
blck_TMax_Scouts = 200;
blck_TMax_Crashes = 200;
#endif
/////////////////////////////// ///////////////////////////////
// AI VEHICLE PATROL PARAMETERS // AI VEHICLE PATROL PARAMETERS
@ -307,11 +286,6 @@
//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 = 40*60; // time in seconds after which dead AI bodies are deleted blck_bodyCleanUpTimer = 40*60; // time in seconds after which dead AI bodies are deleted
#ifdef GRGserver
#ifdef blck_milServer
blck_bodyCleanUpTimer = 40*60; // Trying to reduce lag with player counts > 20
#endif
#endif
// 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];
@ -371,60 +345,6 @@
blck_maxMoneyRed = 30; blck_maxMoneyRed = 30;
blck_maxMoneyBlue = 20; blck_maxMoneyBlue = 20;
#ifdef GRGserver
blck_AIAlertDistance = [250,425,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 = 1; // 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 = 30;
blck_MaxAI_Orange = 35;
blck_AIGrps_Orange = 5;
blck_SkillsOrange = [
["aimingAccuracy",0.6],["aimingShake",0.9],["aimingSpeed",0.9],["endurance",1.00],["spotDistance",1.0],["spotTime",1.0],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]
];
// Green Missions
blck_MinAI_Green = 26;
blck_MaxAI_Green = 31;
blck_AIGrps_Green = 4;
blck_SkillsGreen = [
["aimingAccuracy",0.55],["aimingShake",0.75],["aimingSpeed",0.85],["endurance",0.9],["spotDistance",0.9],["spotTime",0.9],["courage",0.9],["reloadSpeed",0.9],["commanding",0.9],["general",0.75]
];
// Red Missions
blck_MinAI_Red = 12;
blck_MaxAI_Red = 18;
blck_AIGrps_Red = 3;
blck_SkillsRed = [
["aimingAccuracy",0.4],["aimingShake",0.6],["aimingSpeed",0.6],["endurance",0.80],["spotDistance",0.7],["spotTime",0.8],["courage",0.80],["reloadSpeed",0.70],["commanding",0.8],["general",0.70]
];
// Blue Missions
blck_MinAI_Blue = 8;
blck_MaxAI_Blue = 14;
blck_AIGrps_Blue = 2;
blck_SkillsBlue = [
["aimingAccuracy",0.12],["aimingShake",0.3],["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
private["_modType"]; private["_modType"];
_modType = [] call blck_fnc_getModType; _modType = [] call blck_fnc_getModType;
if (_modType isEqualTo "Epoch") then if (_modType isEqualTo "Epoch") then

View File

@ -3,6 +3,7 @@
for ghostridergaming for ghostridergaming
By Ghostrider [GRG] By Ghostrider [GRG]
Copyright 2016 Copyright 2016
Last Modified 3-14-17
-------------------------- --------------------------
License License
@ -16,10 +17,6 @@
diag_log "[blckeagls] Loading Configuration Overides"; 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"]; private["_startTime"];
_startTime = diag_tickTime; _startTime = diag_tickTime;
_world = toLower format ["%1", worldName]; _world = toLower format ["%1", worldName];
@ -29,6 +26,7 @@ switch (_world) do {
case "napf":{_nightAccel = 12; _dayAccel = 2;_duskAccel = 6;}; case "napf":{_nightAccel = 12; _dayAccel = 2;_duskAccel = 6;};
case "namalsk":{_nightAccel = 12; _dayAccel = 2;_duskAccel = 6;}; case "namalsk":{_nightAccel = 12; _dayAccel = 2;_duskAccel = 6;};
case "tanoa":{_nightAccel = 12; _dayAccel = 3.2;_duskAccel = 6;}; case "tanoa":{_nightAccel = 12; _dayAccel = 3.2;_duskAccel = 6;};
case "namalsk":{_nightAccel = 12; _dayAccel = 2; _duskAccel = 6;};
}; };
switch (toLower (worldName)) do switch (toLower (worldName)) do
@ -82,9 +80,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_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_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_timeAccelerationDay = 2; // Daytime time accelearation
blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation blck_timeAccelerationDusk = 6; // Dawn/dusk time accelearation
blck_timeAccelerationNight = (3/_nightTime); // Nighttim time acceleration blck_timeAccelerationNight = (12); // Nighttim time acceleration
}; };
case "esseker": case "esseker":
{ {
@ -131,13 +129,99 @@ switch (toLower (worldName)) do
blck_maxCrashSites = 3; blck_maxCrashSites = 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";
//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 = -1;
blck_enableHunterMissions = 1;
blck_enableScoutsMissions = 1;
blck_maxCrashSites = 1;
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 = -4; // 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 = 1;
blck_MinAI_Blue = 1;
blck_MaxAI_Blue = 2;
blck_AIGrps_Blue = 1;
blck_AIPatrolVehicles = ["Exile_Car_MB4WDOpen"];
/* /*
You can define configs for additional mods or loadouts here 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]
];
*/ */
/* };
blck_CUPWeapons = [ blck_CUPWeapons = [
"CUP_lmg_L7A2", "CUP_lmg_L7A2",
"CUP_lmg_L110A1", "CUP_lmg_L110A1",
@ -1266,4 +1350,3 @@ blck_NIA_WeaponsSniper = [
"hlc_rifle_psg1", "hlc_rifle_psg1",
"hlc_rifle_psg1A1" "hlc_rifle_psg1A1"
]; ];
*/

File diff suppressed because it is too large Load Diff

View File

@ -11,17 +11,10 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/ http://creativecommons.org/licenses/by-nc-sa/4.0/
*/ */
#define GRGserver
#define useAPEX #define useAPEX
//#define useDynamicSimulation //#define useDynamicSimulation
//#define blck_debugMode //#define blck_debugMode
#define blck_triggerLoopCompleteTime 40*60 //#define blck_triggerLoopCompleteTime 40*60
#define blck_milServer //#define blck_milServer
//#define GRG_TestServer
#ifdef blck_milServer
#define blck_useCUP
#define blck_useRHS
#endif

View File

@ -81,15 +81,6 @@ _noEmplacedWeapons = blck_SpawnEmplaced_Red;
// Change _useMines to true/false below to enable mission-specific settings. // Change _useMines to true/false below to enable mission-specific settings.
_useMines = blck_useMines; _useMines = blck_useMines;
#ifdef blck_milServer
_uniforms = blck_RHS_UniformsGREF; // Setting this in the mission file overrides the defaults
_headgear = blck_RHS_HeadgearGREF; // Setting this in the mission file overrides the defaults
_vests = blck_RHS_VestsGREF;
_backpacks = blck_RHS_BackpacksUSAF + blck_CUPBackpacks;
_weaponList = blck_NIA_WeaponsSniper + blck_NIA_WeaponsAR + blck_NIA_WeaponsSMG;
_sideArms = blck_Pistols;
#endif
_chanceHeliPatrol = blck_chanceHeliPatrolRed; // Setting this in the mission file overrides the defaults _chanceHeliPatrol = blck_chanceHeliPatrolRed; // Setting this in the mission file overrides the defaults
_noChoppers = blck_noPatrolHelisRed; _noChoppers = blck_noPatrolHelisRed;
_missionHelis = blck_patrolHelisRed; _missionHelis = blck_patrolHelisRed;
@ -117,10 +108,6 @@ _loadCratesTiming = blck_loadCratesTiming; // valid choices are "atMissionComple
// To spawn crates in the air and drop them by chutes set blck_spawnCratesTiming = "atMissionEndAir" // Note that a loaded crate will be spawned. // To spawn crates in the air and drop them by chutes set blck_spawnCratesTiming = "atMissionEndAir" // Note that a loaded crate will be spawned.
_endCondition = blck_missionEndCondition; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear" _endCondition = blck_missionEndCondition; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear"
// Setting this in the mission file overrides the defaults // Setting this in the mission file overrides the defaults
#ifdef blck_milServer
_weapons = blck_RHS_Weapons;
#endif
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear" _endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear"
//_timeOut = -1; //_timeOut = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; #include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -1,6 +1,6 @@
private ["_version","_versionDate"]; private ["_version","_versionDate"];
blck_version = "6.81 Build 130"; blck_version = "6.82 Build 133";
_blck_version = blck_version; _blck_version = blck_version;
_blck_versionDate = "5-28-18 4:00 PM"; _blck_versionDate = "6-2-18 4:00 PM";
blck_pvs_version = _blck_version; blck_pvs_version = _blck_version;
publicVariable blck_pvs_version; publicVariable blck_pvs_version;

View File

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

View File

@ -25,12 +25,32 @@
GMS_fnc_freeHostage = { GMS_fnc_freeHostage = {
diag_log format["fn_freeHostage: _this = %1",_this]; diag_log format["fn_freeHostage: _this = %1",_this];
private _hostage = _this select 0; private _hostage = _this select 0;
if (_hostage getVariable["blck_unguarded",0] isEqualTo 1) then
{
_hostage setVariable["blck_AIState",1,true]; _hostage setVariable["blck_AIState",1,true];
private _msg = "_fnc_freeHostage <Hostage Rescued>"; private _msg = "Thank you For freeing me. I must return home.";
systemChat _msg; systemChat _msg;
//hint _msg; if (blck_modType isEqualTo "Epoch") then
diag_log _msg; {
//_hostage move (position _hostage) getPos [1000, random(360)]; [_msg,5] call Epoch_message;
};
if (blck_modType isEqualTo "Exile") then
{
["InfoTitleAndText", ["The Hostage Says", _msg]] call ExileClient_gui_toaster_addTemplateToast;
};
} else {
private _msg = "I am afraid, please kill more of the enemy!";
systemChat _msg;
if (blck_modType isEqualTo "Epoch") then
{
[_msg,5] call Epoch_message;
};
if (blck_modType isEqualTo "Exile") then
{
["InfoTitleAndText", ["The Hostage Says", _msg]] call ExileClient_gui_toaster_addTemplateToast;
};
};
//diag_log _msg;
}; };
GMS_fnc_addHostageActions = { GMS_fnc_addHostageActions = {
@ -56,11 +76,36 @@
GMS_fnc_arrestLeader = { GMS_fnc_arrestLeader = {
diag_log format["GMS_fnc_arrestLeader: _this = %1",_this]; diag_log format["GMS_fnc_arrestLeader: _this = %1",_this];
private _leader = _this select 0; private _leader = _this select 0;
if (_leader getVariable["blck_unguarded",0] isEqualTo 1) then
{
_leader setVariable["blck_AIState",1,true]; _leader setVariable["blck_AIState",1,true];
private _msg = "_fnc_arrestLeader: <Leader Arrested>"; private _msg = "I surrender.";
systemChat _msg; systemChat _msg;
if (blck_modType isEqualTo "Epoch") then
{
[_msg,5] call Epoch_message;
};
if (blck_modType isEqualTo "Exile") then
{
["InfoTitleAndText", ["The Leader Says", _msg]] call ExileClient_gui_toaster_addTemplateToast;
};
} else {
private _msg = "I will resist arrest until all of my men are down!";
systemChat _msg;
if (blck_modType isEqualTo "Epoch") then
{
[_msg,5] call Epoch_message;
};
if (blck_modType isEqualTo "Exile") then
{
["InfoTitleAndText", ["The Leader Says", _msg]] call ExileClient_gui_toaster_addTemplateToast;
};
};
//_leader setVariable["blck_AIState",1,true];
//private _msg = "_fnc_arrestLeader: <Leader Arrested>";
//systemChat _msg;
//hint _msg; //hint _msg;
diag_log _msg; //diag_log _msg;
}; };
GMS_fnc_addLeaderActions = { GMS_fnc_addLeaderActions = {

View File

@ -25,12 +25,32 @@
GMS_fnc_freeHostage = { GMS_fnc_freeHostage = {
diag_log format["fn_freeHostage: _this = %1",_this]; diag_log format["fn_freeHostage: _this = %1",_this];
private _hostage = _this select 0; private _hostage = _this select 0;
if (_hostage getVariable["blck_unguarded",0] isEqualTo 1) then
{
_hostage setVariable["blck_AIState",1,true]; _hostage setVariable["blck_AIState",1,true];
private _msg = "_fnc_freeHostage <Hostage Rescued>"; private _msg = "Thank you For freeing me. I must return home.";
systemChat _msg; systemChat _msg;
//hint _msg; if (blck_modType isEqualTo "Epoch") then
diag_log _msg; {
//_hostage move (position _hostage) getPos [1000, random(360)]; [_msg,5] call Epoch_message;
};
if (blck_modType isEqualTo "Exile") then
{
["InfoTitleAndText", ["The Hostage Says", _msg]] call ExileClient_gui_toaster_addTemplateToast;
};
} else {
private _msg = "I am afraid, please kill more of the enemy!";
systemChat _msg;
if (blck_modType isEqualTo "Epoch") then
{
[_msg,5] call Epoch_message;
};
if (blck_modType isEqualTo "Exile") then
{
["InfoTitleAndText", ["The Hostage Says", _msg]] call ExileClient_gui_toaster_addTemplateToast;
};
};
//diag_log _msg;
}; };
GMS_fnc_addHostageActions = { GMS_fnc_addHostageActions = {
@ -56,11 +76,36 @@
GMS_fnc_arrestLeader = { GMS_fnc_arrestLeader = {
diag_log format["GMS_fnc_arrestLeader: _this = %1",_this]; diag_log format["GMS_fnc_arrestLeader: _this = %1",_this];
private _leader = _this select 0; private _leader = _this select 0;
if (_leader getVariable["blck_unguarded",0] isEqualTo 1) then
{
_leader setVariable["blck_AIState",1,true]; _leader setVariable["blck_AIState",1,true];
private _msg = "_fnc_arrestLeader: <Leader Arrested>"; private _msg = "I surrender.";
systemChat _msg; systemChat _msg;
if (blck_modType isEqualTo "Epoch") then
{
[_msg,5] call Epoch_message;
};
if (blck_modType isEqualTo "Exile") then
{
["InfoTitleAndText", ["The Leader Says", _msg]] call ExileClient_gui_toaster_addTemplateToast;
};
} else {
private _msg = "I will resist arrest until all of my men are down!";
systemChat _msg;
if (blck_modType isEqualTo "Epoch") then
{
[_msg,5] call Epoch_message;
};
if (blck_modType isEqualTo "Exile") then
{
["InfoTitleAndText", ["The Leader Says", _msg]] call ExileClient_gui_toaster_addTemplateToast;
};
};
//_leader setVariable["blck_AIState",1,true];
//private _msg = "_fnc_arrestLeader: <Leader Arrested>";
//systemChat _msg;
//hint _msg; //hint _msg;
diag_log _msg; //diag_log _msg;
}; };
GMS_fnc_addLeaderActions = { GMS_fnc_addLeaderActions = {

View File

@ -8,20 +8,23 @@ Ideas or code from that by Vampire and KiloSwiss have been used for certain func
Significant Changes: Significant Changes:
===================== =====================
Version 1.81 Build 130 (EXPERIMENTAL). Version 1.82 Build 132
Added: blck_killPercentage = 0.9; // The mission will complete if this fraction of the total AI spawned has been killed.
// This facilitates mission completion when one or two AI are spawned into objects.
Added: Male and Female uniforms are separated and can be used alone or together for specific missiosn (Epoch Only). Added: Male and Female uniforms are separated and can be used alone or together for specific missiosn (Epoch Only).
Added: Loot tables updated to include food and supplies as of Epoch 1.1.0. Added: Loot tables updated to include food and supplies as of Epoch 1.1.0.
Added: Setting that configures vehicles to be sold at Black Market Traders. Added: Setting that configures vehicles to be sold at Black Market Traders.
blck_allowSalesAtBlackMktTraders = true; // Allow vehicles to be sold at Halvjes black market traders. blck_allowSalesAtBlackMktTraders = true; // Allow vehicles to be sold at Halve's black market traders.
Added: Support for hostage rescue missions. Added: Support for hostage rescue missions.
The hostage can be spawned at any location relative to the mission center. The hostage can be spawned at any location relative to the mission center.
The mission aborts if the hostage is killed; all loot is deleted. The mission aborts if the hostage is killed; all loot is deleted.
To complete the mission, a player must approach the hostage and execute the rescue action. To complete the mission, a player must approach the hostage and execute the rescue action.
The hostage then runs away, and loot becomes available to the player. The hostage then runs away, and loot becomes available to the player.
See missions\blue\Default3.sqf for an example mission. See missions\blue\hostage.sqf for an example mission.
***** PLEASE READ - IMPORTANT **** ***** PLEASE READ - IMPORTANT ****
Please update the blck_client.sqf in your mission.pbo or you will not be able to interact with or see animations of the new AI characters. Please update the blck_client.sqf in your mission.pbo or you will not be able to interact with or see animations of the new AI characters.
@ -29,7 +32,7 @@ Added: Support for hostage rescue missions.
Added: Support for Arrest Leader missions. Added: Support for Arrest Leader missions.
These are similar to the rescue hostage mission except that the leader, when arrested, will sites These are similar to the rescue hostage mission except that the leader, when arrested, will sites
awaiting arrival of imaginary survivor forces. awaiting arrival of imaginary survivor forces.
See missions\blue\Default4.sqf for an example mission See missions\blue\capture.sqf for an example mission
Added: blck_missionEndCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear" Added: blck_missionEndCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear"
which provides a simple way to define the default conditions under which the mission ends for all missions. which provides a simple way to define the default conditions under which the mission ends for all missions.
@ -45,8 +48,8 @@ Added: Mission crates can now be spawned on the ground or in the air at mission
_spawnCratesTiming = "atMissionEndAir"; _spawnCratesTiming = "atMissionEndAir";
See the hostage1.sqf mission as an example. See the hostage1.sqf mission as an example.
Added: Crates spawn with tabs or crypto. set the values in the mod-specific configs. Added: Crates spawn with tabs or crypto. Set the values in the mod-specific configs.
For Epoch, the crypto can be access by pressing space bar. For Epoch, the crypto can be accessed by pressing space bar.
Added: Additional documentation for those who wish to design their own missions. Added: Additional documentation for those who wish to design their own missions.
See \missions\blue\default.sqf and default2.sqf for details. See \missions\blue\default.sqf and default2.sqf for details.
@ -79,20 +82,21 @@ Changed: **** VERY IMPORTANT ******
This should save quite a bit of editing going forward. This should save quite a bit of editing going forward.
Please note that if you do not update the private variables definitions list certain features of the mission spawner may not work due to issues with scope of variables. Please note that if you do not update the private variables definitions list certain features of the mission spawner may not work due to issues with scope of variables.
Changed: Logic for spawning paratroops was redone so it is more clear. Changed: Each mission is now compiled at server startup which I hope will save a little server resource between restarts.
When helis are spawned the paratroops will spawn at the heli location when it spawns based on probability set in _chancePara in the mission file or the default for that mission difficulty.
When no helies are to be spawned, paratroops will spawn at the mission center when it spawns based on probability set in _chancePara in the mission file or the default for that mission difficulty.
Changed: Each mission is now compiled at server startup.
A few variables that were not used were eliminated. A few variables that were not used were eliminated.
Some declarations of private variables were consolidated. Some declarations of private variables were consolidated.
Together these changes should be worth a small performance bump. Together these changes should be worth a small performance bump.
Changed: Code for Heli Patrols redone. Changed: Code for Heli Patrols redone.
Code that spawns paratroops moved to a separate function that is called when a player is whithin a certain radius of the mission. Code that spawns paratroops moved to a separate function that is called when a player is within a certain radius of the mission.
Code that spawns a supplemental loot chest added - this will be spawned along with the paratroop reinforcements, if desired. Code that spawns a supplemental loot chest added - this will be spawned along with the paratroop reinforcements, if desired.
This crate can have customized loot (think ammo, building supplies, tools and food, ala Exile/Epoch airdrops). This crate can have customized loot (think ammo, building supplies, tools and food, ala Exile/Epoch airdrops).
Changed: Logic for spawning paratroops was redone so it is more clear.
When helis are spawned the paratroops will spawn at the heli location at the location at which the heli spawn based on probability set in _chancePara in the mission file or the default for that mission difficulty.
When no helies are to be spawned, paratroops will spawn at the mission center when it spawns based on probability set in _chancePara in the mission file or the default for that mission difficulty.
A delay was added so that paratroops spawn when players are nearby for more drama !!
Changed: Methods for detecting NULL Groups (rarely a problem with arma these days) simplified. Changed: Methods for detecting NULL Groups (rarely a problem with arma these days) simplified.
Still more work to be done here. Still more work to be done here.
@ -107,7 +111,6 @@ Fixed: an issue with the experimental build whereby the number of dynamically tr
Fixed: Dead Ai in vehicles were sometimes detected as alive. Dead AI are now ejected. Fixed: Dead Ai in vehicles were sometimes detected as alive. Dead AI are now ejected.
Fixed: Vehicles are now properly released to players when all AI inside are killed when an HC is connected. Fixed: Vehicles are now properly released to players when all AI inside are killed when an HC is connected.
Version 1.80 Build 118 Version 1.80 Build 118
Added: you can now determine whether objects spawned at dynamic missions have simulation or damage enabled. Added: you can now determine whether objects spawned at dynamic missions have simulation or damage enabled.
See the medicalCamp.sqf mission for an example of how this is done. See the medicalCamp.sqf mission for an example of how this is done.
@ -487,7 +490,7 @@ Inactivated a call to an exile function that had no value
10) Added settings to enable / disable specific mission classes, e.g., blck_enableOrangeMissions. Set to 1 to enable, -1 to disable. 10) Added settings to enable / disable specific mission classes, e.g., blck_enableOrangeMissions. Set to 1 to enable, -1 to disable.
8-14-16 8-14-16
Added mission timout feature, set blck_missionTimout = -1 to disble; Added mission timout feature, set blck_MissionTimeout = -1 to disble;
Changed to use of params for all .sqf which also eliminated calls to BIS_fnc_params Changed to use of params for all .sqf which also eliminated calls to BIS_fnc_params
changed to selectRandom for all .sqf changed to selectRandom for all .sqf