Merge pull request #26 from Ghostrider-DbD-/v6.51-Build-23

Added Settings, Bug Fixes
This commit is contained in:
Ghostrider-DbD- 2017-01-05 02:27:41 -05:00 committed by GitHub
commit 57ebbf15b8
12 changed files with 184 additions and 110 deletions

View File

@ -1,9 +1,9 @@
//This script sends Message Information to allplayers //This script sends Message Information to allplayers
// Last modified 11/14/15 by Ghostrider-DBD- // Last modified 1/4/17 by Ghostrider-DBD-
//blck_Message = _this; //blck_Message = _this;
params["_msg",["_players",playableUnits]]; params["_msg",["_players",playableUnits]];
//diag_log format["AIM.sqf ===] _this = %1 | _msg = %2 | _players = %3",_this,_msg, _players]; diag_log format["AIM.sqf ===] _this = %1 | _msg = %2 | _players = %3",_this,_msg, _players];
blck_Message = _msg; blck_Message = _msg;
{ {
//diag_log format["AIM.sqf ===] _ = %2, and (owner _x) = %1", (owner _x), _x]; //diag_log format["AIM.sqf ===] _ = %2, and (owner _x) = %1", (owner _x), _x];

View File

@ -1,6 +1,6 @@
/* /*
Handle AI Deaths Handle AI Deaths
Last Modified 11/20/16 Last Modified 1/4/17
By Ghostrider-DBD- By Ghostrider-DBD-
Copyright 2016 Copyright 2016
*/ */
@ -33,6 +33,8 @@ if ((diag_tickTime - _lastkill) < 240) then
_killer setVariable["blck_kills",0]; _killer setVariable["blck_kills",0];
}; };
if (blck_useKillMessages) then
{
_weapon = currentWeapon _killer; _weapon = currentWeapon _killer;
_killstreakMsg = format[" %1X KILLSTREAK",_kills]; _killstreakMsg = format[" %1X KILLSTREAK",_kills];
@ -44,7 +46,8 @@ if (blck_useKilledAIName) then
}; };
_message =_message + _killstreakMsg; _message =_message + _killstreakMsg;
//diag_log format["[blck] unit killed message is %1",_message,""]; //diag_log format["[blck] unit killed message is %1",_message,""];
[["aikilled",_message,"victory"]] call blck_fnc_messageplayers; [["aikilled",_message,"victory"],playableUnits] call blck_fnc_messageplayers;
};
[_unit,_killer,_kills] call blck_fnc_rewardKiller; [_unit,_killer,_kills] call blck_fnc_rewardKiller;
{ {
_unit removeAllEventHandlers _x; _unit removeAllEventHandlers _x;

View File

@ -1,6 +1,6 @@
/* /*
by Ghostrider by Ghostrider
11-7-16 1-4-17
*/ */
private["_missionType","_wasRunover","_launcher","_legal"]; private["_missionType","_wasRunover","_launcher","_legal"];
@ -9,7 +9,7 @@ params["_unit","_killer"];
_launcher = _unit getVariable ["Launcher",""]; _launcher = _unit getVariable ["Launcher",""];
_legal = true; _legal = true;
fn_targetVehicle = { // force AI to fire on the vehicle with launchers if equiped _fn_targetVehicle = { // force AI to fire on the vehicle with launchers if equiped
params["_vk","_unit"]; params["_vk","_unit"];
{ {
if (((position _x) distance (position _unit)) <= 350) then if (((position _x) distance (position _unit)) <= 350) then
@ -28,7 +28,7 @@ fn_targetVehicle = { // force AI to fire on the vehicle with launchers if equip
} forEach allUnits; } forEach allUnits;
}; };
fn_applyVehicleDamage = { // apply a bit of damage _fn_applyVehicleDamage = { // apply a bit of damage
private["_vd"]; private["_vd"];
params["_vk"]; params["_vk"];
//_vk = _this select 0; //_vk = _this select 0;
@ -36,13 +36,13 @@ fn_applyVehicleDamage = { // apply a bit of damage
_vk setDamage (_vd + blck_RunGearDamage); _vk setDamage (_vd + blck_RunGearDamage);
}; };
fn_deleteAIGear = { _fn_deleteAIGear = {
params["_ai"]; params["_ai"];
{deleteVehicle _x}forEach nearestObjects [(getPosATL _ai), ['GroundWeaponHolder','WeaponHolderSimulated','WeaponHolder'], 3]; //Adapted from the AI cleanup logic by KiloSwiss {deleteVehicle _x}forEach nearestObjects [(getPosATL _ai), ['GroundWeaponHolder','WeaponHolderSimulated','WeaponHolder'], 3]; //Adapted from the AI cleanup logic by KiloSwiss
[_ai] call blck_fnc_removeGear; [_ai] call blck_fnc_removeGear;
}; };
fn_msgIED = { _fn_msgIED = {
params["_killer"]; params["_killer"];
diag_log format["fn_msgIED:: -- >> msg = %1 and owner _killer = %2",blck_Message, (owner _killer)]; diag_log format["fn_msgIED:: -- >> msg = %1 and owner _killer = %2",blck_Message, (owner _killer)];
[["IED","",0,0],[_killer]] call blck_fnc_MessagePlayers; [["IED","",0,0],[_killer]] call blck_fnc_MessagePlayers;
@ -53,19 +53,18 @@ if (typeOf _killer != typeOf (vehicle _killer)) then // AI was killed by a vehi
{ {
if(_killer == driver(vehicle _killer))then{ // The AI was runover if(_killer == driver(vehicle _killer))then{ // The AI was runover
if(blck_RunGear) then { // If we are supposed to delete gear from AI that were run over then lets do it. if(blck_RunGear) then { // If we are supposed to delete gear from AI that were run over then lets do it.
[_unit] call fn_deleteAIGear; [_unit] call _fn_deleteAIGear;
if (blck_debugON) then if (blck_debugON) then
{ {
diag_log format["<<--->> Unit %1 was run over by %2",_unit,_killer]; diag_log format["<<--->> Unit %1 was run over by %2",_unit,_killer];
}; };
}; };
if (blck_VK_RunoverDamage) then {//apply vehicle damage if (blck_VK_RunoverDamage) then {//apply vehicle damage
[vehicle _killer] call fn_applyVehicleDamage; [vehicle _killer] call _fn_applyVehicleDamage;
if (blck_debugON) then{diag_log format[">>---<< %1's vehicle has had damage applied",_killer];}; if (blck_debugON) then{diag_log format[">>---<< %1's vehicle has had damage applied",_killer];};
[_killer] call fn_msgIED; [_killer] call _fn_msgIED;
}; };
[_unit, vehicle _killer] call fn_targetVehicle; [_unit, vehicle _killer] call _fn_targetVehicle;
_legal = false; _legal = false;
}; };
}; };
@ -76,11 +75,11 @@ if ( blck_VK_GunnerDamage &&((typeOf vehicle _killer) in blck_forbidenVehicles o
diag_log format["!!---!! Unit was killed by a forbidden vehicle or gun",_unit]; diag_log format["!!---!! Unit was killed by a forbidden vehicle or gun",_unit];
}; };
if (blck_VK_Gear) then {[_unit] call fn_deleteAIGear;}; if (blck_VK_Gear) then {[_unit] call _fn_deleteAIGear;};
[_unit, vehicle _killer] call fn_targetVehicle; [_unit, vehicle _killer] call _fn_targetVehicle;
[vehicle _killer] call fn_applyVehicleDamage; [vehicle _killer] call _fn_applyVehicleDamage;
[_killer] call fn_msgIED; [_killer] call _fn_msgIED;
_legal = false; _legal = false;
}; };

View File

@ -3,7 +3,7 @@
calculate a reward player for AI Kills in crypto. calculate a reward player for AI Kills in crypto.
Code fragment adapted from VEMF Code fragment adapted from VEMF
call as [_unit,_killer] call blck_fnc_rewardKiller; call as [_unit,_killer] call blck_fnc_rewardKiller;
NOTE the dependency on HALV_server_takegive_crypto !! Last modified 1/4/17
*/ */
params["_unit","_killer","_kills"]; params["_unit","_killer","_kills"];
@ -37,9 +37,12 @@ if (_modType isEqualTo "Epoch") then
private _killstreakReward=+(_kills*2); private _killstreakReward=+(_kills*2);
//diag_log format["fnd_rewardKiller:: _bonus returned will be %1",_reward]; //diag_log format["fnd_rewardKiller:: _bonus returned will be %1",_reward];
[_killer,_reward + _killstreakReward] call blck_fnc_giveTakeCrypto; [_killer,_reward + _killstreakReward] call blck_fnc_giveTakeCrypto;
if (blck_useKillScoreMessage) then
{
[["showScore",[_reward,"",_kills],""],[_killer]] call blck_fnc_messageplayers; [["showScore",[_reward,"",_kills],""],[_killer]] call blck_fnc_messageplayers;
}; };
}; };
};
if (_modType isEqualTo "Exile") then if (_modType isEqualTo "Exile") then
{ {
@ -61,7 +64,9 @@ if (_modType isEqualTo "Exile") then
format["setAccountMoney:%1:%2", _money, (getPlayerUID _killer)] call ExileServer_system_database_query_fireAndForget; format["setAccountMoney:%1:%2", _money, (getPlayerUID _killer)] call ExileServer_system_database_query_fireAndForget;
_message = ["showFragRequest",_overallRespectChange]; _message = ["showFragRequest",_overallRespectChange];
_killer call ExileServer_object_player_sendStatsUpdate; _killer call ExileServer_object_player_sendStatsUpdate;
if (blck_useKillScoreMessage) then
{
[["showScore",[50,_distanceBonus,_kills]], [_killer]] call blck_fnc_messageplayers; [["showScore",[50,_distanceBonus,_kills]], [_killer]] call blck_fnc_messageplayers;
}; };
};
//_reward //_reward

View File

@ -6,7 +6,7 @@
Last modified 10/25/16 Last modified 10/25/16
*/ */
//blck_variablesLoaded = false; //blck_variablesLoaded = false;
blck_debugON = false; blck_debugON = true;
blck_debugLevel = 0; // Reserved for certain testing modes. blck_debugLevel = 0; // Reserved for certain testing modes.
blck_minFPS = 10; blck_minFPS = 10;

View File

@ -56,6 +56,11 @@ Last modified 8/1/15
// Headless Client Configurations // Headless Client Configurations
blck_useHC = false; // Not Yet Working blck_useHC = false; // Not Yet Working
// Kill message configurations
blck_useKillMessages = false; // when true a message will be broadcast to all players each time an AI is killed.
blck_useKillScoreMessage = true; // when true a tile is displayed to the killer with the kill score information
blck_useIEDMessages = true;
// MISSION MARKER CONFIGURATION // MISSION MARKER CONFIGURATION
// blck_labelMapMarkers: Determines if when the mission composition provides text labels, map markers with have a text label indicating the mission type // blck_labelMapMarkers: Determines if when the mission composition provides text labels, map markers with have a text label indicating the mission type
//When set to true,"arrow", text will be to the right of an arrow below the mission marker. //When set to true,"arrow", text will be to the right of an arrow below the mission marker.
@ -212,6 +217,8 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
**********************************************************************************/ **********************************************************************************/
#define useAPEX 1
// Blacklisted itesm // Blacklisted itesm
blck_blacklistedOptics = ["optic_Nightstalker","optic_tws","optic_tws_mg"]; blck_blacklistedOptics = ["optic_Nightstalker","optic_tws","optic_tws_mg"];
@ -241,8 +248,11 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"optic_LRPS_tna_F","optic_LRPS_ghex_F", "optic_LRPS_tna_F","optic_LRPS_ghex_F",
"optic_Holosight_blk_F","optic_Holosight_khk_F","optic_Holosight_smg_blk_F" "optic_Holosight_blk_F","optic_Holosight_khk_F","optic_Holosight_smg_blk_F"
]; ];
blck_Optics = blck_Optics_Holo + blck_Optics_Reticule + blck_Optics_Scopes + blck_Optics_Apex; blck_Optics = blck_Optics_Holo + blck_Optics_Reticule + blck_Optics_Scopes;
#ifdef useAPEX
blck_Optics = blck_Optics + blck_Optics_Apex;
#endif
blck_bipods = [ blck_bipods = [
"bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli", "bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli",
//Apex //Apex
@ -302,13 +312,22 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault_556 +blck_RifleAsault_650; blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault_556 +blck_RifleAsault_650;
blck_WeaponList_Red = blck_RifleAsault_556 + blck_RifleSniper + blck_RifleAsault_650 + blck_RifleLMG; blck_WeaponList_Red = blck_RifleAsault_556 + blck_RifleSniper + blck_RifleAsault_650 + blck_RifleLMG;
#ifdef useAPEX
blck_WeaponList_Orange = blck_WeaponList_Orange + blck_apexWeapons;
blck_WeaponList_Green = blck_WeaponList_Green + blck_apexWeapons;
#endif
blck_baseBackpacks = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ]; blck_baseBackpacks = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ];
blck_ApexBackpacks = [ blck_ApexBackpacks = [
"B_Bergen_mcamo_F","B_Bergen_dgtl_F","B_Bergen_hex_F","B_Bergen_tna_F","B_AssaultPack_tna_F","B_Carryall_ghex_F", "B_Bergen_mcamo_F","B_Bergen_dgtl_F","B_Bergen_hex_F","B_Bergen_tna_F","B_AssaultPack_tna_F","B_Carryall_ghex_F",
"B_FieldPack_ghex_F","B_ViperHarness_blk_F","B_ViperHarness_ghex_F","B_ViperHarness_hex_F","B_ViperHarness_khk_F", "B_FieldPack_ghex_F","B_ViperHarness_blk_F","B_ViperHarness_ghex_F","B_ViperHarness_hex_F","B_ViperHarness_khk_F",
"B_ViperHarness_oli_F","B_ViperLightHarness_blk_F","B_ViperLightHarness_ghex_F","B_ViperLightHarness_hex_F","B_ViperLightHarness_khk_F","B_ViperLightHarness_oli_F" "B_ViperHarness_oli_F","B_ViperLightHarness_blk_F","B_ViperLightHarness_ghex_F","B_ViperLightHarness_hex_F","B_ViperLightHarness_khk_F","B_ViperLightHarness_oli_F"
]; ];
#ifdef useAPEX
blck_backpacks = blck_baseBackpacks + blck_ApexBackpacks; blck_backpacks = blck_baseBackpacks + blck_ApexBackpacks;
#endif
blck_BanditHeadgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_tan","H_ShemagOpen_khk"]; blck_BanditHeadgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_tan","H_ShemagOpen_khk"];
//This defines the skin list, some skins are disabled by default to permit players to have high visibility uniforms distinct from those of the AI. //This defines the skin list, some skins are disabled by default to permit players to have high visibility uniforms distinct from those of the AI.
@ -584,6 +603,12 @@ for examples of how you can do this see \Major\Compositions.sqf
[ [
[// Weapons [// Weapons
#ifdef useAPEX
"arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F",
"arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F",
"arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F",
"arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F",
#endif
["MultiGun","EnergyPackLg"], ["MultiGun","EnergyPackLg"],
["arifle_Katiba_F","30Rnd_65x39_caseless_green"], ["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"], ["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
@ -623,11 +648,8 @@ for examples of how you can do this see \Major\Compositions.sqf
["srifle_DMR_06_camo_F","10Rnd_338_Mag"], ["srifle_DMR_06_camo_F","10Rnd_338_Mag"],
["srifle_DMR_04_F","10Rnd_127x54_Mag"], ["srifle_DMR_04_F","10Rnd_127x54_Mag"],
["srifle_DMR_05_blk_F","10Rnd_93x64_DMR_05_Mag"], ["srifle_DMR_05_blk_F","10Rnd_93x64_DMR_05_Mag"],
["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"], ["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"]
"arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F",
"arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F",
"arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F",
"arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F"
], ],
[//Magazines [//Magazines
["3rnd_HE_Grenade_Shell",3,6], ["3rnd_HE_Grenade_Shell",3,6],
@ -695,6 +717,12 @@ for examples of how you can do this see \Major\Compositions.sqf
[ [
[// Weapons [// Weapons
// Format is ["Weapon Name","Magazine Name"], // Format is ["Weapon Name","Magazine Name"],
#ifdef useAPEX
"arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F",
"arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F",
"arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F",
"arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F",
#endif
["MultiGun","EnergyPackLg"], ["MultiGun","EnergyPackLg"],
["arifle_Katiba_F","30Rnd_65x39_caseless_green"], ["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"], ["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
@ -723,11 +751,8 @@ for examples of how you can do this see \Major\Compositions.sqf
["srifle_DMR_03_F","10Rnd_338_Mag"], ["srifle_DMR_03_F","10Rnd_338_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"], ["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_05_hex_F","10Rnd_338_Mag"], ["srifle_DMR_05_hex_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"], ["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
"arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F",
"arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F",
"arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F",
"arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F"
], ],
[//Magazines [//Magazines
// Format is ["Magazine name, Minimum number to add, Maximum number to add], // Format is ["Magazine name, Minimum number to add, Maximum number to add],

View File

@ -56,6 +56,10 @@ Last modified 8/1/15
// Headless Client Configurations // Headless Client Configurations
blck_useHC = false; // Not Yet Working blck_useHC = false; // Not Yet Working
// Kill message configurations
blck_useKillMessages = false; // when true a message will be broadcast to all players each time an AI is killed.
blck_useKillScoreMessage = true; // when true a tile is displayed to the killer with the kill score information
// MISSION MARKER CONFIGURATION // MISSION MARKER CONFIGURATION
// blck_labelMapMarkers: Determines if when the mission composition provides text labels, map markers with have a text label indicating the mission type // blck_labelMapMarkers: Determines if when the mission composition provides text labels, map markers with have a text label indicating the mission type
//When set to true,"arrow", text will be to the right of an arrow below the mission marker. //When set to true,"arrow", text will be to the right of an arrow below the mission marker.
@ -218,6 +222,8 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
**********************************************************************************/ **********************************************************************************/
#define useAPEX 1
// Blacklisted itesm // Blacklisted itesm
blck_blacklistedOptics = ["optic_Nightstalker","optic_tws","optic_tws_mg"]; blck_blacklistedOptics = ["optic_Nightstalker","optic_tws","optic_tws_mg"];
@ -247,7 +253,11 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
"optic_LRPS_tna_F","optic_LRPS_ghex_F", "optic_LRPS_tna_F","optic_LRPS_ghex_F",
"optic_Holosight_blk_F","optic_Holosight_khk_F","optic_Holosight_smg_blk_F" "optic_Holosight_blk_F","optic_Holosight_khk_F","optic_Holosight_smg_blk_F"
]; ];
blck_Optics = blck_Optics_Holo + blck_Optics_Reticule + blck_Optics_Scopes + blck_Optics_Apex; blck_Optics = blck_Optics_Holo + blck_Optics_Reticule + blck_Optics_Scopes;
#ifdef useAPEX
blck_Optics = blck_Optics + blck_Optics_Apex;
#endif
blck_bipods = [ blck_bipods = [
"bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli", "bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli",
@ -311,14 +321,21 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault_556 +blck_RifleAsault_650; blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault_556 +blck_RifleAsault_650;
blck_WeaponList_Red = blck_RifleAsault_556 + blck_RifleSniper + blck_RifleAsault_650 + blck_RifleLMG; blck_WeaponList_Red = blck_RifleAsault_556 + blck_RifleSniper + blck_RifleAsault_650 + blck_RifleLMG;
#ifdef useAPEX
blck_WeaponList_Orange = blck_WeaponList_Orange + blck_apexWeapons;
blck_WeaponList_Green = blck_WeaponList_Green + blck_apexWeapons;
#endif
blck_baseBackpacks = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ]; blck_baseBackpacks = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ];
blck_ApexBackpacks = [ blck_ApexBackpacks = [
"B_Bergen_mcamo_F","B_Bergen_dgtl_F","B_Bergen_hex_F","B_Bergen_tna_F","B_AssaultPack_tna_F","B_Carryall_ghex_F", "B_Bergen_mcamo_F","B_Bergen_dgtl_F","B_Bergen_hex_F","B_Bergen_tna_F","B_AssaultPack_tna_F","B_Carryall_ghex_F",
"B_FieldPack_ghex_F","B_ViperHarness_blk_F","B_ViperHarness_ghex_F","B_ViperHarness_hex_F","B_ViperHarness_khk_F", "B_FieldPack_ghex_F","B_ViperHarness_blk_F","B_ViperHarness_ghex_F","B_ViperHarness_hex_F","B_ViperHarness_khk_F",
"B_ViperHarness_oli_F","B_ViperLightHarness_blk_F","B_ViperLightHarness_ghex_F","B_ViperLightHarness_hex_F","B_ViperLightHarness_khk_F","B_ViperLightHarness_oli_F" "B_ViperHarness_oli_F","B_ViperLightHarness_blk_F","B_ViperLightHarness_ghex_F","B_ViperLightHarness_hex_F","B_ViperLightHarness_khk_F","B_ViperLightHarness_oli_F"
]; ];
blck_backpacks = blck_baseBackpacks + blck_ApexBackpacks;
#ifdef useAPEX
blck_backpacks = blck_baseBackpacks + blck_ApexBackpacks;
#endif
blck_BanditHeadgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_tan","H_ShemagOpen_khk"]; blck_BanditHeadgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_tan","H_ShemagOpen_khk"];
//This defines the skin list, some skins are disabled by default to permit players to have high visibility uniforms distinct from those of the AI. //This defines the skin list, some skins are disabled by default to permit players to have high visibility uniforms distinct from those of the AI.
blck_headgear = [ blck_headgear = [
@ -669,6 +686,12 @@ for examples of how you can do this see \Major\Compositions.sqf
[ [
[// Weapons [// Weapons
#ifdef useAPEX
"arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F",
"arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F",
"arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F",
"arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F",
#endif
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"], ["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"], ["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"], ["srifle_DMR_01_F","10Rnd_762x51_Mag"],
@ -695,11 +718,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["srifle_DMR_06_camo_F","10Rnd_338_Mag"], ["srifle_DMR_06_camo_F","10Rnd_338_Mag"],
["srifle_DMR_04_F","10Rnd_127x54_Mag"], ["srifle_DMR_04_F","10Rnd_127x54_Mag"],
["srifle_DMR_05_blk_F","10Rnd_93x64_DMR_05_Mag"], ["srifle_DMR_05_blk_F","10Rnd_93x64_DMR_05_Mag"],
["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"], ["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"]
"arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F",
"arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F",
"arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F",
"arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F"
], ],
[//Magazines [//Magazines
["3rnd_HE_Grenade_Shell",3,6], ["3rnd_HE_Grenade_Shell",3,6],
@ -757,6 +776,12 @@ for examples of how you can do this see \Major\Compositions.sqf
[ [
[// Weapons [// Weapons
// Format is ["Weapon Name","Magazine Name"], // Format is ["Weapon Name","Magazine Name"],
#ifdef useAPEX
"arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F",
"arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F",
"arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F",
"arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F",
#endif
["arifle_Katiba_F","30Rnd_65x39_caseless_green"], ["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"], ["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
["arifle_MX_F","30Rnd_65x39_caseless_mag"], ["arifle_MX_F","30Rnd_65x39_caseless_mag"],
@ -778,11 +803,7 @@ for examples of how you can do this see \Major\Compositions.sqf
["srifle_DMR_03_F","10Rnd_338_Mag"], ["srifle_DMR_03_F","10Rnd_338_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"], ["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_05_hex_F","10Rnd_338_Mag"], ["srifle_DMR_05_hex_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"], ["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
"arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F",
"arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F",
"arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F",
"arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F"
], ],
[//Magazines [//Magazines
// Format is ["Magazine name, Minimum number to add, Maximum number to add], // Format is ["Magazine name, Minimum number to add, Maximum number to add],

View File

@ -4,6 +4,16 @@ Loosely based on the AI mission system by blckeagls ver 2.0.2
Contributions by Narines: bug fixes, testing, 'fired' event handler Contributions by Narines: bug fixes, testing, 'fired' event handler
Ideas or code from that by Vampire and KiloSwiss have been used for certain functions. Ideas or code from that by Vampire and KiloSwiss have been used for certain functions.
1/3/17 Version 6.51 Build 22
Moved configuration for the client from debug\blckclient.sqf to debug\blckconfig.sqf.
Added a setting blck_useKillMessages = true/false; (line 60 of the config. when true, kill messages will be send to all players when a player kills an AI. The style of the message is controlled client-side (debug\blck_config.sqf)
Added a setting blck_useKillScoreMessage = true/false; // (line 61 of the config) when true a tile is displayed to the killer with the kill score information
Added a setting blck_useIEDMessages = true/false; // when true players will receive a message that their vehicle was damaged when AI are killed in a forbidden way (Run over Or Killed with vehicle-mounted weapons)
Fixed: Messages that a nearby IED was detonated are now properly displayed when players illegally kill AI.
Added a way to easily include / exclude APEX items. To exclude them comment out the line
#define useAPEX 1
at approximately line 219 in the config.
12/21/16 Version 6.50 Build 21 12/21/16 Version 6.50 Build 21
Added a check for mod type to the routine that deletes empty groups as this is only needed for Epoch. Added a check for mod type to the routine that deletes empty groups as this is only needed for Epoch.
Added back the code that (a) eliminates the mission timers and (b) allows multiple instances of a mission to be spawned. Added back the code that (a) eliminates the mission timers and (b) allows multiple instances of a mission to be spawned.

View File

@ -1,3 +1,3 @@
private ["_version","_versionDate"]; private ["_version","_versionDate"];
_blck_version = "6.50 Build 22"; _blck_version = "6.51 Build 23";
_blck_versionDate = "1-3-17 7:00 PM"; _blck_versionDate = "1-4-17 9:00 PM";

View File

@ -1,29 +1,18 @@
//////////////////////////////////////////// ////////////////////////////////////////////
// Start Server-side functions and Create, Display Mission Messages for blckeagls mission system for Arma 3 Epoch // Start Server-side functions and Create, Display Mission Messages for blckeagls mission system for Arma 3 Epoch
// Last Updated 11/20/16 // Last Updated 1/4/17
// by Ghostrider-DbD- // by Ghostrider-DbD-
////////////////////////////////////////// //////////////////////////////////////////
if (hasInterface) then if (isServer || (!hasInterface)) exitWith {};
{
//diag_log "[blckeagls] initializing client variables";
blck_MarkerPeristTime = 300;
blck_useHint = false;
blck_useSystemChat = true;
blck_useTitleText = false;
blck_useDynamic = true;
blck_useToast = false; // Exile only
blck_aiKilluseSystemChat = true;
blck_aiKilluseDynamic = false;
blck_aiKilluseTitleText = false;
blck_processingMsg = -1;
blck_processingKill = -1;
blck_message = "";
#include "blckconfigs.sqf";
blck_message = "";
fn_killScoreNotification = { fn_killScoreNotification = {
params["_bonus","_distanceBonus","_killStreak"]; params["_bonus","_distanceBonus","_killStreak"];
//diag_log format["fn_killScoreNotification:: -- >> _bonus = %1 | _distanceBonus = %2 | _killStreak = %3",_bonus,_distanceBonus,_killStreak]; //diag_log format["fn_killScoreNotification:: -- >> _bonus = %1 | _distanceBonus = %2 | _killStreak = %3",_bonus,_distanceBonus,_killStreak];
_msg2 = format["<t color ='#7CFC00' size = '1.4' align='right'>AI Killed</t><br/>"]; private _msg2 = format["<t color ='#7CFC00' size = '1.4' align='right'>AI Killed</t><br/>"];
if (typeName _bonus isEqualTo "SCALAR") then // add message for the bonus if (typeName _bonus isEqualTo "SCALAR") then // add message for the bonus
{ {
if (_bonus > 0) then if (_bonus > 0) then
@ -45,7 +34,7 @@ if (hasInterface) then
_msg2 = _msg2 + format["<t color = '#7CFC00' size = '1.4' align = 'right'>Killstreak <t color = '#ffffff'>%1X<br/>",_killStreak]; _msg2 = _msg2 + format["<t color = '#7CFC00' size = '1.4' align = 'right'>Killstreak <t color = '#ffffff'>%1X<br/>",_killStreak];
}; };
}; };
[parseText _msg2,[0.0823437 * safezoneW + safezoneX,0.379 * safezoneH + safezoneY,0.0812109 * safezoneW,0.253 * safezoneH], nil, 7, 0.3, 0] spawn BIS_fnc_textTiles; [parseText _msg2,[0.0823437 * safezoneW + safezoneX,0.379 * safezoneH + safezoneY,0.0812109 * safezoneW,0.253 * safezoneH], nil, 3, 0.3, 0] spawn BIS_fnc_textTiles;
}; };
fn_dynamicNotification = { fn_dynamicNotification = {
@ -100,7 +89,7 @@ if (hasInterface) then
fn_AI_KilledNotification = { fn_AI_KilledNotification = {
private["_message","_text","_screentime","_xcoord","_ycoord"]; private["_message","_text","_screentime","_xcoord","_ycoord"];
_message = _this select 0; _message = _this select 0;
//diag_log format["_fn_AI_KilledNotification ====] Paremeters _event %1 _message %2 _mission %3",_message]; //diag_log format["_fn_AI_KilledNotification ====] Paremeters: _message= %1", _message];
if (blck_aiKilluseSystemChat) then {systemChat format["%1",_message];}; if (blck_aiKilluseSystemChat) then {systemChat format["%1",_message];};
if (blck_aiKilluseTitleText) then {titleText [_message, "PLAIN DOWN",5];uiSleep 5; titleText ["", "PLAIN DOWN",5]}; if (blck_aiKilluseTitleText) then {titleText [_message, "PLAIN DOWN",5];uiSleep 5; titleText ["", "PLAIN DOWN",5]};
if (blck_aiKilluseDynamic) then { if (blck_aiKilluseDynamic) then {
@ -121,25 +110,25 @@ if (hasInterface) then
fn_handleMessage = { fn_handleMessage = {
//private["_event","_msg","_mission"]; //private["_event","_msg","_mission"];
diag_log format["blck_Message ====] Paremeters = _this = %1",_this]; //diag_log format["fn_handleMessage ====] Paremeters = _this = %1",_this];
params["_event","_message",["_mission",""]]; params["_event","_message",["_mission",""]];
private _timer = 0;
diag_log format["blck_Message ====] Paremeters _event %1 _message %2 paramter #3 %3",_event,_message,_mission]; //diag_log format["fn_handleMessage ====] Paremeters _event= %1 _message= %2 paramter #3= %3",_event,_message,_mission];
diag_log format["blck_Message ====] _message isEqualTo %1",_message]; //diag_log format["fn_handleMessage ====] _message isEqualTo %1",_message];
switch (_event) do switch (_event) do
{ {
case "start": case "start":
{ {
playSound "UAV_05"; playSound "UAV_05";
diag_log "switch start"; //diag_log "switch start";
//_mission = _this select 1 select 2; //_mission = _this select 1 select 2;
[_event,_message,_mission] spawn fn_missionNotification; [_event,_message,_mission] spawn fn_missionNotification;
}; };
case "end": case "end":
{ {
playSound "UAV_03"; playSound "UAV_03";
diag_log "switch end"; //diag_log "switch end";
//_mission = _this select 1 select 2; //_mission = _this select 1 select 2;
[_event,_message,_mission] spawn fn_missionNotification; [_event,_message,_mission] spawn fn_missionNotification;
}; };
@ -155,14 +144,15 @@ if (hasInterface) then
case "reinforcements": case "reinforcements":
{ {
if ( (player distance _mission) < 1000) then {playsound "AddItemOK"; ["Alert",_message] call fn_dynamicNotification;}; if ( (player distance _mission) < 1000) then {playsound "AddItemOK"; ["Alert",_message] call fn_dynamicNotification;};
diag_log "---->>>> Reinforcements Spotted"; //diag_log "---->>>> Reinforcements Spotted";
}; };
case "IED": case "IED":
{ {
[1] call BIS_fnc_Earthquake; //[1] spawn BIS_fnc_Earthquake;
//["IED","Bandits targeted your vehicle with an IED"] call fn_dynamicNotification; private _msg = format["<t color = '#ce2029' size ='1.4' align='center'>IED Detonated <t color = '#ffffff'>%1<br/>"," **Vehicle Damaged** "];
["Bandits targeted your vehicle with an IED.", 5] call Epoch_message; systemChat "IED Detonated Nearby: Vehicle Damaged";
for "_i" from 1 to 3 do {playSound "BattlefieldExplosions3_3D";uiSleep 0.3;}; [parseText _msg,[0.314375 * safezoneW + safezoneX,0.687 * safezoneH + safezoneY,0.37125 * safezoneW,0.044 * safezoneH], nil, 3, 0.1, 0] spawn BIS_fnc_textTiles;
playSound "BattlefieldExplosions3_3D";
}; };
case "showScore": case "showScore":
{ {
@ -178,7 +168,7 @@ if (hasInterface) then
if (!isNil "blck_RedMarker") then {[blck_RedMarker] execVM "debug\spawnMarker.sqf"}; if (!isNil "blck_RedMarker") then {[blck_RedMarker] execVM "debug\spawnMarker.sqf"};
if (!isNil "blck_BlueMarker") then {[blck_BlueMarker] execVM "debug\spawnMarker.sqf"}; if (!isNil "blck_BlueMarker") then {[blck_BlueMarker] execVM "debug\spawnMarker.sqf"};
diag_log "blck client loaded ver 8/14/16 1.0 7:47 AM"; diag_log "blck client loaded ver 1/4/17 9 PM";
//diag_log "[blckeagls] starting client loop"; //diag_log "[blckeagls] starting client loop";
private["_start"]; private["_start"];
_start = diag_tickTime; _start = diag_tickTime;
@ -196,6 +186,5 @@ if (hasInterface) then
uiSleep 0.3; uiSleep 0.3;
}; };
}; };
};

View File

@ -0,0 +1,20 @@
////////////////////////////////////////////
// Define configurations for the client-side of the mission system
// Last Updated 11/20/16
// by Ghostrider-DbD-
//////////////////////////////////////////
//diag_log "[blckeagls] initializing client variables";
blck_MarkerPeristTime = 300;
blck_useHint = true;
blck_useSystemChat = false;
blck_useTitleText = false;
blck_useDynamic = false;
blck_useToast = false; // Exile only
blck_aiKilluseSystemChat = true;
blck_aiKilluseDynamic = false;
blck_aiKilluseTitleText = false;
blck_processingMsg = -1;
blck_processingKill = -1;

View File

@ -4,25 +4,27 @@ Loosely based on the AI mission system by blckeagls ver 2.0.2
Contributions by Narines: bug fixes, testing, 'fired' event handler Contributions by Narines: bug fixes, testing, 'fired' event handler
Ideas or code from that by Vampire and KiloSwiss have been used for certain functions. Ideas or code from that by Vampire and KiloSwiss have been used for certain functions.
12/4-16 Version 6.45 Build 19 1/3/17 Version 6.51 Build 22
Added Option to display mission information in Toasts (Exile Only). Moved configuration for the client from debug\blckclient.sqf to debug\blckconfig.sqf.
Fixed several issues related to the update to Arma 1.66 Added a setting blck_useKillMessages = true/false; (line 60 of the config. when true, kill messages will be send to all players when a player kills an AI. The style of the message is controlled client-side (debug\blck_config.sqf)
Known Issues: Need a patch so you can loot AI bodies in Epoch. Added a setting blck_useKillScoreMessage = true/false; // (line 61 of the config) when true a tile is displayed to the killer with the kill score information
Added a setting blck_useIEDMessages = true/false; // when true players will receive a message that their vehicle was damaged when AI are killed in a forbidden way (Run over Or Killed with vehicle-mounted weapons)
Fixed: Messages that a nearby IED was detonated are now properly displayed when players illegally kill AI.
Added a way to easily include / exclude APEX items. To exclude them comment out the line
#define useAPEX 1
at approximately line 219 in the config.
11/16/16 Version 6.44 Build 15 12/21/16 Version 6.50 Build 21
Added parameters Added a check for mod type to the routine that deletes empty groups as this is only needed for Epoch.
blck_blacklistTraderCities=true; // the locations of the Epoch/Exile trader cities will be pulled from the config and added to the location blacklist for the mission system. Added back the code that (a) eliminates the mission timers and (b) allows multiple instances of a mission to be spawned.
blcklistConcreteMixerZones = true; // Locations of the concrete mixers will be pulled from the configs; no missions will be spawned within 1000 m of these locations.
blck_blacklistSpawns = true; // Locations of Exile spawns will be pulled from the config. No missions will spawn within 1000 m of these locations. 12/20/16 Version 6.46 Buid 20
Added: the main thread now runs a function that checks for empty groups. Moved Variables for time acceleration to the config files.
Fixed: The mission system would hang on epoch after a while because createGroup returned nullGroup. this appeared to occur because the maximum number of active groups had been reached. Deleting empty groups periodically solved the issue on a test machine. Reworked code for time acceleration to use timeDay and BIS_fnc_sunriseSunsetTime.
Teaked: code to check whether a possible mission spawn location is near a flag or plot pole. Still needs work.
Added: Completed adding EDEN weapons, optics, bipods, optics to AI configurations and mission loot crates. 11/20/16 Build 6.45 Build 19
Added APEX headgear and uniforms. (Note, you would need to add any of these you wished for players to sell to Epoch\<Map Name>\epoch_config\CfgPricing.hpp on Epoch) Added Option to display mission information in Toasts (Exile Only).
Changed: Definitions of blacklist locations such as spawns moved from GMS_findWorld.sqf to the blck_configs_(epoch|exile). Fixed an issue related to bugs in Arma 1.66
Changed: Divided rifles and optics into subcategories to better enable assigning weapons to AI difficulties in a sort of class-based way, e.g., 556, 6.5, or LMG are separate classes.
Changed: DLS crate loader (not publically available yet) now uses blck_fnc_loadLootItemsFromArray rather than the prior approach for which specific crate loading functions were called depending on the loadout type (weapons, building supplies, foord etc).
Fixed: You can now loot AI bodies in Epoch.
11/16/16 Version 6.44 Build 15 11/16/16 Version 6.44 Build 15
Added parameters Added parameters