From 02faf0a10453b78fcbc9c074ee767cfce337a3d0 Mon Sep 17 00:00:00 2001 From: alganthe Date: Wed, 16 Sep 2015 06:20:05 +0200 Subject: [PATCH 01/89] fixed zeus addobjects The module part in CfgVehicles.hpp was missing. Signed-off-by: alganthe --- addons/zeus/ACE_Settings.hpp | 4 +--- addons/zeus/CfgVehicles.hpp | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/zeus/ACE_Settings.hpp b/addons/zeus/ACE_Settings.hpp index 6488a23e4e..73d92b95cb 100644 --- a/addons/zeus/ACE_Settings.hpp +++ b/addons/zeus/ACE_Settings.hpp @@ -21,9 +21,7 @@ class ACE_Settings { values[] = {"$STR_A3_OPTIONS_DISABLED", CSTRING(revealMines_partial), CSTRING(revealMines_full)}; }; class GVAR(autoAddObjects) { - displayName = CSTRING(AddObjectsToCurator); - description = CSTRING(AddObjectsToCurator_desc); - value = 0; typeName = "BOOL"; + value = 0; }; }; diff --git a/addons/zeus/CfgVehicles.hpp b/addons/zeus/CfgVehicles.hpp index e110970ae3..f8ca85511b 100644 --- a/addons/zeus/CfgVehicles.hpp +++ b/addons/zeus/CfgVehicles.hpp @@ -70,6 +70,12 @@ class CfgVehicles { }; }; }; + class GVAR(autoAddObjects) { + displayName = CSTRING(AddObjectsToCurator); + description = CSTRING(AddObjectsToCurator_desc); + typeName = "BOOL"; + defaultValue = 0; + }; }; class ModuleDescription { description = CSTRING(Settings_Description); From 38fe56472e46db4454ea67b776f68ff9c78b77ae Mon Sep 17 00:00:00 2001 From: alganthe Date: Sun, 27 Sep 2015 15:35:32 +0200 Subject: [PATCH 02/89] ace setting string added for ace_zeus_autoAddObjects --- addons/zeus/ACE_Settings.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/zeus/ACE_Settings.hpp b/addons/zeus/ACE_Settings.hpp index 73d92b95cb..708e37d85b 100644 --- a/addons/zeus/ACE_Settings.hpp +++ b/addons/zeus/ACE_Settings.hpp @@ -23,5 +23,7 @@ class ACE_Settings { class GVAR(autoAddObjects) { typeName = "BOOL"; value = 0; + displayName = CSTRING(AddObjectsToCurator); + description = CSTRING(AddObjectsToCurator_desc); }; }; From e9505523451810d3edd100d5d473a2f4e2cd8bfa Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sat, 27 Feb 2016 00:29:30 -0300 Subject: [PATCH 03/89] Track temperatures of spare barrels --- addons/overheating/CfgMagazines.hpp | 11 ++++ addons/overheating/CfgVehicles.hpp | 5 +- addons/overheating/CfgWeapons.hpp | 11 ---- addons/overheating/XEH_PREP.hpp | 2 + addons/overheating/XEH_postInit.sqf | 40 +++++++++++++ addons/overheating/config.cpp | 2 + .../functions/fnc_calculateCooling.sqf | 58 +++++++++++++++++++ .../functions/fnc_swapBarrelCallback.sqf | 12 +++- ...c_updateSpareBarrelsTemperaturesThread.sqf | 40 +++++++++++++ .../functions/fnc_updateTemperature.sqf | 44 +------------- 10 files changed, 167 insertions(+), 58 deletions(-) create mode 100644 addons/overheating/CfgMagazines.hpp create mode 100644 addons/overheating/functions/fnc_calculateCooling.sqf create mode 100644 addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf diff --git a/addons/overheating/CfgMagazines.hpp b/addons/overheating/CfgMagazines.hpp new file mode 100644 index 0000000000..ad381ff30e --- /dev/null +++ b/addons/overheating/CfgMagazines.hpp @@ -0,0 +1,11 @@ +class CfgMagazines { + class CA_Magazine; + class ACE_SpareBarrel: CA_Magazine { + descriptionshort = CSTRING(SpareBarrelDescription); + picture = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); + displayName = "ACE Spare Barrel"; //!!!CANNOT be localized!!!: because it is used as part of the magazineDetail string + count = 1; + mass = 40; + ACE_isUnique = 1; + }; +}; diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index c7d9c6790a..4911fcb7f6 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -15,7 +15,7 @@ class CfgVehicles { }; class ACE_SwapBarrel { displayName = CSTRING(SwapBarrel); - condition = QUOTE( 'ACE_SpareBarrel' in items _player && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _player >> 'ACE_Overheating_allowSwapBarrel') == 1} ); + condition = QUOTE( 'ACE_SpareBarrel' in magazines _player && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _player >> 'ACE_Overheating_allowSwapBarrel') == 1} ); statement = QUOTE( [ARR_2(_player, currentWeapon _player)] call FUNC(swapBarrel); ); showDisabled = 0; priority = 3; @@ -99,7 +99,7 @@ class CfgVehicles { MACRO_ADDITEM(ACE_SpareBarrel,6); }; }; - +/* // Add ACE_SpareBarrel to every machine gunner. #define MACRO_ADDSPAREBARREL \ items[] = {"FirstAidKit", "ACE_SpareBarrel"}; \ @@ -124,4 +124,5 @@ class CfgVehicles { // Czech class I_Soldier_02_F; class I_Soldier_AR_F:I_Soldier_02_F {MACRO_ADDSPAREBARREL}; class I_Soldier_support_base_F; class I_Soldier_AAR_F:I_Soldier_support_base_F {MACRO_ADDSPAREBARREL}; +*/ }; diff --git a/addons/overheating/CfgWeapons.hpp b/addons/overheating/CfgWeapons.hpp index f59c4d7911..c7a83eec6e 100644 --- a/addons/overheating/CfgWeapons.hpp +++ b/addons/overheating/CfgWeapons.hpp @@ -2,17 +2,6 @@ class CfgWeapons { class ACE_ItemCore; class InventoryItem_Base_F; - class ACE_SpareBarrel: ACE_ItemCore { - displayname = CSTRING(SpareBarrelName); - descriptionshort = CSTRING(SpareBarrelDescription); - //model = ""; - picture = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); - scope = 2; - class ItemInfo: InventoryItem_Base_F { - mass = 30; - }; - }; - class RifleCore; class Rifle: RifleCore { //Mean Rounds Between Stoppages (this will be scaled based on the barrel temp) diff --git a/addons/overheating/XEH_PREP.hpp b/addons/overheating/XEH_PREP.hpp index 312b8bb0c5..26366b9896 100644 --- a/addons/overheating/XEH_PREP.hpp +++ b/addons/overheating/XEH_PREP.hpp @@ -1,4 +1,5 @@ +PREP(calculateCooling); PREP(canUnjam); PREP(checkTemperature); PREP(clearJam); @@ -10,5 +11,6 @@ PREP(jamWeapon); PREP(overheat); PREP(swapBarrel); PREP(swapBarrelCallback); +PREP(updateSpareBarrelsTemperaturesThread); PREP(updateTemperature); PREP(updateTemperatureThread); diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index 0bb2da22ca..b19b96272d 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -8,6 +8,46 @@ if (isServer) then { GVAR(pseudoRandomList) pushBack [-1 + random 2, -1 + random 2]; }; publicVariable QGVAR(pseudoRandomList); + + // Keep track of the temperature of stored spare barrels + GVAR(storedSpareBarrels) = [] call CBA_fnc_hashCreate; + ["spareBarrelLoadedCoolest", { + params ["_unit", "_weapon", "_weaponTemp", "_barrelMass"]; + TRACE_4("spareBarrelLoadedCoolest1",_unit,_weapon,_weaponTemp,_barrelMass); + + // Find all spare barrel the player has + private _allMags = magazinesDetail _unit; + TRACE_1("spareBarrelLoadedCoolest2",_allMags); + _allMags = _allMags select {_x find "ACE Spare Barrel" == 0}; + TRACE_1("spareBarrelLoadedCoolest3",_allMags); + if ((count _allMags) < 1) exitWith {}; + + // Determine which on is coolest + private _coolestTemp = 10000; + private _coolestMag = _allMags select 0; + { + private _temp = 0; + if ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashHasKey) then { + _temp = ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashGet) select 0; + }; + TRACE_2("spareBarrelLoadedCoolest4",_x,_temp); + if (_temp < _coolestTemp) then { + _coolestTemp = _temp; + _coolestMag = _x; + }; + } forEach _allMags; + TRACE_3("spareBarrelLoadedCoolest5",_coolestTemp,_coolestMag,_weaponTemp); + + // The new weapon temperature is similar to the coolest barrel + // Publish the new temperature value + _unit setVariable [format [QGVAR(%1_temp), _weapon], _coolestTemp, true]; + + // Heat up the coolest barrel to the former weapon temperature + [GVAR(storedSpareBarrels), _coolestMag, [_weaponTemp, ACE_Time, _barrelMass]] call CBA_fnc_hashSet; + }] call EFUNC(common,addEventHandler); + + // Schedule cool down calculation of stored spare barrels + [] call FUNC(updateSpareBarrelsTemperaturesThread); }; diff --git a/addons/overheating/config.cpp b/addons/overheating/config.cpp index c57e55913d..673edcf77f 100644 --- a/addons/overheating/config.cpp +++ b/addons/overheating/config.cpp @@ -18,6 +18,8 @@ class CfgPatches { #include "CfgVehicles.hpp" +#include "CfgMagazines.hpp" + #include "CfgWeapons.hpp" #include "ACE_Settings.hpp" diff --git a/addons/overheating/functions/fnc_calculateCooling.sqf b/addons/overheating/functions/fnc_calculateCooling.sqf new file mode 100644 index 0000000000..955c41441e --- /dev/null +++ b/addons/overheating/functions/fnc_calculateCooling.sqf @@ -0,0 +1,58 @@ +/* + * Author: esteldunedain + * Calculate the cooling down of a weapon over a time interval. + * + * Argument: + * 0: Initial temperature + * 1: Barrel mass + * 2: Time interval + * + * Return value: + * Final temperature + * + * Example: + * [_temperature, _barrelMass, _totalTime] call ace_overheating_fnc_calculateCooling + * + * Public: No + */ +#include "script_component.hpp" + +params ["_temperature", "_barrelMass", "_totalTime"]; + +// If a long time passed since the last shot, there's no need to calculate anything; the weapon should be cool +if (_totalTime > 1800) exitWith {0}; + +//AR-15 (0.00570m bullet diameter) (barrel diameter usually 0.75" or 0.008255m radius) +//Steel Denisty = 7850 m^3 / kg +//Area of a cylinder (2/r)*(Pi * r^3 + V) - for a 0.008255m radius barrel -> Area = 210(1/meters) * Volume +//Adjusted volume for being hollowed out is ~1.1x +//So Area = 210 * 1.1 * (mass / 7850) = mass * 0.029427 (for steel near that diameter) + +private _barrelSurface = _barrelMass * 0.029427; + +TRACE_4("cooling",_temperature,_totalTime,_barrelMass,_barrelSurface); + +private _time = 0; +while {true} do { + private _deltaTime = (_totalTime - _time) min 20; + + _temperature = _temperature - ( + // Convective cooling + 25 * _barrelSurface * _temperature + // Radiative cooling + + 0.4 * 5.67e-8 * _barrelSurface * + ( (_temperature + 273.15)*(_temperature + 273.15) + * (_temperature + 273.15)*(_temperature + 273.15) + - 273.15 * 273.15 * 273.15 *273.15 ) + ) * _deltaTime / (_barrelMass * 466); + + if (_temperature < 1) exitWith {0}; + + if (isNil "_temperature") exitWith { + diag_log text format ["[ACE] ERROR: _totalTime = %1; _time = %2; _deltaTime = %3;", _totalTime, _time, _deltaTime]; + 0 + }; + + _time = _time + _deltaTime; + if (_time >= _totalTime) exitWith { _temperature max 0 }; +}; diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index 9c62e77f21..8bd63e4874 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -14,6 +14,7 @@ * * Public: No */ +#define DEBUG_MODE_FULL #include "script_component.hpp" params ["_player", "_weapon"]; @@ -26,7 +27,14 @@ playSound "ACE_BarrelSwap"; // don't consume the barrel, but rotate through them. [localize LSTRING(SwappedBarrel), QUOTE(PATHTOF(UI\spare_barrel_ca.paa))] call EFUNC(common,displayTextPicture); -// Publish the temperature variable -_player setVariable [format [QGVAR(%1_temp), _weapon], 0, true]; +private _temp = _player getVariable [format [QGVAR(%1_temp), _weapon], 0]; +private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; + +// Instruct the server to load the coolest spare barrel into the weapon and +// store the removed barrel with the former weapon temperature. The server +// also updates the current weapon temperature to match that of the new +// loaded barrel. +["spareBarrelLoadedCoolest", [_player, _weapon, _temp, _barrelMass]] call EFUNC(common,serverEvent); + // Store the update time _player setVariable [format [QGVAR(%1_time), _weapon], ACE_time]; diff --git a/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf b/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf new file mode 100644 index 0000000000..852cb1c580 --- /dev/null +++ b/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf @@ -0,0 +1,40 @@ +/* + * Author: esteldunedain + * Calculate cooldown of all the stored spare barrels. + * + * Argument: + * None + * + * Return value: + * None + * + * Example: + * [] call ace_overheating_fnc_updateSpareBarrelsTemperaturesThread + * + * Public: No + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private _pairs = []; +TRACE_1("updateSpareBarrelsTemperaturesThread1",GVAR(storedSpareBarrels)); +[GVAR(storedSpareBarrels), {_pairs pushBack [_key, _value];}] call CBA_fnc_hashEachPair; +TRACE_1("updateSpareBarrelsTemperaturesThread2",_pairs); +{ + _x params ["_barrelMagazineID","_value"]; + _value params ["_initialTemp","_initialTime", "_barrelMass"]; + + // Calculate cooling + private _finalTemp = [_initialTemp, _barrelMass, ACE_time - _initialTime] call FUNC(calculateCooling); + TRACE_4("updateSpareBarrelsTemperaturesThread3",_barrelMagazineID,_initialTemp,_finalTemp,_barrelMass); + if (_finalTemp < 5) then { + // The barrel is cool enough to keep calculating. Remove it from the hash + [GVAR(storedSpareBarrels), _barrelMagazineID] call CBA_fnc_hashRem; + } else { + // Store the new temp + [GVAR(storedSpareBarrels), _barrelMagazineID, [_finalTemp, ACE_time, _barrelMass]] call CBA_fnc_hashSet; + }; +} forEach _pairs; + +// Schedule for execution again after 10 seconds +[DFUNC(updateSpareBarrelsTemperaturesThread), [], 10] call EFUNC(common,waitAndExecute); diff --git a/addons/overheating/functions/fnc_updateTemperature.sqf b/addons/overheating/functions/fnc_updateTemperature.sqf index 89d5975024..1643fe55b4 100644 --- a/addons/overheating/functions/fnc_updateTemperature.sqf +++ b/addons/overheating/functions/fnc_updateTemperature.sqf @@ -29,50 +29,8 @@ private _lastTime = _unit getVariable [_timeVarName, 0]; private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; -_fnc_cooling = { - params ["_temperature", "_barrelMass", "_totalTime"]; - - // If a long time passed since the last shot, there's no need to calculate anything; the weapon should be cool - if (_totalTime > 1800) exitWith {0}; - - //AR-15 (0.00570m bullet diameter) (barrel diameter usually 0.75" or 0.008255m radius) - //Steel Denisty = 7850 m^3 / kg - //Area of a cylinder (2/r)*(Pi * r^3 + V) - for a 0.008255m radius barrel -> Area = 210(1/meters) * Volume - //Adjusted volume for being hollowed out is ~1.1x - //So Area = 210 * 1.1 * (mass / 7850) = mass * 0.029427 (for steel near that diameter) - - private _barrelSurface = _barrelMass * 0.029427; - - TRACE_4("cooling",_temperature,_totalTime,_barrelMass,_barrelSurface); - - private _time = 0; - while {true} do { - private _deltaTime = (_totalTime - _time) min 20; - - _temperature = _temperature - ( - // Convective cooling - 25 * _barrelSurface * _temperature - // Radiative cooling - + 0.4 * 5.67e-8 * _barrelSurface * - ( (_temperature + 273.15)*(_temperature + 273.15) - * (_temperature + 273.15)*(_temperature + 273.15) - - 273.15 * 273.15 * 273.15 *273.15 ) - ) * _deltaTime / (_barrelMass * 466); - - if (_temperature < 1) exitWith {0}; - - if (isNil "_temperature") exitWith { - diag_log text format ["[ACE] ERROR: _totalTime = %1; _time = %2; _deltaTime = %3;", _totalTime, _time, _deltaTime]; - 0 - }; - - _time = _time + _deltaTime; - if (_time >= _totalTime) exitWith { _temperature max 0 }; - }; -}; - // Calculate cooling -_temperature = [_temperature, _barrelMass, ACE_time - _lastTime] call _fnc_cooling; +_temperature = [_temperature, _barrelMass, ACE_time - _lastTime] call FUNC(calculateCooling); TRACE_1("cooledTo",_temperature); // Calculate heating // Steel Heat Capacity = 466 J/(Kg.K) From b8f955468cc4b255eba4d922c03d8d2e972dc66b Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sat, 27 Feb 2016 01:46:27 -0300 Subject: [PATCH 04/89] First version of "Check spare barrel temperatures" action --- addons/overheating/CfgVehicles.hpp | 9 +++++ addons/overheating/XEH_postInit.sqf | 61 +++++++++++++++++++++++++++++ addons/overheating/stringtable.xml | 18 +++++++++ 3 files changed, 88 insertions(+) diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index 4911fcb7f6..61b619a79b 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -30,6 +30,15 @@ class CfgVehicles { priority = 2.9; icon = QUOTE(PATHTOF(UI\temp_ca.paa)); }; + class ACE_CheckTemperatureSpareBarrels { + displayName = CSTRING(CheckTemperatureSpareBarrelsShort); + condition = QUOTE( 'ACE_SpareBarrel' in magazines _player); + exceptions[] = {"isNotInside", "isNotSitting"}; + statement = QUOTE([ARR_2('spareBarrelsCheckTemperatures',[ARR_2(_player,_player)])] call EFUNC(common,serverEvent);); + showDisabled = 0; + priority = 2.8; + icon = QUOTE(PATHTOF(UI\temp_ca.paa)); + }; }; }; }; diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index b19b96272d..f29a1c624c 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -11,6 +11,67 @@ if (isServer) then { // Keep track of the temperature of stored spare barrels GVAR(storedSpareBarrels) = [] call CBA_fnc_hashCreate; + + ["spareBarrelsCheckTemperatures", { + params ["_player","_unit"]; + // Find all spare barrel the player has + private _allMags = magazinesDetail _unit; + _allMags = _allMags select {_x find "ACE Spare Barrel" == 0}; + if ((count _allMags) < 1) exitWith {}; + + // Determine the temp of each barrel + private _temps = []; + { + private _temp = 0; + if ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashHasKey) then { + _temp = ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashGet) select 0; + }; + _temps pushBack _temp; + } forEach _allMags; + TRACE_1("_temps",_temps); + + // Count cool + private _countCool = {_x < 20} count _temps; + private _countWarm = {(_x >= 20) && (_x < 100)} count _temps; + private _countHot = {(_x >= 100) && (_x < 200)} count _temps; + private _countVeryHot = {(_x >= 200) && (_x < 600)} count _temps; + private _countExtremelyHot = {_x >= 600} count _temps; + private _output = ["%1 %2%3%4 %5%6%7 %8%9%10 %11%12%13 %14"]; + private _size = 1.0; + if (_countCool > 0) then { + _output pushBack _countCool; + _output pushBack LSTRING(BarrelCool); + _output pushBack "
"; + _size = _size + 0.5; + }; + if (_countWarm > 0) then { + _output pushBack _countWarm; + _output pushBack LSTRING(BarrelWarm); + _output pushBack "
"; + _size = _size + 0.5; + }; + if (_countHot > 0) then { + _output pushBack _countHot; + _output pushBack LSTRING(BarrelHot); + _output pushBack "
"; + _size = _size + 0.5; + }; + if (_countVeryHot > 0) then { + _output pushBack _countVeryHot; + _output pushBack LSTRING(BarrelVeryHot); + _output pushBack "
"; + _size = _size + 0.5; + }; + if (_countExtremelyHot > 0) then { + _output pushBack _countExtremelyHot; + _output pushBack LSTRING(BarrelExtremelyHot); + _size = _size + 0.5; + }; + + TRACE_1("_output",_output); + ["displayTextStructured", [_player], [_output, _size, _player]] call EFUNC(common,targetEvent); + }] call EFUNC(common,addEventHandler); + ["spareBarrelLoadedCoolest", { params ["_unit", "_weapon", "_weaponTemp", "_barrelMass"]; TRACE_4("spareBarrelLoadedCoolest1",_unit,_weapon,_weaponTemp,_barrelMass); diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 57a9fee566..1e2490ea52 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -224,6 +224,9 @@ Sto controllando la temperatura... Проверка температуры... + + Check spare barrel temperatures + Temperature Temperatur @@ -236,5 +239,20 @@ Temperatura Температура + + Cool Spare Barrel/s + + + Warm Spare Barrel/s + + + Hot Spare Barrel/s + + + Very Hot Spare Barrel/s + + + Extremele Hot Spare Barrel/s + \ No newline at end of file From 3bbabac2d71c918b7b36cbdfa70f20d3b801f111 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 20:12:56 -0300 Subject: [PATCH 05/89] Rename and add comments to the function that tracks the units vital loop. Use waitAndExecute instead of a pfh for better performance. --- addons/medical/XEH_PREP.hpp | 3 +- .../functions/fnc_addToInjuredCollection.sqf | 59 ------------------- addons/medical/functions/fnc_addVitalLoop.sqf | 30 ++++++++++ .../medical/functions/fnc_adjustPainLevel.sqf | 2 +- addons/medical/functions/fnc_handleDamage.sqf | 4 +- addons/medical/functions/fnc_handleLocal.sqf | 3 +- .../fnc_treatmentTourniquetLocal.sqf | 3 +- .../functions/fnc_treatment_success.sqf | 2 +- addons/medical/functions/fnc_vitalLoop.sqf | 48 +++++++++++++++ 9 files changed, 88 insertions(+), 66 deletions(-) delete mode 100644 addons/medical/functions/fnc_addToInjuredCollection.sqf create mode 100644 addons/medical/functions/fnc_addVitalLoop.sqf create mode 100644 addons/medical/functions/fnc_vitalLoop.sqf diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index 4184f096f7..6cbce0df78 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -11,11 +11,11 @@ PREP(actionLoadUnit); PREP(actionUnloadUnit); PREP(addDamageToUnit); PREP(addHeartRateAdjustment); -PREP(addToInjuredCollection); PREP(addToLog); PREP(addToTriageCard); PREP(addUnconsciousCondition); PREP(addUnloadPatientActions); +PREP(addVitalLoop); PREP(adjustPainLevel); PREP(canAccessMedicalEquipment); PREP(canTreat); @@ -96,6 +96,7 @@ PREP(treatmentTourniquet); PREP(treatmentTourniquetLocal); PREP(useItem); PREP(useItems); +PREP(vitalLoop); PREP(displayPatientInformation); PREP(displayTriageCard); PREP(dropDownTriageCard); diff --git a/addons/medical/functions/fnc_addToInjuredCollection.sqf b/addons/medical/functions/fnc_addToInjuredCollection.sqf deleted file mode 100644 index aa545f491e..0000000000 --- a/addons/medical/functions/fnc_addToInjuredCollection.sqf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Author: Glowbal - * Enabled the vitals loop for a unit. - * - * Arguments: - * 0: The Unit - * - * ReturnValue: - * None - * - * Public: Yes - */ - -#include "script_component.hpp" - -params ["_unit", ["_force", false]]; - -if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { - - if !(local _unit) exitWith { - ["addToInjuredCollection", _unit, [_unit, _force]] call EFUNC(common,targetEvent); - }; - - if ((_unit getVariable[QGVAR(addedToUnitLoop),false] || !alive _unit) && !_force) exitWith{}; - _unit setVariable [QGVAR(addedToUnitLoop), true, true]; - - [{ - params ["_args", "_idPFH"]; - _args params ["_unit", "_interval"]; - _interval = ACE_time - _interval; - (_this select 0) set [1, ACE_time]; - - if (!alive _unit || !local _unit) then { - [_idPFH] call CBA_fnc_removePerFrameHandler; - if (!local _unit) then { - if (GVAR(level) >= 2) then { - _unit setVariable [QGVAR(heartRate), _unit getVariable [QGVAR(heartRate), 80], true]; - _unit setVariable [QGVAR(bloodPressure), _unit getVariable [QGVAR(bloodPressure), [80, 120]], true]; - }; - _unit setVariable [QGVAR(bloodVolume), _unit getVariable [QGVAR(bloodVolume), 100], true]; - }; - } else { - [_unit, _interval] call FUNC(handleUnitVitals); - - private "_pain"; - _pain = _unit getVariable [QGVAR(pain), 0]; - if (_pain > (_unit getVariable [QGVAR(painSuppress), 0])) then { - // This introduces wierd unconscious behaviour for basic medical and possibly also advanced. - // TODO This is disabled as it's considered non critical code. - // We will need to decide if we want unconscious triggered on high pain levels or if we can get rid of this entirely. - /*if (_pain > 0.7 && {random(1) > 0.6}) then { - [_unit] call FUNC(setUnconscious); - };*/ - - [_unit, _pain] call FUNC(playInjuredSound); - }; - }; - }, 1, [_unit, ACE_time]] call CBA_fnc_addPerFrameHandler; -}; diff --git a/addons/medical/functions/fnc_addVitalLoop.sqf b/addons/medical/functions/fnc_addVitalLoop.sqf new file mode 100644 index 0000000000..f3c8c380bb --- /dev/null +++ b/addons/medical/functions/fnc_addVitalLoop.sqf @@ -0,0 +1,30 @@ +/* + * Author: Glowbal + * Enabled the vitals loop for a unit. + * + * Arguments: + * 0: The Unit + * + * ReturnValue: + * None + * + * Public: Yes + */ + +#include "script_component.hpp" + +params ["_unit", ["_force", false]]; + +if !([_unit] call FUNC(hasMedicalEnabled) || _force) exitWith {}; + +if !(local _unit) exitWith { + ["addVitalLoop", _unit, [_unit, _force]] call EFUNC(common,targetEvent); +}; + +// Quit if the unit already has a vital loop, or is dead, unless it's forced +if ((_unit getVariable[QGVAR(addedToUnitLoop),false] || !alive _unit) && !_force) exitWith{}; + +// Schedule the loop to be executed again later +// @todo: should the loop be started righ away instead? +_unit setVariable [QGVAR(addedToUnitLoop), true, true]; +[DFUNC(vitalLoop), 1, [_unit, ACE_time]] call EFUNC(common,waitAndExecute); diff --git a/addons/medical/functions/fnc_adjustPainLevel.sqf b/addons/medical/functions/fnc_adjustPainLevel.sqf index df82e06823..7b97cdc48f 100644 --- a/addons/medical/functions/fnc_adjustPainLevel.sqf +++ b/addons/medical/functions/fnc_adjustPainLevel.sqf @@ -35,6 +35,6 @@ _pain = _pain max 0; _unit setVariable [QGVAR(pain), _pain]; //Start up the vital watching (if not already running) -[_unit] call FUNC(addToInjuredCollection); +[_unit] call FUNC(addVitalLoop); _pain diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index cd0b4b1b27..b46ffcf1ad 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -102,8 +102,8 @@ if ((_minLethalDamage <= _newDamage) && {[_unit, [_effectiveSelectionName] call _damageReturn = _damageReturn min 0.89; }; - -[_unit] call FUNC(addToInjuredCollection); +// Start the loop that tracks the unit vitals +[_unit] call FUNC(addVitalLoop); if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith { private _delayedUnconsicous = false; diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf index 91689f311f..270a993b43 100644 --- a/addons/medical/functions/fnc_handleLocal.sqf +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -17,8 +17,9 @@ params ["_unit", "_local"]; if (_local) then { + // If the unit had a loop tracking its vitals, restart it locally if (_unit getVariable[QGVAR(addedToUnitLoop),false]) then { - [_unit, true] call FUNC(addToInjuredCollection); + [_unit, true] call FUNC(addVitalLoop); }; if ((_unit getVariable ["ACE_isUnconscious",false]) && {count (_unit getVariable [QGVAR(unconsciousArguments), []]) >= 6}) then { diff --git a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf index be9b03c9f1..3b181b2387 100644 --- a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf @@ -16,7 +16,8 @@ private ["_tourniquets", "_part", "_applyingTo"]; params ["_target", "_tourniquetItem", "_selectionName"]; -[_target] call FUNC(addToInjuredCollection); +//If we're not already tracking vitals, start: +[_target] call FUNC(addVitalLoop); _part = [_selectionName] call FUNC(selectionNameToNumber); diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index d8a4d3b336..a9ef534346 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -92,7 +92,7 @@ _args call FUNC(createLitter); //If we're not already tracking vitals, start: if (!(_target getVariable [QGVAR(addedToUnitLoop),false])) then { - [_target] call FUNC(addToInjuredCollection); + [_target] call FUNC(addVitalLoop); }; ["medical_treatmentSuccess", [_caller, _target, _selectionName, _className]] call EFUNC(common,localEvent); diff --git a/addons/medical/functions/fnc_vitalLoop.sqf b/addons/medical/functions/fnc_vitalLoop.sqf new file mode 100644 index 0000000000..fcfb638143 --- /dev/null +++ b/addons/medical/functions/fnc_vitalLoop.sqf @@ -0,0 +1,48 @@ +/* + * Author: Glowbal, esteldunedain + * Vital loop for a unit. + * + * Arguments: + * 0: The Unit + * 1: Time of last computation + * + * ReturnValue: + * None + * + * Public: Yes + */ + +#include "script_component.hpp" + +params ["_unit", "_lastTime"]; + +// If the unit died the loop is finished +if (!alive _unit) exitWith {}; + +// If locality changed, broadcast the last medical state and finish the local loop +if (!local _unit) exitWith { + if (GVAR(level) >= 2) then { + _unit setVariable [QGVAR(heartRate), _unit getVariable [QGVAR(heartRate), 80], true]; + _unit setVariable [QGVAR(bloodPressure), _unit getVariable [QGVAR(bloodPressure), [80, 120]], true]; + }; + _unit setVariable [QGVAR(bloodVolume), _unit getVariable [QGVAR(bloodVolume), 100], true]; +}; + +// Handle unit vitals +[_unit, ACE_time - _lastTime] call FUNC(handleUnitVitals); + +// Play injured sounds +private _pain = _unit getVariable [QGVAR(pain), 0]; +if (_pain > (_unit getVariable [QGVAR(painSuppress), 0])) then { + // This introduces wierd unconscious behaviour for basic medical and possibly also advanced. + // TODO This is disabled as it's considered non critical code. + // We will need to decide if we want unconscious triggered on high pain levels or if we can get rid of this entirely. + /*if (_pain > 0.7 && {random(1) > 0.6}) then { + [_unit] call FUNC(setUnconscious); + };*/ + + [_unit, _pain] call FUNC(playInjuredSound); +}; + +// Schedule the loop to be executed again later +[DFUNC(vitalLoop), 1, [_unit, ACE_time]] call EFUNC(common,waitAndExecute); From bed51ac8a4c9a121f3cdff554e8be9adf43af220 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 20:26:05 -0300 Subject: [PATCH 06/89] Fix waitAndExecute syntax --- addons/medical/functions/fnc_addVitalLoop.sqf | 4 ++-- addons/medical/functions/fnc_vitalLoop.sqf | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/medical/functions/fnc_addVitalLoop.sqf b/addons/medical/functions/fnc_addVitalLoop.sqf index f3c8c380bb..52b2cc11f9 100644 --- a/addons/medical/functions/fnc_addVitalLoop.sqf +++ b/addons/medical/functions/fnc_addVitalLoop.sqf @@ -24,7 +24,7 @@ if !(local _unit) exitWith { // Quit if the unit already has a vital loop, or is dead, unless it's forced if ((_unit getVariable[QGVAR(addedToUnitLoop),false] || !alive _unit) && !_force) exitWith{}; -// Schedule the loop to be executed again later +// Schedule the loop to be executed again 1 sec later // @todo: should the loop be started righ away instead? _unit setVariable [QGVAR(addedToUnitLoop), true, true]; -[DFUNC(vitalLoop), 1, [_unit, ACE_time]] call EFUNC(common,waitAndExecute); +[DFUNC(vitalLoop), [_unit, ACE_time], 1] call EFUNC(common,waitAndExecute); diff --git a/addons/medical/functions/fnc_vitalLoop.sqf b/addons/medical/functions/fnc_vitalLoop.sqf index fcfb638143..d555f00a75 100644 --- a/addons/medical/functions/fnc_vitalLoop.sqf +++ b/addons/medical/functions/fnc_vitalLoop.sqf @@ -44,5 +44,5 @@ if (_pain > (_unit getVariable [QGVAR(painSuppress), 0])) then { [_unit, _pain] call FUNC(playInjuredSound); }; -// Schedule the loop to be executed again later -[DFUNC(vitalLoop), 1, [_unit, ACE_time]] call EFUNC(common,waitAndExecute); +// Schedule the loop to be executed again 1 sec later +[DFUNC(vitalLoop), [_unit, ACE_time], 1] call EFUNC(common,waitAndExecute); From 085860c7709c2e99bf4d6a25a21fd08e95e1f914 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 20:32:02 -0300 Subject: [PATCH 07/89] Restore addToInjuredCollection as a deprecated function --- addons/medical/XEH_PREP.hpp | 1 + .../functions/fnc_addToInjuredCollection.sqf | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 addons/medical/functions/fnc_addToInjuredCollection.sqf diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index 6cbce0df78..8383b7ad8a 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -11,6 +11,7 @@ PREP(actionLoadUnit); PREP(actionUnloadUnit); PREP(addDamageToUnit); PREP(addHeartRateAdjustment); +PREP(addToInjuredCollection); PREP(addToLog); PREP(addToTriageCard); PREP(addUnconsciousCondition); diff --git a/addons/medical/functions/fnc_addToInjuredCollection.sqf b/addons/medical/functions/fnc_addToInjuredCollection.sqf new file mode 100644 index 0000000000..77d2378d0d --- /dev/null +++ b/addons/medical/functions/fnc_addToInjuredCollection.sqf @@ -0,0 +1,17 @@ +/* + * Author: Glowbal + * Enabled the vitals loop for a unit. + * + * Arguments: + * 0: The Unit + * + * ReturnValue: + * None + * + * Deprecated + */ +#include "script_component.hpp" + +ACE_DEPRECATED("ace_medical_fnc_addToInjuredCollection","3.7.0","ace_medical_fnc_addVitalLoop"); + +_this call FUNC(addVitalLoop); From bbb84ec7d14d27536be99408fcea22e51d2534b8 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 20:50:28 -0300 Subject: [PATCH 08/89] Move the tourniquet loop to handleUnitVitals. Makes the tourniquet pain compatible with swapping localities --- .../functions/fnc_handleUnitVitals.sqf | 13 +++++++++++ .../fnc_treatmentTourniquetLocal.sqf | 23 +------------------ 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 6159351cc9..d161bbb385 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -110,6 +110,19 @@ if (GVAR(level) >= 2) then { }; }; + // Handle toruniquets + private _tourniquets = _unit getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; + { + private _appliedTime = _x; + if (_appliedTime > 0) then { + // There's a tourniquet applied at time _appliedTime + if (CBA_missionTime - _appliedTime > 120) then { + // Increase pain at a rate of 0.001 units/s + _unit setVariable [QGVAR(pain), (_unit getVariable [QGVAR(pain), 0]) + 0.001]; + }; + } + } forEach _tourniquets; + // Set the vitals _heartRate = (_unit getVariable [QGVAR(heartRate), 80]) + (([_unit] call FUNC(getHeartRateChange)) * _interval); _unit setVariable [QGVAR(heartRate), _heartRate max 0, _syncValues]; diff --git a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf index 3b181b2387..b8acc27c74 100644 --- a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf @@ -23,26 +23,5 @@ _part = [_selectionName] call FUNC(selectionNameToNumber); // Place a tourniquet on the bodypart _tourniquets = _target getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; -_applyingTo = (_tourniquets select _part) + 1 + round(random(100)); -_tourniquets set[_part, _applyingTo]; +_tourniquets set [_part, CBA_missionTime]; _target setVariable [QGVAR(tourniquets), _tourniquets, true]; - -[{ - params ["_args", "_idPFH"]; - _args params ["_target", "_applyingTo", "_part", "_time"]; - - if (!alive _target) exitWith { - [_idPFH] call CBA_fnc_removePerFrameHandler; - }; - - _tourniquets = _target getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; - if !((_tourniquets select _part) == _applyingTo) exitWith { - // Tourniquet has been removed - [_idPFH] call CBA_fnc_removePerFrameHandler; - }; - if (ACE_time - _time > 120) then { - _target setVariable [QGVAR(pain), (_target getVariable [QGVAR(pain), 0]) + 0.005]; - }; -}, 5, [_target, _applyingTo, _part, ACE_time] ] call CBA_fnc_addPerFrameHandler; - -true From 35e13d535710645e116c659554e6d926b87dfde3 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 20:55:05 -0300 Subject: [PATCH 09/89] Fixes --- addons/medical/functions/fnc_handleUnitVitals.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index d161bbb385..a76fa9a098 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -110,7 +110,7 @@ if (GVAR(level) >= 2) then { }; }; - // Handle toruniquets + // Handle tourniquets private _tourniquets = _unit getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; { private _appliedTime = _x; @@ -120,7 +120,7 @@ if (GVAR(level) >= 2) then { // Increase pain at a rate of 0.001 units/s _unit setVariable [QGVAR(pain), (_unit getVariable [QGVAR(pain), 0]) + 0.001]; }; - } + }; } forEach _tourniquets; // Set the vitals From 21d4939abb1bee8d66c0ed01a1a54cf2e5af93fb Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 22:08:59 -0300 Subject: [PATCH 10/89] Optimize the computation of tourniquet pain. Fix pain not being able to decrease when above 10 --- .../functions/fnc_handleUnitVitals.sqf | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index a76fa9a098..23272f0890 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -110,18 +110,10 @@ if (GVAR(level) >= 2) then { }; }; - // Handle tourniquets - private _tourniquets = _unit getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; - { - private _appliedTime = _x; - if (_appliedTime > 0) then { - // There's a tourniquet applied at time _appliedTime - if (CBA_missionTime - _appliedTime > 120) then { - // Increase pain at a rate of 0.001 units/s - _unit setVariable [QGVAR(pain), (_unit getVariable [QGVAR(pain), 0]) + 0.001]; - }; - }; - } forEach _tourniquets; + // Handle pain due tourniquets, that have been applied more than 120 s ago + private _oldTourniquets = (_unit getVariable [QGVAR(tourniquets), []]) select {_x > 0 && {CBA_missionTime - _x > 120}}; + // Increase pain at a rate of 0.001 units/s per old tourniquet + _painStatus = _painStatus + (count _oldTourniquets) * 0.001 * _interval; // Set the vitals _heartRate = (_unit getVariable [QGVAR(heartRate), 80]) + (([_unit] call FUNC(getHeartRateChange)) * _interval); @@ -130,10 +122,11 @@ if (GVAR(level) >= 2) then { _bloodPressure = [_unit] call FUNC(getBloodPressure); _unit setVariable [QGVAR(bloodPressure), _bloodPressure, _syncValues]; - if (_painStatus > 0 && {_painStatus < 10}) then { - _painReduce = if (_painStatus > 5) then {0.002} else {0.001}; - _unit setVariable [QGVAR(pain), (_painStatus - _painReduce * _interval) max 0, _syncValues]; - }; + _painReduce = if (_painStatus > 5) then {0.002} else {0.001}; + + // @todo: replace this and the rest of the setVariable with EFUNC(common,setApproximateVariablePublic) + _unit setVariable [QGVAR(pain), (_painStatus - _painReduce * _interval) max 0, _syncValues]; + TRACE_8("ACE_DEBUG_ADVANCED_VITALS",_painStatus,_painReduce,_heartRate,_bloodVolume,_bloodPressure,_interval,_syncValues,_unit); // TODO Disabled until implemented fully // Handle airway From 0e82cdfe8208a6ab1d9c8af7481181365aa554f3 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 22:50:04 -0300 Subject: [PATCH 11/89] Move to a function and comments the function that tracks the effects of medications over time. Use waitAndExecute instead of a pfh for better performance. --- addons/medical/XEH_PREP.hpp | 1 + .../functions/fnc_medicationEffectLoop.sqf | 42 +++++++++++++++++++ .../functions/fnc_onMedicationUsage.sqf | 21 +--------- 3 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 addons/medical/functions/fnc_medicationEffectLoop.sqf diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index 8383b7ad8a..906f4e18f7 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -57,6 +57,7 @@ PREP(isMedic); PREP(isMedicalVehicle); PREP(isInStableCondition); PREP(itemCheck); +PREP(medicationEffectLoop); PREP(modifyMedicalAction); PREP(onMedicationUsage); PREP(onWoundUpdateRequest); diff --git a/addons/medical/functions/fnc_medicationEffectLoop.sqf b/addons/medical/functions/fnc_medicationEffectLoop.sqf new file mode 100644 index 0000000000..5ba54bfc9f --- /dev/null +++ b/addons/medical/functions/fnc_medicationEffectLoop.sqf @@ -0,0 +1,42 @@ +/* + * Author: Glowbal, esteldunedain + * Medication effect loop for an injection. + * + * Arguments: + * 0: Unit + * 1: Name of the Variable that is affected + * 2: Proportion of the effect applied + * 3: Rate at which the effect is applied + * 4: Viscosity adjustment rate + * 5: Pain reduction rate + * + * ReturnValue: + * None + * + * Public: Yes + */ + +#include "script_component.hpp" + +params ["_unit", "_variableName", "_amountDecreased","_decreaseRate", "_viscosityAdjustmentRate", "_painReduceRate"]; + +// If the unit died the loop is finished +if (!alive _unit) exitWith {}; + +// If locality changed finish the local loop +if (!local _unit) exitWith {}; + +// Apply medicinal effect +private _usedMeds = (_unit getVariable [_variableName, 0]) - _decreaseRate; +_unit setVariable [_variableName, _usedMeds]; + +// Restore the viscosity while the medication is leaving the system +_unit setVariable [QGVAR(peripheralResistance), ((_unit getVariable [QGVAR(peripheralResistance), 100]) - _viscosityAdjustmentRate) max 0]; +_unit setVariable [QGVAR(painSuppress), ((_unit getVariable [QGVAR(painSuppress), 0]) - _painReduceRate) max 0]; + +// Exit if the medication has finished it's effect +_amountDecreased = _amountDecreased + _decreaseRate; +if (_amountDecreased >= 1 || (_usedMeds <= 0) || !alive _unit) exitWith {}; + +// Schedule the loop to be executed again 1 sec later +[DFUNC(medicationEffectLoop), [_unit, _variableName, _amountDecreased, _decreaseRate, _viscosityAdjustmentRate, _painReduceRate], 1] call EFUNC(common,waitAndExecute); diff --git a/addons/medical/functions/fnc_onMedicationUsage.sqf b/addons/medical/functions/fnc_onMedicationUsage.sqf index fc7e8daa2d..2f2b9b6363 100644 --- a/addons/medical/functions/fnc_onMedicationUsage.sqf +++ b/addons/medical/functions/fnc_onMedicationUsage.sqf @@ -77,22 +77,5 @@ if (_hasOverDosed > 0 && GVAR(enableOverdosing)) then { _decreaseAmount = 1 / _timeInSystem; _viscosityAdjustment = _viscosityChange / _timeInSystem; -[{ - params ["_args", "_idPFH"]; - _args params ["_target", "_timeInSystem", "_variable", "_amountDecreased","_decreaseAmount", "_viscosityAdjustment", "_painReduce"]; - private "_usedMeds"; - _usedMeds = _target getVariable [_variable, 0]; - _usedMeds = _usedMeds - _decreaseAmount; - _target setVariable [_variable, _usedMeds]; - - _amountDecreased = _amountDecreased + _decreaseAmount; - - // Restoring the viscosity while the medication is leaving the system - _target setVariable [QGVAR(peripheralResistance), ((_target getVariable [QGVAR(peripheralResistance), 100]) - _viscosityAdjustment) max 0]; - _target setVariable [QGVAR(painSuppress), ((_target getVariable [QGVAR(painSuppress), 0]) - _painReduce) max 0]; - - if (_amountDecreased >= 1 || (_usedMeds <= 0) || !alive _target) then { - [_idPFH] call CBA_fnc_removePerFrameHandler; - }; - _args set [3, _amountDecreased]; -}, 1, [_target, _timeInSystem, _variable, 0, _decreaseAmount, _viscosityAdjustment, _painReduce / _timeInSystem] ] call CBA_fnc_addPerFrameHandler; +// Run the loop that computes the effect of the medication over time +[_target, _timeInSystem, _variable, 0, _decreaseAmount, _viscosityAdjustment, _painReduce / _timeInSystem] call FUNC(medicationEffectLoop); From 12895e798309352f7c032fc2c05f551e45a75263 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 22:58:09 -0300 Subject: [PATCH 12/89] Remove unneeded parameter --- addons/medical/functions/fnc_onMedicationUsage.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_onMedicationUsage.sqf b/addons/medical/functions/fnc_onMedicationUsage.sqf index 2f2b9b6363..28b1d4dd0b 100644 --- a/addons/medical/functions/fnc_onMedicationUsage.sqf +++ b/addons/medical/functions/fnc_onMedicationUsage.sqf @@ -78,4 +78,4 @@ _decreaseAmount = 1 / _timeInSystem; _viscosityAdjustment = _viscosityChange / _timeInSystem; // Run the loop that computes the effect of the medication over time -[_target, _timeInSystem, _variable, 0, _decreaseAmount, _viscosityAdjustment, _painReduce / _timeInSystem] call FUNC(medicationEffectLoop); +[_target, _variable, 0, _decreaseAmount, _viscosityAdjustment, _painReduce / _timeInSystem] call FUNC(medicationEffectLoop); From 94e8bee3483911619de7bd92984f2e13f310d992 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 23:08:25 -0300 Subject: [PATCH 13/89] Move the pfh from setDead to a waitAndExecute loop: reviveStepLoop --- addons/medical/XEH_PREP.hpp | 1 + .../medical/functions/fnc_reviveStateLoop.sqf | 56 +++++++++++++++++++ addons/medical/functions/fnc_setDead.sqf | 37 +----------- 3 files changed, 59 insertions(+), 35 deletions(-) create mode 100644 addons/medical/functions/fnc_reviveStateLoop.sqf diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index 906f4e18f7..b9ad6ba546 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -64,6 +64,7 @@ PREP(onWoundUpdateRequest); PREP(onPropagateWound); PREP(parseConfigForInjuries); PREP(playInjuredSound); +PREP(reviveStateLoop); PREP(selectionNameToNumber); PREP(serverRemoveBody); PREP(setCardiacArrest); diff --git a/addons/medical/functions/fnc_reviveStateLoop.sqf b/addons/medical/functions/fnc_reviveStateLoop.sqf new file mode 100644 index 0000000000..3e55f7b7ce --- /dev/null +++ b/addons/medical/functions/fnc_reviveStateLoop.sqf @@ -0,0 +1,56 @@ +/* + * Author: Glowbal, esteldunedain + * Loop that handles a unit in the revive state. + * + * Arguments: + * 0: Unit + * + * ReturnValue: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_unit"] + +// If locality changed finish the local loop +// @todo: reinitiate the loop elsewhere +if (!local _unit) exitWith {}; + +private _startTime = _unit getVariable [QGVAR(reviveStartTime), 0]; + +// Remove heartbeat +if (GVAR(level) >= 2) then { + if (_unit getVariable [QGVAR(heartRate), 60] > 0) then { + _unit setVariable [QGVAR(heartRate), 0]; + }; +}; + +// If we are in revive state in a blown up vehicle, try to unload so that people can access the body +if ((alive _unit) && {(vehicle _unit) != _unit} && {!alive (vehicle _unit)}) then { + TRACE_2("Unloading", _unit, vehicle _unit); + [_unit] call EFUNC(common,unloadPerson); +}; + +// If the timer run out, let the unit die and exit the loop +if (GVAR(maxReviveTime) > 0 && {ACE_time - _startTime > GVAR(maxReviveTime)}) exitwith { + _unit setVariable [QGVAR(inReviveState), nil, true]; + _unit setVariable [QGVAR(reviveStartTime), nil]; + [_unit, true] call FUNC(setDead); +}; + +// If the unit was taken out from revive state, exit the loop +if !(_unit getVariable [QGVAR(inReviveState), false]) exitwith { + // Revived without dieing, so in case we have lifes, remove one. + if (GVAR(amountOfReviveLives) > 0) then { + _lifesLeft = _unit getVariable[QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives)]; + _unit setVariable [QGVAR(amountOfReviveLives), _lifesLeft - 1, true]; + }; + + _unit setVariable [QGVAR(reviveStartTime), nil]; +}; + +// Schedule the loop to be executed again 1 sec later +[DFUNC(reviveStateLoop), [_unit], 1] call EFUNC(common,waitAndExecute); diff --git a/addons/medical/functions/fnc_setDead.sqf b/addons/medical/functions/fnc_setDead.sqf index 913431ccac..061a28c081 100644 --- a/addons/medical/functions/fnc_setDead.sqf +++ b/addons/medical/functions/fnc_setDead.sqf @@ -41,41 +41,8 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal == _unit setVariable [QGVAR(reviveStartTime), ACE_time]; [_unit, true] call FUNC(setUnconscious); - [{ - private "_startTime"; - params ["_args", "_idPFH"]; - _args params ["_unit"]; - _startTime = _unit getVariable [QGVAR(reviveStartTime), 0]; - - //If we are in reivie state in a blown up vehicle, try to unload so that people can access the body - if ((alive _unit) && {(vehicle _unit) != _unit} && {!alive (vehicle _unit)}) then { - TRACE_2("Unloading", _unit, vehicle _unit); - [_unit] call EFUNC(common,unloadPerson); - }; - - if (GVAR(maxReviveTime) > 0 && {ACE_time - _startTime > GVAR(maxReviveTime)}) exitwith { - [_idPFH] call CBA_fnc_removePerFrameHandler; - _unit setVariable [QGVAR(inReviveState), nil, true]; - _unit setVariable [QGVAR(reviveStartTime), nil]; - [_unit, true] call FUNC(setDead); - }; - - if !(_unit getVariable [QGVAR(inReviveState), false]) exitwith { - // revived without dieing, so in case we have lifes, remove one. - if (GVAR(amountOfReviveLives) > 0) then { - _lifesLeft = _unit getVariable[QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives)]; - _unit setVariable [QGVAR(amountOfReviveLives), _lifesLeft - 1, true]; - }; - - _unit setVariable [QGVAR(reviveStartTime), nil]; - [_idPFH] call CBA_fnc_removePerFrameHandler; - }; - if (GVAR(level) >= 2) then { - if (_unit getVariable [QGVAR(heartRate), 60] > 0) then { - _unit setVariable [QGVAR(heartRate), 0]; - }; - }; - }, 1, [_unit] ] call CBA_fnc_addPerFrameHandler; + // Run the loop that tracks the revive state + [_unit ] call FUNC(reviveStateLoop); false; }; From 4b702f68dfac6a89212b909e15231ae9668438c9 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 23:10:15 -0300 Subject: [PATCH 14/89] Make loops non public --- addons/medical/functions/fnc_medicationEffectLoop.sqf | 2 +- addons/medical/functions/fnc_vitalLoop.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/functions/fnc_medicationEffectLoop.sqf b/addons/medical/functions/fnc_medicationEffectLoop.sqf index 5ba54bfc9f..6d89675d8a 100644 --- a/addons/medical/functions/fnc_medicationEffectLoop.sqf +++ b/addons/medical/functions/fnc_medicationEffectLoop.sqf @@ -13,7 +13,7 @@ * ReturnValue: * None * - * Public: Yes + * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_vitalLoop.sqf b/addons/medical/functions/fnc_vitalLoop.sqf index d555f00a75..c9df4c6e91 100644 --- a/addons/medical/functions/fnc_vitalLoop.sqf +++ b/addons/medical/functions/fnc_vitalLoop.sqf @@ -9,7 +9,7 @@ * ReturnValue: * None * - * Public: Yes + * Public: No */ #include "script_component.hpp" From 90a54397ae69ea5b6d1ca9812d92481f2716bb88 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 23:20:26 -0300 Subject: [PATCH 15/89] Move the litter cleanup PFH to a loop using waitAndExecute --- addons/medical/XEH_PREP.hpp | 1 + .../functions/fnc_handleCreateLitter.sqf | 19 ++--------- .../functions/fnc_litterCleanupLoop.sqf | 33 +++++++++++++++++++ 3 files changed, 36 insertions(+), 17 deletions(-) create mode 100644 addons/medical/functions/fnc_litterCleanupLoop.sqf diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index b9ad6ba546..7c030ecf98 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -117,3 +117,4 @@ PREP(unconsciousPFH); // Networked litter PREP(createLitter); PREP(handleCreateLitter); +PREP(litterCleanupLoop); diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index c87d51a7e1..971342affb 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -44,22 +44,7 @@ if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then { GVAR(allCreatedLitter) pushBack [ACE_time, [_litterObject]]; if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then { + // Start the litter cleanup loop GVAR(litterPFHRunning) = true; - [{ - { - _x params ["_time", "_objects"]; - if (ACE_time - _time >= GVAR(litterCleanUpDelay)) then { - { - deleteVehicle _x; - } forEach _objects; - GVAR(allCreatedLitter) set[_forEachIndex, objNull]; - }; - } forEach GVAR(allCreatedLitter); - GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; - - if ( (count GVAR(allCreatedLitter)) == 0) exitWith { - [(_this select 1)] call CBA_fnc_removePerFrameHandler; - GVAR(litterPFHRunning) = false; - }; - }, 30, []] call CBA_fnc_addPerFrameHandler; + call FUNC(litterCleanupLoop); }; diff --git a/addons/medical/functions/fnc_litterCleanupLoop.sqf b/addons/medical/functions/fnc_litterCleanupLoop.sqf new file mode 100644 index 0000000000..ac102d5d59 --- /dev/null +++ b/addons/medical/functions/fnc_litterCleanupLoop.sqf @@ -0,0 +1,33 @@ +/* + * Author: Glowbal, esteldunedain + * Loop that cleans up litter + * + * Arguments: + * None + * + * ReturnValue: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +{ + _x params ["_time", "_objects"]; + if (ACE_time - _time >= GVAR(litterCleanUpDelay)) then { + { + deleteVehicle _x; + } forEach _objects; + GVAR(allCreatedLitter) set[_forEachIndex, objNull]; + }; +} forEach GVAR(allCreatedLitter); +GVAR(allCreatedLitter) = GVAR(allCreatedLitter) - [objNull]; + +// If no more litter remaining, exit the loop +if ( (count GVAR(allCreatedLitter)) == 0) exitWith { + GVAR(litterPFHRunning) = false; +}; + +// Schedule the loop to be executed again 30 sec later +[DFUNC(litterCleanupLoop), [], 30] call EFUNC(common,waitAndExecute); From 9e682253f39f1e369f2163cd8912b95c3f71e4af Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sun, 28 Feb 2016 23:33:51 -0300 Subject: [PATCH 16/89] Move the dead body cleanup PFH to a loop using waitAndExecute --- addons/medical/XEH_PREP.hpp | 1 + .../medical/functions/fnc_bodyCleanupLoop.sqf | 30 +++++++++++++++++++ .../functions/fnc_serverRemoveBody.sqf | 20 ++----------- 3 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 addons/medical/functions/fnc_bodyCleanupLoop.sqf diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index 7c030ecf98..d7322082c6 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -18,6 +18,7 @@ PREP(addUnconsciousCondition); PREP(addUnloadPatientActions); PREP(addVitalLoop); PREP(adjustPainLevel); +PREP(bodyCleanupLoop); PREP(canAccessMedicalEquipment); PREP(canTreat); PREP(canTreatCached); diff --git a/addons/medical/functions/fnc_bodyCleanupLoop.sqf b/addons/medical/functions/fnc_bodyCleanupLoop.sqf new file mode 100644 index 0000000000..03c1234713 --- /dev/null +++ b/addons/medical/functions/fnc_bodyCleanupLoop.sqf @@ -0,0 +1,30 @@ +/* + * Author: Glowbal, esteldunedain + * Loop that cleans up litter + * + * Arguments: + * None + * + * ReturnValue: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +{ + TRACE_2("body",_x,isPlayer _x); + if ((!isNull _x) && {!isPlayer _x}) then {deleteVehicle _x}; +} forEach GVAR(bodiesToDelete); + +// deleteVehicle doesn't have instant results so it won't usualy be filtered until next run +GVAR(bodiesToDelete) = GVAR(bodiesToDelete) - [objNull]; + +// If no more bodies remain, exit the loop +if (GVAR(bodiesToDelete) isEqualTo []) exitWith { + TRACE_1("array emptied - rem PFEH",GVAR(bodiesToDelete)); +}; + +// Schedule the loop to be executed again 20 sec later +[DFUNC(bodyCleanupLoop), [], 20] call EFUNC(common,waitAndExecute); diff --git a/addons/medical/functions/fnc_serverRemoveBody.sqf b/addons/medical/functions/fnc_serverRemoveBody.sqf index de089b199b..311199b1b8 100644 --- a/addons/medical/functions/fnc_serverRemoveBody.sqf +++ b/addons/medical/functions/fnc_serverRemoveBody.sqf @@ -26,23 +26,9 @@ TRACE_2("",_target,isPlayer _target); if (isNil QGVAR(bodiesToDelete)) then {GVAR(bodiesToDelete) = [];}; GVAR(bodiesToDelete) pushBack _target; -//Start up PFEH to wait for bodies to be free to delete -if ((count GVAR(bodiesToDelete)) == 1) then { - TRACE_1("starting PFEH",GVAR(bodiesToDelete)); - [{ - { - TRACE_2("body",_x,isPlayer _x); - if ((!isNull _x) && {!isPlayer _x}) then {deleteVehicle _x}; - } forEach GVAR(bodiesToDelete); - - //deleteVehicle doesn't have instant results so it won't usualy be filtered until next run - GVAR(bodiesToDelete) = GVAR(bodiesToDelete) - [objNull]; - - if (GVAR(bodiesToDelete) isEqualTo []) then { - TRACE_1("array emptied - rem PFEH",GVAR(bodiesToDelete)); - [_this select 1] call CBA_fnc_removePerFrameHandler; - }; - }, 20, []] call CBA_fnc_addPerFrameHandler; +// Start up a loop to wait for bodies to be free to delete +if ((count GVAR(bodiesToDelete)) > 0) then { + [] call FUNC(bodyCleanupLoop); }; nil From 46a96dd5da73e12c8b337c1fe121bd28db81566a Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Tue, 1 Mar 2016 18:14:36 -0300 Subject: [PATCH 17/89] Move spare barrel event handlers out of postInit --- addons/overheating/XEH_PREP.hpp | 2 + addons/overheating/XEH_postInit.sqf | 97 +------------------ .../functions/fnc_loadCoolestSpareBarrel.sqf | 51 ++++++++++ .../fnc_sendSpareBarrelsTemperaturesHint.sqf | 75 ++++++++++++++ .../functions/fnc_swapBarrelCallback.sqf | 2 +- 5 files changed, 132 insertions(+), 95 deletions(-) create mode 100644 addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf create mode 100644 addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf diff --git a/addons/overheating/XEH_PREP.hpp b/addons/overheating/XEH_PREP.hpp index 26366b9896..8f584ef6e6 100644 --- a/addons/overheating/XEH_PREP.hpp +++ b/addons/overheating/XEH_PREP.hpp @@ -8,7 +8,9 @@ PREP(firedEH); PREP(getWeaponData); PREP(handleTakeEH); PREP(jamWeapon); +PREP(loadCoolestSpareBarrel); PREP(overheat); +PREP(sendSpareBarrelsTemperaturesHint); PREP(swapBarrel); PREP(swapBarrelCallback); PREP(updateSpareBarrelsTemperaturesThread); diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index f29a1c624c..0e8eaad7c4 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -12,100 +12,9 @@ if (isServer) then { // Keep track of the temperature of stored spare barrels GVAR(storedSpareBarrels) = [] call CBA_fnc_hashCreate; - ["spareBarrelsCheckTemperatures", { - params ["_player","_unit"]; - // Find all spare barrel the player has - private _allMags = magazinesDetail _unit; - _allMags = _allMags select {_x find "ACE Spare Barrel" == 0}; - if ((count _allMags) < 1) exitWith {}; - - // Determine the temp of each barrel - private _temps = []; - { - private _temp = 0; - if ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashHasKey) then { - _temp = ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashGet) select 0; - }; - _temps pushBack _temp; - } forEach _allMags; - TRACE_1("_temps",_temps); - - // Count cool - private _countCool = {_x < 20} count _temps; - private _countWarm = {(_x >= 20) && (_x < 100)} count _temps; - private _countHot = {(_x >= 100) && (_x < 200)} count _temps; - private _countVeryHot = {(_x >= 200) && (_x < 600)} count _temps; - private _countExtremelyHot = {_x >= 600} count _temps; - private _output = ["%1 %2%3%4 %5%6%7 %8%9%10 %11%12%13 %14"]; - private _size = 1.0; - if (_countCool > 0) then { - _output pushBack _countCool; - _output pushBack LSTRING(BarrelCool); - _output pushBack "
"; - _size = _size + 0.5; - }; - if (_countWarm > 0) then { - _output pushBack _countWarm; - _output pushBack LSTRING(BarrelWarm); - _output pushBack "
"; - _size = _size + 0.5; - }; - if (_countHot > 0) then { - _output pushBack _countHot; - _output pushBack LSTRING(BarrelHot); - _output pushBack "
"; - _size = _size + 0.5; - }; - if (_countVeryHot > 0) then { - _output pushBack _countVeryHot; - _output pushBack LSTRING(BarrelVeryHot); - _output pushBack "
"; - _size = _size + 0.5; - }; - if (_countExtremelyHot > 0) then { - _output pushBack _countExtremelyHot; - _output pushBack LSTRING(BarrelExtremelyHot); - _size = _size + 0.5; - }; - - TRACE_1("_output",_output); - ["displayTextStructured", [_player], [_output, _size, _player]] call EFUNC(common,targetEvent); - }] call EFUNC(common,addEventHandler); - - ["spareBarrelLoadedCoolest", { - params ["_unit", "_weapon", "_weaponTemp", "_barrelMass"]; - TRACE_4("spareBarrelLoadedCoolest1",_unit,_weapon,_weaponTemp,_barrelMass); - - // Find all spare barrel the player has - private _allMags = magazinesDetail _unit; - TRACE_1("spareBarrelLoadedCoolest2",_allMags); - _allMags = _allMags select {_x find "ACE Spare Barrel" == 0}; - TRACE_1("spareBarrelLoadedCoolest3",_allMags); - if ((count _allMags) < 1) exitWith {}; - - // Determine which on is coolest - private _coolestTemp = 10000; - private _coolestMag = _allMags select 0; - { - private _temp = 0; - if ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashHasKey) then { - _temp = ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashGet) select 0; - }; - TRACE_2("spareBarrelLoadedCoolest4",_x,_temp); - if (_temp < _coolestTemp) then { - _coolestTemp = _temp; - _coolestMag = _x; - }; - } forEach _allMags; - TRACE_3("spareBarrelLoadedCoolest5",_coolestTemp,_coolestMag,_weaponTemp); - - // The new weapon temperature is similar to the coolest barrel - // Publish the new temperature value - _unit setVariable [format [QGVAR(%1_temp), _weapon], _coolestTemp, true]; - - // Heat up the coolest barrel to the former weapon temperature - [GVAR(storedSpareBarrels), _coolestMag, [_weaponTemp, ACE_Time, _barrelMass]] call CBA_fnc_hashSet; - }] call EFUNC(common,addEventHandler); + // Install event handlers for spare barrels + ["spareBarrelsSendTemperatureHint", FUNC(sendSpareBarrelsTemperaturesHint)] call EFUNC(common,addEventHandler); + ["spareBarrelsLoadCoolest", FUNC(loadCoolestSpareBarrel)] call EFUNC(common,addEventHandler); // Schedule cool down calculation of stored spare barrels [] call FUNC(updateSpareBarrelsTemperaturesThread); diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf new file mode 100644 index 0000000000..97fe9d8883 --- /dev/null +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -0,0 +1,51 @@ +/* + * Author: esteldunedain + * Collect the temperature of all the spare barrels a unit has and load the + * coolest on the unit weapon. Runs on the server. + * + * Argument: + * 0: Unit + * 1: Weapon + * 2: Weapon temp before switching + * 3: Mass of the removed barrel + * + * Return value: + * None + * + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_weapon", "_weaponTemp", "_barrelMass"]; +TRACE_4("loadCoolestSpareBarrel1",_unit,_weapon,_weaponTemp,_barrelMass); + +// Find all spare barrel the player has +private _allMags = magazinesDetail _unit; +TRACE_1("loadCoolestSpareBarrel2",_allMags); +_allMags = _allMags select {_x find "ACE Spare Barrel" == 0}; +TRACE_1("loadCoolestSpareBarrel3",_allMags); +if ((count _allMags) < 1) exitWith {}; + +// Determine which on is coolest +private _coolestTemp = 10000; +private _coolestMag = _allMags select 0; +{ + private _temp = 0; + if ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashHasKey) then { + _temp = ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashGet) select 0; + }; + TRACE_2("loadCoolestSpareBarrel4",_x,_temp); + if (_temp < _coolestTemp) then { + _coolestTemp = _temp; + _coolestMag = _x; + }; +} forEach _allMags; +TRACE_3("loadCoolestSpareBarrel5",_coolestTemp,_coolestMag,_weaponTemp); + +// The new weapon temperature is similar to the coolest barrel +// Publish the new temperature value +_unit setVariable [format [QGVAR(%1_temp), _weapon], _coolestTemp, true]; + +// Heat up the coolest barrel to the former weapon temperature +[GVAR(storedSpareBarrels), _coolestMag, [_weaponTemp, ACE_Time, _barrelMass]] call CBA_fnc_hashSet; diff --git a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf new file mode 100644 index 0000000000..01a6ecc0a4 --- /dev/null +++ b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf @@ -0,0 +1,75 @@ +/* + * Author: esteldunedain + * Collect the temperature of all the spare barrels a unit has and send a hint + * to a client. Runs on the server. + * + * Argument: + * 0: Target unit of the hint + * 1: Unit that has the spare barrels + * + * Return value: + * None + * + * + * Public: No + */ +#include "script_component.hpp" + +params ["_player","_unit"]; + +// Find all spare barrel the player has +private _allMags = magazinesDetail _unit; +_allMags = _allMags select {_x find "ACE Spare Barrel" == 0}; +if ((count _allMags) < 1) exitWith {}; + +// Determine the temp of each barrel +private _temps = []; +{ + private _temp = 0; + if ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashHasKey) then { + _temp = ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashGet) select 0; + }; + _temps pushBack _temp; +} forEach _allMags; +TRACE_1("_temps",_temps); + +// Count cool +private _countCool = {_x < 20} count _temps; +private _countWarm = {(_x >= 20) && (_x < 100)} count _temps; +private _countHot = {(_x >= 100) && (_x < 200)} count _temps; +private _countVeryHot = {(_x >= 200) && (_x < 600)} count _temps; +private _countExtremelyHot = {_x >= 600} count _temps; +private _output = ["%1 %2%3%4 %5%6%7 %8%9%10 %11%12%13 %14"]; +private _size = 1.0; +if (_countCool > 0) then { + _output pushBack _countCool; + _output pushBack LSTRING(BarrelCool); + _output pushBack "
"; + _size = _size + 0.5; +}; +if (_countWarm > 0) then { + _output pushBack _countWarm; + _output pushBack LSTRING(BarrelWarm); + _output pushBack "
"; + _size = _size + 0.5; +}; +if (_countHot > 0) then { + _output pushBack _countHot; + _output pushBack LSTRING(BarrelHot); + _output pushBack "
"; + _size = _size + 0.5; +}; +if (_countVeryHot > 0) then { + _output pushBack _countVeryHot; + _output pushBack LSTRING(BarrelVeryHot); + _output pushBack "
"; + _size = _size + 0.5; +}; +if (_countExtremelyHot > 0) then { + _output pushBack _countExtremelyHot; + _output pushBack LSTRING(BarrelExtremelyHot); + _size = _size + 0.5; +}; + +TRACE_1("_output",_output); +["displayTextStructured", [_player], [_output, _size, _player]] call EFUNC(common,targetEvent); diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index 8bd63e4874..6eba214617 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -34,7 +34,7 @@ private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon > // store the removed barrel with the former weapon temperature. The server // also updates the current weapon temperature to match that of the new // loaded barrel. -["spareBarrelLoadedCoolest", [_player, _weapon, _temp, _barrelMass]] call EFUNC(common,serverEvent); +["spareBarrelsLoadCoolest", [_player, _weapon, _temp, _barrelMass]] call EFUNC(common,serverEvent); // Store the update time _player setVariable [format [QGVAR(%1_time), _weapon], ACE_time]; From a041555381376834bb4d482e6b927080a731fb85 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Tue, 1 Mar 2016 18:16:14 -0300 Subject: [PATCH 18/89] Add an animation and progressbar to the "Check spare barrels temperatures" action --- addons/overheating/CfgVehicles.hpp | 2 +- addons/overheating/XEH_PREP.hpp | 1 + .../fnc_checkSpareBarrelsTemperatures.sqf | 36 +++++++++++++++++++ addons/overheating/stringtable.xml | 5 ++- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index 61b619a79b..928a22420a 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -34,7 +34,7 @@ class CfgVehicles { displayName = CSTRING(CheckTemperatureSpareBarrelsShort); condition = QUOTE( 'ACE_SpareBarrel' in magazines _player); exceptions[] = {"isNotInside", "isNotSitting"}; - statement = QUOTE([ARR_2('spareBarrelsCheckTemperatures',[ARR_2(_player,_player)])] call EFUNC(common,serverEvent);); + statement = QUOTE( [ARR_1(_player)] call FUNC(checkSpareBarrelsTemperatures); ); showDisabled = 0; priority = 2.8; icon = QUOTE(PATHTOF(UI\temp_ca.paa)); diff --git a/addons/overheating/XEH_PREP.hpp b/addons/overheating/XEH_PREP.hpp index 8f584ef6e6..cc1948e6bd 100644 --- a/addons/overheating/XEH_PREP.hpp +++ b/addons/overheating/XEH_PREP.hpp @@ -1,6 +1,7 @@ PREP(calculateCooling); PREP(canUnjam); +PREP(checkSpareBarrelsTemperatures); PREP(checkTemperature); PREP(clearJam); PREP(displayTemperature); diff --git a/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf b/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf new file mode 100644 index 0000000000..b7509671bb --- /dev/null +++ b/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf @@ -0,0 +1,36 @@ +/* + * Author: esteldunedain + * Make the player check the temperature of his spare barrels + * + * Arguments: + * 0: Player + * + * Return Value: + * None + * + * + * Public: No + */ +#include "script_component.hpp" + +params ["_player"]; + +// Check canInteractWith: +if (!([_player, objNull, ["isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith))) exitWith {}; + +// Make the unit go kneeling +[_unit] call EFUNC(common,goKneeling); + +// Spawn a progress bar +[ + 5.0, + [_player], + { + // Time has enlapsed, ask the server to send the hint + ['spareBarrelsSendTemperatureHint', [_unit, _unit]] call EFUNC(common,serverEvent); + }, + {}, + (localize LSTRING(CheckingSpareBarrelsTemperatures)), + {true}, + ["isNotInside", "isNotSitting"] +] call EFUNC(common,progressBar); diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index ace5806f61..fc38ae0054 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -230,7 +230,10 @@ Проверка температуры... - Check spare barrel temperatures + Check spare barrels temperatures + + + Checking spare barrels temperatures... Temperature From b8c8c21a02de54fbe9081376fee72db6943ccba0 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Tue, 1 Mar 2016 18:17:23 -0300 Subject: [PATCH 19/89] Remove spare barrels from starting equipments --- addons/overheating/CfgVehicles.hpp | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index 928a22420a..8981c907f7 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -108,30 +108,4 @@ class CfgVehicles { MACRO_ADDITEM(ACE_SpareBarrel,6); }; }; -/* - // Add ACE_SpareBarrel to every machine gunner. - #define MACRO_ADDSPAREBARREL \ - items[] = {"FirstAidKit", "ACE_SpareBarrel"}; \ - respawnitems[] = {"FirstAidKit", "ACE_SpareBarrel"}; - - // NATO - class B_Soldier_02_f; class B_soldier_AR_F:B_Soldier_02_f {MACRO_ADDSPAREBARREL}; - class B_Soldier_support_base_F; class B_soldier_AAR_F:B_Soldier_support_base_F {MACRO_ADDSPAREBARREL}; - class B_Soldier_base_F; class B_CTRG_soldier_AR_A_F:B_Soldier_base_F {MACRO_ADDSPAREBARREL}; - - // Guerrilla - class I_G_Soldier_base_F; class I_G_Soldier_AR_F:I_G_Soldier_base_F {MACRO_ADDSPAREBARREL}; - class B_G_Soldier_AR_F:I_G_Soldier_AR_F {MACRO_ADDSPAREBARREL}; - class O_G_Soldier_AR_F:I_G_Soldier_AR_F {MACRO_ADDSPAREBARREL}; - - // Iran - class O_Soldier_base_F; class O_Soldier_AR_F:O_Soldier_base_F {MACRO_ADDSPAREBARREL}; - class O_Soldier_support_base_F; class O_Soldier_AAR_F:O_Soldier_support_base_F {MACRO_ADDSPAREBARREL}; - class O_Soldier_Urban_base; class O_soldierU_AR_F:O_Soldier_Urban_base {MACRO_ADDSPAREBARREL}; - class O_soldierU_AAR_F:O_Soldier_Urban_base {MACRO_ADDSPAREBARREL}; - - // Czech - class I_Soldier_02_F; class I_Soldier_AR_F:I_Soldier_02_F {MACRO_ADDSPAREBARREL}; - class I_Soldier_support_base_F; class I_Soldier_AAR_F:I_Soldier_support_base_F {MACRO_ADDSPAREBARREL}; -*/ }; From f130d6c2530cac2bc6fae3d73744e6bdd2909c02 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Tue, 1 Mar 2016 18:17:58 -0300 Subject: [PATCH 20/89] Increase spare barrel mass to 60 (2.7 Kg) --- addons/overheating/CfgMagazines.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/overheating/CfgMagazines.hpp b/addons/overheating/CfgMagazines.hpp index ad381ff30e..d9b3ee2bdc 100644 --- a/addons/overheating/CfgMagazines.hpp +++ b/addons/overheating/CfgMagazines.hpp @@ -5,7 +5,7 @@ class CfgMagazines { picture = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); displayName = "ACE Spare Barrel"; //!!!CANNOT be localized!!!: because it is used as part of the magazineDetail string count = 1; - mass = 40; + mass = 60; ACE_isUnique = 1; }; }; From e6a2ca71026a090a1f63018c8e93be2fc9573391 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Tue, 1 Mar 2016 19:25:45 -0300 Subject: [PATCH 21/89] Fix typos --- addons/overheating/CfgVehicles.hpp | 2 +- .../functions/fnc_checkSpareBarrelsTemperatures.sqf | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index 8981c907f7..61052553a4 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -34,7 +34,7 @@ class CfgVehicles { displayName = CSTRING(CheckTemperatureSpareBarrelsShort); condition = QUOTE( 'ACE_SpareBarrel' in magazines _player); exceptions[] = {"isNotInside", "isNotSitting"}; - statement = QUOTE( [ARR_1(_player)] call FUNC(checkSpareBarrelsTemperatures); ); + statement = QUOTE( [_player] call FUNC(checkSpareBarrelsTemperatures); ); showDisabled = 0; priority = 2.8; icon = QUOTE(PATHTOF(UI\temp_ca.paa)); diff --git a/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf b/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf index b7509671bb..e8dbaabec0 100644 --- a/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf +++ b/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf @@ -19,15 +19,17 @@ params ["_player"]; if (!([_player, objNull, ["isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith))) exitWith {}; // Make the unit go kneeling -[_unit] call EFUNC(common,goKneeling); +[_player] call EFUNC(common,goKneeling); // Spawn a progress bar [ 5.0, [_player], { + params ["_args", "_elapsedTime", "_totalTime", "_errorCode"]; + _args params ["_player"]; // Time has enlapsed, ask the server to send the hint - ['spareBarrelsSendTemperatureHint', [_unit, _unit]] call EFUNC(common,serverEvent); + ['spareBarrelsSendTemperatureHint', [_player, _player]] call EFUNC(common,serverEvent); }, {}, (localize LSTRING(CheckingSpareBarrelsTemperatures)), From 850a499c0e246fbd70b10a90c0e04cc9abf1364d Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Tue, 1 Mar 2016 19:26:20 -0300 Subject: [PATCH 22/89] Localize spare barrel's displayName --- addons/overheating/CfgMagazines.hpp | 2 +- addons/overheating/XEH_preInit.sqf | 10 ++++++++++ .../functions/fnc_loadCoolestSpareBarrel.sqf | 13 ++++++------- .../fnc_sendSpareBarrelsTemperaturesHint.sqf | 9 +++++---- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/addons/overheating/CfgMagazines.hpp b/addons/overheating/CfgMagazines.hpp index d9b3ee2bdc..cc040eca0f 100644 --- a/addons/overheating/CfgMagazines.hpp +++ b/addons/overheating/CfgMagazines.hpp @@ -1,9 +1,9 @@ class CfgMagazines { class CA_Magazine; class ACE_SpareBarrel: CA_Magazine { + displayName = CSTRING(SpareBarrelName); descriptionshort = CSTRING(SpareBarrelDescription); picture = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); - displayName = "ACE Spare Barrel"; //!!!CANNOT be localized!!!: because it is used as part of the magazineDetail string count = 1; mass = 60; ACE_isUnique = 1; diff --git a/addons/overheating/XEH_preInit.sqf b/addons/overheating/XEH_preInit.sqf index a7feade1c3..54bc392273 100644 --- a/addons/overheating/XEH_preInit.sqf +++ b/addons/overheating/XEH_preInit.sqf @@ -4,4 +4,14 @@ ADDON = false; #include "XEH_PREP.hpp" +FakeCBA_fnc_getMagazineIds = { + params [["_unit", objNull, [objNull]], ["_magazine", "", [""]]]; + + private _displayName = getText (configFile >> "CfgMagazines" >> _magazine >> "displayName"); + + if (_displayName isEqualTo "") exitWith {[]}; + + magazinesDetail _unit select {_x find _displayName == 0} apply {_x = _x splitString "[:]"; _x select (count _x - 1)}; +}; + ADDON = true; diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index 97fe9d8883..23d2c7959e 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -21,15 +21,13 @@ params ["_unit", "_weapon", "_weaponTemp", "_barrelMass"]; TRACE_4("loadCoolestSpareBarrel1",_unit,_weapon,_weaponTemp,_barrelMass); // Find all spare barrel the player has -private _allMags = magazinesDetail _unit; -TRACE_1("loadCoolestSpareBarrel2",_allMags); -_allMags = _allMags select {_x find "ACE Spare Barrel" == 0}; -TRACE_1("loadCoolestSpareBarrel3",_allMags); -if ((count _allMags) < 1) exitWith {}; +private _allBarrels = [_unit, "ACE_SpareBarrel"] call FakeCBA_fnc_getMagazineIds; +TRACE_1("_allBarrels",_allBarrels); +if ((count _allBarrels) < 1) exitWith {}; // Determine which on is coolest private _coolestTemp = 10000; -private _coolestMag = _allMags select 0; +private _coolestMag = _allBarrels select 0; { private _temp = 0; if ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashHasKey) then { @@ -40,7 +38,7 @@ private _coolestMag = _allMags select 0; _coolestTemp = _temp; _coolestMag = _x; }; -} forEach _allMags; +} forEach _allBarrels; TRACE_3("loadCoolestSpareBarrel5",_coolestTemp,_coolestMag,_weaponTemp); // The new weapon temperature is similar to the coolest barrel @@ -49,3 +47,4 @@ _unit setVariable [format [QGVAR(%1_temp), _weapon], _coolestTemp, true]; // Heat up the coolest barrel to the former weapon temperature [GVAR(storedSpareBarrels), _coolestMag, [_weaponTemp, ACE_Time, _barrelMass]] call CBA_fnc_hashSet; + diff --git a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf index 01a6ecc0a4..9f286832c6 100644 --- a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf +++ b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf @@ -18,9 +18,10 @@ params ["_player","_unit"]; // Find all spare barrel the player has -private _allMags = magazinesDetail _unit; -_allMags = _allMags select {_x find "ACE Spare Barrel" == 0}; -if ((count _allMags) < 1) exitWith {}; +TRACE_2("sendSpareBarrelsTemperatureHunt",_player,_unit); +private _allBarrels = [_unit, "ACE_SpareBarrel"] call FakeCBA_fnc_getMagazineIds; +TRACE_1("_allBarrels",_allBarrels); +if ((count _allBarrels) < 1) exitWith {}; // Determine the temp of each barrel private _temps = []; @@ -30,7 +31,7 @@ private _temps = []; _temp = ([GVAR(storedSpareBarrels), _x] call CBA_fnc_hashGet) select 0; }; _temps pushBack _temp; -} forEach _allMags; +} forEach _allBarrels; TRACE_1("_temps",_temps); // Count cool From d8862897163ee46c23a4e3caf382a735eeab6c2e Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Tue, 1 Mar 2016 19:27:39 -0300 Subject: [PATCH 23/89] Display the new weapon temperature right after swapping barrels --- addons/overheating/XEH_postInit.sqf | 5 +++++ addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf | 2 ++ addons/overheating/functions/fnc_swapBarrelCallback.sqf | 3 --- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index 0e8eaad7c4..831c2c2348 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -55,3 +55,8 @@ GVAR(cacheSilencerData) = call CBA_fnc_createNamespace; ["firedPlayerNonLocal", DFUNC(firedEH)] call EFUNC(common,addEventHandler); }; }] call EFUNC(common,addEventHandler); + +// Install event handlers to display temp when a barrel was swapped +["barrelSwapped", { + _this call FUNC(displayTemperature); +}] call EFUNC(common,addEventHandler); diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index 23d2c7959e..dd58d58207 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -48,3 +48,5 @@ _unit setVariable [format [QGVAR(%1_temp), _weapon], _coolestTemp, true]; // Heat up the coolest barrel to the former weapon temperature [GVAR(storedSpareBarrels), _coolestMag, [_weaponTemp, ACE_Time, _barrelMass]] call CBA_fnc_hashSet; +// Send an event so the local machine can show the hint +["barrelSwapped", _unit, [_unit, _weapon]] call EFUNC(common,objectEvent); diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index 6eba214617..62a3b13ef6 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -24,9 +24,6 @@ TRACE_2("params",_player,_weapon); _player playAction QGVAR(GestureMountMuzzle); playSound "ACE_BarrelSwap"; -// don't consume the barrel, but rotate through them. -[localize LSTRING(SwappedBarrel), QUOTE(PATHTOF(UI\spare_barrel_ca.paa))] call EFUNC(common,displayTextPicture); - private _temp = _player getVariable [format [QGVAR(%1_temp), _weapon], 0]; private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; From 730e79def089075b651ade6e70c45b703e3b3448 Mon Sep 17 00:00:00 2001 From: nomisum Date: Wed, 2 Mar 2016 22:17:49 +0100 Subject: [PATCH 24/89] added fastroping sounds --- addons/fastroping/CfgSounds.hpp | 12 ++++++++++++ addons/fastroping/data/sounds/LICENSE.md | 4 ++++ .../fastroping/data/sounds/fastroping_rope.ogg | Bin 0 -> 32290 bytes .../fastroping/data/sounds/fastroping_thud.ogg | Bin 0 -> 20522 bytes .../functions/fnc_fastRopeLocalPFH.sqf | 9 +++++++++ 5 files changed, 25 insertions(+) create mode 100644 addons/fastroping/CfgSounds.hpp create mode 100644 addons/fastroping/data/sounds/LICENSE.md create mode 100644 addons/fastroping/data/sounds/fastroping_rope.ogg create mode 100644 addons/fastroping/data/sounds/fastroping_thud.ogg diff --git a/addons/fastroping/CfgSounds.hpp b/addons/fastroping/CfgSounds.hpp new file mode 100644 index 0000000000..e6532146fe --- /dev/null +++ b/addons/fastroping/CfgSounds.hpp @@ -0,0 +1,12 @@ +class CfgSounds { + class ACE_Fastroping_Rope { + name = "ACE_Fastroping_Rope"; + sound[] = {PATHTOF(data\sounds\fastroping_rope.ogg), db0, 1.0}; + titles[] = {}; + }; + class ACE_Fastroping_Thud { + name = "ACE_Fastroping_Thud"; + sound[] = {PATHTOF(data\sounds\fastroping_thud.ogg), db0, 1.0}; + titles[] = {}; + }; +}; \ No newline at end of file diff --git a/addons/fastroping/data/sounds/LICENSE.md b/addons/fastroping/data/sounds/LICENSE.md new file mode 100644 index 0000000000..d6312034ca --- /dev/null +++ b/addons/fastroping/data/sounds/LICENSE.md @@ -0,0 +1,4 @@ +Uses a sound from Tessa Elieff (Freesound.org) +according to Creative Commons Attribution License. + +Also sounds from helenacm and Adam_N, both under CC 0. Thanks anyway. \ No newline at end of file diff --git a/addons/fastroping/data/sounds/fastroping_rope.ogg b/addons/fastroping/data/sounds/fastroping_rope.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ec68da29607a9c84d26a198b12a97b0ee3c1bdcc GIT binary patch literal 32290 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 literal 0 HcmV?d00001 diff --git a/addons/fastroping/data/sounds/fastroping_thud.ogg b/addons/fastroping/data/sounds/fastroping_thud.ogg new file mode 100644 index 0000000000000000000000000000000000000000..136a638ea9033a059138df2443eca54539344e4b GIT binary patch literal 20522 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μe}HDQd{7n!M`GY0`%{WW@pxt4 zP{YW5#@sknJ%3XBru{+^lk?{(fstA(bz!Z2rg}BagJJ_AF{*}stv2I=$rGD<=u$yC zrVqsZ>L;D)4bJZ3r^Qm)ih$RGF#^5qUE$PySO)W(Y+5Va)(h7X@kiInlEXVVWZ{!@ znakBF$hfX-ALR1(wHN&Jp1E<&`*P@O)mwP+A8ORFH=hr&W+u?gn9^ z(XWw>KBTF^f^3?Gvdvr!Tl>{0!K`Gp7-b-rX0jb#g&am9uEk-arUy>ej|cxlTx>b2 zIqH`+m%V@tJ~ourdmGsm{U>BG{P!o0`JS*ebH2lIs}gXbxV&=>dj5!K!q=_$c(qQu zSrit(w&UB`h8?Ab7?5m>>2`h^;tTqC=bUIv@HOx?o*FmnNJxu^rgf*idR7=4S8^1G zm5QW1Fgu^zn-x@sBubp;E|6sISlP%g)MNC6+!~F97fXWPriy5Md0}RMoV%cMy^^r9 zaU0IYt#YpS9QoDIfwmfLS!eC8n5LYa>i1*L+`Roq-MrQux4&|k7 zKO1>Qjgq3w8qPcU-9rBKmi43n6L?M|?~iUzo?&h+>%N#{z+6DhUs~<@E~Lm1c>jly zX(Vu-rMH=+CMf7%D8r;dn z&+Mz2PJ^GVn>W}+XT+T5eJvK7`fjHF400Om@BzQivZ#$`zT?+tc~SJ%5GfPtKUaa= zml%U^z3S60WV61di?y;V)(uPw-R$JCw_OvnJ zp(WTnud$imUTe3*dyRk2sJiQHSSd_>UeLDnIxgwl_ttyQX25p7*IS|~A>YN`c6-de})mqlOi8uWqg@?6Xd6$icV|;;lC#YQ7*C#-~rcxSh5s*?VZQpk7ZxY=x zN>cevZoZ7)o$rRuB=zT;wK;Adi9-tN&Pp@DXoiq;Drv=p0;k_k)k)N{`MFAW{NnAa zZpf?o$y_^K?o6kw=YjY#N%}4UP}kjFJGqdSd;!YN-BfGG7*DZ4v%L(Jl1P1&(wsl@ z21%ukr(PKatW?%*1_gUE$J}4g%>}YlVB)tdVCWn6$rwcW9QLEz<0s)Vod+o__2~qT z?J~#_w)7n^M(&{bhVZ#B7xziTFj(@robR7hO{T+_r?X+WnoS%*WlDh6U6LnV_$+Qc z9mmAwSNxspQ!EmP4lgNpD1ud{&_6caPE!^NV3bOjxur2@c=uii9^-$u&$Gc`FjXoU zDt*&f$0}Y$Q*aq&$`D81uv;~*MZvRL$~O3f&Nn)TgF!Q|;m=pWl0lVW+yax##?boL z2MznvavUjsM`G(Q2wr4I+ifH$TsV09YxnNv`93XVO->y`3>(fpQO(P865#@`pJB2s z<^g{$yT!CrEZ~U=6_2?nU_2z7#JK;R<48B{iSW+l4V1|~?e)jY!UfVz;f?Ufj^^nO z6Afxs#AH-Z<$EL(An%etnkY#W^t!jFrTL*;kul|LfUAr5bx@1;{D|WAk2`Z#x1Ln| zz>R}H{`x-W!XF6czF*GAP{Pp$qGHZBvndHBD@}=J(Jv-f5 zOY{T-bF|b<`Te$T0A1EaaJB_~11hb}%(Cp)r>x&drho6@Lc&iU00X~-El@FpVelekZF$JY<<5oqOTB};$W zpU=Pjfs+$hw8E_xQdGstHJ7?K8(~$?6;0Bxi6ndDWS+3r^o;X09tt#^f9t~r5nAli zd?M_O9j83KTORE?vwGv_nZ0oZ8)OB&pXIK;o~a-fsShHSA2Tl?Mo<9;H1byH_JJ6j zG~2RUqM}wj6ZJC!i?W|CLmOnuDiYBF_ly<=rQ=fKOjnN`{ta!r&-d(P<%fA2Dg!9$ zV>t-lw|4r=UDHAqvbqy63=}d5?pBwJEBrf?hoJSp?30EE>Tq6sds{0))CCP#;%TbC zhBT(nE9y!P)u?G$*nKK*$PM^WWtIXT#@0}!dT+&=;5N)$x5sl7973Ym1$|5Rq$qst zHLmr9hz#TT2gJqOAEb2cwd-$Qx18phq=$Y|KvXjKr5g@gcB=hqvzaHD_fg-hgA%3| zO>9}H#{5|hZi3sEAzd`zEY|*8#-+JWn>-?4U|vuFDzJCdzpbi6q-kj;Wry7s9o5qn znsiL6=4TG$6Zbsdl?TCoxuifL{ULE#y~X4y;9EyTVpdTXs^qt5;lO^vz^pz*L#I85 zT4`#w@Pm_&U&l=thilxXza^~LIy!YCS;_eVAt?xVv(j`uG(vJxBTJaShRbZ4)>eD} z&iI>#4D0W*?SB4DJ*%7-@IdkOo~jk6)49K=Kc)>a^)okWbhGOrJ+gbSQ6%NDsmLk|on4o_^LL z4Jvr4$I}QK+Y*Q;89Pl;$itmXb z`>(mosa0_Wy0t{2ie=$~G)0A<*XS8|>k1yMNn-@ZTJ2ADrB*az5u>nLnM!l-C+{wQ zzxVCY%9R{-XsC~uVwlzV*sH=9{AcPDf(@?IrMP{tgr*)R5b5H+h$aSpV3V-lQ>d#d zPUiLlZ`mZx+vdxBP`32Vw;SFKxobuNDKl@S@fSA-mS${!kZE`bhu;qTLbwr1FVu(Y zZa74J$B^H}Cz=j%Ng+ZJFVaOeD67X+e&g0pW1igdq+qY0J`O**uWCjpoQ98RWU-tE z5ip=;up8b%epebgzt-|qw9b+&hfn>vW+x8NzmnpYUZVM1;h0y0lT)(%f+zVb zvH;3zg4f>^cY#NrQkC;W=ygbvka+s&F&>gfU{~RZh&koU2#!P?mg=lJtK|@MTtW}G z1D|1x3ucmrOKTi=+gIvX^5Ys*rBkz1BZ<^e+M?3LX4jY;<(6bN$~{u3w4Zrww_fk; zZf{7xX(z?(@|Ua#`Z_|i{Wh$$>uTjgfjA0`MT0CXG9W}BUB=uS*{sQ`sS-7u1HmAu7g90t)5WS-JlT(zW-(6 zjP!7=$uluaJUVS|1_edeMe$&S0bbQt@uWlf#47CKN5JVy<+x_u=)Jn^JCl;v) z3(NMz4#o=x+smPX>hBflervN%XQ(&uaWEQpLH~$MP9q(*?u=7w{` zXYv)q!t8R^8yTIYy=WAp{)6yoH5p`y{^GuJ;ETk1sli#-BERtW0yCXjdk(reHD*#9 z^OLB+r3o-~Sf$7se=SHd><{&c{k~C=#3=kbmkA#s54|d9uJAp=TT+h>{x#hZma(@^ z_}@0)*O~uWB=mrU3cakfUOQRe6vnl^M*c7$NFY4d#-S-zW_%NDxWr|Lb(Cd5<25^B zawN^YLAmJVSAs@*|L#d1X+-H0|3EuxTdyUW4vtK|q~ROHUri#o1e?CX+mKkfBHVKv zTPs2Hqje*@YRe1`DbJ1Q8UuN9-ptpRtSkxyruO(kNb@z^x^|bc0DQvucT6qVm`D*B z^L&lRw&2;2dq~&E)m6e4hMA!U#EqG52@$XfccZA1WNy&2x4sIAuz2Bef!FWF)K~pW4 zLG-3(MEwfs#A1cX2DetHxsS+@O~dwWu=l)-35p}4D*d6{{^<6d+^SRK`B4})A^Dzx zsiDl%dR4B4PsJa@3n>wMBNq5*1qge_n(ME|E?k8!Ec&gqX<~y@sG7|Qj5_YMx9EGL zwhaz?2KhhZ=q#x!Y2p7KHzwU6Fqbs$dYKxo-G}Uu@Mm;w6J?g~Yc_Km|_*H*N?0IU#=gob8}&8m>8qTEUf-nZ+|5 z^_-Bsd7hyw28Kd;#c8MPwVg%EOxy95Ai(Y`Xkr()l#H>T3=H;JGn_{Co@P4M9}i&$FeQA zAvkp^3sR}Cj!zb&>M#-p4$%n(2-`?US~iFY>jiDzqL{HGSZj*%FiMmNwJagZTOy!8 z@f0|L#|6K0_&lWh&zA>S8W_!!?>yaP=BSv`!B0ZZDl~8^QwuUC|1^?ePg}@1^Z3>i zI4<|=h5C7=c3e_PZllh<(Sd()Yp_x^Uw)S=EQeDPfy~HFgq5~oJUy?{H{#yj;PlN| zQVrLfK>=xhJg4a(+G{sUlJ9g^hSgz?Hs-!YvZayq6z2TT`?ciME^U0~@4(PVRoJlY zw-Fb6TvfS#D}`=FnXP@6uI*~i^GqfU{h&6vF^6xQ0=(!Bs3T;k(J{HO?z|$f4<9x( z=f4}#+L`V>ET$mJoguIt^TeZa7jy;IB76SkxRTa zRR{GOjXA4ZCAZaIJE%1wYBN)M1{ZfQHt*8Bg7DHKrAoMeqrBrHt^QP!&w{1&ZU14T zzEY)?sNGB^$22uNfe-;tJEMN!mu=_i?H;b|*CW4aeZ*0lmeYfR9obL?cbLNTSP~Zg zWPK}e*Idh?lj$=bRoX`1=d|5-meWdE6({+j8 zRLBb_w`tYB4{(y)Jx0^Nd!iCE$Vv;_5mS@UHtr!g_Pweqo?*lGkpS_*FX+hzGqR^b zX6ky>q#@_{%m*Z%IsabqIgNos%kzsWfYe>8SYG3vXBJI)o~FK(oWkqam@PPRiniXa2qNg^n<_B+PbSEX)Pc;=)=+ra zTVk=Qi&ON;GQDb4dbzm{3k3q(SAwrivP?5!XGSt?YTz{<=R}vqQz>}MI@I&~PNYb@ zy{JcXB~Il6juY|j{5?(GyJJ&6KNrjz$hmBv<$Df3#5wAY+IaW($&@_Oh__wmcV&M> zWL{;+7!~nqXm$yaIeJ_eP4f-nqkQ2%u4S*5T9<2^Ue=S$bSypqE5)6XQ*l=Grf&=7UK@07+dlAj4jRX_Pzr1482+_$ZYFq( z-@4|^$4Nz{ruxsM#rox}3zJql#U&?hIjmPk(ZsAx_#Oxd?qQG>l4sE+ zUbp}|uZr2^#ksKfUALx$#8$_>g&%`1{9_iu7-NQx;9|z$LAC( z>f*IU^2ULbg&DvgH0v047DqLZfZzv^FEsHs}|Vzp`aM$B)zZ7Aj$Yl6lFn z?2@TciE1N$4$5e7Jd9+jpW*c3J1zZO+^=dR@D4&Ud}L+rF-sun0ZdwurGYh3GRcv! z6!C8!+S1D1HM=o5dLZx!-$Z`<(A`^RMXs)r?Pza>_5Yp>QxR%lLKJ1{JH%wVuBfS& zi;Z6GIDI3F@k#m`tc)>)o}!_oL}ZY>ylnxu(T_K!+*{CmHIkBVTQb*kF<`l63eS4> zv02k!+H$dPnf!64)g0rtdP;3IlIuWXC!AE|aesT$3jg-X8>2#=?IAybo`-^L8I{qu z%)`mPrn+}8S=UicAk9g;sp7$HyTk(v<;A-hrP0`%t-B$fnxfODa0;~c5$8J&CITcK zdSAJp#9U~xb^1r8Wy&Di4G~JsO+UaVTBk`XcVP%Hah>b7hg&Q!{3l%L>ai^*S(jBS z`gzH*!sTb^r7?>GFOifPpHIz%S_MxQ$lQ8u%ATSK1NQrUF3w~(I_MN5#Y^{fMo(wR zTv(ZjHiHc1WYkrlR8;%j4Epx0*J`53bFIx-6h~IP?lyX}kVA4vL~pI2tko~=$wu{$ z%j{T6O0^7jVmYD!jD!&0S2B0s1GiDa57HVwv8SsP(_R{}LKy`DDOY9*M+wHkJQ~&r zuI}!#ifNViL+gG?9JrR6&6o7~WL!1tZpVNfF#pcU0j08E^@nTa)MvJ}0CoW2)6F+a z+0cNp8~7*_WDdJjErJcd&6fo;8Y#&Ri}zof?6wImZnY9ZGJWZ&?il3R>D*GEUqz7h zY3wKlmC*oZ3qWg}y{E(=6muX#Ffk2UzVUvRHgZe)Ci^0@V?2t}d|tYsdk9I2wHcQ? z^GqN_08#5LGdYOjs#}B@1N0jJx*jp0akp7LH!oQ7;0x0!1p)$*v0&AF)D_%je>=CQj&(+YBfdKW@7pkA?`I^FvHWv?G+BGu-{V&2W_c#u3lyL!gnkuj-D=B6 z--z134&bG<1c0Dqa$*)WJ8%iTqD_^I#Qa+E6G7+1_RSbv z1H#!@*VzT`3T*hU+pdbLwk0Mo#V*91SzS?ux&TL5a!oJ)-mrtWUbF)>%XXC(9<$+N zX&)Nzi&)>8j*a8Wd*jD*YaPY)uKe0rkDOt5Ov!mI2GGzJC=}BPTr@i&3u!5}?c;r< zn^7uS$5~%Q!#IaF+JQ>2Uhr~PoByXI8f)7|^3y7}ubj9z60Pqt_#`58R$YG!2ayxb zeR&W5(udwxB4pUh3;dK~@4oyW7PmjfBn*56|H}4SkJ~VB^10!~lR5$v)6~|>=1N-f zZ@jBm&e&R?;uQ%;92X4%Q>Hg49;KIJm1_sWP?a}Ds9oI17y1NwA#!!ky!LF!oZH6= z>CHVh1zp5K(H*=3Y`Wh`Vvq*J5%esDYUID@b`QvzDvnEOs@7K=vG4UOf9IeBf8sA| zv6Ny>Jvg3rY`P>XwIqt$WZ;n|qXo#IFNBBEi(U#x__Cx4wIrJ@QF;NL^#`MtpNPcn zp;Pa-p$UXmudbcG<4{!IF%WRl_+Q{!i4>j{)U0$u?j+`(aduWavR|)6#MK2+Ifrst zN{<+gTcLL<4(8%@34tOsY8Y)1m{7cBW7+KTX&b3=C5D&O@C%LJOlb+5ZKhj#oEYU|(w? z-R2Gofx6kXRwH6+E0}MXOz0#))Ird{U1T0{!(Dr_Enml^(A7f>32Fz+w9>fyFTiOu QbgX}mJ!-das>SsG0j;W%QUCw| literal 0 HcmV?d00001 diff --git a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf index d05c8bfdbc..7279d4838a 100644 --- a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf @@ -31,10 +31,19 @@ if (animationState _unit != "ACE_FastRoping") exitWith { [_unit, "ACE_FastRoping", 2] call EFUNC(common,doAnimation); }; +[_unit] spawn { + while {!(isNull attachedTo (_this select 0))} do { + playSound "ACE_Fastroping_Rope"; + sleep 1; + }; +}; + //End of fast rope if (isNull attachedTo _unit) exitWith { [_unit, "", 2] call EFUNC(common,doAnimation); _unit setVectorUp [0, 0, 1]; + playSound "ACE_Fastroping_Thud"; + [_pfhHandle] call CBA_fnc_removePerFrameHandler; }; From 48e9e9c9e4407a5be0958e6611afb93310e05791 Mon Sep 17 00:00:00 2001 From: nomisum Date: Wed, 2 Mar 2016 22:36:42 +0100 Subject: [PATCH 25/89] added CBA-PFH, added QUOTE --- addons/fastroping/CfgSounds.hpp | 4 ++-- .../functions/fnc_fastRopeLocalPFH.sqf | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/addons/fastroping/CfgSounds.hpp b/addons/fastroping/CfgSounds.hpp index e6532146fe..1cdf993adc 100644 --- a/addons/fastroping/CfgSounds.hpp +++ b/addons/fastroping/CfgSounds.hpp @@ -1,12 +1,12 @@ class CfgSounds { class ACE_Fastroping_Rope { name = "ACE_Fastroping_Rope"; - sound[] = {PATHTOF(data\sounds\fastroping_rope.ogg), db0, 1.0}; + sound[] = {QUOTE(PATHTOF(data\sounds\fastroping_rope.ogg)), db0, 1.0}; titles[] = {}; }; class ACE_Fastroping_Thud { name = "ACE_Fastroping_Thud"; - sound[] = {PATHTOF(data\sounds\fastroping_thud.ogg), db0, 1.0}; + sound[] = {QUOTE(PATHTOF(data\sounds\fastroping_thud.ogg)), db0, 1.0}; titles[] = {}; }; }; \ No newline at end of file diff --git a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf index 7279d4838a..1b41404299 100644 --- a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf @@ -31,12 +31,16 @@ if (animationState _unit != "ACE_FastRoping") exitWith { [_unit, "ACE_FastRoping", 2] call EFUNC(common,doAnimation); }; -[_unit] spawn { - while {!(isNull attachedTo (_this select 0))} do { - playSound "ACE_Fastroping_Rope"; - sleep 1; - }; -}; +[{ + params ["_args", "_idPFH"]; + _args params ["_unit"]; + + if (isNull (attachedTo _unit)) exitWith { + [_idPFH] call CBA_fnc_removePerFrameHandler; + }; + + playSound "ACE_Fastroping_Rope"; +}, 1, [_unit]] call CBA_fnc_addPerFrameHandler; //End of fast rope if (isNull attachedTo _unit) exitWith { From 76468d326ba7fd9ac668eb551d71c0882bffd299 Mon Sep 17 00:00:00 2001 From: nomisum Date: Wed, 2 Mar 2016 22:49:25 +0100 Subject: [PATCH 26/89] fixed license file --- addons/fastroping/data/sounds/LICENSE.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/fastroping/data/sounds/LICENSE.md b/addons/fastroping/data/sounds/LICENSE.md index d6312034ca..71835222cd 100644 --- a/addons/fastroping/data/sounds/LICENSE.md +++ b/addons/fastroping/data/sounds/LICENSE.md @@ -1,4 +1,6 @@ -Uses a sound from Tessa Elieff (Freesound.org) -according to Creative Commons Attribution License. +Source sounds are adapted and changed. -Also sounds from helenacm and Adam_N, both under CC 0. Thanks anyway. \ No newline at end of file +**Fastroping_Rope (fastroping_rope.ogg):** +"[Rub.aif](http://freesound.org/people/le_abbaye_Noirlac/sounds/129471/)" by [Tessa Elieff](http://freesound.org/people/le_abbaye_Noirlac/) is [CreativeCommons Attributions 3.0](http://creativecommons.org/licenses/by/3.0/) + +All other sounds from helenacm and Adam_N, both under Creative Commons 0 (no attribution required). \ No newline at end of file From 62f598b2a6bca3049438c52154e3b9c612aac952 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sat, 5 Mar 2016 13:11:20 -0300 Subject: [PATCH 27/89] Use the correct CBA function name, defining it in ACE as long as it doesn't exist already. --- addons/overheating/XEH_preInit.sqf | 12 +++++++----- .../functions/fnc_loadCoolestSpareBarrel.sqf | 2 +- .../fnc_sendSpareBarrelsTemperaturesHint.sqf | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/addons/overheating/XEH_preInit.sqf b/addons/overheating/XEH_preInit.sqf index 54bc392273..dcd9ddc092 100644 --- a/addons/overheating/XEH_preInit.sqf +++ b/addons/overheating/XEH_preInit.sqf @@ -4,14 +4,16 @@ ADDON = false; #include "XEH_PREP.hpp" -FakeCBA_fnc_getMagazineIds = { - params [["_unit", objNull, [objNull]], ["_magazine", "", [""]]]; +if (isNil "CBA_fnc_getMagazineIds") then { + CBA_fnc_getMagazineIds = { + params [["_unit", objNull, [objNull]], ["_magazine", "", [""]]]; - private _displayName = getText (configFile >> "CfgMagazines" >> _magazine >> "displayName"); + private _displayName = getText (configFile >> "CfgMagazines" >> _magazine >> "displayName"); - if (_displayName isEqualTo "") exitWith {[]}; + if (_displayName isEqualTo "") exitWith {[]}; - magazinesDetail _unit select {_x find _displayName == 0} apply {_x = _x splitString "[:]"; _x select (count _x - 1)}; + magazinesDetail _unit select {_x find _displayName == 0} apply {_x = _x splitString "[:]"; _x select (count _x - 1)}; + }; }; ADDON = true; diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index dd58d58207..a3f9998497 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -21,7 +21,7 @@ params ["_unit", "_weapon", "_weaponTemp", "_barrelMass"]; TRACE_4("loadCoolestSpareBarrel1",_unit,_weapon,_weaponTemp,_barrelMass); // Find all spare barrel the player has -private _allBarrels = [_unit, "ACE_SpareBarrel"] call FakeCBA_fnc_getMagazineIds; +private _allBarrels = [_unit, "ACE_SpareBarrel"] call CBA_fnc_getMagazineIds; TRACE_1("_allBarrels",_allBarrels); if ((count _allBarrels) < 1) exitWith {}; diff --git a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf index 9f286832c6..eb3f514ac1 100644 --- a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf +++ b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf @@ -19,7 +19,7 @@ params ["_player","_unit"]; // Find all spare barrel the player has TRACE_2("sendSpareBarrelsTemperatureHunt",_player,_unit); -private _allBarrels = [_unit, "ACE_SpareBarrel"] call FakeCBA_fnc_getMagazineIds; +private _allBarrels = [_unit, "ACE_SpareBarrel"] call CBA_fnc_getMagazineIds; TRACE_1("_allBarrels",_allBarrels); if ((count _allBarrels) < 1) exitWith {}; From ebfd76107e538888adede5814489f4933f81194e Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sat, 5 Mar 2016 13:15:56 -0300 Subject: [PATCH 28/89] The function name was changed in CBA --- addons/overheating/XEH_preInit.sqf | 4 ++-- addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf | 2 +- .../functions/fnc_sendSpareBarrelsTemperaturesHint.sqf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/overheating/XEH_preInit.sqf b/addons/overheating/XEH_preInit.sqf index dcd9ddc092..ccb7cba58a 100644 --- a/addons/overheating/XEH_preInit.sqf +++ b/addons/overheating/XEH_preInit.sqf @@ -4,8 +4,8 @@ ADDON = false; #include "XEH_PREP.hpp" -if (isNil "CBA_fnc_getMagazineIds") then { - CBA_fnc_getMagazineIds = { +if (isNil "CBA_fnc_getMagazineIndex") then { + CBA_fnc_getMagazineIndex = { params [["_unit", objNull, [objNull]], ["_magazine", "", [""]]]; private _displayName = getText (configFile >> "CfgMagazines" >> _magazine >> "displayName"); diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index a3f9998497..b90271abd9 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -21,7 +21,7 @@ params ["_unit", "_weapon", "_weaponTemp", "_barrelMass"]; TRACE_4("loadCoolestSpareBarrel1",_unit,_weapon,_weaponTemp,_barrelMass); // Find all spare barrel the player has -private _allBarrels = [_unit, "ACE_SpareBarrel"] call CBA_fnc_getMagazineIds; +private _allBarrels = [_unit, "ACE_SpareBarrel"] call CBA_fnc_getMagazineIndex; TRACE_1("_allBarrels",_allBarrels); if ((count _allBarrels) < 1) exitWith {}; diff --git a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf index eb3f514ac1..2ff248016d 100644 --- a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf +++ b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf @@ -19,7 +19,7 @@ params ["_player","_unit"]; // Find all spare barrel the player has TRACE_2("sendSpareBarrelsTemperatureHunt",_player,_unit); -private _allBarrels = [_unit, "ACE_SpareBarrel"] call CBA_fnc_getMagazineIds; +private _allBarrels = [_unit, "ACE_SpareBarrel"] call CBA_fnc_getMagazineIndex; TRACE_1("_allBarrels",_allBarrels); if ((count _allBarrels) < 1) exitWith {}; From 6cf9787fd1d11316d48768d58b2afad840976d59 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sat, 5 Mar 2016 13:18:41 -0300 Subject: [PATCH 29/89] Fix travis warning --- addons/overheating/XEH_preInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/overheating/XEH_preInit.sqf b/addons/overheating/XEH_preInit.sqf index ccb7cba58a..cdd1fa78dd 100644 --- a/addons/overheating/XEH_preInit.sqf +++ b/addons/overheating/XEH_preInit.sqf @@ -12,7 +12,7 @@ if (isNil "CBA_fnc_getMagazineIndex") then { if (_displayName isEqualTo "") exitWith {[]}; - magazinesDetail _unit select {_x find _displayName == 0} apply {_x = _x splitString "[:]"; _x select (count _x - 1)}; + (magazinesDetail _unit select {_x find _displayName == 0}) apply {_x = _x splitString "[:]"; _x select (count _x - 1)}; }; }; From ae8cbb4834ac98d6874140d367c930eea5287386 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sat, 5 Mar 2016 23:33:30 -0300 Subject: [PATCH 30/89] Add "check temperature" and "swap barrel" actions for AARs --- addons/overheating/CfgVehicles.hpp | 30 +++++++++++++---- addons/overheating/XEH_PREP.hpp | 1 + addons/overheating/XEH_postInit.sqf | 8 ++--- .../functions/fnc_checkTemperature.sqf | 24 +++++++------- .../functions/fnc_loadCoolestSpareBarrel.sqf | 21 ++++++------ .../overheating/functions/fnc_swapBarrel.sqf | 24 +++++++++----- .../functions/fnc_swapBarrelAssistant.sqf | 33 +++++++++++++++++++ .../functions/fnc_swapBarrelCallback.sqf | 25 +++++++------- 8 files changed, 115 insertions(+), 51 deletions(-) create mode 100644 addons/overheating/functions/fnc_swapBarrelAssistant.sqf diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index 61052553a4..528f77375c 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -4,7 +4,7 @@ class CfgVehicles { class CAManBase: Man { class ACE_SelfActions { class ACE_Equipment { - class ACE_UnJam { + class GVAR(UnJam) { displayName = CSTRING(UnjamWeapon); condition = QUOTE( [_player] call FUNC(canUnjam) ); exceptions[] = {"isNotInside", "isNotSitting"}; @@ -13,7 +13,7 @@ class CfgVehicles { priority = 4; icon = QUOTE(PATHTOF(UI\unjam_ca.paa)); }; - class ACE_SwapBarrel { + class GVAR(SwapBarrel) { displayName = CSTRING(SwapBarrel); condition = QUOTE( 'ACE_SpareBarrel' in magazines _player && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _player >> 'ACE_Overheating_allowSwapBarrel') == 1} ); statement = QUOTE( [ARR_2(_player, currentWeapon _player)] call FUNC(swapBarrel); ); @@ -21,16 +21,16 @@ class CfgVehicles { priority = 3; icon = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); }; - class ACE_CheckTemperature { + class GVAR(CheckTemperature) { displayName = CSTRING(CheckTemperatureShort); - condition = "switch (currentWeapon _player) do {case (''): {false}; case (primaryWeapon _player); case (secondaryWeapon _player); case (handgunWeapon _player): {true}; default {false}}"; + condition = "switch (currentWeapon _player) do {case (''): {false}; case (primaryWeapon _player); case (handgunWeapon _player): {true}; default {false}}"; exceptions[] = {"isNotInside", "isNotSitting"}; - statement = QUOTE( [ARR_2(_player, currentWeapon _player)] call FUNC(CheckTemperature); ); + statement = QUOTE( [ARR_3(_player, _player, currentWeapon _player)] call FUNC(checkTemperature); ); showDisabled = 0; priority = 2.9; icon = QUOTE(PATHTOF(UI\temp_ca.paa)); }; - class ACE_CheckTemperatureSpareBarrels { + class GVAR(CheckTemperatureSpareBarrels) { displayName = CSTRING(CheckTemperatureSpareBarrelsShort); condition = QUOTE( 'ACE_SpareBarrel' in magazines _player); exceptions[] = {"isNotInside", "isNotSitting"}; @@ -41,6 +41,24 @@ class CfgVehicles { }; }; }; + + class ACE_Actions { + class ACE_Weapon { + class GVAR(SwapBarrel) { + displayName = CSTRING(SwapBarrel); + condition = QUOTE( 'ACE_SpareBarrel' in magazines _player && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _target >> 'ACE_Overheating_allowSwapBarrel') == 1} ); + statement = QUOTE([ARR_3(_player, _target, currentWeapon _target)] call FUNC(swapBarrelAssistant);); + icon = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); + }; + class GVAR(CheckTemperature) { + displayName = CSTRING(CheckTemperatureShort); + condition = "switch (currentWeapon _target) do {case (''): {false}; case (primaryWeapon _target); case (handgunWeapon _target): {true}; default {false}}"; + exceptions[] = {"isNotInside", "isNotSitting"}; + statement = QUOTE( [ARR_3(_player, _target, currentWeapon _target)] call FUNC(checkTemperature); ); + icon = QUOTE(PATHTOF(UI\temp_ca.paa)); + }; + }; + }; }; class ReammoBox_F; diff --git a/addons/overheating/XEH_PREP.hpp b/addons/overheating/XEH_PREP.hpp index cc1948e6bd..44fd931ca0 100644 --- a/addons/overheating/XEH_PREP.hpp +++ b/addons/overheating/XEH_PREP.hpp @@ -13,6 +13,7 @@ PREP(loadCoolestSpareBarrel); PREP(overheat); PREP(sendSpareBarrelsTemperaturesHint); PREP(swapBarrel); +PREP(swapBarrelAssistant); PREP(swapBarrelCallback); PREP(updateSpareBarrelsTemperaturesThread); PREP(updateTemperature); diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index 831c2c2348..96d518ac9f 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -56,7 +56,7 @@ GVAR(cacheSilencerData) = call CBA_fnc_createNamespace; }; }] call EFUNC(common,addEventHandler); -// Install event handlers to display temp when a barrel was swapped -["barrelSwapped", { - _this call FUNC(displayTemperature); -}] call EFUNC(common,addEventHandler); +// Install event handler to display temp when a barrel was swapped +["showWeaponTemperature", DFUNC(displayTemperature)] call EFUNC(common,addEventHandler); +// Install event handler to initiate an assisted barrel swap +["initiateSwapBarrelAssisted", DFUNC(swapBarrel)] call EFUNC(common,addEventHandler); diff --git a/addons/overheating/functions/fnc_checkTemperature.sqf b/addons/overheating/functions/fnc_checkTemperature.sqf index f720665620..fd2ac5f56c 100644 --- a/addons/overheating/functions/fnc_checkTemperature.sqf +++ b/addons/overheating/functions/fnc_checkTemperature.sqf @@ -3,8 +3,9 @@ * Make the player check the temperature of his weapon * * Arguments: - * 0: Player - * 1: Weapon + * 0: Unit checking + * 1: Unit that has the weapon + * 2: Weapon * * Return Value: * None @@ -16,17 +17,18 @@ */ #include "script_component.hpp" -params ["_player", "_weapon"]; -TRACE_2("params",_player,_weapon); +params ["_assistant", "_gunner", "_weapon"]; +TRACE_3("params",_assistant,_gunner,_weapon); // Play animation and report temperature -private _action = getText (configFile >> "CfgWeapons" >> _weapon >> "ACE_checkTemperatureAction"); - -if (_action == "") then { - _action = "Gear"; +private _action = "PutDown"; +if (_assistant isEqualTo _gunner) then { + _action = getText (configFile >> "CfgWeapons" >> _weapon >> "ACE_checkTemperatureAction"); + if (_action == "") then { + _action = "Gear"; + }; }; - -_player playActionNow _action; +_assistant playActionNow _action; // Waits a sec before displaying the temperature -[FUNC(displayTemperature), [_player, _weapon], 1.0] call EFUNC(common,waitAndExecute); +[FUNC(displayTemperature), [_gunner, _weapon], 1.0] call EFUNC(common,waitAndExecute); diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index b90271abd9..08cb85083c 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -4,10 +4,11 @@ * coolest on the unit weapon. Runs on the server. * * Argument: - * 0: Unit - * 1: Weapon - * 2: Weapon temp before switching - * 3: Mass of the removed barrel + * 0: Unit that has the spare barrels + * 1: Unit that has the weapon + * 2: Weapon + * 3: Weapon temp before switching + * 4: Mass of the removed barrel * * Return value: * None @@ -17,11 +18,11 @@ */ #include "script_component.hpp" -params ["_unit", "_weapon", "_weaponTemp", "_barrelMass"]; -TRACE_4("loadCoolestSpareBarrel1",_unit,_weapon,_weaponTemp,_barrelMass); +params ["_assistant", "_gunner", "_weapon", "_weaponTemp", "_barrelMass"]; +TRACE_5("loadCoolestSpareBarrel1",_assistant,_gunner,_weapon,_weaponTemp,_barrelMass); // Find all spare barrel the player has -private _allBarrels = [_unit, "ACE_SpareBarrel"] call CBA_fnc_getMagazineIndex; +private _allBarrels = [_assistant, "ACE_SpareBarrel"] call CBA_fnc_getMagazineIndex; TRACE_1("_allBarrels",_allBarrels); if ((count _allBarrels) < 1) exitWith {}; @@ -43,10 +44,10 @@ TRACE_3("loadCoolestSpareBarrel5",_coolestTemp,_coolestMag,_weaponTemp); // The new weapon temperature is similar to the coolest barrel // Publish the new temperature value -_unit setVariable [format [QGVAR(%1_temp), _weapon], _coolestTemp, true]; +_gunner setVariable [format [QGVAR(%1_temp), _weapon], _coolestTemp, true]; // Heat up the coolest barrel to the former weapon temperature [GVAR(storedSpareBarrels), _coolestMag, [_weaponTemp, ACE_Time, _barrelMass]] call CBA_fnc_hashSet; -// Send an event so the local machine can show the hint -["barrelSwapped", _unit, [_unit, _weapon]] call EFUNC(common,objectEvent); +// Send an event so the machines of the assistant and gunner can show the hint +["showWeaponTemperature", [_assistant, _gunner], [_gunner, _weapon]] call EFUNC(common,targetEvent); diff --git a/addons/overheating/functions/fnc_swapBarrel.sqf b/addons/overheating/functions/fnc_swapBarrel.sqf index bbdab91705..a63ef5a36a 100644 --- a/addons/overheating/functions/fnc_swapBarrel.sqf +++ b/addons/overheating/functions/fnc_swapBarrel.sqf @@ -3,29 +3,35 @@ * Make a unit start swapping it's barrel * * Argument: - * 0: Unit - * 1: Weapon + * 0: Unit initiating the action + * 1: Unit that has the weapon + * 2: Weapon * * Return value: * None * * Example: - * [player, currentWeapon player] call ace_overheating_fnc_swapBarrel + * [cursorTarget, player, currentWeapon player] call ace_overheating_fnc_swapBarrel * * Public: No */ #include "script_component.hpp" -params ["_player", "_weapon"]; -TRACE_2("params",_player,_weapon); +params ["_assistant", "_gunner", "_weapon"]; +TRACE_3("params",_assistant,_gunner,_weapon); // Make the standing player kneel down -if (stance _player != "PRONE") then { - [_player, "amovpknlmstpsraswrfldnon", 1] call EFUNC(common,doAnimation); +if (stance _gunner != "PRONE") then { + [_gunner, "amovpknlmstpsraswrfldnon", 1] call EFUNC(common,doAnimation); }; // Barrel dismount gesture -_player playActionNow QGVAR(GestureDismountMuzzle); +_gunner playActionNow QGVAR(GestureDismountMuzzle); playSound "ACE_BarrelSwap"; -[5, [_player, _weapon], {(_this select 0) call FUNC(swapBarrelCallback)}, {}, (localize LSTRING(SwappingBarrel))] call EFUNC(common,progressBar); +private _duration = 3.0; +if (_assistant isEqualTo _gunner) then { + _duration = 5.0; +}; + +[_duration, [_assistant,_gunner,_weapon], {(_this select 0) call FUNC(swapBarrelCallback)}, {}, (localize LSTRING(SwappingBarrel))] call EFUNC(common,progressBar); diff --git a/addons/overheating/functions/fnc_swapBarrelAssistant.sqf b/addons/overheating/functions/fnc_swapBarrelAssistant.sqf new file mode 100644 index 0000000000..5e3c31fc5e --- /dev/null +++ b/addons/overheating/functions/fnc_swapBarrelAssistant.sqf @@ -0,0 +1,33 @@ +/* + * Author: esteldunedain, Commy2 + * Make a unit start swapping the barrel of another unit + * + * Argument: + * 0: Unit initiating the action + * 1: Unit that has the weapon + * 2: Weapon + * + * Return value: + * None + * + * Example: + * [player, cursorTarget, currentWeapon cursorTarget] call ace_overheating_fnc_swapBarrelAssistant + * + * Public: No + */ +#include "script_component.hpp" + +params ["_assistant", "_gunner", "_weapon"]; +TRACE_3("params",_assistant,_gunner,_weapon); + +// Make the standing player kneel down +if (stance _assistant != "PRONE") then { + [_assistant, "amovpknlmstpsraswrfldnon", 1] call EFUNC(common,doAnimation); +}; + +// Barrel dismount gesture +playSound "ACE_BarrelSwap"; + +[3, [_assistant, _gunner, _weapon], {}, {}, (localize LSTRING(SwappingBarrel))] call EFUNC(common,progressBar); + +["initiateSwapBarrelAssisted", _gunner, [_assistant, _gunner, _weapon]] call EFUNC(common,objectEvent); diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index 62a3b13ef6..339b6627b1 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -1,10 +1,11 @@ /* - * Author: Commy2 + * Author: Commy2, esteldunedain * Swap barrel callback * * Argument: - * 0: Unit - * 1: Weapon + * 0: Unit initiating the action + * 1: Unit that has the weapon + * 2: Weapon * * Return value: * None @@ -17,21 +18,23 @@ #define DEBUG_MODE_FULL #include "script_component.hpp" -params ["_player", "_weapon"]; -TRACE_2("params",_player,_weapon); +params ["_assistant", "_gunner", "_weapon"]; +TRACE_3("params",_assistant,_gunner,_weapon); -// Barrel mount gesture -_player playAction QGVAR(GestureMountMuzzle); -playSound "ACE_BarrelSwap"; +if (_assistant isEqualTo _gunner) then { + // Barrel mount gesture + _gunner playAction QGVAR(GestureMountMuzzle); + playSound "ACE_BarrelSwap"; +}; -private _temp = _player getVariable [format [QGVAR(%1_temp), _weapon], 0]; +private _temp = _gunner getVariable [format [QGVAR(%1_temp), _weapon], 0]; private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; // Instruct the server to load the coolest spare barrel into the weapon and // store the removed barrel with the former weapon temperature. The server // also updates the current weapon temperature to match that of the new // loaded barrel. -["spareBarrelsLoadCoolest", [_player, _weapon, _temp, _barrelMass]] call EFUNC(common,serverEvent); +["spareBarrelsLoadCoolest", [_assistant, _gunner, _weapon, _temp, _barrelMass]] call EFUNC(common,serverEvent); // Store the update time -_player setVariable [format [QGVAR(%1_time), _weapon], ACE_time]; +_gunner setVariable [format [QGVAR(%1_time), _weapon], ACE_time]; From 955333b0bc796d2835c11192de7571aad5f21a11 Mon Sep 17 00:00:00 2001 From: novichiv Date: Sun, 6 Mar 2016 22:06:11 +0300 Subject: [PATCH 31/89] Fixed strncpy in parse_imagepath --- extensions/parse_imagepath/ace_parse_imagepath.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/extensions/parse_imagepath/ace_parse_imagepath.cpp b/extensions/parse_imagepath/ace_parse_imagepath.cpp index fa1a8643e7..dc27d60c72 100644 --- a/extensions/parse_imagepath/ace_parse_imagepath.cpp +++ b/extensions/parse_imagepath/ace_parse_imagepath.cpp @@ -36,18 +36,17 @@ std::string getImagePathFromStructuredText(const std::string & input) { return returnValue; } -// i like to live dangerously. jk, fix strncpy sometime pls. #pragma warning( push ) #pragma warning( disable : 4996 ) void __stdcall RVExtension(char *output, int outputSize, const char *function) { ZERO_OUTPUT(); - if (!strcmp(function, "version")) { - strncpy(output, ACE_FULL_VERSION_STR, outputSize); - } else { - strncpy(output, getImagePathFromStructuredText(function).c_str(), outputSize); - output[outputSize - 1] = '\0'; - } + if (!strcmp(function, "version")) { + strncpy_s(output, outputSize, ACE_FULL_VERSION_STR, _TRUNCATE); + } else { + strncpy_s(output, outputSize, getImagePathFromStructuredText(function).c_str(), _TRUNCATE); + output[outputSize - 1] = '\0'; + } EXTENSION_RETURN(); } From d6e9890b1b612186692c10bb74c24217c9a258ce Mon Sep 17 00:00:00 2001 From: SzwedzikPL Date: Mon, 21 Mar 2016 18:25:38 +0100 Subject: [PATCH 32/89] Add remove trench and continue digging trench actions --- addons/trenches/CfgVehicles.hpp | 38 +++++++- addons/trenches/XEH_PREP.hpp | 4 + addons/trenches/config.cpp | 1 + .../fnc_canContinueDiggingTrench.sqf | 27 ++++++ .../functions/fnc_canRemoveTrench.sqf | 26 +++++ .../functions/fnc_continueDiggingTrench.sqf | 97 +++++++++++++++++++ .../trenches/functions/fnc_placeConfirm.sqf | 45 +-------- addons/trenches/functions/fnc_placeTrench.sqf | 2 +- .../trenches/functions/fnc_removeTrench.sqf | 92 ++++++++++++++++++ addons/trenches/script_component.hpp | 5 + addons/trenches/stringtable.xml | 12 +++ 11 files changed, 304 insertions(+), 45 deletions(-) create mode 100644 addons/trenches/functions/fnc_canContinueDiggingTrench.sqf create mode 100644 addons/trenches/functions/fnc_canRemoveTrench.sqf create mode 100644 addons/trenches/functions/fnc_continueDiggingTrench.sqf create mode 100644 addons/trenches/functions/fnc_removeTrench.sqf diff --git a/addons/trenches/CfgVehicles.hpp b/addons/trenches/CfgVehicles.hpp index 81880a4265..3123e9270d 100644 --- a/addons/trenches/CfgVehicles.hpp +++ b/addons/trenches/CfgVehicles.hpp @@ -1,3 +1,28 @@ +class CBA_Extended_EventHandlers; + +#define ACE_TRENCHES_ACTIONS class ACE_Actions { \ + class ACE_MainActions { \ + displayName = ECSTRING(interaction,MainAction); \ + selection = ""; \ + distance = 10; \ + condition = QUOTE(true); \ + class ACE_ContinueDiggingTrench { \ + displayName = CSTRING(ContinueDiggingTrench); \ + condition = QUOTE([ARR_2(_target,_player)] call FUNC(canContinueDiggingTrench)); \ + statement = QUOTE([ARR_2(_target,_player)] call FUNC(continueDiggingTrench);); \ + showDisabled = 0; \ + priority = -1; \ + }; \ + class ACE_RemoveTrench { \ + displayName = CSTRING(RemoveEnvelope); \ + condition = QUOTE([ARR_2(_target,_player)] call FUNC(canRemoveTrench)); \ + statement = QUOTE([ARR_2(_target,_player)] call FUNC(removeTrench);); \ + showDisabled = 0; \ + priority = -1; \ + }; \ + }; \ + } + class CfgVehicles { class Man; class CAManBase: Man { @@ -34,6 +59,12 @@ class CfgVehicles { descriptionShort = CSTRING(EnevlopeSmallDescription); model = QUOTE(PATHTOEF(apl,ace_envelope_small4.p3d)); scope = 2; + GVAR(diggingDuration) = 20; + GVAR(removalDuration) = 12; + ACE_TRENCHES_ACTIONS; + class EventHandlers { + class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; + }; }; class ACE_envelope_big: BagFence_base_F { author = ECSTRING(common,ACETeam); @@ -41,9 +72,14 @@ class CfgVehicles { descriptionShort = CSTRING(EnevlopeBigDescription); model = QUOTE(PATHTOEF(apl,ace_envelope_big4.p3d)); scope = 2; + GVAR(diggingDuration) = 25; + GVAR(removalDuration) = 15; + ACE_TRENCHES_ACTIONS; + class EventHandlers { + class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; + }; }; - class ACE_envelope_small_NoGeo: ACE_envelope_small { scope = 1; //@todo: replace by a no geo model diff --git a/addons/trenches/XEH_PREP.hpp b/addons/trenches/XEH_PREP.hpp index a9050b83bd..c0922b786c 100644 --- a/addons/trenches/XEH_PREP.hpp +++ b/addons/trenches/XEH_PREP.hpp @@ -9,3 +9,7 @@ PREP(handleUnconscious); PREP(placeCancel); PREP(placeConfirm); PREP(placeTrench); +PREP(canContinueDiggingTrench); +PREP(canRemoveTrench); +PREP(continueDiggingTrench); +PREP(removeTrench); diff --git a/addons/trenches/config.cpp b/addons/trenches/config.cpp index e2f2b5b4fe..e1b14fa37c 100644 --- a/addons/trenches/config.cpp +++ b/addons/trenches/config.cpp @@ -11,6 +11,7 @@ class CfgPatches { VERSION_CONFIG; }; }; + #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" diff --git a/addons/trenches/functions/fnc_canContinueDiggingTrench.sqf b/addons/trenches/functions/fnc_canContinueDiggingTrench.sqf new file mode 100644 index 0000000000..2e1942d6b8 --- /dev/null +++ b/addons/trenches/functions/fnc_canContinueDiggingTrench.sqf @@ -0,0 +1,27 @@ +/* + * Author: SzwedzikPL + * Checks if a unit can continue digging a trench + * + * Arguments: + * 0: trench + * 1: unit + * + * Return Value: + * Can continue + * + * Example: + * [TrenchObj, ACE_player] call ace_trenches_fnc_canContinueDiggingTrench + * + * Public: No + */ +#include "script_component.hpp" + +params ["_trench", "_unit"]; + +if !("ACE_EntrenchingTool" in items _unit) exitWith {false}; +if ((_trench getVariable [QGVAR(progress), 0]) >= 1) exitWith {false}; + +// Prevent removing/digging trench by more than one person +if (_trench getVariable [QGVAR(digging), false]) exitWith {false}; + +true diff --git a/addons/trenches/functions/fnc_canRemoveTrench.sqf b/addons/trenches/functions/fnc_canRemoveTrench.sqf new file mode 100644 index 0000000000..4e33857637 --- /dev/null +++ b/addons/trenches/functions/fnc_canRemoveTrench.sqf @@ -0,0 +1,26 @@ +/* + * Author: SzwedzikPL + * Checks if a unit can remove a trench + * + * Arguments: + * 0: trench + * 1: unit + * + * Return Value: + * Can remove + * + * Example: + * [TrenchObj, ACE_player] call ace_trenches_fnc_canRemoveTrench + * + * Public: No + */ +#include "script_component.hpp" + +params ["_trench", "_unit"]; + +if !("ACE_EntrenchingTool" in items _unit) exitWith {false}; + +// Prevent removing/digging trench by more than one person +if (_trench getVariable [QGVAR(digging), false]) exitWith {false}; + +true diff --git a/addons/trenches/functions/fnc_continueDiggingTrench.sqf b/addons/trenches/functions/fnc_continueDiggingTrench.sqf new file mode 100644 index 0000000000..25f9fc4150 --- /dev/null +++ b/addons/trenches/functions/fnc_continueDiggingTrench.sqf @@ -0,0 +1,97 @@ +/* + * Author: Garth 'L-H' de Wet, Ruthberg, edited by commy2 for better MP and eventual AI support, esteldunedain + * Continue process of digging trench. + * + * Arguments: + * 0: trench + * 1: unit + * + * Return Value: + * None + * + * Example: + * [TrenchObj, ACE_player] call ace_trenches_fnc_continueDiggingTrench + * + * Public: No + */ +#include "script_component.hpp" + +params ["_trench", "_unit"]; +TRACE_2("continueDiggingTrench",_trench,_unit); + +private _actualProgress = _trench getVariable [QGVAR(progress), 0]; +if(_actualProgress == 1) exitWith {}; + +// Mark trench as being worked on +_trench setVariable [QGVAR(digging), true, true]; + +private _digTime = getNumber (configFile >> "CfgVehicles" >> (typeof _trench) >> QGVAR(diggingDuration)); +private _digTimeLeft = _digTime * (1 - _actualProgress); + +private _placeData = _trench getVariable [QGVAR(placeData), [[], []]]; +_placeData params ["_basePos", "_vecDirAndUp"]; + +private _trenchId = _unit getVariable [QGVAR(isDiggingId), -1]; +if(_trenchId < 0) then { + _trenchId = GVAR(trenchId); + _unit setVariable [QGVAR(isDiggingId), _trenchId, true]; + GVAR(trenchId) = GVAR(trenchId) + 1; +}; + +// Create progress bar +private _fnc_onFinish = { + (_this select 0) params ["_unit", "_trench"]; + _unit setVariable [QGVAR(isDiggingId), -1, true]; + _trench setVariable [QGVAR(digging), false, true]; + + // Save progress global + private _progress = _trench getVariable [QGVAR(progress), 0]; + _trench setVariable [QGVAR(progress), _progress, true]; + + // Reset animation + [_unit, "", 1] call EFUNC(common,doAnimation); +}; +private _fnc_onFailure = { + (_this select 0) params ["_unit", "_trench"]; + _unit setVariable [QGVAR(isDiggingId), -1, true]; + _trench setVariable [QGVAR(digging), false, true]; + + // Save progress global + private _progress = _trench getVariable [QGVAR(progress), 0]; + _trench setVariable [QGVAR(progress), _progress, true]; + + // Reset animation + [_unit, "", 1] call EFUNC(common,doAnimation); +}; +[(_digTimeLeft + 0.5), [_unit, _trench], _fnc_onFinish, _fnc_onFailure, localize LSTRING(DiggingTrench)] call EFUNC(common,progressBar); + +// Schedule progressive raising of the trench +private _fnc_setPlacing = { + params ["_unit", "_trench", "_trenchId", "_pos", "_vecDirAndUp", "_progress"]; + + // If the progress bar was cancelled, cancel elevation + // We use an uid to avoid any chance of an older trench being raised when a new one is built + if (_unit getVariable [QGVAR(isDiggingId), -1] != _trenchId) exitWith {}; + + _trench setPosASL _pos; + _trench setVectorDirAndUp _vecDirAndUp; + + // Save progress local + _trench setVariable [QGVAR(progress), _progress]; +}; + +if(_actualProgress == 0) then { + [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 1.0], _vecDirAndUp, _actualProgress] call _fnc_setPlacing; +}; + +private _progressLeft = (_actualProgress * 10) + 1; +private ["_i"]; +for "_i" from _progressLeft to 10 do { + private _vectorDiffZ = 1 - (_i / 10); + private _delay = _digTime * ((_i / 10) - _actualProgress); + private _progress = _i / 10; + [_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, _vectorDiffZ], _vecDirAndUp, _progress], _delay] call EFUNC(common,waitAndExecute); +}; + +// Play animation +[_unit, "AinvPknlMstpSnonWnonDnon_medic4"] call EFUNC(common,doAnimation); diff --git a/addons/trenches/functions/fnc_placeConfirm.sqf b/addons/trenches/functions/fnc_placeConfirm.sqf index 47f80014f8..8a1407d2d6 100644 --- a/addons/trenches/functions/fnc_placeConfirm.sqf +++ b/addons/trenches/functions/fnc_placeConfirm.sqf @@ -66,49 +66,8 @@ for [{_ix = -_dx/2},{_ix <= _dx/2},{_ix = _ix + _dx/3}] do { }; _basePos set [2, (_basePos select 2) + _minzoffset + _offset]; private _vecDirAndUp = [_v1, _v3]; - GVAR(trench) = objNull; -// Mark the unit as digging -private _trenchId = GVAR(trenchId); -_unit setVariable [QGVAR(isDiggingId), _trenchId, true]; -GVAR(trenchId) = GVAR(trenchId) + 1; +_trench setVariable [QGVAR(placeData), [_basePos, _vecDirAndUp], true]; -// Create progress bar -private _fnc_onFinish = { - (_this select 0) params ["_unit"]; - _unit setVariable [QGVAR(isDiggingId), -1, true]; -}; -private _fnc_onFailure = { - (_this select 0) params ["_unit"]; - _unit setVariable [QGVAR(isDiggingId), -1, true]; -}; -[12.5, [_unit], _fnc_onFinish, _fnc_onFailure, localize LSTRING(DiggingTrench)] call EFUNC(common,progressBar); - -// Schedule progressive raising of the trench -private _fnc_setPlacing = { - params ["_unit", "_trench", "_trenchId", "_pos", "_vecDirAndUp"]; - - // If the progress bar was cancelled, cancel elevation - // We use an uid to avoid any chance of an older trench being raised when a new one is built - if (_unit getVariable [QGVAR(isDiggingId), -1] != _trenchId) exitWith {}; - - _trench setPosASL _pos; - _trench setVectorDirAndUp _vecDirAndUp; -}; - -// For loops are for wimps -[_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 1.0], _vecDirAndUp] call _fnc_setPlacing; -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.9], _vecDirAndUp], 3.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.8], _vecDirAndUp], 4.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.7], _vecDirAndUp], 5.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.6], _vecDirAndUp], 6.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.5], _vecDirAndUp], 7.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.4], _vecDirAndUp], 8.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.3], _vecDirAndUp], 9.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.2], _vecDirAndUp],10.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.1], _vecDirAndUp],11.0] call EFUNC(common,waitAndExecute); -[_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 0.0], _vecDirAndUp],12.0] call EFUNC(common,waitAndExecute); - -// Play animation -[_unit, "AinvPknlMstpSnonWnonDnon_medic4"] call EFUNC(common,doAnimation); +[_trench, _unit] call FUNC(continueDiggingTrench); diff --git a/addons/trenches/functions/fnc_placeTrench.sqf b/addons/trenches/functions/fnc_placeTrench.sqf index 48a768427f..b9a8bae52a 100644 --- a/addons/trenches/functions/fnc_placeTrench.sqf +++ b/addons/trenches/functions/fnc_placeTrench.sqf @@ -10,7 +10,7 @@ * None * * Example: - * [ACE_player] call ace_trenches_fnc_placeTrench + * [ACE_player, "ace_trenches_trenchBig"] call ace_trenches_fnc_placeTrench * * Public: No */ diff --git a/addons/trenches/functions/fnc_removeTrench.sqf b/addons/trenches/functions/fnc_removeTrench.sqf new file mode 100644 index 0000000000..1259d8bb9c --- /dev/null +++ b/addons/trenches/functions/fnc_removeTrench.sqf @@ -0,0 +1,92 @@ +/* + * Author: Garth 'L-H' de Wet, Ruthberg, edited by commy2 for better MP and eventual AI support and esteldunedain + * Removes trench + * + * Arguments: + * 0: trench + * 1: unit + * + * Return Value: + * None + * + * Example: + * [TrenchObj, ACE_player] call ace_trenches_fnc_removeTrench + * + * Public: No + */ +#include "script_component.hpp" + +params ["_trench", "_unit"]; +TRACE_2("removeTrench",_trench,_unit); + +private _actualProgress = _trench getVariable [QGVAR(progress), 0]; +if(_actualProgress == 0) exitWith {}; + +// Mark trench as being worked on +_trench setVariable [QGVAR(digging), true, true]; + +private _removeTime = getNumber (configFile >> "CfgVehicles" >> (typeof _trench) >> QGVAR(removalDuration)); +private _removeTimeLeft = _removeTime * _actualProgress; + +private _placeData = _trench getVariable [QGVAR(placeData), [[], []]]; +_placeData params ["_basePos", "_vecDirAndUp"]; + +private _trenchId = _unit getVariable [QGVAR(isDiggingId), -1]; +if(_trenchId < 0) then { + _trenchId = GVAR(trenchId); + _unit setVariable [QGVAR(isDiggingId), _trenchId, true]; + GVAR(trenchId) = GVAR(trenchId) + 1; +}; + +// Create progress bar +private _fnc_onFinish = { + (_this select 0) params ["_unit", "_trench"]; + _unit setVariable [QGVAR(isDiggingId), -1, true]; + + // Remove trench + deleteVehicle _trench; + + // Reset animation + [_unit, "", 1] call EFUNC(common,doAnimation); +}; +private _fnc_onFailure = { + (_this select 0) params ["_unit", "_trench"]; + _unit setVariable [QGVAR(isDiggingId), -1, true]; + _trench setVariable [QGVAR(digging), false, true]; + + // Save progress global + private _progress = _trench getVariable [QGVAR(progress), 0]; + _trench setVariable [QGVAR(progress), _progress, true]; + + // Reset animation + [_unit, "", 1] call EFUNC(common,doAnimation); +}; +[(_removeTimeLeft + 0.5), [_unit, _trench], _fnc_onFinish, _fnc_onFailure, localize LSTRING(RemovingTrench)] call EFUNC(common,progressBar); + +// Schedule progressive raising of the trench +private _fnc_setPlacing = { + params ["_unit", "_trench", "_trenchId", "_pos", "_vecDirAndUp", "_progress"]; + + // If the progress bar was cancelled, cancel elevation + // We use an uid to avoid any chance of an older trench being raised when a new one is built + if (_unit getVariable [QGVAR(isDiggingId), -1] != _trenchId) exitWith {}; + + _trench setPosASL _pos; + _trench setVectorDirAndUp _vecDirAndUp; + + // Save progress local + _trench setVariable [QGVAR(progress), _progress]; +}; + +private _progressLeft = ((1 - _actualProgress) * 10) + 1; +private ["_i"]; +for "_i" from _progressLeft to 10 do { + private _vectorDiffZ = _i / 10; + private _delay = _removeTime * ((_i / 10) - (1 - _actualProgress)); + private _progress = 1 - (_i / 10); + + [_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, _vectorDiffZ], _vecDirAndUp, _progress], _delay] call EFUNC(common,waitAndExecute); +}; + +// Play animation +[_unit, "AinvPknlMstpSnonWnonDnon_medic4"] call EFUNC(common,doAnimation); diff --git a/addons/trenches/script_component.hpp b/addons/trenches/script_component.hpp index 3bb65ab0a6..432308fa51 100644 --- a/addons/trenches/script_component.hpp +++ b/addons/trenches/script_component.hpp @@ -1,6 +1,11 @@ #define COMPONENT trenches #include "\z\ace\addons\main\script_mod.hpp" +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define CBA_DEBUG_SYNCHRONOUS +// #define ENABLE_PERFORMANCE_COUNTERS + #ifdef DEBUG_ENABLED_TRENCHES #define DEBUG_MODE_FULL #endif diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 617a604457..44c628de69 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -101,5 +101,17 @@ Cavando trinchera Creuse la tranchée + + Continue Digging Trench + Wzów kopanie okopu + + + Remove Trench + Usuń okop + + + Removing Trench + Usuwanie okopu + From 203c059cc1c26723c4a6c44800fbb7bfd271a1c4 Mon Sep 17 00:00:00 2001 From: SzwedzikPL Date: Tue, 22 Mar 2016 08:10:37 +0100 Subject: [PATCH 33/89] move placement data to config, setTrenchPlacement fnc, cleanup --- addons/trenches/CfgVehicles.hpp | 16 +++++---- addons/trenches/XEH_PREP.hpp | 7 ++-- addons/trenches/XEH_preInit.sqf | 6 ---- .../trenches/functions/fnc_canDigTrench.sqf | 9 ++--- .../functions/fnc_continueDiggingTrench.sqf | 19 ++--------- .../trenches/functions/fnc_placeConfirm.sqf | 4 +-- addons/trenches/functions/fnc_placeTrench.sqf | 22 ++++++++----- .../trenches/functions/fnc_removeTrench.sqf | 17 +--------- .../functions/fnc_setTrenchPlacement.sqf | 33 +++++++++++++++++++ 9 files changed, 67 insertions(+), 66 deletions(-) create mode 100644 addons/trenches/functions/fnc_setTrenchPlacement.sqf diff --git a/addons/trenches/CfgVehicles.hpp b/addons/trenches/CfgVehicles.hpp index 3123e9270d..68f4a7552a 100644 --- a/addons/trenches/CfgVehicles.hpp +++ b/addons/trenches/CfgVehicles.hpp @@ -4,20 +4,18 @@ class CBA_Extended_EventHandlers; class ACE_MainActions { \ displayName = ECSTRING(interaction,MainAction); \ selection = ""; \ - distance = 10; \ + distance = 3; \ condition = QUOTE(true); \ class ACE_ContinueDiggingTrench { \ displayName = CSTRING(ContinueDiggingTrench); \ condition = QUOTE([ARR_2(_target,_player)] call FUNC(canContinueDiggingTrench)); \ statement = QUOTE([ARR_2(_target,_player)] call FUNC(continueDiggingTrench);); \ - showDisabled = 0; \ priority = -1; \ }; \ class ACE_RemoveTrench { \ displayName = CSTRING(RemoveEnvelope); \ condition = QUOTE([ARR_2(_target,_player)] call FUNC(canRemoveTrench)); \ statement = QUOTE([ARR_2(_target,_player)] call FUNC(removeTrench);); \ - showDisabled = 0; \ priority = -1; \ }; \ }; \ @@ -30,9 +28,9 @@ class CfgVehicles { class ACE_Equipment { class GVAR(digEnvelopeSmall) { displayName = CSTRING(DigEnvelopeSmall); - condition = QUOTE([ARR_2(_this select 0,'ace_trenches_trenchSmall')] call FUNC(canDigTrench)); + condition = QUOTE(_player call FUNC(canDigTrench)); //wait a frame to handle "Do When releasing action menu key" option - statement = QUOTE([ARR_2({_this call FUNC(placeTrench)},[ARR_2(_this select 0,'ace_trenches_trenchSmall')])] call EFUNC(common,execNextFrame)); + statement = QUOTE([ARR_2({_this call FUNC(placeTrench)},[ARR_2(_this select 0,'ACE_envelope_small')])] call EFUNC(common,execNextFrame)); exceptions[] = {}; showDisabled = 0; priority = 4; @@ -40,9 +38,9 @@ class CfgVehicles { }; class GVAR(digEnvelopeBig) { displayName = CSTRING(DigEnvelopeBig); - condition = QUOTE([ARR_2(_this select 0,'ace_trenches_trenchBig')] call FUNC(canDigTrench)); + condition = QUOTE(_player call FUNC(canDigTrench)); //wait a frame to handle "Do When releasing action menu key" option - statement = QUOTE([ARR_2({_this call FUNC(placeTrench)},[ARR_2(_this select 0,'ace_trenches_trenchBig')])] call EFUNC(common,execNextFrame)); + statement = QUOTE([ARR_2({_this call FUNC(placeTrench)},[ARR_2(_this select 0,'ACE_envelope_big')])] call EFUNC(common,execNextFrame)); exceptions[] = {}; showDisabled = 0; priority = 4; @@ -61,6 +59,8 @@ class CfgVehicles { scope = 2; GVAR(diggingDuration) = 20; GVAR(removalDuration) = 12; + GVAR(noGeoClass) = "ACE_envelope_small_NoGeo"; + GVAR(placementData)[] = {2,3,0.35}; ACE_TRENCHES_ACTIONS; class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; @@ -74,6 +74,8 @@ class CfgVehicles { scope = 2; GVAR(diggingDuration) = 25; GVAR(removalDuration) = 15; + GVAR(noGeoClass) = "ACE_envelope_big_NoGeo"; + GVAR(placementData)[] = {6,1.1,0.20}; ACE_TRENCHES_ACTIONS; class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; diff --git a/addons/trenches/XEH_PREP.hpp b/addons/trenches/XEH_PREP.hpp index c0922b786c..2e671acb85 100644 --- a/addons/trenches/XEH_PREP.hpp +++ b/addons/trenches/XEH_PREP.hpp @@ -1,5 +1,8 @@ +PREP(canContinueDiggingTrench); PREP(canDigTrench); +PREP(canRemoveTrench); +PREP(continueDiggingTrench); PREP(handleInteractMenuOpened); PREP(handleKilled); PREP(handlePlayerChanged); @@ -9,7 +12,5 @@ PREP(handleUnconscious); PREP(placeCancel); PREP(placeConfirm); PREP(placeTrench); -PREP(canContinueDiggingTrench); -PREP(canRemoveTrench); -PREP(continueDiggingTrench); PREP(removeTrench); +PREP(setTrenchPlacement); diff --git a/addons/trenches/XEH_preInit.sqf b/addons/trenches/XEH_preInit.sqf index 8b172b2b9e..a7feade1c3 100644 --- a/addons/trenches/XEH_preInit.sqf +++ b/addons/trenches/XEH_preInit.sqf @@ -4,10 +4,4 @@ ADDON = false; #include "XEH_PREP.hpp" -// Trench types -// Name of the object, name of th dummy no geo object, dx, dy -GVAR(trenchSmall) = ["ACE_envelope_small", "ACE_envelope_small_NoGeo", 2, 3, 0.35]; -GVAR(trenchBig) = ["ACE_envelope_big", "ACE_envelope_big_NoGeo", 6, 1.1, 0.20]; -GVAR(trenchType) = GVAR(trenchSmall); - ADDON = true; diff --git a/addons/trenches/functions/fnc_canDigTrench.sqf b/addons/trenches/functions/fnc_canDigTrench.sqf index 9dc5e29017..0cbed2d9b7 100644 --- a/addons/trenches/functions/fnc_canDigTrench.sqf +++ b/addons/trenches/functions/fnc_canDigTrench.sqf @@ -4,7 +4,6 @@ * * Arguments: * 0: Unit - * 1: Trench type * * Return Value: * Can dig @@ -18,17 +17,15 @@ #define SURFACE_BLACKLIST ["water", "concrete", "tarmac", "wood", "metal", "roof_tin", "roof_tiles", "wood_int", "concrete_int", "tiles_int", "metal_int", "stony", "rock", "int_concrete", "int_tiles", "int_wood", "tiling", "wavymetal", "int_metal"] -params ["_unit","_trenchTypeName"]; +params ["_unit"]; if !("ACE_EntrenchingTool" in items _unit) exitWith {false}; // Can't dig trench if above ground level if ((getPosATL _unit) select 2 > 0.05) exitWith {false}; -private ["_surfaceClass", "_surfaceType"]; - -_surfaceClass = (surfaceType getPosASL _unit) select [1]; -_surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron"); +private _surfaceClass = (surfaceType getPosASL _unit) select [1]; +private _surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron"); TRACE_1("",_surfaceType); !(_surfaceType in SURFACE_BLACKLIST) diff --git a/addons/trenches/functions/fnc_continueDiggingTrench.sqf b/addons/trenches/functions/fnc_continueDiggingTrench.sqf index 25f9fc4150..04a2377f21 100644 --- a/addons/trenches/functions/fnc_continueDiggingTrench.sqf +++ b/addons/trenches/functions/fnc_continueDiggingTrench.sqf @@ -65,23 +65,8 @@ private _fnc_onFailure = { }; [(_digTimeLeft + 0.5), [_unit, _trench], _fnc_onFinish, _fnc_onFailure, localize LSTRING(DiggingTrench)] call EFUNC(common,progressBar); -// Schedule progressive raising of the trench -private _fnc_setPlacing = { - params ["_unit", "_trench", "_trenchId", "_pos", "_vecDirAndUp", "_progress"]; - - // If the progress bar was cancelled, cancel elevation - // We use an uid to avoid any chance of an older trench being raised when a new one is built - if (_unit getVariable [QGVAR(isDiggingId), -1] != _trenchId) exitWith {}; - - _trench setPosASL _pos; - _trench setVectorDirAndUp _vecDirAndUp; - - // Save progress local - _trench setVariable [QGVAR(progress), _progress]; -}; - if(_actualProgress == 0) then { - [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 1.0], _vecDirAndUp, _actualProgress] call _fnc_setPlacing; + [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 1.0], _vecDirAndUp, _actualProgress] call FUNC(setTrenchPlacement); }; private _progressLeft = (_actualProgress * 10) + 1; @@ -90,7 +75,7 @@ for "_i" from _progressLeft to 10 do { private _vectorDiffZ = 1 - (_i / 10); private _delay = _digTime * ((_i / 10) - _actualProgress); private _progress = _i / 10; - [_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, _vectorDiffZ], _vecDirAndUp, _progress], _delay] call EFUNC(common,waitAndExecute); + [DFUNC(setTrenchPlacement), [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, _vectorDiffZ], _vecDirAndUp, _progress], _delay] call EFUNC(common,waitAndExecute); }; // Play animation diff --git a/addons/trenches/functions/fnc_placeConfirm.sqf b/addons/trenches/functions/fnc_placeConfirm.sqf index 8a1407d2d6..7c3be2d901 100644 --- a/addons/trenches/functions/fnc_placeConfirm.sqf +++ b/addons/trenches/functions/fnc_placeConfirm.sqf @@ -36,9 +36,9 @@ params ["_unit"]; if (isNull GVAR(trench)) exitWith {}; deleteVehicle GVAR(trench); -private _trench = createVehicle [GVAR(trenchType) select 0, [0, 0, 0], [], 0, "NONE"]; +private _trench = createVehicle [GVAR(trenchClass), [0, 0, 0], [], 0, "NONE"]; -GVAR(trenchType) params ["", "", "_dx", "_dy", "_offset"]; +GVAR(trenchPlacementData) params ["_dx", "_dy", "_offset"]; private _basePos = GVAR(trenchPos); private _angle = (GVAR(digDirection) + getDir _unit); diff --git a/addons/trenches/functions/fnc_placeTrench.sqf b/addons/trenches/functions/fnc_placeTrench.sqf index b9a8bae52a..35a6706d30 100644 --- a/addons/trenches/functions/fnc_placeTrench.sqf +++ b/addons/trenches/functions/fnc_placeTrench.sqf @@ -4,29 +4,34 @@ * * Arguments: * 0: unit - * 1: Trench type + * 1: Trench class * * Return Value: * None * * Example: - * [ACE_player, "ace_trenches_trenchBig"] call ace_trenches_fnc_placeTrench + * [ACE_player, "ACE_envelope_small"] call ace_trenches_fnc_placeTrench * * Public: No */ #include "script_component.hpp" -params ["_unit","_trenchTypeName"]; +params ["_unit", "_trenchClass"]; -GVAR(trenchType) = missionNamespace getVariable _trenchTypeName; +//Load trench data +private _noGeoModel = getText (configFile >> "CfgVehicles" >> _trenchClass >> QGVAR(noGeoClass)); +if(_noGeoModel == "") then {_noGeoModel = _trenchClass;}; + +GVAR(trenchClass) = _trenchClass; +GVAR(trenchPlacementData) = getArray (configFile >> "CfgVehicles" >> _trenchClass >> QGVAR(placementData)); +TRACE_1("",GVAR(trenchPlacementData)); -TRACE_2("",_trenchTypeName,GVAR(trenchType)); // prevent the placing unit from running [_unit, "forceWalk", "ACE_Trenches", true] call EFUNC(common,statusEffect_set); // create the trench private "_trench"; -_trench = createVehicle [GVAR(trenchType) select 1, [0, 0, 0], [], 0, "NONE"]; +_trench = createVehicle [_noGeoModel, [0, 0, 0], [], 0, "NONE"]; GVAR(trench) = _trench; @@ -38,7 +43,6 @@ GVAR(digDirection) = 0; // pfh that runs while the dig is in progress GVAR(digPFH) = [{ (_this select 0) params ["_unit", "_trench"]; - GVAR(trenchType) params ["", "", "_dx", "_dy", "_offset"]; // Cancel if the helper object is gone if (isNull _trench) exitWith { @@ -46,12 +50,12 @@ GVAR(digPFH) = [{ }; // Cancel if the place is no longer suitable - if !([_unit, GVAR(trenchType)] call FUNC(canDigTrench)) exitWith { + if !([_unit] call FUNC(canDigTrench)) exitWith { [_unit] call FUNC(placeCancel); }; // Update trench position - GVAR(trenchType) params ["", "", "_dx", "_dy", "_offset"]; + GVAR(trenchPlacementData) params ["_dx", "_dy", "_offset"]; private _basePos = eyePos _unit vectorAdd ([sin getDir _unit, +cos getDir _unit, 0] vectorMultiply 1.0); private _angle = (GVAR(digDirection) + getDir _unit); diff --git a/addons/trenches/functions/fnc_removeTrench.sqf b/addons/trenches/functions/fnc_removeTrench.sqf index 1259d8bb9c..dd51bbbae5 100644 --- a/addons/trenches/functions/fnc_removeTrench.sqf +++ b/addons/trenches/functions/fnc_removeTrench.sqf @@ -63,21 +63,6 @@ private _fnc_onFailure = { }; [(_removeTimeLeft + 0.5), [_unit, _trench], _fnc_onFinish, _fnc_onFailure, localize LSTRING(RemovingTrench)] call EFUNC(common,progressBar); -// Schedule progressive raising of the trench -private _fnc_setPlacing = { - params ["_unit", "_trench", "_trenchId", "_pos", "_vecDirAndUp", "_progress"]; - - // If the progress bar was cancelled, cancel elevation - // We use an uid to avoid any chance of an older trench being raised when a new one is built - if (_unit getVariable [QGVAR(isDiggingId), -1] != _trenchId) exitWith {}; - - _trench setPosASL _pos; - _trench setVectorDirAndUp _vecDirAndUp; - - // Save progress local - _trench setVariable [QGVAR(progress), _progress]; -}; - private _progressLeft = ((1 - _actualProgress) * 10) + 1; private ["_i"]; for "_i" from _progressLeft to 10 do { @@ -85,7 +70,7 @@ for "_i" from _progressLeft to 10 do { private _delay = _removeTime * ((_i / 10) - (1 - _actualProgress)); private _progress = 1 - (_i / 10); - [_fnc_setPlacing, [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, _vectorDiffZ], _vecDirAndUp, _progress], _delay] call EFUNC(common,waitAndExecute); + [DFUNC(setTrenchPlacement), [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, _vectorDiffZ], _vecDirAndUp, _progress], _delay] call EFUNC(common,waitAndExecute); }; // Play animation diff --git a/addons/trenches/functions/fnc_setTrenchPlacement.sqf b/addons/trenches/functions/fnc_setTrenchPlacement.sqf new file mode 100644 index 0000000000..49c1efdaae --- /dev/null +++ b/addons/trenches/functions/fnc_setTrenchPlacement.sqf @@ -0,0 +1,33 @@ +/* + * Author: Garth 'L-H' de Wet, Ruthberg, edited by commy2 for better MP and eventual AI support and esteldunedain + * Sets trench placement + * + * Arguments: + * 0: unit + * 1: trench + * 2: trench id + * 3: position ASL + * 4: vector dir and up + * 5: progress + * + * Return Value: + * None + * + * Example: + * [ACE_player, TrenchObj, 2, [0,0,0], [[0,0,0],[0,0,0]], 0.5] call ace_trenches_fnc_setTrenchPlacement + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_trench", "_trenchId", "_pos", "_vecDirAndUp", "_progress"]; + +// If the progress bar was cancelled, cancel elevation +// We use an uid to avoid any chance of an older trench being raised when a new one is built +if (_unit getVariable [QGVAR(isDiggingId), -1] != _trenchId) exitWith {}; + +_trench setPosASL _pos; +_trench setVectorDirAndUp _vecDirAndUp; + +// Save progress local +_trench setVariable [QGVAR(progress), _progress]; From 10d20472d3303cdfb3ff3129bbd79f690567c41e Mon Sep 17 00:00:00 2001 From: SzwedzikPL Date: Tue, 22 Mar 2016 11:26:40 +0100 Subject: [PATCH 34/89] Remove grass behind the trench --- addons/trenches/CfgVehicles.hpp | 2 ++ addons/trenches/functions/fnc_continueDiggingTrench.sqf | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/addons/trenches/CfgVehicles.hpp b/addons/trenches/CfgVehicles.hpp index 68f4a7552a..8e1eb41fd0 100644 --- a/addons/trenches/CfgVehicles.hpp +++ b/addons/trenches/CfgVehicles.hpp @@ -61,6 +61,7 @@ class CfgVehicles { GVAR(removalDuration) = 12; GVAR(noGeoClass) = "ACE_envelope_small_NoGeo"; GVAR(placementData)[] = {2,3,0.35}; + GVAR(grassCuttingPoints)[] = {{0,-0.5,0}}; ACE_TRENCHES_ACTIONS; class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; @@ -76,6 +77,7 @@ class CfgVehicles { GVAR(removalDuration) = 15; GVAR(noGeoClass) = "ACE_envelope_big_NoGeo"; GVAR(placementData)[] = {6,1.1,0.20}; + GVAR(grassCuttingPoints)[] = {{-1.5,-1,0},{1.5,-1,0}}; ACE_TRENCHES_ACTIONS; class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; diff --git a/addons/trenches/functions/fnc_continueDiggingTrench.sqf b/addons/trenches/functions/fnc_continueDiggingTrench.sqf index 04a2377f21..223dc42df6 100644 --- a/addons/trenches/functions/fnc_continueDiggingTrench.sqf +++ b/addons/trenches/functions/fnc_continueDiggingTrench.sqf @@ -67,6 +67,15 @@ private _fnc_onFailure = { if(_actualProgress == 0) then { [_unit, _trench, _trenchId, _basePos vectorDiff [0, 0, 1.0], _vecDirAndUp, _actualProgress] call FUNC(setTrenchPlacement); + + //Remove grass + { + private _trenchGrassCutter = createVehicle ["Land_ClutterCutter_medium_F", [0, 0, 0], [], 0, "NONE"]; + private _cutterPos = AGLToASL (_trench modelToWorld _x); + _cutterPos set [2, getTerrainHeightASL _cutterPos]; + _trenchGrassCutter setPosASL _cutterPos; + deleteVehicle _trenchGrassCutter; + } foreach getArray (configFile >> "CfgVehicles" >> (typeof _trench) >> QGVAR(grassCuttingPoints)); }; private _progressLeft = (_actualProgress * 10) + 1; From 9b1b4a46fa8a3c00efa5cffa011c9bb2dd6ab427 Mon Sep 17 00:00:00 2001 From: SzwedzikPL Date: Wed, 23 Mar 2016 17:17:16 +0100 Subject: [PATCH 35/89] better polish translation --- addons/trenches/stringtable.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 44c628de69..5af459f7f8 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -96,22 +96,22 @@ Digging Trench Grabe Schützengraben - Kopanie okopu + Kopanie wnęki Sto Scavando la Trincea Cavando trinchera Creuse la tranchée Continue Digging Trench - Wzów kopanie okopu + Wzów kopanie wnęki Remove Trench - Usuń okop + Usuń wnękę Removing Trench - Usuwanie okopu + Usuwanie wnęki From fed46628849cce47cf85a7ac426a4630bc53b1db Mon Sep 17 00:00:00 2001 From: nomisum Date: Sat, 2 Apr 2016 15:36:21 +0200 Subject: [PATCH 36/89] changed suggested lines to ace standards --- addons/fastroping/CfgSounds.hpp | 8 ++++---- addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/fastroping/CfgSounds.hpp b/addons/fastroping/CfgSounds.hpp index 1cdf993adc..97479ecafb 100644 --- a/addons/fastroping/CfgSounds.hpp +++ b/addons/fastroping/CfgSounds.hpp @@ -1,12 +1,12 @@ class CfgSounds { - class ACE_Fastroping_Rope { + class GVAR(Rope) { name = "ACE_Fastroping_Rope"; - sound[] = {QUOTE(PATHTOF(data\sounds\fastroping_rope.ogg)), db0, 1.0}; + sound[] = {QUOTE(PATHTOF(data\sounds\fastroping_rope.ogg)), 10, 1.0}; titles[] = {}; }; - class ACE_Fastroping_Thud { + class GVAR(Thud) { name = "ACE_Fastroping_Thud"; - sound[] = {QUOTE(PATHTOF(data\sounds\fastroping_thud.ogg)), db0, 1.0}; + sound[] = {QUOTE(PATHTOF(data\sounds\fastroping_thud.ogg)), 10, 1.0}; titles[] = {}; }; }; \ No newline at end of file diff --git a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf index 1b41404299..8074a5d494 100644 --- a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf @@ -39,7 +39,7 @@ if (animationState _unit != "ACE_FastRoping") exitWith { [_idPFH] call CBA_fnc_removePerFrameHandler; }; - playSound "ACE_Fastroping_Rope"; + playSound QGVAR(Rope); }, 1, [_unit]] call CBA_fnc_addPerFrameHandler; //End of fast rope @@ -47,7 +47,7 @@ if (isNull attachedTo _unit) exitWith { [_unit, "", 2] call EFUNC(common,doAnimation); _unit setVectorUp [0, 0, 1]; - playSound "ACE_Fastroping_Thud"; + playSound QGVAR(Thud); [_pfhHandle] call CBA_fnc_removePerFrameHandler; }; From 5c87161118957904225464618e35c74cec134a37 Mon Sep 17 00:00:00 2001 From: nomisum Date: Sat, 2 Apr 2016 15:53:39 +0200 Subject: [PATCH 37/89] fixed logic problem --- .../functions/fnc_fastRopeLocalPFH.sqf | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf index 8074a5d494..8334e07929 100644 --- a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf @@ -29,18 +29,19 @@ if (animationState _unit != "ACE_FastRoping") exitWith { _unit disableCollisionWith _dummy; _unit attachTo [_dummy, [0, 0, -1.45]]; [_unit, "ACE_FastRoping", 2] call EFUNC(common,doAnimation); + + [{ + params ["_args", "_idPFH"]; + _args params ["_unit"]; + + if (isNull (attachedTo _unit)) exitWith { + [_idPFH] call CBA_fnc_removePerFrameHandler; + }; + + playSound QGVAR(Rope); + }, 1, [_unit]] call CBA_fnc_addPerFrameHandler; }; -[{ - params ["_args", "_idPFH"]; - _args params ["_unit"]; - - if (isNull (attachedTo _unit)) exitWith { - [_idPFH] call CBA_fnc_removePerFrameHandler; - }; - - playSound QGVAR(Rope); -}, 1, [_unit]] call CBA_fnc_addPerFrameHandler; //End of fast rope if (isNull attachedTo _unit) exitWith { From d826c91c99358f633f3338e6232bdd11087823ec Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 27 Apr 2016 22:58:47 -0500 Subject: [PATCH 38/89] Cleanup reload launchers --- .../functions/fnc_addMissileReloadActions.sqf | 28 +++++++++++-------- .../reloadlaunchers/functions/fnc_canLoad.sqf | 11 +++----- .../functions/fnc_getLoadableMissiles.sqf | 12 ++++---- addons/reloadlaunchers/functions/fnc_load.sqf | 11 +++----- .../functions/fnc_reloadLauncher.sqf | 6 ++-- 5 files changed, 33 insertions(+), 35 deletions(-) diff --git a/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf b/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf index a07afe8e22..f6cd923845 100644 --- a/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf +++ b/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf @@ -3,28 +3,31 @@ * Create one action per reloadable missile * * Argument: - * 1: Player (Object) - * 0: Target (Object) - * 2: Parameters ??? (Array) + * 1: Target (Object) + * 0: Player (Object) * * Return value: * Children actions (Array) * + * Public: No + * */ #include "script_component.hpp" -private ["_unit", "_target", "_parameters"]; +params ["_target", "_unit"]; +TRACE_2("params",_target,_unit); -_unit = _this select 1; -_target = _this select 0; -_parameters = _this select 2; // ??? +//Fast exit for common case: +private _weapon = secondaryWeapon _target; +if ((_weapon == "") || {(getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(enabled))) == 0}) exitWith { + TRACE_1("weapon not supported",_weapon); + [] +}; -private ["_actions", "_weapon", "_loadableMissiles"]; +private _actions = []; -_actions = []; - -_weapon = secondaryWeapon _target; -_loadableMissiles = [_unit, _weapon] call FUNC(getLoadableMissiles); +private _loadableMissiles = [_unit, _weapon] call FUNC(getLoadableMissiles); +TRACE_2("",_weapon,_loadableMissiles); { private ["_name", "_displayName", "_statement", "_condition", "_action"]; @@ -45,4 +48,5 @@ _loadableMissiles = [_unit, _weapon] call FUNC(getLoadableMissiles); _actions pushBack [_action, [], _unit]; } forEach _loadableMissiles; +TRACE_1("return",_actions); _actions diff --git a/addons/reloadlaunchers/functions/fnc_canLoad.sqf b/addons/reloadlaunchers/functions/fnc_canLoad.sqf index 5bbfe4dd87..116a900092 100644 --- a/addons/reloadlaunchers/functions/fnc_canLoad.sqf +++ b/addons/reloadlaunchers/functions/fnc_canLoad.sqf @@ -1,6 +1,5 @@ /* * Author: commy2 - * * Check of the unit can reload the launcher of target unit. * * Argument: @@ -11,15 +10,13 @@ * * Return value: * NONE + * + * Public: No */ #include "script_component.hpp" -private ["_unit", "_target", "_weapon", "_magazine"]; - -_unit = _this select 0; -_target = _this select 1; -_weapon = _this select 2; -_magazine = _this select 3; +params ["_unit", "_target", "_weapon", "_magazine"]; +TRACE_4("params",_unit,_target,_weapon,_magazine); if (!alive _target) exitWith {false}; if (vehicle _target != _target) exitWith {false}; diff --git a/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf b/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf index e75d826513..f466490b64 100644 --- a/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf +++ b/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf @@ -1,6 +1,5 @@ /* * Author: commy2 - * * Return all magazine types from reloaders inventory that are compatible with given weapon. * * Argument: @@ -9,17 +8,16 @@ * * Return value: * Reloable magazines (Array) + * + * Public: No */ #include "script_component.hpp" -private ["_unit", "_weapon"]; - -_unit = _this select 0; -_weapon = _this select 1; +params ["_unit", "_weapon"]; +TRACE_2("params",_unit,_weapon); // get available magazines of reloader, Note: "magazines" does not include currently loaded magazines -private "_magazines"; -_magazines = magazines _unit; +private _magazines = magazines _unit; // case sensitvity _magazines = _magazines apply {toLower _x}; diff --git a/addons/reloadlaunchers/functions/fnc_load.sqf b/addons/reloadlaunchers/functions/fnc_load.sqf index ce7b743df5..db010b5e47 100644 --- a/addons/reloadlaunchers/functions/fnc_load.sqf +++ b/addons/reloadlaunchers/functions/fnc_load.sqf @@ -1,6 +1,5 @@ /* * Author: commy2 - * * Reload a launcher * * Argument: @@ -11,15 +10,13 @@ * * Return value: * NONE + * + * Public: No */ #include "script_component.hpp" -private ["_unit", "_target", "_weapon", "_magazine"]; - -_unit = _this select 0; -_target = _this select 1; -_weapon = _this select 2; -_magazine = _this select 3; +params ["_unit", "_target", "_weapon", "_magazine"]; +TRACE_4("params",_unit,_target,_weapon,_magazine); private "_reloadTime"; _reloadTime = getNumber (configFile >> "CfgWeapons" >> _weapon >> "magazineReloadTime"); diff --git a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf index fc802a025c..2aec180d22 100644 --- a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf +++ b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf @@ -1,6 +1,5 @@ /* * Author: commy2 - * * Reload a launcher * * Argument: @@ -11,10 +10,13 @@ * * Return value: * NONE + * + * Public: No */ #include "script_component.hpp" -PARAMS_4(_unit,_target,_weapon,_magazine); +params ["_unit","_target","_weapon","_magazine"]; +TRACE_4("params",_unit,_target,_weapon,_magazine); _target selectWeapon _weapon; From 76659356413a9518aaa064e2dac0fb880cf0521e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 29 Apr 2016 13:00:35 -0500 Subject: [PATCH 39/89] Use constant reload time value instead of config --- addons/reloadlaunchers/functions/fnc_load.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/reloadlaunchers/functions/fnc_load.sqf b/addons/reloadlaunchers/functions/fnc_load.sqf index db010b5e47..9f0b36ce8d 100644 --- a/addons/reloadlaunchers/functions/fnc_load.sqf +++ b/addons/reloadlaunchers/functions/fnc_load.sqf @@ -18,8 +18,8 @@ params ["_unit", "_target", "_weapon", "_magazine"]; TRACE_4("params",_unit,_target,_weapon,_magazine); -private "_reloadTime"; -_reloadTime = getNumber (configFile >> "CfgWeapons" >> _weapon >> "magazineReloadTime"); +// private _reloadTime = getNumber (configFile >> "CfgWeapons" >> _weapon >> "magazineReloadTime"); //Not a good config value, use a constant for now: +private _reloadTime = 2.5; // do animation [_unit] call EFUNC(common,goKneeling); From 7cc2da2bb132c2d44f00aedc8d24a747be451362 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 29 Apr 2016 23:38:01 -0500 Subject: [PATCH 40/89] Fix self swap action --- addons/overheating/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index 528f77375c..0a86535231 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -16,7 +16,7 @@ class CfgVehicles { class GVAR(SwapBarrel) { displayName = CSTRING(SwapBarrel); condition = QUOTE( 'ACE_SpareBarrel' in magazines _player && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _player >> 'ACE_Overheating_allowSwapBarrel') == 1} ); - statement = QUOTE( [ARR_2(_player, currentWeapon _player)] call FUNC(swapBarrel); ); + statement = QUOTE( [ARR_3(_player, _player, currentWeapon _player)] call FUNC(swapBarrel); ); showDisabled = 0; priority = 3; icon = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); From 33b624c89609c4d9d7219548c3637bde2ef826f3 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 2 May 2016 12:10:44 -0500 Subject: [PATCH 41/89] Tactical Ladder - Update model cfg #3745 --- addons/tacticalladder/data/model.cfg | 152 ++++++++++++--------------- 1 file changed, 66 insertions(+), 86 deletions(-) diff --git a/addons/tacticalladder/data/model.cfg b/addons/tacticalladder/data/model.cfg index ba19d58c65..bc7da07960 100644 --- a/addons/tacticalladder/data/model.cfg +++ b/addons/tacticalladder/data/model.cfg @@ -35,76 +35,51 @@ class CfgSkeletons { "Camera","Pelvis", "weapon","Spine1", "launcher","Spine1", - //Head skeleton in hierarchy + + // Head skeleton in hierarchy "neck","Spine3", - "neck1","neck", - "head","neck1", - "HeadCutScene","head", - "jaw","head", - "chin","head", - "jaw_rf","head", - "jaw_rm","head", - "jaw_rs","head", - "jaw_lf","head", - "jaw_lm","head", - "jaw_ls","head", - "ear_r","head", - "ear_l","head", - "lip_lc","head", - "lip_lwlb","head", - "lip_lwlf","head", - "lip_lwm","head", - "lip_lwrf","head", - "lip_lwrb","head", - "lip_rc","head", - "lip_uprb","head", - "lip_uprf","head", - "lip_upm","head", - "lip_uplf","head", - "lip_uplb","head", - "nose_tip","head", - "nose_r","head", - "nose_l","head", - "zig_lt","head", - "zig_lm","head", - "zig_lb","head", - "zig_rt","head", - "zig_rm","head", - "zig_rb","head", - "cheek_r","head", - "cheek_l","head", - "eyebrow_lb","head", - "eyebrow_lm","head", - "eyebrow_lf","head", - "corr","head", - "eyebrow_rf","head", - "eyebrow_rm","head", - "eyebrow_rb","head", - "eye_upr","head", - "eye_lwr","head", - "eye_upl","head", - "eye_lwl","head", - "cheek_rf","head", - "cheek_rm","head", - "cheek_rb","head", - "cheek_lf","head", - "cheek_lm","head", - "cheek_lb","head", - "forehead_l","head", - "forehead_m","head", - "forehead_r","head", - "l_eye","head", - "r_eye","head", - "l_pupila","head", - "r_pupila","head", - "neck_t","head", - "neck_b","head", - "neck_r","head", - "neck_l","head", - "tongue_b","head", - "tongue_m","head", - "tongue_f","head", - //Left upper side + "neck1","neck", + "head","neck1", + + // New facial features + "Face_Hub","head", + "Face_Jawbone","Face_Hub", + "Face_Jowl","Face_Jawbone", + "Face_chopRight","Face_Jawbone", + "Face_chopLeft","Face_Jawbone", + "Face_LipLowerMiddle","Face_Jawbone", + "Face_LipLowerLeft","Face_Jawbone", + "Face_LipLowerRight","Face_Jawbone", + "Face_Chin","Face_Jawbone", + "Face_Tongue","Face_Jawbone", + "Face_CornerRight","Face_Hub", + "Face_CheekSideRight","Face_CornerRight", + "Face_CornerLeft","Face_Hub", + "Face_CheekSideLeft","Face_CornerLeft", + "Face_CheekFrontRight","Face_Hub", + "Face_CheekFrontLeft","Face_Hub", + "Face_CheekUpperRight","Face_Hub", + "Face_CheekUpperLeft","Face_Hub", + "Face_LipUpperMiddle","Face_Hub", + "Face_LipUpperRight","Face_Hub", + "Face_LipUpperLeft","Face_Hub", + "Face_NostrilRight","Face_Hub", + "Face_NostrilLeft","Face_Hub", + "Face_Forehead","Face_Hub", + "Face_BrowFrontRight","Face_Forehead", + "Face_BrowFrontLeft","Face_Forehead", + "Face_BrowMiddle","Face_Forehead", + "Face_BrowSideRight","Face_Forehead", + "Face_BrowSideLeft","Face_Forehead", + "Face_Eyelids","Face_Hub", + "Face_EyelidUpperRight","Face_Hub", + "Face_EyelidUpperLeft","Face_Hub", + "Face_EyelidLowerRight","Face_Hub", + "Face_EyelidLowerLeft","Face_Hub", + "EyeLeft","Face_Hub", + "EyeRight","Face_Hub", + + // Left upper side "LeftShoulder","Spine3", "LeftArm","LeftShoulder", "LeftArmRoll","LeftArm", @@ -127,7 +102,8 @@ class CfgSkeletons { "LeftHandThumb1","LeftHand", "LeftHandThumb2","LeftHandThumb1", "LeftHandThumb3","LeftHandThumb2", - //Right upper side + + // Right upper side "RightShoulder","Spine3", "RightArm","RightShoulder", "RightArmRoll","RightArm", @@ -150,25 +126,26 @@ class CfgSkeletons { "RightHandThumb1","RightHand", "RightHandThumb2","RightHandThumb1", "RightHandThumb3","RightHandThumb2", - //Left lower side + + // Left lower side "LeftUpLeg","Pelvis", "LeftUpLegRoll","LeftUpLeg", "LeftLeg","LeftUpLegRoll", "LeftLegRoll","LeftLeg", "LeftFoot","LeftLegRoll", "LeftToeBase","LeftFoot", - //Right lower side + + // Right lower side "RightUpLeg","Pelvis", "RightUpLegRoll","RightUpLeg", "RightLeg","RightUpLegRoll", "RightLegRoll","RightLeg", "RightFoot","RightLegRoll", "RightToeBase","RightFoot" - }; - // location of pivot points (local axes) for hierarchical animation - //pivotsModel="ca\Anims\Characters\Data\Skeleton\SkeletonPivots.p3d"; - pivotsModel=""; - }; + }; + // location of pivot points (local axes) for hierarchical animation + pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; + }; }; class CfgModels { @@ -249,13 +226,14 @@ class CfgModels { }; }; class ArmaMan: Default { - htMin=60; - htMax=1800; - afMax=30; - mfMax=0; - mFact=1; - tBody=37; - sections[]= { + htMin = 60; // Minimum half-cooling time (in seconds) + htMax = 1800; // Maximum half-cooling time (in seconds) + afMax = 30; // Maximum temperature in case the model is alive (in celsius) + mfMax = 0; // Maximum temperature when the model is moving (in celsius) + mFact = 1; // Metabolism factor - number from interval <0, 1> (0 - metabolism has no influence, 1 - metabolism has full influence (no other temperature source will be considered)). + tBody = 37; // Metabolism temperature of the model (in celsius) + + sections[] = { "osobnost", "Head_Injury", "Body_Injury", @@ -274,9 +252,11 @@ class CfgModels { "Camo2", "personality", "hl", - "injury_head" + "injury_head", + "insignia", + "ghillie_hide" }; - skeletonName="OFP2_ManSkeleton"; + skeletonName = "OFP2_ManSkeleton"; }; class ace_tacticalladder_pack: ArmaMan { }; From 7fcbe93b71f4c3182125d8f77a0ad8cdcdc240ea Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Tue, 3 May 2016 02:32:44 +0200 Subject: [PATCH 42/89] Cleaned up excessive whitespace --- addons/aircraft/CfgAmmo.hpp | 2 +- addons/aircraft/Heli_Attack_01_base_F.hpp | 10 +- addons/atragmx/RscTitles.hpp | 14 +- addons/atragmx/XEH_postInit.sqf | 22 +-- .../functions/fnc_calculate_solution.sqf | 35 +--- addons/atragmx/functions/fnc_change_gun.sqf | 5 +- .../atragmx/functions/fnc_create_dialog.sqf | 2 +- .../atragmx/functions/fnc_show_gun_list.sqf | 1 - .../functions/fnc_show_range_card_setup.sqf | 2 +- .../fnc_show_target_range_assist.sqf | 3 +- .../fnc_show_target_speed_assist.sqf | 4 +- addons/atragmx/functions/fnc_sord.sqf | 5 +- .../fnc_target_speed_assist_timer.sqf | 12 +- .../functions/fnc_toggle_atmo_env_data.sqf | 2 +- .../functions/fnc_toggle_gun_ammo_data.sqf | 2 +- .../atragmx/functions/fnc_toggle_gun_list.sqf | 2 +- .../functions/fnc_toggle_range_card.sqf | 4 +- .../functions/fnc_toggle_range_card_setup.sqf | 4 +- .../functions/fnc_toggle_solution_setup.sqf | 6 +- .../functions/fnc_toggle_target_data.sqf | 2 +- .../fnc_toggle_target_range_assist.sqf | 2 +- .../fnc_toggle_target_speed_assist.sqf | 2 +- .../functions/fnc_update_range_card.sqf | 14 +- .../atragmx/functions/fnc_update_result.sqf | 22 +-- addons/ballistics/CfgMagazines.hpp | 30 +-- addons/ballistics/CfgWeapons.hpp | 38 ++-- .../functions/fnc_doEscortCaptive.sqf | 2 +- addons/common/RscInfoType.hpp | 2 +- .../functions/fnc_dumpPerformanceCounters.sqf | 8 +- addons/dagr/initKeybinds.sqf | 2 +- addons/dragging/CfgVehicles.hpp | 4 +- .../explosives/functions/fnc_setSpeedDial.sqf | 3 +- addons/fastroping/$PBOPREFIX$ | 2 +- addons/finger/XEH_postInit.sqf | 2 +- addons/frag/CfgAmmo.hpp | 38 ++-- addons/frag/functions/fnc_doReflections.sqf | 4 - addons/frag/functions/fnc_drawTraces.sqf | 5 +- addons/gestures/functions/fnc_playSignal.sqf | 2 +- addons/goggles/RscTitles.hpp | 14 +- addons/huntir/CfgAmmo.hpp | 2 +- addons/huntir/CfgWeapons.hpp | 6 +- addons/interaction/CfgVehicles.hpp | 2 +- .../functions/fnc_inventoryDisplayLoad.sqf | 2 +- addons/javelin/CfgMagazines.hpp | 2 +- addons/javelin/CfgVehicles.hpp | 12 +- addons/javelin/CfgWeapons.hpp | 32 ++-- addons/javelin/RscInGameUI.hpp | 22 +-- addons/kestrel4500/initKeybinds.sqf | 6 +- addons/laser/CfgVehicles.hpp | 10 +- addons/laser/CfgWeapons.hpp | 1 - addons/laser/RscInGameUI.hpp | 9 +- addons/laser/functions/fnc_laserOff.sqf | 2 +- addons/laser/functions/fnc_laserTargetPFH.sqf | 3 +- .../functions/fnc_seekerFindLaserSpot.sqf | 2 +- addons/main/CfgSettings.hpp | 2 +- addons/map/CfgAmmo.hpp | 20 +- addons/map/XEH_postInitClient.sqf | 2 +- .../functions/fnc_compileFlashlightMenu.sqf | 2 +- .../functions/fnc_calculateMapScale.sqf | 2 +- .../functions/fnc_initInsertMarker.sqf | 2 +- .../functions/fnc_translateSelections.sqf | 2 +- .../microdagr/functions/fnc_updateDisplay.sqf | 4 +- addons/missileguidance/ACE_GuidanceConfig.hpp | 16 +- addons/missileguidance/CfgMagazines.hpp | 12 +- addons/missileguidance/CfgVehicles.hpp | 4 +- .../functions/fnc_doAttackProfile.sqf | 4 +- .../functions/fnc_doSeekerSearch.sqf | 4 +- .../missileguidance/functions/fnc_onFired.sqf | 32 ++-- addons/modules/XEH_postInit.sqf | 8 +- addons/nametags/functions/fnc_doShow.sqf | 12 +- addons/nightvision/XEH_postInitClient.sqf | 8 +- .../functions/fnc_getDistance.sqf | 2 +- addons/rangecard/RscTitles.hpp | 2 +- .../functions/fnc_calculateSolution.sqf | 41 +--- .../rangecard/functions/fnc_openRangeCard.sqf | 8 +- .../functions/fnc_updateRangeCard.sqf | 12 +- addons/realisticnames/CfgVehicles.hpp | 6 +- addons/repair/ACE_Repair.hpp | 2 +- addons/sandbag/CfgWeapons.hpp | 4 +- addons/scopes/CfgWeapons.hpp | 8 +- addons/scopes/functions/fnc_adjustScope.sqf | 2 +- addons/sitting/XEH_clientInit.sqf | 2 +- addons/spottingscope/CfgWeapons.hpp | 4 +- .../switchunits/functions/fnc_markAiOnMap.sqf | 2 +- addons/tripod/CfgWeapons.hpp | 4 +- addons/weaponselect/XEH_preInit.sqf | 4 +- addons/weather/functions/fnc_getMapData.sqf | 175 ++++++++++-------- addons/weather/functions/fnc_initWind.sqf | 2 +- .../weather/functions/fnc_updateHumidity.sqf | 2 +- addons/weather/functions/fnc_updateRain.sqf | 2 +- .../functions/fnc_acquireTarget.sqf | 10 +- addons/yardage450/functions/fnc_turnOn.sqf | 6 +- addons/yardage450/initKeybinds.sqf | 4 +- addons/zeus/CfgVehicles.hpp | 2 +- 94 files changed, 418 insertions(+), 472 deletions(-) diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp index 8aa5d3173e..2c3701b8e0 100644 --- a/addons/aircraft/CfgAmmo.hpp +++ b/addons/aircraft/CfgAmmo.hpp @@ -11,7 +11,7 @@ class CfgAmmo { explosive = 1.8; tracersEvery = 3; tracerEndTime = 3.5; - + CraterEffects = "ExploAmmoCrater"; explosionEffects = "ExploAmmoExplosion"; model = "\A3\Weapons_f\Data\bullettracer\tracer_red"; diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index 26a4605910..a6868033e6 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -860,12 +860,12 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { helmetDown[] = {0,-0.07,0}; }; }; - + class Turrets: Turrets { class MainTurret: MainTurret { weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"}; magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; - + outGunnerMayFire = 1; commanding = -1; primaryGunner = 1; @@ -888,13 +888,13 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { minTurn = -120; maxTurn = 120; initTurn = 0; - + class OpticsIn { delete Narrow; delete Medium; delete Wide; - + class ACE_WideUnstabilized { opticsDisplayName = "W NS"; initAngleX = 0; @@ -994,4 +994,4 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { weapon = "ACE_gatling_20mm_Comanche"; }; }; -}; \ No newline at end of file +}; diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 97dad6e7b6..625cd68deb 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -230,7 +230,7 @@ class ATragMX_Display { idc=-1; x=0.55*safezoneW+safezoneX+0.315; }; - + class TEXT_GUN_FRAME: ATragMX_RscText { idc=1001; style=64; @@ -610,7 +610,7 @@ class ATragMX_Display { x=0.550*safezoneW+safezoneX+0.27; text="4"; action=QUOTE(call FUNC(toggle_solution_setup)); - }; + }; class TEXT_CALCULATE: TEXT_SCOPE_UNIT { idc=3000; style=ST_RIGHT; @@ -1059,7 +1059,7 @@ class ATragMX_Display { text="Cancel"; action=QUOTE(false call FUNC(show_add_new_gun); true call FUNC(show_gun_list)); }; - + class TEXT_GUN_AMMO_DATA_BORE_HEIGHT: TEXT_BORE_HEIGHT { idc=12000; w=0.22; @@ -1147,7 +1147,7 @@ class ATragMX_Display { class TEXT_GUN_AMMO_DATA_NEXT: TEXT_TARGET_SPEED_ASSIST_NEXT { idc=12011; }; - + class TEXT_ATMO_ENV_DATA_DEFAULT: TEXT_LEAD { idc=13000; w=0.08; @@ -1231,7 +1231,7 @@ class ATragMX_Display { y=0.265*safezoneH+safezoneY+0.29; text="Calc Method"; }; - + class TEXT_TARGET_DATA_LATITUDE: TEXT_BORE_HEIGHT { idc=14000; w=0.22; @@ -1379,7 +1379,7 @@ class ATragMX_Display { class TEXT_TARGET_DATA_NEXT: TEXT_TARGET_SPEED_ASSIST_NEXT { idc=14011; }; - + class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN: TEXT_GUN_AMMO_DATA_BORE_HEIGHT { idc=15000; style=64; @@ -1469,4 +1469,4 @@ class ATragMX_Display { action=QUOTE(0 call FUNC(toggle_solution_setup)); }; }; -}; \ No newline at end of file +}; diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 4b61a28551..8d4907523b 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -7,41 +7,41 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == } else { // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657485, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], - + ["12.7x99mm AMAX" , 860, 100, 0.0611565, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], ["12.7x99mm" , 900, 100, 0.0582418, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], - + ["12.7x54mm" , 300, 100, 0.3394630, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], - + [".408 Chey Tac" , 910, 100, 0.0569400, -0.00038944, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], - + ["9.3×64mm" , 870, 100, 0.0619295, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], - + [".338LM 250gr" , 880, 100, 0.0598469, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"], [".338LM 300gr" , 800, 100, 0.0677343, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"], [".338LM API526" , 895, 100, 0.0588865, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ], - + [".300WM Mk248 Mod 0", 900, 100, 0.0584442, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"], [".300WM Mk248 Mod 1", 867, 100, 0.0610738, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"], [".300WM Berger OTM" , 853, 100, 0.0622179, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"], - + ["7.62x54mmR" , 800, 100, 0.0691878, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"], - + ["7.62x51mm M80" , 810, 100, 0.0679374, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"], ["7.62x51mm M118LR" , 780, 100, 0.0710319, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"], ["7.62x51mm Mk319" , 910, 100, 0.0584524, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"], ["7.62x51mm M993" , 930, 100, 0.0570316, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"], ["7.62x51mm Subsonic", 320, 100, 0.3059680, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"], - + ["6.5x39mm" , 800, 100, 0.0683482, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"], ["6.5x47mm Lapua" , 800, 100, 0.0682221, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"], ["6.5mm Creedmor" , 840, 100, 0.0636501, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"], - + ["5.56x45mm M855" , 870, 100, 0.0626386, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ], ["5.56x45mm Mk262" , 820, 100, 0.0671481, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], ["5.56x45mm Mk318" , 880, 100, 0.0615937, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ], ["5.56x45mm M995" , 869, 100, 0.0626713, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]]; - + [] call FUNC(clear_user_data); profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; }; diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index 869ce8d098..839cba8b69 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -42,31 +42,8 @@ * Public: No */ #include "script_component.hpp" - -private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_drag", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire"]; -_scopeBaseAngle = _this select 0; -_bulletMass = _this select 1; -_boreHeight = _this select 2; -_airFriction = _this select 3; -_muzzleVelocity = _this select 4; -_temperature = _this select 5; -_barometricPressure = _this select 6; -_relativeHumidity = _this select 7; -_simSteps = _this select 8; -_windSpeed1 = (_this select 9) select 0; -_windSpeed2 = (_this select 9) select 1; -_windDirection = _this select 10; -_inclinationAngle = _this select 11; -_targetSpeed = _this select 12; -_targetRange = _this select 13; -_bc = _this select 14; -_dragModel = _this select 15; -_atmosphereModel = _this select 16; -_storeRangeCardData = _this select 17; -_stabilityFactor = _this select 18; -_twistDirection = _this select 19; -_latitude = _this select 20; -_directionOfFire = _this select 21; +params ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire"]; +_windSpeed params ["_windSpeed1", "_windSpeed2"]; private ["_bulletPos", "_bulletVelocity", "_bulletAccel", "_bulletSpeed", "_gravity", "_deltaT"]; _bulletPos = [0, 0, 0]; @@ -133,7 +110,7 @@ _bulletVelocity set [2, Sin(_scopeBaseAngle) * _muzzleVelocity]; while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _bulletSpeed = vectorMagnitude _bulletVelocity; - + _speedTotal = _speedTotal + _bulletSpeed; _stepsTotal = _stepsTotal + 1; _speedAverage = (_speedTotal / _stepsTotal); @@ -142,7 +119,7 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _trueSpeed = vectorMagnitude _trueVelocity; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { - _drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then { + private _drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then { parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed])) } else { ([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation)) @@ -173,7 +150,7 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { }; _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2)); _kineticEnergy = _kineticEnergy * 0.737562149; - + if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then { // Coriolis _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; @@ -190,7 +167,7 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _windage1 = _windage1 + _spinDrift; _windage2 = _windage2 + _spinDrift; }; - + GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]]; _n = _n + 1; }; diff --git a/addons/atragmx/functions/fnc_change_gun.sqf b/addons/atragmx/functions/fnc_change_gun.sqf index 7c5abac47e..8fe89dc4fe 100644 --- a/addons/atragmx/functions/fnc_change_gun.sqf +++ b/addons/atragmx/functions/fnc_change_gun.sqf @@ -17,10 +17,7 @@ */ #include "script_component.hpp" -private ["_gunID", "_restoreMemory", "_updateDisplay"]; -_gunID = _this select 0; -_restoreMemory = _this select 1; -_updateDisplay = _this select 2; +params ["_gunID", "_restoreMemory", "_updateDisplay"]; if (_gunID < 0 || _gunID > (count GVAR(gunList)) - 1) exitWith {}; diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 07b93eb2da..791374c9d0 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -39,7 +39,7 @@ if (GVAR(showRangeCard)) then { }; GVAR(showRangeCardSetup) call FUNC(show_range_card_setup); GVAR(showSolutionSetup) call FUNC(show_solution_setup); -GVAR(showTargetData) call FUNC(show_target_data); +GVAR(showTargetData) call FUNC(show_target_data); GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist); GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist); GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer); diff --git a/addons/atragmx/functions/fnc_show_gun_list.sqf b/addons/atragmx/functions/fnc_show_gun_list.sqf index 5e1cdfa453..a3c45a977d 100644 --- a/addons/atragmx/functions/fnc_show_gun_list.sqf +++ b/addons/atragmx/functions/fnc_show_gun_list.sqf @@ -21,6 +21,5 @@ GVAR(showGunList) = _this; if (_this) then { ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 6002); - lbSetCurSel [6000, GVAR(currentGun)]; }; diff --git a/addons/atragmx/functions/fnc_show_range_card_setup.sqf b/addons/atragmx/functions/fnc_show_range_card_setup.sqf index 3d44c14b53..b3457793b9 100644 --- a/addons/atragmx/functions/fnc_show_range_card_setup.sqf +++ b/addons/atragmx/functions/fnc_show_range_card_setup.sqf @@ -21,7 +21,7 @@ GVAR(showRangeCardSetup) = _this; if (_this) then { ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 10006); - + ctrlSetText [10003, Str(Round(GVAR(rangeCardStartRange)))]; ctrlSetText [10004, Str(Round(GVAR(rangeCardEndRange)))]; ctrlSetText [10005, Str(Round(GVAR(rangeCardIncrement)))]; diff --git a/addons/atragmx/functions/fnc_show_target_range_assist.sqf b/addons/atragmx/functions/fnc_show_target_range_assist.sqf index 4f46932a0b..ec61edd1f4 100644 --- a/addons/atragmx/functions/fnc_show_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_range_assist.sqf @@ -21,7 +21,6 @@ GVAR(showTargetRangeAssist) = _this; if (_this) then { ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 7018); - ctrlSetText [7012, Str(parseNumber(ctrlText 320))]; ctrlSetText [7013, Str(parseNumber(ctrlText 340))]; @@ -30,4 +29,4 @@ if (_this) then { } else { ctrlSetText [7016, "Meters"]; }; -}; \ No newline at end of file +}; diff --git a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf index 2e66b5ea7b..b3cf1b4393 100644 --- a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf @@ -21,7 +21,7 @@ GVAR(showTargetSpeedAssist) = _this; if (_this) then { ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 8012); - + ctrlSetText [8004, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))]; if (GVAR(currentUnit) == 1) then { @@ -29,7 +29,7 @@ if (_this) then { } else { ctrlSetText [8008, "Meters"]; }; - + if (GVAR(currentUnit) == 2) then { ctrlSetText [8011, "m/s"]; } else { diff --git a/addons/atragmx/functions/fnc_sord.sqf b/addons/atragmx/functions/fnc_sord.sqf index a433153c0e..b342072018 100644 --- a/addons/atragmx/functions/fnc_sord.sqf +++ b/addons/atragmx/functions/fnc_sord.sqf @@ -17,10 +17,7 @@ */ #include "script_component.hpp" -private ["_slopeDistance", "_azimuth", "_inclination"]; -_slopeDistance = _this select 0; -_azimuth = _this select 1; -_inclination = _this select 2; +params ["_slopeDistance", "_azimuth", "_inclination"]; GVAR(inclinationAngle) set [GVAR(currentTarget), round(_inclination)]; GVAR(directionOfFire) set [GVAR(currentTarget), round(_azimuth)]; diff --git a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf index 0f42f9637c..14a0a276cc 100644 --- a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf +++ b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf @@ -21,26 +21,26 @@ if !(ctrlVisible 9000) then { true call FUNC(show_target_speed_assist_timer); ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 9002); - + [{ private ["_args", "_startTime"]; _args = _this select 0; _startTime = _args select 0; - + if (!(GVAR(speedAssistTimer))) exitWith { GVAR(speedAssistTimer) = true; - + ctrlSetText [8006, Str(Round((ACE_time - _startTime) * 10) / 10)]; [] call FUNC(calculate_target_speed_assist); false call FUNC(show_target_speed_assist_timer); true call FUNC(show_target_speed_assist); - + [_this select 1] call CBA_fnc_removePerFrameHandler; }; - + ctrlSetText [9001, Str(Round((ACE_time - _startTime) * 10) / 10)]; - + }, 0.1, [ACE_time]] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf b/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf index ce761c2216..87e973c7c0 100644 --- a/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf +++ b/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf @@ -18,7 +18,7 @@ if (ctrlVisible 13000) then { false call FUNC(show_atmo_env_data); true call FUNC(show_main_page); - + if (_this == 1) then { call FUNC(calculate_target_solution); }; diff --git a/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf index 0fd4b913b8..f3eb814da7 100644 --- a/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf @@ -18,7 +18,7 @@ if (ctrlVisible 12000) then { false call FUNC(show_gun_ammo_data); true call FUNC(show_main_page); - + if (_this == 1) then { call FUNC(update_zero_range); call FUNC(calculate_target_solution); diff --git a/addons/atragmx/functions/fnc_toggle_gun_list.sqf b/addons/atragmx/functions/fnc_toggle_gun_list.sqf index 1cc1f9338b..e5dbf54bd5 100644 --- a/addons/atragmx/functions/fnc_toggle_gun_list.sqf +++ b/addons/atragmx/functions/fnc_toggle_gun_list.sqf @@ -18,7 +18,7 @@ if (ctrlVisible 6000) then { false call FUNC(show_gun_list); true call FUNC(show_main_page); - + if (_this) then { [lbCurSel 6000, true, true] call FUNC(change_gun); }; diff --git a/addons/atragmx/functions/fnc_toggle_range_card.sqf b/addons/atragmx/functions/fnc_toggle_range_card.sqf index 059bc7e40b..7d8b7a0239 100644 --- a/addons/atragmx/functions/fnc_toggle_range_card.sqf +++ b/addons/atragmx/functions/fnc_toggle_range_card.sqf @@ -21,9 +21,9 @@ if (ctrlVisible 5006) then { } else { false call FUNC(show_main_page); true call FUNC(show_range_card); - + ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 5001); - + [] call FUNC(calculate_range_card); [] call FUNC(update_range_card); }; diff --git a/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf b/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf index 738a154d17..96c31459b2 100644 --- a/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf +++ b/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf @@ -18,12 +18,12 @@ if (ctrlVisible 10000) then { false call FUNC(show_range_card_setup); true call FUNC(show_range_card); - + if (_this == 1) then { GVAR(rangeCardStartRange) = 0 max Round(parseNumber(ctrlText 10003)) min 3000; GVAR(rangeCardEndRange) = 0 max Round(parseNumber(ctrlText 10004)) min 3000; GVAR(rangeCardIncrement) = 1 max Round(parseNumber(ctrlText 10005)) min 3000; - + [] call FUNC(calculate_range_card); [] call FUNC(update_range_card); }; diff --git a/addons/atragmx/functions/fnc_toggle_solution_setup.sqf b/addons/atragmx/functions/fnc_toggle_solution_setup.sqf index 0e9f702383..5372b205d0 100644 --- a/addons/atragmx/functions/fnc_toggle_solution_setup.sqf +++ b/addons/atragmx/functions/fnc_toggle_solution_setup.sqf @@ -18,7 +18,7 @@ if (ctrlVisible 15000) then { false call FUNC(show_solution_setup); true call FUNC(show_main_page); - + if (_this == 1) then { GVAR(currentScopeClickUnit) = GVAR(currentScopeClickUnitTemp); GVAR(currentScopeClickNumber) = GVAR(currentScopeClickNumberTemp); @@ -30,9 +30,9 @@ if (ctrlVisible 15000) then { } else { true call FUNC(show_solution_setup); false call FUNC(show_main_page); - + GVAR(currentScopeClickUnitTemp) = GVAR(currentScopeClickUnit); GVAR(currentScopeClickNumberTemp) = GVAR(currentScopeClickNumber); - + [] call FUNC(update_solution_setup); }; diff --git a/addons/atragmx/functions/fnc_toggle_target_data.sqf b/addons/atragmx/functions/fnc_toggle_target_data.sqf index 90fefbf37e..2cfa2f8df5 100644 --- a/addons/atragmx/functions/fnc_toggle_target_data.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_data.sqf @@ -18,7 +18,7 @@ if (ctrlVisible 14000) then { false call FUNC(show_target_data); true call FUNC(show_main_page); - + if (_this == 1) then { call FUNC(calculate_target_solution); }; diff --git a/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf b/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf index d13ef4fb2e..83d2daa95f 100644 --- a/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf @@ -18,7 +18,7 @@ if (ctrlVisible 7000) then { false call FUNC(show_target_range_assist); true call FUNC(show_main_page); - + if (_this == 1) then { ctrlSetText [320, Str(parseNumber(ctrlText 7012))]; ctrlSetText [140040, Str(parseNumber(ctrlText 7012))]; diff --git a/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf b/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf index 5b88a6cfce..4d1680d195 100644 --- a/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf @@ -18,7 +18,7 @@ if (ctrlVisible 8000) then { false call FUNC(show_target_speed_assist); true call FUNC(show_main_page); - + if (_this == 1) then { [] call FUNC(calculate_target_speed_assist); private ["_targetSpeed"]; diff --git a/addons/atragmx/functions/fnc_update_range_card.sqf b/addons/atragmx/functions/fnc_update_range_card.sqf index d084754959..e8c910ca74 100644 --- a/addons/atragmx/functions/fnc_update_range_card.sqf +++ b/addons/atragmx/functions/fnc_update_range_card.sqf @@ -43,7 +43,7 @@ _speedOfSound = GVAR(temperature) call EFUNC(weather,calculateSpeedOfSound); _TOF = _x select 4; _velocity = _x select 5; _kineticEnergy = _x select 6; - + switch (GVAR(currentScopeUnit)) do { case 0: { _elevation = _elevation / 3.38; @@ -63,25 +63,25 @@ _speedOfSound = GVAR(temperature) call EFUNC(weather,calculateSpeedOfSound); }; _clickNumber = GVAR(workingMemory) select 8; _clickInterval = _clickSize / _clickNumber; - + _elevation = Round(_elevation / _clickInterval); _windage1 = Round(_windage1 / _clickInterval); _windage2 = Round(_windage2 / _clickInterval); }; }; - + _elevationOutput = Str(Round(_elevation * 100) / 100); _windageOutput = Str(Round(_windage1 * 100) / 100); - + _rangeOutput = Str(_range); if (_velocity < _speedOfSound) then { _rangeOutput = _rangeOutput + "*"; }; - + if (GVAR(currentUnit) == 1) then { _velocity = _velocity * 3.2808399; }; - + switch (GVAR(rangeCardCurrentColumn)) do { case 0: { if (GVAR(showWind2)) then { @@ -100,6 +100,6 @@ _speedOfSound = GVAR(temperature) call EFUNC(weather,calculateSpeedOfSound); _lastColumnOutput = Str(Round(_TOF * 100) / 100); } }; - + lnbAddRow [5007, [_rangeOutput, _elevationOutput, _windageOutput, _lastColumnOutput]]; } forEach GVAR(rangeCardData); diff --git a/addons/atragmx/functions/fnc_update_result.sqf b/addons/atragmx/functions/fnc_update_result.sqf index bb708efaab..2b6ca29e23 100644 --- a/addons/atragmx/functions/fnc_update_result.sqf +++ b/addons/atragmx/functions/fnc_update_result.sqf @@ -33,24 +33,24 @@ switch (GVAR(currentScopeUnit)) do { case 0: { _elevationAbs = _elevationAbs / 3.38; _windageAbs = _windageAbs / 3.38; - + _wind2 = _wind2 / 3.38; - + _elevationRel = _elevationRel / 3.38; _windageRel = _windageRel / 3.38; - + _elevationCur = _elevationCur / 3.38; _windageCur = _windageCur / 3.38; }; case 2: { _elevationAbs = _elevationAbs * 1.047; _windageAbs = _windageAbs * 1.047; - + _wind2 = _wind2 / 1.047; - + _elevationRel = _elevationRel * 1.047; _windageRel = _windageRel * 1.047; - + _elevationCur = _elevationCur * 1.047; _windageCur = _windageCur * 1.047; }; @@ -62,15 +62,15 @@ switch (GVAR(currentScopeUnit)) do { }; _clickNumber = GVAR(workingMemory) select 8; _clickInterval = _clickSize / _clickNumber; - + _elevationAbs = Round(_elevationAbs / _clickInterval); _windageAbs = Round(_windageAbs / _clickInterval); - + _wind2 = Round(_wind2 / _clickInterval); - + _elevationRel = Round(_elevationRel / _clickInterval); _windageRel = Round(_windageRel / _clickInterval); - + _elevationCur = Round(_elevationCur / _clickInterval); _windageCur = Round(_windageCur / _clickInterval); }; @@ -166,4 +166,4 @@ if (GVAR(showWind2)) then { } else { ctrlSetText [420, "0.0"]; }; -}; \ No newline at end of file +}; diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index e368381333..931a6c2309 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -83,7 +83,7 @@ class CfgMagazines { descriptionShort = CSTRING(30Rnd_556x45_mag_Tracer_DimDescription); picture = "\A3\weapons_f\data\ui\m_20stanag_red_ca.paa"; }; - + class 20Rnd_762x51_Mag: CA_Magazine { initSpeed = 833; }; @@ -121,7 +121,7 @@ class CfgMagazines { descriptionShort = CSTRING(20Rnd_762x51_mag_SDDescription); initSpeed = 325; }; - + class ACE_10Rnd_762x51_M118LR_Mag: 10Rnd_762x51_Mag { author = ECSTRING(common,ACETeam); ammo = "ACE_762x51_Ball_M118LR"; @@ -247,7 +247,7 @@ class CfgMagazines { descriptionShort = CSTRING(10Rnd_338_API526_Mag_Description); initSpeed = 880; }; - + class 5Rnd_127x108_Mag; class ACE_5Rnd_127x99_Mag: 5Rnd_127x108_Mag { author = ECSTRING(common,ACETeam); @@ -273,8 +273,8 @@ class CfgMagazines { descriptionShort = CSTRING(5Rnd_127x99_AMAX_Mag_Description); initSpeed = 860; }; - - + + class 30Rnd_9x21_Mag: CA_Magazine { initSpeed = 450; }; @@ -286,27 +286,27 @@ class CfgMagazines { descriptionShort = CSTRING(30Rnd_9x19_mag_Description); initSpeed = 370; }; - + class 11Rnd_45ACP_Mag: CA_Magazine { initSpeed = 250; }; - + class 6Rnd_45ACP_Cylinder : 11Rnd_45ACP_Mag { initSpeed = 250; }; - + class 30Rnd_45ACP_Mag_SMG_01: 30Rnd_9x21_Mag { initSpeed = 250; }; - + class 9Rnd_45ACP_Mag: 30Rnd_45ACP_Mag_SMG_01 { initSpeed = 250; }; - + class 30Rnd_45ACP_Mag_SMG_01_Tracer_Green: 30Rnd_45ACP_Mag_SMG_01 { initSpeed = 250; }; - + class 16Rnd_9x21_Mag: 30Rnd_9x21_Mag { initSpeed = 450; }; @@ -318,7 +318,7 @@ class CfgMagazines { descriptionShort = CSTRING(16Rnd_9x19_mag_Description); initSpeed = 370; }; - + class 10Rnd_762x54_Mag: 10Rnd_762x51_Mag { initSpeed = 800; }; @@ -331,15 +331,15 @@ class CfgMagazines { initSpeed = 800; tracersEvery = 1; }; - + class 150Rnd_762x54_Box: 150Rnd_762x51_Box { initSpeed = 750; }; - + class 150Rnd_93x64_Mag: CA_Magazine { initSpeed = 860; }; - + class 10Rnd_127x54_Mag: CA_Magazine { initSpeed = 300; }; diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 3f6835bbba..4c0495decf 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -15,81 +15,81 @@ class CfgWeapons { class Rifle_Base_F; class Rifle_Long_Base_F; class MuzzleSlot; - + /* Long Rifles */ - + class GM6_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; }; - + class LRR_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.00020; // radians. Equal to 0.70 MOA. }; }; - + class DMR_06_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; - + class FullAuto: Mode_FullAuto { dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; }; - + class DMR_05_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; - + class FullAuto: Mode_FullAuto { dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; }; - + class DMR_04_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; }; - + class DMR_03_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.00032; // radians. Equal to 1.10 MOA. }; - + class FullAuto: Mode_FullAuto { dispersion = 0.00032; // radians. Equal to 1.10 MOA. }; }; - + class DMR_02_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.000262; // radians. Equal to 0.90 MOA. }; }; - + class DMR_01_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.0004; // radians. Equal to 1.375 MOA. }; }; - + class EBR_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; - + class FullAuto: Mode_FullAuto { dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; }; - + /* MX */ - + class arifle_MX_Base_F: Rifle_Base_F {}; class arifle_MX_SW_F: arifle_MX_Base_F { magazines[] = { @@ -158,7 +158,7 @@ class CfgWeapons { class Burst: Mode_Burst { dispersion = 0.0008727; // radians. Equal to 3 MOA. }; - + class FullAuto: Mode_FullAuto { dispersion = 0.0008727; // radians. Equal to 3 MOA. }; @@ -511,7 +511,7 @@ class CfgWeapons { ACE_barrelTwist=234.95; ACE_barrelLength=609.6; }; - + class HMG_127 : LMG_RCWS { }; class HMG_01: HMG_127 { @@ -521,7 +521,7 @@ class CfgWeapons { ACE_barrelTwist=304.8; ACE_barrelLength=1143.0; }; - + /* Silencers */ class ItemCore; diff --git a/addons/captives/functions/fnc_doEscortCaptive.sqf b/addons/captives/functions/fnc_doEscortCaptive.sqf index 484151853b..e0d3ae8fa6 100644 --- a/addons/captives/functions/fnc_doEscortCaptive.sqf +++ b/addons/captives/functions/fnc_doEscortCaptive.sqf @@ -37,7 +37,7 @@ if (_state) then { [{ params ["_args", "_pfID"]; _args params ["_unit", "_target", "_actionID"]; - + if (_unit getVariable [QGVAR(isEscorting), false]) then { if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then { _unit setVariable [QGVAR(isEscorting), false, true]; diff --git a/addons/common/RscInfoType.hpp b/addons/common/RscInfoType.hpp index 327a9814d1..e5af2454cb 100644 --- a/addons/common/RscInfoType.hpp +++ b/addons/common/RscInfoType.hpp @@ -15,7 +15,7 @@ class RscInGameUI { class RscUnitInfoTank: RscUnitInfo { onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgVehicle', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Vehicle')])] call FUNC(localEvent);); }; - + class RscUnitInfoAirNoWeapon: RscUnitInfo { onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgAircraft', _this select 0)]; [ARR_2('infoDisplayChanged', [ARR_2(_this select 0, 'Aircraft')])] call FUNC(localEvent);); }; diff --git a/addons/common/functions/fnc_dumpPerformanceCounters.sqf b/addons/common/functions/fnc_dumpPerformanceCounters.sqf index bdc4588b05..afb71b423a 100644 --- a/addons/common/functions/fnc_dumpPerformanceCounters.sqf +++ b/addons/common/functions/fnc_dumpPerformanceCounters.sqf @@ -21,7 +21,7 @@ if (!isNil "ACE_PFH_COUNTER") then { private _isActive = ["ACTIVE", "REMOVED"] select isNil {CBA_common_PFHhandles select (_pfh select 0)}; - diag_log text format ["Registered PFH: id=%1 [%2, delay %3], %4:%5", _pfh select 0, _isActive, _parameters select 1, _pfh select 1, _pfh select 2]; + diag_log text format ["Registered PFH: id=%1 [%2, delay %3], %4:%5", _pfh select 0, _isActive, _parameters select 1, _pfh select 1, _pfh select 2]; false } count ACE_PFH_COUNTER; }; @@ -42,7 +42,7 @@ diag_log text format ["-------------------------------------------"]; if (_iter > 2) then { _count = _count + 1; private _delta = (_x select 1) - (_x select 0); - + _total = _total + _delta; }; @@ -54,7 +54,7 @@ diag_log text format ["-------------------------------------------"]; _averageResult = (_total / _count) * 1000; // dump results - diag_log text format ["%1: Average: %2s / %3 = %4ms", _counterEntry select 0, _total, _count, _averageResult]; + diag_log text format ["%1: Average: %2s / %3 = %4ms", _counterEntry select 0, _total, _count, _averageResult]; } else { diag_log text format ["%1: No results", _counterEntry select 0]; }; @@ -68,7 +68,7 @@ diag_log text format["-------------------------------------------"]; { private _delay = _x select 2; //if(_delay > 0) then { _delay = _delay / 1000; }; - + diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; } forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER; diff --git a/addons/dagr/initKeybinds.sqf b/addons/dagr/initKeybinds.sqf index 66bd08190e..1a2f25ac4d 100644 --- a/addons/dagr/initKeybinds.sqf +++ b/addons/dagr/initKeybinds.sqf @@ -37,7 +37,7 @@ _conditonCode = { _toggleCode = { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {}; - + // Statement [] call FUNC(toggleOverlay); if (!GVAR(run)) then { diff --git a/addons/dragging/CfgVehicles.hpp b/addons/dragging/CfgVehicles.hpp index 31928e8621..1529d39319 100644 --- a/addons/dragging/CfgVehicles.hpp +++ b/addons/dragging/CfgVehicles.hpp @@ -90,7 +90,7 @@ class CfgVehicles { GVAR(canCarry) = 0; GVAR(canDrag) = 0; }; - + //Plastic and metal case class PlasticCase_01_base_F: Items_base_F { class EventHandlers { @@ -116,7 +116,7 @@ class CfgVehicles { GVAR(dragPosition[]) = {0,1.2,0}; GVAR(dragDirection) = 0; }; - + // Barrier class RoadCone_F: ThingX { class EventHandlers { diff --git a/addons/explosives/functions/fnc_setSpeedDial.sqf b/addons/explosives/functions/fnc_setSpeedDial.sqf index 9013c812cc..7e68c9016f 100644 --- a/addons/explosives/functions/fnc_setSpeedDial.sqf +++ b/addons/explosives/functions/fnc_setSpeedDial.sqf @@ -14,8 +14,7 @@ * * Public: No */ - #include "script_component.hpp" - +#include "script_component.hpp" private ["_speedDial", "_amount"]; _speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; diff --git a/addons/fastroping/$PBOPREFIX$ b/addons/fastroping/$PBOPREFIX$ index 352dc2c83a..c2389fdaf5 100644 --- a/addons/fastroping/$PBOPREFIX$ +++ b/addons/fastroping/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\addons\fastroping +z\ace\addons\fastroping diff --git a/addons/finger/XEH_postInit.sqf b/addons/finger/XEH_postInit.sqf index 394c0cfd3b..94a22d7224 100644 --- a/addons/finger/XEH_postInit.sqf +++ b/addons/finger/XEH_postInit.sqf @@ -11,7 +11,7 @@ GVAR(pfeh_id) = -1; if (!GVAR(enabled)) exitWith {}; [QGVAR(fingered), {_this call FUNC(incomingFinger)}] call EFUNC(common,addEventHandler); - + ["ACE3 Common", QGVAR(finger), [(localize LSTRING(keyComb)), (localize LSTRING(keyComb_description))], diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 41734d2806..916949bab2 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -8,11 +8,11 @@ class CfgAmmo { //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { // GVAR(skip) = 1; //}; - + class Bo_GBU12_LGB; class ACE_GBU12 : Bo_GBU12_LGB { GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; GVAR(metal) = 140000; GVAR(charge) = 87000; @@ -27,7 +27,7 @@ class CfgAmmo { class Grenade; class GrenadeHand: Grenade { GVAR(enabled) = 1; - + GVAR(skip) = 0; GVAR(force) = 1; // This is a good high-drag frag type for grenades. @@ -52,7 +52,7 @@ class CfgAmmo { class R_Hydra_HE: RocketBase { // Source: http://fas.org/man/dod-101/sys/missile/hydra-70.htm GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 3850; GVAR(charge) = 1040; @@ -74,18 +74,18 @@ class CfgAmmo { class BombCore; class Bo_Mk82: BombCore { GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; GVAR(metal) = 140000; GVAR(charge) = 87000; GVAR(gurney_c) = 2320; GVAR(gurney_k) = 1/2; }; - + class G_40mm_HE: GrenadeBase { // Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M441 GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; GVAR(metal) = 200; GVAR(charge) = 32; @@ -95,14 +95,14 @@ class CfgAmmo { class G_40mm_HEDP: G_40mm_HE { // Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M433 GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; GVAR(metal) = 200; GVAR(charge) = 45; GVAR(gurney_c) = 2830; GVAR(gurney_k) = 1/2; }; - + class ACE_G_40mm_HEDP: G_40mm_HEDP { }; class ACE_G_40mm_HE: G_40mm_HE { @@ -121,7 +121,7 @@ class CfgAmmo { class Sh_155mm_AMOS: ShellBase { // Source: http://www.globalsecurity.org/military/systems/munitions/m795.htm GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; GVAR(metal) = 36000; GVAR(charge) = 9979; @@ -131,7 +131,7 @@ class CfgAmmo { class Sh_82mm_AMOS : Sh_155mm_AMOS { // Source: http://www.arsenal-bg.com/defense_police/mortar_bombs_82mm.htm GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 3200; GVAR(charge) = 420; @@ -140,7 +140,7 @@ class CfgAmmo { }; class ModuleOrdnanceMortar_F_Ammo: Sh_82mm_AMOS { GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 800; GVAR(charge) = 4200; @@ -149,7 +149,7 @@ class CfgAmmo { }; class Sh_105mm_HEAT_MP : Sh_125mm_HEAT { GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 11400; GVAR(charge) = 7100; @@ -158,7 +158,7 @@ class CfgAmmo { }; class Sh_120mm_HE : ShellBase { GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 23000; GVAR(charge) = 3148; @@ -167,7 +167,7 @@ class CfgAmmo { }; class Sh_125mm_HE: Sh_120mm_HE { GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 16000; GVAR(charge) = 3200; @@ -176,7 +176,7 @@ class CfgAmmo { }; class ModuleOrdnanceHowitzer_F_ammo: Sh_155mm_AMOS { GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; GVAR(metal) = 1950; GVAR(charge) = 15800; @@ -203,7 +203,7 @@ class CfgAmmo { class Missile_AGM_02_F : MissileBase { // Source: http://fas.org/man/dod-101/sys/smart/agm-65.htm GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 56250; GVAR(charge) = 39000; @@ -213,7 +213,7 @@ class CfgAmmo { class M_Hellfire_AT: MissileBase { // Source: http://www.designation-systems.net/dusrm/m-114.html GVAR(enabled) = 1; - + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 8000; GVAR(charge) = 2400; @@ -471,6 +471,6 @@ class CfgAmmo { class ACE_frag_spall_huge: ACE_frag_huge { timeToLive = 0.3; }; - + #include "CfgAmmoReflections.hpp" }; diff --git a/addons/frag/functions/fnc_doReflections.sqf b/addons/frag/functions/fnc_doReflections.sqf index 7702e34fd5..64d8ede26d 100644 --- a/addons/frag/functions/fnc_doReflections.sqf +++ b/addons/frag/functions/fnc_doReflections.sqf @@ -13,10 +13,6 @@ if(count _this > 2) then { if(_depth <= 2) then { _indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirectHitRange"); _indirectHit = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirectHit"); - - - - _testParams = [_pos, [_indirectHitRange, _indirectHit], [], [], -4, _depth, 0]; [DFUNC(findReflections), 0, _testParams] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/frag/functions/fnc_drawTraces.sqf b/addons/frag/functions/fnc_drawTraces.sqf index ac95957ad4..494a2af727 100644 --- a/addons/frag/functions/fnc_drawTraces.sqf +++ b/addons/frag/functions/fnc_drawTraces.sqf @@ -18,12 +18,11 @@ private ["_color", "_index", "_lastPos", "_lastSpd", "_max", "_positions", "_sta } else { _data2 = _positions select (_index + ACE_TRACE_DRAW_INC); }; - + _pos1 = _data1 select 0; _pos2 = _data2 select 0; _index = _index + ACE_TRACE_DRAW_INC; - - + drawLine3D [_pos1, _pos2, _color]; _lastPos = _pos2; _lastSpd = _data1 select 1; diff --git a/addons/gestures/functions/fnc_playSignal.sqf b/addons/gestures/functions/fnc_playSignal.sqf index feb79f5370..8f20c690ef 100644 --- a/addons/gestures/functions/fnc_playSignal.sqf +++ b/addons/gestures/functions/fnc_playSignal.sqf @@ -14,7 +14,7 @@ * Public: No */ #include "script_component.hpp" - + TRACE_1("params",_this); if (!GVAR(ReloadMutex)) exitWith {false}; diff --git a/addons/goggles/RscTitles.hpp b/addons/goggles/RscTitles.hpp index 6c1b9870b6..5544b9b132 100644 --- a/addons/goggles/RscTitles.hpp +++ b/addons/goggles/RscTitles.hpp @@ -1,6 +1,6 @@ class RscTitles{ #include "define.hpp" - + class RscACE_Goggles_BaseTitle{ idd = -1; onLoad = "uiNamespace setVariable ['ACE_Goggles_Display', _this select 0]"; @@ -9,25 +9,25 @@ class RscTitles{ fadeOut=0.5; movingEnable = false; duration = 10e10; - name = "RscACE_Goggles_BaseTitle"; + name = "RscACE_Goggles_BaseTitle"; class controls; }; - + class RscACE_Goggles:RscACE_Goggles_BaseTitle{ idd = 1044; - name = "RscACE_Goggles"; + name = "RscACE_Goggles"; class controls{ class gogglesImage: RscPicture{ idc = 10650; }; }; }; - + class RscACE_GogglesEffects:RscACE_Goggles_BaseTitle{ idd = 1045; onLoad = "uiNamespace setVariable ['ACE_Goggles_DisplayEffects', _this select 0]"; onUnload = "uiNamespace setVariable ['ACE_Goggles_DisplayEffects', displayNull]"; - name = "RscACE_GogglesEffects"; + name = "RscACE_GogglesEffects"; fadeIn=0; fadeOut=0.5; class controls{ @@ -39,4 +39,4 @@ class RscTitles{ }; }; }; -}; \ No newline at end of file +}; diff --git a/addons/huntir/CfgAmmo.hpp b/addons/huntir/CfgAmmo.hpp index 86f73e9755..33328094b2 100644 --- a/addons/huntir/CfgAmmo.hpp +++ b/addons/huntir/CfgAmmo.hpp @@ -6,7 +6,7 @@ class CfgAmmo { smokeColor[] = {0, 0, 0, 0}; timeToLive = 6; }; - + class ShellBase; class ACE_HuntIR_Propell: ShellBase { supersonicCrackNear[] = {"",0.316228,1,50}; diff --git a/addons/huntir/CfgWeapons.hpp b/addons/huntir/CfgWeapons.hpp index 6ff271d604..6d74cbfba9 100644 --- a/addons/huntir/CfgWeapons.hpp +++ b/addons/huntir/CfgWeapons.hpp @@ -2,7 +2,7 @@ class CfgWeapons { class ACE_ItemCore; class InventoryItem_Base_F; - + class ACE_HuntIR_monitor: ACE_ItemCore { scope = 2; displayName = CSTRING(monitor_displayName); @@ -14,7 +14,7 @@ class CfgWeapons { mass = 20; }; }; - + class GrenadeLauncher; class UGL_F: GrenadeLauncher { magazines[] += {"ACE_HuntIR_M203"}; @@ -23,7 +23,7 @@ class CfgWeapons { //magazines[] += {"ACE_HuntIR_M203"}; magazines[] = {"1Rnd_HE_Grenade_shell","UGL_FlareWhite_F","UGL_FlareGreen_F","UGL_FlareRed_F","UGL_FlareYellow_F","UGL_FlareCIR_F","1Rnd_Smoke_Grenade_shell","1Rnd_SmokeRed_Grenade_shell","1Rnd_SmokeGreen_Grenade_shell","1Rnd_SmokeYellow_Grenade_shell","1Rnd_SmokePurple_Grenade_shell","1Rnd_SmokeBlue_Grenade_shell","1Rnd_SmokeOrange_Grenade_shell","3Rnd_HE_Grenade_shell","3Rnd_UGL_FlareWhite_F","3Rnd_UGL_FlareGreen_F","3Rnd_UGL_FlareRed_F","3Rnd_UGL_FlareYellow_F","3Rnd_UGL_FlareCIR_F","3Rnd_Smoke_Grenade_shell","3Rnd_SmokeRed_Grenade_shell","3Rnd_SmokeGreen_Grenade_shell","3Rnd_SmokeYellow_Grenade_shell","3Rnd_SmokePurple_Grenade_shell","3Rnd_SmokeBlue_Grenade_shell","3Rnd_SmokeOrange_Grenade_shell","ACE_HuntIR_M203"}; }; - + class Rifle_Base_F; class arifle_MX_Base_F: Rifle_Base_F { class GL_3GL_F: UGL_F { diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 0b71ebb4e1..6b6e0e69b0 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -577,7 +577,7 @@ class CfgVehicles { class Land_PortableLight_double_off_F: Land_PortableLight_double_F { scope = 1; }; - + class RoadCone_F: ThingX { class ACE_Actions { class ACE_MainActions { diff --git a/addons/inventory/functions/fnc_inventoryDisplayLoad.sqf b/addons/inventory/functions/fnc_inventoryDisplayLoad.sqf index 6e48c1ec2a..ab23701760 100644 --- a/addons/inventory/functions/fnc_inventoryDisplayLoad.sqf +++ b/addons/inventory/functions/fnc_inventoryDisplayLoad.sqf @@ -28,7 +28,7 @@ _filter ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChanged)}]; [{ disableSerialization; params ["_filter"]; - + // remove "All", so we can push it to the back later. // to keep localization we can keep the lbText (displayed name). private _index = lbSize _filter - 1; diff --git a/addons/javelin/CfgMagazines.hpp b/addons/javelin/CfgMagazines.hpp index 3053cf1fa1..80111d9484 100644 --- a/addons/javelin/CfgMagazines.hpp +++ b/addons/javelin/CfgMagazines.hpp @@ -10,7 +10,7 @@ class CfgMagazines { class Titan_AT: Titan_AA { ammo = "ACE_Javelin_FGM148"; //from misssileGuidance, was "M_Titan_AT" }; - + //Handheld Titan "AP" Magazine (SACLOS? "Anti-personal") // class Titan_AP: Titan_AA { //??? diff --git a/addons/javelin/CfgVehicles.hpp b/addons/javelin/CfgVehicles.hpp index 1cd527089d..74863ef08f 100644 --- a/addons/javelin/CfgVehicles.hpp +++ b/addons/javelin/CfgVehicles.hpp @@ -3,20 +3,20 @@ class CfgVehicles { class StaticWeapon : LandVehicle { class Turrets; }; - + class StaticMGWeapon : StaticWeapon { class Turrets : Turrets { class MainTurret; }; }; class AT_01_base_F: StaticMGWeapon {}; - + class B_static_AT_F: AT_01_base_F { class Turrets : Turrets { class MainTurret : MainTurret { weapons[] = { QGVAR(Titan_Static) }; magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"}; - + turretInfoType = "ACE_RscOptics_javelin"; gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d); opticsZoomMin = 0.08333; @@ -34,7 +34,7 @@ class CfgVehicles { class MainTurret : MainTurret { weapons[] = { QGVAR(Titan_Static) }; magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"}; - + turretInfoType = "ACE_RscOptics_javelin"; gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d); opticsZoomMin = 0.08333; @@ -52,7 +52,7 @@ class CfgVehicles { class MainTurret : MainTurret { weapons[] = { QGVAR(Titan_Static) }; magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"}; - + turretInfoType = "ACE_RscOptics_javelin"; gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d); opticsZoomMin = 0.08333; @@ -65,4 +65,4 @@ class CfgVehicles { }; }; }; -}; \ No newline at end of file +}; diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp index 75aaf7c332..1e32752145 100644 --- a/addons/javelin/CfgWeapons.hpp +++ b/addons/javelin/CfgWeapons.hpp @@ -1,38 +1,38 @@ class CfgWeapons { class Launcher; class MissileLauncher; - + class Launcher_Base_F : Launcher { - class WeaponSlotsInfo; + class WeaponSlotsInfo; }; // @TODO: AA by default, motherfuckers class missiles_titan : MissileLauncher { - + }; - + class missiles_titan_at : missiles_titan { }; - class GVAR(Titan_Static) : missiles_titan_at { + class GVAR(Titan_Static) : missiles_titan_at { GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); - + canLock = 0; magazines[] = {"1Rnd_GAT_missiles"}; lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; }; - + // @TODO: AA by default, motherfuckers class launch_Titan_base : Launcher_Base_F {}; - + class launch_Titan_short_base : launch_Titan_base { }; - + class launch_B_Titan_short_F: launch_Titan_short_base { GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); - + canLock = 0; lockingTargetSound[] = {"",0,1}; @@ -42,7 +42,7 @@ class CfgWeapons { GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); - + canLock = 0; lockingTargetSound[] = {"",0,1}; @@ -52,10 +52,10 @@ class CfgWeapons { GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); - + canLock = 0; - - + + lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; }; @@ -63,10 +63,10 @@ class CfgWeapons { GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); - + canLock = 0; lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; }; -}; \ No newline at end of file +}; diff --git a/addons/javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp index ea1e12626c..d3fff71db0 100644 --- a/addons/javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -15,7 +15,7 @@ class RscInGameUI { controls[] = { "ACE_javelin_elements_group", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; onLoad = QUOTE(_this call FUNC(onOpticLoad)); onUnload = QUOTE(_this call FUNC(onOpticUnload)); - + class ACE_javelin_elements_group: RscControlsGroup { x = "SafezoneX"; @@ -44,7 +44,7 @@ class RscInGameUI { w = 0; h = 0; }; - + class ACE_javelin_Day_mode_off: RscPicture { idc = 1001; x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; @@ -123,7 +123,7 @@ class RscInGameUI { h = 0; colorText[] = {0.2941,0.8745,0.2157,1}; }; - + }; }; class CA_Javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { @@ -191,7 +191,7 @@ class RscInGameUI { h = "0.1895*SafezoneH"; colorText[] = {0.2941,0.8745,0.2157,1}; }; - + }; }; @@ -253,12 +253,12 @@ class RscInGameUI { }; class ACE_Targeting : RscControlsGroup { idc = 6999; - + x = "SafezoneX"; y = "SafezoneY"; w = "SafezoneW"; h = "SafezoneH"; - + enabled = 0; class Controls { class ACE_TargetingConstrains: RscControlsGroup { @@ -266,7 +266,7 @@ class RscInGameUI { y = "SafezoneY"; w = "SafezoneW-SafezoneX"; h = "SafezoneH-SafezoneY"; - + enabled = 0; class VScrollbar { autoScrollSpeed = -1; @@ -315,7 +315,7 @@ class RscInGameUI { }; }; }; - + class ACE_TargetingGate : ACE_TargetingConstrains { idc = 699200; class Controls { @@ -401,8 +401,8 @@ class RscInGameUI { }; }; }; - - + + class ACE_TargetingLines: ACE_TargetingConstrains { idc = 699300; class Controls { @@ -451,4 +451,4 @@ ACE_Titan_TOP_off: 1006 ACE_Titan_DIR: 1007 ACE_Titan_FLTR_mode_off: 1002 ACE_Titan_FLTR_mode: 161 -*/ \ No newline at end of file +*/ diff --git a/addons/kestrel4500/initKeybinds.sqf b/addons/kestrel4500/initKeybinds.sqf index 5793d36976..581ab1a1ae 100644 --- a/addons/kestrel4500/initKeybinds.sqf +++ b/addons/kestrel4500/initKeybinds.sqf @@ -5,7 +5,7 @@ if (GVAR(Kestrel4500)) exitWith { closeDialog 0; false - }; + }; // Statement [] call FUNC(createKestrelDialog); false @@ -17,7 +17,7 @@ { // Conditions: canInteract if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; - + // Statement [] call FUNC(displayKestrel); false @@ -34,7 +34,7 @@ _conditonCode = { _toggleCode = { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {}; - + // Statement if (!GVAR(Overlay)) then { //If no overlay, show it: diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index d8976ac204..780107fdf7 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -6,20 +6,20 @@ class CfgVehicles { model = "\A3\Weapons_F\empty.p3d"; destrType = "DestructNo"; simulation = "LaserTarget"; - + class EventHandlers { init = QUOTE(_this call FUNC(laser_init)); }; }; - + // Visual laserTarget override class ACE_LaserTarget_Visual : LaserTarget { simulation = "LaserTarget"; model = "\A3\Weapons_f\laserTgt.p3d"; }; - + // Vehicle lockable configurations - + class AllVehicles; class Air: AllVehicles { class Turrets; @@ -42,4 +42,4 @@ class CfgVehicles { }; }; }; -}; \ No newline at end of file +}; diff --git a/addons/laser/CfgWeapons.hpp b/addons/laser/CfgWeapons.hpp index 70a25e6f85..6dff36a4e8 100644 --- a/addons/laser/CfgWeapons.hpp +++ b/addons/laser/CfgWeapons.hpp @@ -1,7 +1,6 @@ class CfgWeapons { class Binocular; - class Laserdesignator : Binocular { visionMode[] = {"Normal","NVG"}; }; diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp index d87136c960..08f0a794be 100644 --- a/addons/laser/RscInGameUI.hpp +++ b/addons/laser/RscInGameUI.hpp @@ -8,11 +8,10 @@ class RscInGameUI { class RscOptics_LaserDesignator { idd = 300; controls[] = {"CA_IGUI_elements_group"}; - + onLoad = "uiNameSpace setVariable ['ACE_RscOptics_LaserDesignator',(_this select 0)];"; onUnload = "uiNameSpace setVariable ['ACE_RscOptics_LaserDesignator',nil];"; - - + class CA_IGUI_elements_group: RscControlsGroup { idc = 170; @@ -118,7 +117,7 @@ class RscInGameUI { w = "3.5 * (0.01875 * SafezoneH)"; h = "1.6 * (0.025 * SafezoneH)"; }; - + class ACE_LaserCode_Helper : RscMapControl { idc = -1; onDraw = QUOTE(_this call FUNC(onLaserDesignatorDraw)); @@ -141,4 +140,4 @@ class RscInGameUI { }; }; }; -}; \ No newline at end of file +}; diff --git a/addons/laser/functions/fnc_laserOff.sqf b/addons/laser/functions/fnc_laserOff.sqf index 84613cd988..7899ec1253 100644 --- a/addons/laser/functions/fnc_laserOff.sqf +++ b/addons/laser/functions/fnc_laserOff.sqf @@ -8,7 +8,7 @@ * Return value: * None */ - + #include "script_component.hpp" private ["_uuid"]; diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index 6d993b07de..8726ce4201 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -12,7 +12,7 @@ _uuid = _args select 2; if(isNull _laserTarget || !alive _shooter) exitWith { [(_this select 1)] call CBA_fnc_removePerFrameHandler; REM(GVAR(VanillaLasers), _laserTarget); - + // Remove laseron [_uuid] call FUNC(laserOff); }; @@ -28,4 +28,3 @@ drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (A } forEach DRAW_LINES; DRAW_LINES = []; #endif - diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index 22287f1342..45b60a69c1 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -62,7 +62,7 @@ _finalOwner = nil; }; }; }; - + //Handle Weird Data Return if (_laser params [["_laserPos", [], [[]], 3], ["_laserDir", [], [[]], 3]]) then { _res = [_laserPos, _laserDir, _divergence] call FUNC(shootCone); diff --git a/addons/main/CfgSettings.hpp b/addons/main/CfgSettings.hpp index 661108c53a..58cb824a6f 100644 --- a/addons/main/CfgSettings.hpp +++ b/addons/main/CfgSettings.hpp @@ -6,7 +6,7 @@ class CfgSettings { class dependencies { //ACE will hard exit if this is missing CBA[] = {"cba_main", REQUIRED_CBA_VERSION, "(true)"}; - + //Warnings for missing RHS compat pbos compat_rhs_afrf3[] = {"ace_compat_rhs_afrf3", {VERSION_AR}, "isClass (configFile >> 'CfgPatches' >> 'rhs_main')"}; compat_rhs_usf3[] = {"ace_compat_rhs_usf3", {VERSION_AR}, "isClass (configFile >> 'CfgPatches' >> 'rhsusf_main')"}; diff --git a/addons/map/CfgAmmo.hpp b/addons/map/CfgAmmo.hpp index 9e98d0efea..01cd9427e8 100644 --- a/addons/map/CfgAmmo.hpp +++ b/addons/map/CfgAmmo.hpp @@ -1,21 +1,21 @@ class CfgAmmo { class FlareCore; - + class FlareBase: FlareCore {}; class F_20mm_White: FlareBase {}; - + class ACE_FlashlightProxy_White: F_20mm_White { model = "\A3\Weapons_f\empty"; effectFlare = "FlareShell"; - + triggerTime = 0; intensity = 0.5; flareSize = 1; timeToLive = 10e10; - + lightColor[] = {1,1,1,1}; - + grenadeBurningSound[] = {}; grenadeFireSound[] = {}; soundTrigger[] = {}; @@ -25,24 +25,24 @@ class CfgAmmo { SmokeShellSoundLoop1[] = {}; SmokeShellSoundLoop2[] = {}; }; - + class ACE_FlashlightProxy_Red: ACE_FlashlightProxy_White { intensity = 1; lightColor[] = {1,0,0,1}; }; - + class ACE_FlashlightProxy_Green: ACE_FlashlightProxy_White { intensity = 1; lightColor[] = {0,1,0,1}; }; - + class ACE_FlashlightProxy_Blue: ACE_FlashlightProxy_White { intensity = 1.5; lightColor[] = {0.25,0.25,1,1}; }; - + class ACE_FlashlightProxy_Yellow: ACE_FlashlightProxy_White { intensity = 1; lightColor[] = {1,1,0.5,1}; }; -}; \ No newline at end of file +}; diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 00e9e737cf..f3b3ba6106 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -12,7 +12,7 @@ if (isServer) then { deleteVehicle _x; }; } forEach attachedObjects _disconnectedPlayer; - + nil }]; }; diff --git a/addons/map/functions/fnc_compileFlashlightMenu.sqf b/addons/map/functions/fnc_compileFlashlightMenu.sqf index bc6746f46e..836b483a20 100644 --- a/addons/map/functions/fnc_compileFlashlightMenu.sqf +++ b/addons/map/functions/fnc_compileFlashlightMenu.sqf @@ -30,7 +30,7 @@ _flashlights = [_player] call FUNC(getUnitFlashlights); _cfg = (configFile >> "CfgWeapons" >> _x); _displayName = getText (_cfg >> "displayName"); _icon = getText (_cfg >> "picture"); - + _statement = if (GVAR(flashlightInUse) == _x) then { _displayName = format [localize LSTRING(turnLightOff), _displayName]; {[""] call FUNC(switchFlashlight)} diff --git a/addons/maptools/functions/fnc_calculateMapScale.sqf b/addons/maptools/functions/fnc_calculateMapScale.sqf index 78bfae43af..018edf68d9 100644 --- a/addons/maptools/functions/fnc_calculateMapScale.sqf +++ b/addons/maptools/functions/fnc_calculateMapScale.sqf @@ -14,7 +14,7 @@ private ["_screenOffset", "_pos"]; -_pos = ((findDisplay 12) displayCtrl 51) ctrlMapScreenToWorld [0.5, 0.5]; +_pos = ((findDisplay 12) displayCtrl 51) ctrlMapScreenToWorld [0.5, 0.5]; _screenOffset = ((findDisplay 12) displayCtrl 51) posWorldToScreen [(_pos select 0) + 100, (_pos select 1)]; (_screenOffset select 0) - 0.5 diff --git a/addons/markers/functions/fnc_initInsertMarker.sqf b/addons/markers/functions/fnc_initInsertMarker.sqf index 08c078c4f5..2de05575f7 100644 --- a/addons/markers/functions/fnc_initInsertMarker.sqf +++ b/addons/markers/functions/fnc_initInsertMarker.sqf @@ -22,7 +22,7 @@ disableserialization; params ["_display"]; TRACE_1("params",_display); - + //Can't place markers when can't interact if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith { _display closeDisplay 2; //emulate "Cancel" button diff --git a/addons/medical/functions/fnc_translateSelections.sqf b/addons/medical/functions/fnc_translateSelections.sqf index 98a4cf8c51..e6624507d1 100644 --- a/addons/medical/functions/fnc_translateSelections.sqf +++ b/addons/medical/functions/fnc_translateSelections.sqf @@ -46,7 +46,7 @@ if (_hitPointIndex isEqualTo true) exitWith { if (!isNil {_unit getHitPointDamage _returnHitPoint}) exitWith { _returnHitPoint; }; - + //Those VR fuckers have weird limb hitpoints private _hitPoints = switch (_selection) do { case ("hand_l"): {L_ARM_HITPOINTS}; diff --git a/addons/microdagr/functions/fnc_updateDisplay.sqf b/addons/microdagr/functions/fnc_updateDisplay.sqf index 4b609085a8..5042cbac97 100644 --- a/addons/microdagr/functions/fnc_updateDisplay.sqf +++ b/addons/microdagr/functions/fnc_updateDisplay.sqf @@ -171,7 +171,7 @@ case (APP_MODE_WAYPOINTS): { _currentIndex = (_currentIndex max 0) min (count _waypoints); _wpListBox lbSetCurSel _currentIndex; - + //Reset focus to a dummy ctrl (top button), otherwise HOME/POS1 key goes to top of listBox and has keybind blocked ctrlSetFocus (_display displayCtrl IDC_TOPMENUBUTTON); }; @@ -193,7 +193,7 @@ case (APP_MODE_SETUP): { } else { _settingListBox lbSetTextRight [1, (localize LSTRING(settingOff))]; }; - + //Reset focus to a dummy ctrl (top button), otherwise HOME/POS1 key goes to top of listBox and has keybind blocked ctrlSetFocus (_display displayCtrl IDC_TOPMENUBUTTON); }; diff --git a/addons/missileguidance/ACE_GuidanceConfig.hpp b/addons/missileguidance/ACE_GuidanceConfig.hpp index f3434fef9b..96e417a7e8 100644 --- a/addons/missileguidance/ACE_GuidanceConfig.hpp +++ b/addons/missileguidance/ACE_GuidanceConfig.hpp @@ -3,42 +3,42 @@ class GVAR(AttackProfiles) { name = ""; visualName = ""; description = ""; - + functionName = QFUNC(attackProfile_LIN); }; class DIR { name = ""; visualName = ""; description = ""; - + functionName = QFUNC(attackProfile_DIR); }; class MID { name = ""; visualName = ""; description = ""; - + functionName = QFUNC(attackProfile_MID); }; class HI { name = ""; visualName = ""; description = ""; - + functionName = QFUNC(attackProfile_HI); }; class JAV_DIR { name = ""; visualName = ""; description = ""; - + functionName = QFUNC(attackProfile_JAV_DIR); }; class JAV_TOP { name = ""; visualName = ""; description = ""; - + functionName = QFUNC(attackProfile_JAV_TOP); }; }; @@ -48,14 +48,14 @@ class GVAR(SeekerTypes) { name = ""; visualName = ""; description = ""; - + functionName = QFUNC(seekerType_SALH); }; class Optic { name = ""; visualName = ""; description = ""; - + functionName = QFUNC(seekerType_Optic); }; }; diff --git a/addons/missileguidance/CfgMagazines.hpp b/addons/missileguidance/CfgMagazines.hpp index 31f4739417..a7e729cf32 100644 --- a/addons/missileguidance/CfgMagazines.hpp +++ b/addons/missileguidance/CfgMagazines.hpp @@ -1,6 +1,6 @@ class CfgMagazines { class 12Rnd_PG_missiles; - + class 6Rnd_ACE_Hydra70_DAGR : 12Rnd_PG_missiles { ammo = "ACE_Hydra70_DAGR"; count = 12; @@ -8,7 +8,7 @@ class CfgMagazines { displayNameShort = "6 Round DAGR"; descriptionShort = "6 Round DAGR"; weight = 36; - + }; class 12Rnd_ACE_Hydra70_DAGR : 6Rnd_ACE_Hydra70_DAGR { count = 12; @@ -24,7 +24,7 @@ class CfgMagazines { descriptionShort = "24 Round DAGR"; weight = 72; }; - + // Hellfires class 6Rnd_ACE_Hellfire_AGM114K : 12Rnd_PG_missiles { count = 12; @@ -33,7 +33,7 @@ class CfgMagazines { displayNameShort = "6Rnd_ACE_Hellfire_AGM114K"; descriptionShort = "6Rnd_ACE_Hellfire_AGM114K"; weight = 36; - + }; class 12Rnd_ACE_Hellfire_AGM114K : 6Rnd_ACE_Hydra70_DAGR { count = 12; @@ -49,5 +49,5 @@ class CfgMagazines { descriptionShort = "24Rnd_ACE_Hellfire_AGM114K"; weight = 72; }; - -}; \ No newline at end of file + +}; diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index 5069556078..16b4b87767 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -17,7 +17,7 @@ class CfgVehicles { class MainTurret; }; }; - + class ACE_Comanche_Test : B_Heli_Attack_01_F { scope = 1; scopeCurator = 0; @@ -32,5 +32,5 @@ class CfgVehicles { }; }; }; - + }; diff --git a/addons/missileguidance/functions/fnc_doAttackProfile.sqf b/addons/missileguidance/functions/fnc_doAttackProfile.sqf index b9a3502035..171e169651 100644 --- a/addons/missileguidance/functions/fnc_doAttackProfile.sqf +++ b/addons/missileguidance/functions/fnc_doAttackProfile.sqf @@ -15,7 +15,7 @@ for [{_i=0}, {_i< (count _attackProfilesCfg) }, {_i=_i+1}] do { _testProfile = _attackProfilesCfg select _i; _testName = configName _testProfile; TRACE_3("", _testName, _testProfile, _attackProfilesCfg); - + if( _testName == _attackProfileName) exitWith { _attackProfile = _attackProfilesCfg select _i; }; @@ -26,4 +26,4 @@ if(!isNil "_attackProfile") then { _attackProfilePos = _this call (missionNamespace getVariable (getText (_attackProfile >> "functionName"))); }; -_attackProfilePos; \ No newline at end of file +_attackProfilePos; diff --git a/addons/missileguidance/functions/fnc_doSeekerSearch.sqf b/addons/missileguidance/functions/fnc_doSeekerSearch.sqf index 081ab16353..bd300effe8 100644 --- a/addons/missileguidance/functions/fnc_doSeekerSearch.sqf +++ b/addons/missileguidance/functions/fnc_doSeekerSearch.sqf @@ -16,7 +16,7 @@ for [{_i=0}, {_i< (count _seekerTypesCfg) }, {_i=_i+1}] do { _testProfile = _seekerTypesCfg select _i; _testName = configName _testProfile; TRACE_3("", _testName, _testProfile, _seekerTypesCfg); - + if( _testName == _seekerTypeName) exitWith { _seekerType = _seekerTypesCfg select _i; }; @@ -27,4 +27,4 @@ if(!isNil "_seekerType") then { _seekerProfilePos = _this call (missionNamespace getVariable (getText (_seekerType >> "functionName"))); }; -_seekerProfilePos; \ No newline at end of file +_seekerProfilePos; diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index 7fc77fdd56..26f8d14c6e 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -11,7 +11,7 @@ if(GVAR(enabled) < 1 || {!local _projectile} ) exitWith { false }; if( !isPlayer _shooter && { GVAR(enabled) < 2 } ) exitWith { false }; // Bail on not missile -if(! (_ammo isKindOf "MissileBase") ) exitWith { false }; +if(! (_ammo isKindOf "MissileBase") ) exitWith { false }; private["_config", "_configs", "_enabled", "_target", "_seekerType", "_attackProfile"]; private["_args", "_canUseLock", "_guidingUnit", "_launchPos", "_lockMode", "_targetPos", "_vanillaTarget"]; @@ -30,7 +30,7 @@ _target = (vehicle _shooter) getVariable [QGVAR(target), nil]; _targetPos = (vehicle _shooter) getVariable [QGVAR(targetPosition), nil]; _seekerType = (vehicle _shooter) getVariable [QGVAR(seekerType), nil]; _attackProfile = (vehicle _shooter) getVariable [QGVAR(attackProfile), nil]; -_lockMode = (vehicle _shooter) getVariable [QGVAR(lockMode), nil]; +_lockMode = (vehicle _shooter) getVariable [QGVAR(lockMode), nil]; // @TODO: make this vehicle shooter, but we need to differentiate where its set in ace_laser _laserCode = _shooter getVariable [QEGVAR(laser,code), ACE_DEFAULT_LASER_CODE]; @@ -40,14 +40,14 @@ _launchPos = getPosASL (vehicle _shooter); TRACE_3("Begin guidance", _target, _seekerType, _attackProfile); -if ( isNil "_seekerType" || { ! ( _seekerType in (getArray (_config >> "seekerTypes" ) ) ) } ) then { +if (isNil "_seekerType" || {!(_seekerType in (getArray (_config >> "seekerTypes")))}) then { _seekerType = getText (_config >> "defaultSeekerType"); -}; -if ( isNil "_attackProfile" || { ! ( _attackProfile in (getArray (_config >> "attackProfiles" ) ) ) } ) then { - _attackProfile = getText (_config >> "defaultAttackProfile"); }; -if ( isNil "_lockMode" || { ! ( _lockMode in (getArray (_config >> "seekerLockModes" ) ) ) } ) then { - _lockMode = getText (_config >> "defaultSeekerLockMode"); +if (isNil "_attackProfile" || {!(_attackProfile in (getArray (_config >> "attackProfiles")))}) then { + _attackProfile = getText (_config >> "defaultAttackProfile"); +}; +if (isNil "_lockMode" || {!(_lockMode in (getArray (_config >> "seekerLockModes")))}) then { + _lockMode = getText (_config >> "defaultSeekerLockMode"); }; // If we didn't get a target, try to fall back on tab locking @@ -61,7 +61,7 @@ if(isNil "_target") then { // @TODO: Get vanilla target if(_canUseLock > 0 || difficulty < 1) then { _vanillaTarget = cursorTarget; - + TRACE_1("Using Vanilla Locking", _vanillaTarget); if(!isNil "_vanillaTarget") then { _target = _vanillaTarget; @@ -71,14 +71,14 @@ if(isNil "_target") then { }; TRACE_4("Beginning ACE guidance system",_target,_ammo,_seekerType,_attackProfile); -_args = [_this, - [_shooter, - [_target, _targetPos, _launchPos], - _seekerType, +_args = [_this, + [_shooter, + [_target, _targetPos, _launchPos], + _seekerType, _attackProfile, _lockMode, _laserInfo - ], + ], [ getNumber ( _config >> "minDeflection" ), getNumber ( _config >> "maxDeflection" ), @@ -91,7 +91,7 @@ _args = [_this, ], [ ACE_diagTime, [], [] ] ]; - + // Hand off to the guiding unit. We just use local player so local PFH fires for now // Laser code needs to give us a shooter for LOBL, or the seeker unit needs to be able to shift locality // Based on its homing laser @@ -115,4 +115,4 @@ _args = [_this, (vehicle _shooter) setVariable [QGVAR(seekerType), nil]; (vehicle _shooter) setVariable [QGVAR(attackProfile), nil]; (vehicle _shooter) setVariable [QGVAR(lockMode), nil]; -*/ \ No newline at end of file +*/ diff --git a/addons/modules/XEH_postInit.sqf b/addons/modules/XEH_postInit.sqf index 0b8cc67842..8f0c430db2 100644 --- a/addons/modules/XEH_postInit.sqf +++ b/addons/modules/XEH_postInit.sqf @@ -4,7 +4,7 @@ ["InitSettingsFromModules", { // TODO This is a basic and limited implementation that mimics some of the functionality from the A3 module framework, but not all of it. // We have to execute this in the postInit XEH because on object init, the parameters of the modules are not yet available. They are if we execute it at the start of postInit execution. - + private _uniqueModulesHandled = []; { [_x] call { @@ -28,8 +28,8 @@ }; if (_isSingular && {_logicType in _uniqueModulesHandled}) then { //ToDo: should this be an exit? ACE_LOGWARNING_1("Module [%1] - More than 1 singular module placed", _logicType); - }; - if (_isSingular) then {_uniqueModulesHandled pushBack _logicType;}; + }; + if (_isSingular) then {_uniqueModulesHandled pushBack _logicType;}; if (_isGlobal || isServer) then { [_logic, (synchronizedObjects _logic), true] call _function; @@ -44,7 +44,7 @@ }; }; } forEach GVAR(moduleInitCollection); - + if (isServer) then { GVAR(serverModulesRead) = true; publicVariable QGVAR(serverModulesRead); diff --git a/addons/nametags/functions/fnc_doShow.sqf b/addons/nametags/functions/fnc_doShow.sqf index 615916de7f..18c434f4c6 100644 --- a/addons/nametags/functions/fnc_doShow.sqf +++ b/addons/nametags/functions/fnc_doShow.sqf @@ -35,16 +35,16 @@ _turretRoles = _data apply {_x select 1}; _roleType = CARGO; _toShow = []; { - switch (_x) do { + switch (_x) do { case commander _vehicle: { _roleType = COMMANDER; }; case gunner _vehicle: { _roleType = GUNNER; - }; - case driver _vehicle: { + }; + case driver _vehicle: { _roleType = if(_isAir) then { PILOT } else { DRIVER }; - }; + }; default { _index = _turretUnits find _x; if(_index !=-1 ) then { @@ -61,7 +61,7 @@ _toShow = [ _toShow, [], { - _x select 1 + _x select 1 }, "ASCEND", { @@ -71,7 +71,7 @@ _toShow = [ ] call BIS_fnc_sortBy; _roleImages = ROLE_IMAGES; -{ +{ _unit = _x select 0; _roleType = _x select 1; _text = _text + format["%1
", [_unit] call EFUNC(common,getName), _roleImages select _roleType]; diff --git a/addons/nightvision/XEH_postInitClient.sqf b/addons/nightvision/XEH_postInitClient.sqf index 17cb92f9cc..5a6714a374 100644 --- a/addons/nightvision/XEH_postInitClient.sqf +++ b/addons/nightvision/XEH_postInitClient.sqf @@ -29,18 +29,18 @@ GVAR(ppEffectMuzzleFlash) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; // Setup the event handlers -["playerInventoryChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); +["playerInventoryChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); ["playerVisionModeChanged", { _this call FUNC(updatePPEffects); _this call FUNC(onVisionModeChanged); }] call EFUNC(common,addEventHandler); -["cameraViewChanged", { +["cameraViewChanged", { _this call FUNC(updatePPEffects); _this call FUNC(onCameraViewChanged); }] call EFUNC(common,addEventHandler); -["playerVehicleChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); -["playerTurretChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); +["playerVehicleChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); +["playerTurretChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); // Add keybinds ["ACE3 Equipment", QGVAR(IncreaseNVGBrightness), localize LSTRING(IncreaseNVGBrightness), diff --git a/addons/overpressure/functions/fnc_getDistance.sqf b/addons/overpressure/functions/fnc_getDistance.sqf index 341da388ca..616feb8660 100644 --- a/addons/overpressure/functions/fnc_getDistance.sqf +++ b/addons/overpressure/functions/fnc_getDistance.sqf @@ -30,7 +30,7 @@ private _distance = 999; { _x params ["_intersectPosASL", "_surfaceNormal", "_intersectObject"]; TRACE_3("Intersect",_intersectPosASL,_surfaceNormal,_intersectObject); - + //Hit something solid that can reflect - (Static covers Building) [Need to manually filter out _shoot for FFV shots] if ((isNull _intersectObject) || {(_intersectObject != _shooter) && {(_intersectObject isKindOf "Static") || {_intersectObject isKindOf "AllVehicles"}}}) exitWith { _distance = _posASL vectorDistance _intersectPosASL; diff --git a/addons/rangecard/RscTitles.hpp b/addons/rangecard/RscTitles.hpp index c4da1862ca..bc4101c483 100644 --- a/addons/rangecard/RscTitles.hpp +++ b/addons/rangecard/RscTitles.hpp @@ -64,7 +64,7 @@ class ACE_RangeCard_Dialog { onLoad = "uiNamespace setVariable ['RangleCard_Display', (_this select 0)]"; onUnload = QUOTE(_this call FUNC(onCloseDialog)); objects[] = {}; - + class controls { class BACKGROUND { moving=1; diff --git a/addons/rangecard/functions/fnc_calculateSolution.sqf b/addons/rangecard/functions/fnc_calculateSolution.sqf index ea86d9986e..e1659016bb 100644 --- a/addons/rangecard/functions/fnc_calculateSolution.sqf +++ b/addons/rangecard/functions/fnc_calculateSolution.sqf @@ -45,33 +45,8 @@ * Public: No */ #include "script_component.hpp" - -private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_drag", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire", "_rangeCardSlot", "_useABConfig"]; -_scopeBaseAngle = _this select 0; -_bulletMass = _this select 1; -_boreHeight = _this select 2; -_airFriction = _this select 3; -_muzzleVelocity = _this select 4; -_temperature = _this select 5; -_barometricPressure = _this select 6; -_relativeHumidity = _this select 7; -_simSteps = _this select 8; -_windSpeed1 = (_this select 9) select 0; -_windSpeed2 = (_this select 9) select 1; -_windDirection = _this select 10; -_inclinationAngle = _this select 11; -_targetSpeed = _this select 12; -_targetRange = _this select 13; -_bc = _this select 14; -_dragModel = _this select 15; -_atmosphereModel = _this select 16; -_storeRangeCardData = _this select 17; -_stabilityFactor = _this select 18; -_twistDirection = _this select 19; -_latitude = _this select 20; -_directionOfFire = _this select 21; -_rangeCardSlot = _this select 22; -_useABConfig = _this select 23; +params ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire", "_rangeCardSlot", "_useABConfig"]; +_windSpeed params ["_windSpeed1", "_windSpeed2"]; if (_storeRangeCardData) then { GVAR(rangeCardDataMVs) set [_rangeCardSlot, format[" %1", round(_muzzleVelocity)]]; @@ -138,19 +113,19 @@ _bulletVelocity set [2, Sin(_scopeBaseAngle) * _muzzleVelocity]; while {_TOF < 6 && (_bulletPos select 1) < _targetRange} do { _bulletSpeed = vectorMagnitude _bulletVelocity; - + _speedTotal = _speedTotal + _bulletSpeed; _stepsTotal = _stepsTotal + 1; _speedAverage = (_speedTotal / _stepsTotal); - + if (_speedAverage > 450 && _bulletSpeed < _speedOfSound) exitWith {}; if (atan((_bulletPos select 2) / (abs(_bulletPos select 1) + 1)) < -2.254) exitWith {}; - + _trueVelocity = _bulletVelocity vectorDiff _wind1; _trueSpeed = vectorMagnitude _trueVelocity; - + if (_useABConfig) then { - _drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then { + private _drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then { parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed])) } else { ([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation)) @@ -215,4 +190,4 @@ if (_targetRange != 0) then { _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2)); _kineticEnergy = _kineticEnergy * 0.737562149; -[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60] \ No newline at end of file +[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60] diff --git a/addons/rangecard/functions/fnc_openRangeCard.sqf b/addons/rangecard/functions/fnc_openRangeCard.sqf index 3e886eb97a..ea085ed5b1 100644 --- a/addons/rangecard/functions/fnc_openRangeCard.sqf +++ b/addons/rangecard/functions/fnc_openRangeCard.sqf @@ -20,17 +20,17 @@ if (GVAR(RangeCardOpened)) exitWith {}; if (_this) then { if (GVAR(ammoClassCopy) != "" && GVAR(magazineClassCopy) != "" && GVAR(weaponClassCopy) != "") then { GVAR(RangeCardOpened) = true; - + createDialog "ACE_RangeCard_Dialog"; - + [GVAR(ammoClassCopy), GVAR(magazineClassCopy), GVAR(weaponClassCopy)] call FUNC(updateRangeCard); }; } else { if (ACE_player call FUNC(updateClassNames)) then { GVAR(RangeCardOpened) = true; - + createDialog "ACE_RangeCard_Dialog"; - + [GVAR(ammoClass), GVAR(magazineClass), GVAR(weaponClass)] call FUNC(updateRangeCard); }; }; diff --git a/addons/rangecard/functions/fnc_updateRangeCard.sqf b/addons/rangecard/functions/fnc_updateRangeCard.sqf index 04317d46d7..a7b0b996e2 100644 --- a/addons/rangecard/functions/fnc_updateRangeCard.sqf +++ b/addons/rangecard/functions/fnc_updateRangeCard.sqf @@ -107,7 +107,7 @@ _dragModel = _ammoConfig select 5; _atmosphereModel = _ammoConfig select 8; _bulletMass = 5; _boreHeight = 3.81; -_zeroRange = 100; +_zeroRange = 100; if (_bc == 0) then { _useABConfig = false; @@ -169,13 +169,13 @@ if (isNil {_cacheEntry}) then { { _mvShift = [_ammoConfig select 9, _x] call EFUNC(advanced_ballistics,calculateAmmoTemperatureVelocityShift); _mv = _muzzleVelocity + _mvShift; - + [_scopeBaseAngle,_bulletMass,_boreHeight,_airFriction,_mv,_x,_barometricPressure,_relativeHumidity,1000,[4,0],3,0,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,true,1.5,1,46,23,_forEachIndex,_useABConfig] call FUNC(calculateSolution); } forEach [-15, -5, 5, 10, 15, 20, 25, 30, 35]; - } else { + } else { [_scopeBaseAngle,_bulletMass,_boreHeight,_airFriction,_muzzleVelocity,15,_barometricPressure,_relativeHumidity,1000,[4,0],3,0,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,true,1.5,1,46,23,3,_useABConfig] call FUNC(calculateSolution); }; - + for "_i" from 0 to 9 do { GVAR(lastValidRow) pushBack count (GVAR(rangeCardDataElevation) select _i); while {count (GVAR(rangeCardDataElevation) select _i) < 50} do { @@ -190,7 +190,7 @@ if (isNil {_cacheEntry}) then { }; }; }; - + missionNamespace setVariable [format[QGVAR(%1_%2_%3), _ammoClass, _weaponClass, missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]], [GVAR(rangeCardDataElevation), GVAR(rangeCardDataWindage), GVAR(rangeCardDataLead), GVAR(rangeCardDataMVs), GVAR(lastValidRow)]]; } else { GVAR(rangeCardDataElevation) = _cacheEntry select 0; @@ -246,4 +246,4 @@ if (_useABConfig) then { } else { ctrlSetText [770020, ""]; ctrlSetText [770021, ""]; -}; \ No newline at end of file +}; diff --git a/addons/realisticnames/CfgVehicles.hpp b/addons/realisticnames/CfgVehicles.hpp index 4ecbbe1b89..db42e693bf 100644 --- a/addons/realisticnames/CfgVehicles.hpp +++ b/addons/realisticnames/CfgVehicles.hpp @@ -636,11 +636,11 @@ class CfgVehicles { class Weapon_MMG_02_sand_F: Weapon_Base_F { displayName = CSTRING(MMG_02_sand); };*/ - + //attachments - + class Item_Base_F; - + class Item_acc_flashlight: Item_Base_F { displayName="UTG Defender 126"; }; diff --git a/addons/repair/ACE_Repair.hpp b/addons/repair/ACE_Repair.hpp index d47773cd83..6e5eac4fa8 100644 --- a/addons/repair/ACE_Repair.hpp +++ b/addons/repair/ACE_Repair.hpp @@ -12,7 +12,7 @@ class ACE_Repair { condition = QUOTE(call FUNC(canReplaceWheel)); itemConsumed = 0; claimObjects[] = {{"ACE_Wheel"}}; - + callbackSuccess = QUOTE(call FUNC(doReplaceWheel)); callbackFailure = ""; callbackProgress = ""; diff --git a/addons/sandbag/CfgWeapons.hpp b/addons/sandbag/CfgWeapons.hpp index 1a26fc78d4..5f8ef61315 100644 --- a/addons/sandbag/CfgWeapons.hpp +++ b/addons/sandbag/CfgWeapons.hpp @@ -9,7 +9,7 @@ class CfgWeapons { displayName = CSTRING(sandbagEmpty_displayName); model = PATHTOF(data\ace_sandbag_m.p3d); picture = PATHTOF(data\m_sandbag_ca.paa); - + class ItemInfo: InventoryItem_Base_F { mass = 8; }; @@ -21,7 +21,7 @@ class CfgWeapons { displayName = CSTRING(sandbag_displayName); model = PATHTOF(data\ace_sandbag_build.p3d); picture = PATHTOF(data\m_sandbag_ca.paa); - + class ItemInfo: InventoryItem_Base_F { mass = 160; }; diff --git a/addons/scopes/CfgWeapons.hpp b/addons/scopes/CfgWeapons.hpp index 442d4c39d0..eb1d8400a2 100644 --- a/addons/scopes/CfgWeapons.hpp +++ b/addons/scopes/CfgWeapons.hpp @@ -1,7 +1,7 @@ class CfgWeapons { class ItemCore; class InventoryOpticsItem_Base_F; - + class optic_LRPS : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; @@ -46,7 +46,7 @@ class CfgWeapons { }; }; }; - + class optic_AMS_base : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; @@ -61,7 +61,7 @@ class CfgWeapons { }; }; }; - + class optic_KHS_base : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; @@ -76,7 +76,7 @@ class CfgWeapons { }; }; }; - + class optic_KHS_old : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; diff --git a/addons/scopes/functions/fnc_adjustScope.sqf b/addons/scopes/functions/fnc_adjustScope.sqf index 50ee1a4f71..5b0c6d11a6 100644 --- a/addons/scopes/functions/fnc_adjustScope.sqf +++ b/addons/scopes/functions/fnc_adjustScope.sqf @@ -47,7 +47,7 @@ if ((count _maxHorizontal < 2) || (count _maxVertical < 2)) exitWith {false}; if ((_verticalIncrement == 0) && (_turretAndDirection in [ELEVATION_UP, ELEVATION_DOWN])) exitWith {false}; if ((_horizontalIncrement == 0) && (_turretAndDirection in [WINDAGE_UP, WINDAGE_DOWN])) exitWith {false}; -_zeroing = _adjustment select _weaponIndex; +_zeroing = _adjustment select _weaponIndex; _zeroing params ["_elevation", "_windage", "_zero"]; switch (_turretAndDirection) do { diff --git a/addons/sitting/XEH_clientInit.sqf b/addons/sitting/XEH_clientInit.sqf index a167e0fea5..e15017d715 100644 --- a/addons/sitting/XEH_clientInit.sqf +++ b/addons/sitting/XEH_clientInit.sqf @@ -5,7 +5,7 @@ if (!hasInterface) exitWith {}; ["SettingsInitialized", { TRACE_1("SettingInit", GVAR(enable)); - + //If not enabled, then do not add CanInteractWith Condition or event handlers: if (!GVAR(enable)) exitWith {}; diff --git a/addons/spottingscope/CfgWeapons.hpp b/addons/spottingscope/CfgWeapons.hpp index 9b5825572b..3b550f9f5d 100644 --- a/addons/spottingscope/CfgWeapons.hpp +++ b/addons/spottingscope/CfgWeapons.hpp @@ -2,14 +2,14 @@ class CfgWeapons { class ACE_ItemCore; class InventoryItem_Base_F; - + class ACE_SpottingScope: ACE_ItemCore { scope = 2; displayName = CSTRING(DisplayName); descriptionShort = ""; picture = PATHTOF(UI\w_spottingscope_ca.paa); model = PATHTOF(data\ace_spottingscope.p3d); - + class ItemInfo: InventoryItem_Base_F { mass = 40; }; diff --git a/addons/switchunits/functions/fnc_markAiOnMap.sqf b/addons/switchunits/functions/fnc_markAiOnMap.sqf index d29e75b6a4..5d7eac6f1a 100644 --- a/addons/switchunits/functions/fnc_markAiOnMap.sqf +++ b/addons/switchunits/functions/fnc_markAiOnMap.sqf @@ -37,7 +37,7 @@ GVAR(AllMarkerNames) = []; // create markers { if (([_x] call FUNC(isValidAi) && (side group _x in _sides)) || (_x getVariable [QGVAR(IsPlayerControlled), false])) then { - + private _markerName = str _x; private _marker = createMarkerLocal [_markerName, position _x]; diff --git a/addons/tripod/CfgWeapons.hpp b/addons/tripod/CfgWeapons.hpp index adc14912c2..6322ef1906 100644 --- a/addons/tripod/CfgWeapons.hpp +++ b/addons/tripod/CfgWeapons.hpp @@ -1,7 +1,7 @@ class CfgWeapons { class ACE_ItemCore; class InventoryItem_Base_F; - + class ACE_Tripod: ACE_ItemCore { author[] = {"Rocko", "Scubaman3D"}; scope = 2; @@ -9,7 +9,7 @@ class CfgWeapons { descriptionShort = ""; model = PATHTOF(data\w_sniper_tripod.p3d); picture = PATHTOF(UI\w_sniper_tripod_ca.paa); - + class ItemInfo: InventoryItem_Base_F { mass = 40; }; diff --git a/addons/weaponselect/XEH_preInit.sqf b/addons/weaponselect/XEH_preInit.sqf index b457e10cad..4166247505 100644 --- a/addons/weaponselect/XEH_preInit.sqf +++ b/addons/weaponselect/XEH_preInit.sqf @@ -5,8 +5,8 @@ ADDON = false; #include "XEH_PREP.hpp" // collect frag and other grenades separately -GVAR(GrenadesAll) = []; -GVAR(GrenadesFrag) = []; +GVAR(GrenadesAll) = []; +GVAR(GrenadesFrag) = []; GVAR(GrenadesNonFrag) = []; { diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index b344ad2bdf..e1b56f2ed2 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -17,24 +17,26 @@ // Assume default wind values // Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece -GVAR(WindSpeedMax) = [[8.8, 5.5], [8.8, 5], [8.6, 4.8], [7.6, 3.4], [7.0, 3.0], [7.1, 3.0], [7.5, 3.1], [8.0, 3.2], [7.6, 3.5], [7.8, 4.6], [7.9, 5.0], [8.2, 5.5]]; +GVAR(WindSpeedMax) = [[8.8, 5.5], [8.8, 5], [8.6, 4.8], [7.6, 3.4], [7.0, 3.0], [7.1, 3.0], [7.5, 3.1], [8.0, 3.2], [7.6, 3.5], [7.8, 4.6], [7.9, 5.0], [8.2, 5.5]]; GVAR(WindSpeedMean) = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; -GVAR(WindSpeedMin) = [[0.2, 5.0], [0.1, 5.0], [0.2, 4.3], [0.0, 3.0], [0.0, 2.1], [0.0, 2.0], [0.1, 3.1], [0.3, 3.1], [0.0, 3.6], [0.0, 4.2], [0.1, 5.0], [0.2, 5.5]]; -GVAR(WindDirectionProbabilities) = [[0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02], // January - [0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02], // February - [0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03], // March - [0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04], // April - [0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05], // May - [0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08], // June - [0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09], // July - [0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08], // August - [0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05], // September - [0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03], // October - [0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02], // November - [0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02]];// December - +GVAR(WindSpeedMin) = [[0.2, 5.0], [0.1, 5.0], [0.2, 4.3], [0.0, 3.0], [0.0, 2.1], [0.0, 2.0], [0.1, 3.1], [0.3, 3.1], [0.0, 3.6], [0.0, 4.2], [0.1, 5.0], [0.2, 5.5]]; +GVAR(WindDirectionProbabilities) = [ + [0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02], // January + [0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02], // February + [0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03], // March + [0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04], // April + [0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05], // May + [0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08], // June + [0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09], // July + [0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08], // August + [0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05], // September + [0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03], // October + [0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02], // November + [0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02] // December +]; + // Check if the wind data is defined in the map config -if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean")) then { +if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean")) then { GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMin"); GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean"); GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMax"); @@ -55,23 +57,25 @@ if (toLower worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Prague,Czech-Republic GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; - + // Source: https://weatherspark.com/averages/32335/Prague-Central-Bohemia-Czech-Republic GVAR(WindSpeedMax) = [[6.7, 2.4], [6.8, 2.2], [7.1, 2.0], [6.7, 1.9], [6.5, 1.8], [6.4, 1.8], [6.4, 1.8], [5.9, 1.9], [5.8, 2.1], [5.9, 2.3], [6.4, 2.8], [7.0, 3.0]]; GVAR(WindSpeedMean) = [4.5, 4.3, 4.4, 4.1, 3.6, 3.6, 3.6, 3.4, 3.6, 0, 4.1, 4.6]; GVAR(WindSpeedMin) = [[1.5, 1.1], [1.5, 1.1], [1.5, 1.0], [1.2, 0.9], [1.1, 0.8], [1.0, 0.8], [1.0, 1.0], [1.0, 0.9], [1.1, 1.0], [1.0, 1.0], [1.3, 1.1], [1.8, 1.2]]; - GVAR(WindDirectionProbabilities) = [[0.06, 0.02, 0.06, 0.06, 0.10, 0.23, 0.15, 0.06], // January - [0.08, 0.03, 0.08, 0.06, 0.08, 0.18, 0.15, 0.08], // February - [0.08, 0.02, 0.10, 0.06, 0.07, 0.17, 0.15, 0.08], // March - [0.12, 0.04, 0.10, 0.05, 0.06, 0.12, 0.13, 0.10], // April - [0.12, 0.05, 0.09, 0.05, 0.05, 0.10, 0.13, 0.10], // May - [0.12, 0.04, 0.06, 0.03, 0.05, 0.13, 0.16, 0.10], // June - [0.09, 0.03, 0.07, 0.04, 0.06, 0.16, 0.18, 0.10], // July - [0.09, 0.03, 0.08, 0.04, 0.06, 0.15, 0.16, 0.09], // August - [0.07, 0.03, 0.08, 0.06, 0.08, 0.18, 0.15, 0.08], // September - [0.06, 0.03, 0.10, 0.07, 0.10, 0.19, 0.13, 0.05], // October - [0.06, 0.02, 0.08, 0.07, 0.10, 0.15, 0.13, 0.05], // November - [0.06, 0.02, 0.06, 0.06, 0.10, 0.24, 0.15, 0.05]];// December + GVAR(WindDirectionProbabilities) = [ + [0.06, 0.02, 0.06, 0.06, 0.10, 0.23, 0.15, 0.06], // January + [0.08, 0.03, 0.08, 0.06, 0.08, 0.18, 0.15, 0.08], // February + [0.08, 0.02, 0.10, 0.06, 0.07, 0.17, 0.15, 0.08], // March + [0.12, 0.04, 0.10, 0.05, 0.06, 0.12, 0.13, 0.10], // April + [0.12, 0.05, 0.09, 0.05, 0.05, 0.10, 0.13, 0.10], // May + [0.12, 0.04, 0.06, 0.03, 0.05, 0.13, 0.16, 0.10], // June + [0.09, 0.03, 0.07, 0.04, 0.06, 0.16, 0.18, 0.10], // July + [0.09, 0.03, 0.08, 0.04, 0.06, 0.15, 0.16, 0.09], // August + [0.07, 0.03, 0.08, 0.06, 0.08, 0.18, 0.15, 0.08], // September + [0.06, 0.03, 0.10, 0.07, 0.10, 0.19, 0.13, 0.05], // October + [0.06, 0.02, 0.08, 0.07, 0.10, 0.15, 0.13, 0.05], // November + [0.06, 0.02, 0.06, 0.06, 0.10, 0.24, 0.15, 0.05] // December + ]; }; if (toLower worldName in ["takistan", "zargabad", "mountains_acr", "shapur_baf", "provinggrounds_pmc"]) exitWith { @@ -80,23 +84,25 @@ if (toLower worldName in ["takistan", "zargabad", "mountains_acr", "shapur_baf", GVAR(TempNight) = [-7.1, -5.7, 0.7, 6, 8.8, 12.4, 15.3, 14.3, 9.4, 3.9, -1.2, -4.7]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Kabul,Afghanistan GVAR(Humidity) = [68, 69, 62, 60, 49, 37, 38, 39, 40, 41, 56, 61]; - + // Source: https://weatherspark.com/averages/32750/Kabul-Afghanistan GVAR(WindSpeedMax) = [[4.0, 1.0], [4.1, 1.0], [5.1, 1.1], [6.9, 1.2], [8.9, 1.2], [10.0, 1.1], [9.1,1.0], [8.2, 1.0], [6.9, 1.0], [5.2, 1.0], [3.8, 0.9], [3.7, 0.9]]; GVAR(WindSpeedMean) = [2.2, 2.2, 2.5, 2.8, 3.8, 4.4, 0, 3.3, 2.7, 2.4, 1.8, 1.9]; GVAR(WindSpeedMin) = [[0.2, 0.4], [0.2, 0.4], [0.2, 0.4], [0.3, 0.4], [0.6, 0.4], [0.9, 0.4], [0.7, 0.4], [0.5, 0.4], [0.2, 0.5], [0.1, 0.1], [0, 0.1], [0, 0.1]]; - GVAR(WindDirectionProbabilities) = [[0.04, 0.02, 0.05, 0.04, 0.05, 0.04, 0.11, 0.29], // January - [0.08, 0.04, 0.06, 0.04, 0.06, 0.04, 0.10, 0.20], // February - [0.12, 0.06, 0.08, 0.04, 0.05, 0.04, 0.09, 0.19], // March - [0.18, 0.07, 0.09, 0.05, 0.05, 0.04, 0.08, 0.16], // April - [0.27, 0.05, 0.05, 0.03, 0.04, 0.03, 0.08, 0.16], // May - [0.35, 0.04, 0.04, 0.02, 0.02, 0.02, 0.07, 0.13], // June - [0.30, 0.07, 0.09, 0.04, 0.02, 0.02, 0.05, 0.10], // July - [0.23, 0.07, 0.08, 0.06, 0.03, 0.02, 0.05, 0.10], // August - [0.15, 0.06, 0.10, 0.06, 0.04, 0.02, 0.07, 0.13], // September - [0.12, 0.04, 0.07, 0.06, 0.04, 0.03, 0.10, 0.17], // October - [0.07, 0.03, 0.06, 0.05, 0.06, 0.02, 0.10, 0.20], // November - [0.05, 0.03, 0.06, 0.05, 0.06, 0.04, 0.11, 0.26]];// December + GVAR(WindDirectionProbabilities) = [ + [0.04, 0.02, 0.05, 0.04, 0.05, 0.04, 0.11, 0.29], // January + [0.08, 0.04, 0.06, 0.04, 0.06, 0.04, 0.10, 0.20], // February + [0.12, 0.06, 0.08, 0.04, 0.05, 0.04, 0.09, 0.19], // March + [0.18, 0.07, 0.09, 0.05, 0.05, 0.04, 0.08, 0.16], // April + [0.27, 0.05, 0.05, 0.03, 0.04, 0.03, 0.08, 0.16], // May + [0.35, 0.04, 0.04, 0.02, 0.02, 0.02, 0.07, 0.13], // June + [0.30, 0.07, 0.09, 0.04, 0.02, 0.02, 0.05, 0.10], // July + [0.23, 0.07, 0.08, 0.06, 0.03, 0.02, 0.05, 0.10], // August + [0.15, 0.06, 0.10, 0.06, 0.04, 0.02, 0.07, 0.13], // September + [0.12, 0.04, 0.07, 0.06, 0.04, 0.03, 0.10, 0.17], // October + [0.07, 0.03, 0.06, 0.05, 0.06, 0.02, 0.10, 0.20], // November + [0.05, 0.03, 0.06, 0.05, 0.06, 0.04, 0.11, 0.26] // December + ]; }; if (toLower worldName in ["fallujah"]) exitWith { @@ -113,24 +119,25 @@ if (toLower worldName in ["fata", "Abbottabad"]) exitWith { GVAR(TempNight) = [-0.6, 2.4, 7.4, 13.1, 18.2, 22.8, 23.8, 22.9, 19.2, 12, 5.6, 1.2]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Zhob,Pakistan GVAR(Humidity) = [50, 40, 42, 40, 30, 30, 50, 49, 40, 32, 38, 41]; - + // Source: https://weatherspark.com/averages/31382/Shkin-Paktika-Afghanistan GVAR(WindSpeedMax) = [[3.0, 1.0], [3.3, 1.0], [4.0, 1.0], [4.3, 1.4], [4.3, 1.5], [4.6, 1.4], [4.5, 1.3], [4.0, 0.9], [4.0, 1.0], [3.5, 1.0], [3.4, 1.0], [3.1, 1.0]]; GVAR(WindSpeedMean) = [1.3, 1.5, 1.6, 1.7, 1.7, 1.7, 1.6, 1.5, 1.5, 1.4, 1.4, 1.2]; GVAR(WindSpeedMin) = [[0.2, 0.1], [0.2, 0.1], [0.2, 0.1], [0.2, 0.1], [0.1, 0.1], [0.1, 0.1], [0.3, 0.1], [0.2, 0.1], [0.1, 0.1], [0.1, 0.1], [0.1, 0.1], [0.1, 0.1]]; - GVAR(WindDirectionProbabilities) = [[0.09, 0.03, 0.02, 0.03, 0.05, 0.07, 0.07, 0.18], // January - [0.07, 0.02, 0.01, 0.05, 0.10, 0.10, 0.06, 0.12], // February - [0.07, 0.02, 0.01, 0.07, 0.14, 0.11, 0.08, 0.12], // March - [0.07, 0.04, 0.03, 0.05, 0.12, 0.08, 0.06, 0.13], // April - [0.10, 0.03, 0.02, 0.04, 0.10, 0.09, 0.08, 0.18], // May - [0.12, 0.05, 0.04, 0.05, 0.08, 0.06, 0.06, 0.16], // June - [0.06, 0.04, 0.02, 0.06, 0.05, 0.01, 0.02, 0.06], // July - [0.08, 0.03, 0.04, 0.05, 0.09, 0.04, 0.02, 0.06], // August - [0.10, 0.04, 0.02, 0.06, 0.11, 0.09, 0.06, 0.13], // September - [0.07, 0.02, 0.01, 0.04, 0.11, 0.08, 0.08, 0.19], // October - [0.06, 0.01, 0.00, 0.05, 0.11, 0.09, 0.08, 0.13], // November - [0.07, 0.01, 0.01, 0.03, 0.08, 0.09, 0.09, 0.18]];// December - + GVAR(WindDirectionProbabilities) = [ + [0.09, 0.03, 0.02, 0.03, 0.05, 0.07, 0.07, 0.18], // January + [0.07, 0.02, 0.01, 0.05, 0.10, 0.10, 0.06, 0.12], // February + [0.07, 0.02, 0.01, 0.07, 0.14, 0.11, 0.08, 0.12], // March + [0.07, 0.04, 0.03, 0.05, 0.12, 0.08, 0.06, 0.13], // April + [0.10, 0.03, 0.02, 0.04, 0.10, 0.09, 0.08, 0.18], // May + [0.12, 0.05, 0.04, 0.05, 0.08, 0.06, 0.06, 0.16], // June + [0.06, 0.04, 0.02, 0.06, 0.05, 0.01, 0.02, 0.06], // July + [0.08, 0.03, 0.04, 0.05, 0.09, 0.04, 0.02, 0.06], // August + [0.10, 0.04, 0.02, 0.06, 0.11, 0.09, 0.06, 0.13], // September + [0.07, 0.02, 0.01, 0.04, 0.11, 0.08, 0.08, 0.19], // October + [0.06, 0.01, 0.00, 0.05, 0.11, 0.09, 0.08, 0.13], // November + [0.07, 0.01, 0.01, 0.03, 0.08, 0.09, 0.09, 0.18] // December + ]; }; if (worldName in ["sfp_wamako"]) exitWith { @@ -155,23 +162,25 @@ if (worldName in ["Bornholm"]) exitWith { GVAR(TempNight) = [-1.6, -2.1, -0.7, 1.7, 6.2, 10.7, 13, 13.1, 10.6, 7.2, 3.5, 0.1]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,allinge,Denmark GVAR(Humidity) = [85, 84, 80, 76, 69, 69, 76, 77, 79, 81, 86, 86]; - + // Source: https://weatherspark.com/averages/28830/R-nne-Capital-Region-of-Denmark GVAR(WindSpeedMax) = [[9.3, 2.2], [8.4, 2.2], [7.9, 2.2], [7.1, 2.1], [7.2, 2.1], [6.8, 2.0], [6.8, 2.0], [7.1, 2.1], [7.7, 2.2], [8.6, 2.2], [8.8, 2.2], [9.3, 2.2]]; GVAR(WindSpeedMean) = [6.9, 6.0, 5.7, 4.9, 4.8, 4.6, 4.7, 4.9, 5.5, 6.2, 6.5, 6.7]; GVAR(WindSpeedMin) = [[3.9, 2.0], [3.0, 2.0], [2.3, 2.0], [1.8, 1.8], [1.7, 1.8], [1.7, 1.7], [1.7, 1.8], [1.9, 1.9], [2.6, 2.0], [2.9, 2.0], [3.3, 2.1], [3.5, 2.0]]; - GVAR(WindDirectionProbabilities) = [[0.07, 0.04, 0.07, 0.05, 0.09, 0.12, 0.20, 0.07], // January - [0.08, 0.06, 0.10, 0.06, 0.06, 0.08, 0.20, 0.08], // February - [0.05, 0.06, 0.13, 0.08, 0.07, 0.08, 0.19, 0.06], // March - [0.05, 0.11, 0.16, 0.09, 0.05, 0.06, 0.17, 0.06], // April - [0.04, 0.10, 0.15, 0.08, 0.05, 0.06, 0.20, 0.05], // May - [0.03, 0.07, 0.10, 0.07, 0.05, 0.07, 0.28, 0.06], // June - [0.04, 0.06, 0.11, 0.07, 0.04, 0.07, 0.28, 0.06], // July - [0.05, 0.06, 0.11, 0.07, 0.06, 0.08, 0.26, 0.06], // August - [0.06, 0.06, 0.11, 0.07, 0.06, 0.09, 0.21, 0.06], // September - [0.07, 0.05, 0.09, 0.08, 0.08, 0.12, 0.18, 0.07], // October - [0.08, 0.06, 0.08, 0.07, 0.10, 0.12, 0.16, 0.07], // November - [0.08, 0.05, 0.06, 0.04, 0.10, 0.14, 0.19, 0.07]];// December + GVAR(WindDirectionProbabilities) = [ + [0.07, 0.04, 0.07, 0.05, 0.09, 0.12, 0.20, 0.07], // January + [0.08, 0.06, 0.10, 0.06, 0.06, 0.08, 0.20, 0.08], // February + [0.05, 0.06, 0.13, 0.08, 0.07, 0.08, 0.19, 0.06], // March + [0.05, 0.11, 0.16, 0.09, 0.05, 0.06, 0.17, 0.06], // April + [0.04, 0.10, 0.15, 0.08, 0.05, 0.06, 0.20, 0.05], // May + [0.03, 0.07, 0.10, 0.07, 0.05, 0.07, 0.28, 0.06], // June + [0.04, 0.06, 0.11, 0.07, 0.04, 0.07, 0.28, 0.06], // July + [0.05, 0.06, 0.11, 0.07, 0.06, 0.08, 0.26, 0.06], // August + [0.06, 0.06, 0.11, 0.07, 0.06, 0.09, 0.21, 0.06], // September + [0.07, 0.05, 0.09, 0.08, 0.08, 0.12, 0.18, 0.07], // October + [0.08, 0.06, 0.08, 0.07, 0.10, 0.12, 0.16, 0.07], // November + [0.08, 0.05, 0.06, 0.04, 0.10, 0.14, 0.19, 0.07] // December + ]; }; if (worldName in ["Imrali"]) exitWith { // Source: http://www.iten-online.ch/klima/europa/tuerkei/bursa.htm @@ -186,23 +195,25 @@ if (worldName in ["Kunduz"]) exitWith { GVAR(TempNight) = [-2.4, 0, 5.7, 11.6, 15.7, 20.9, 21.5, 21.5, 16.3, 10.6, 4.1, 0]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Kabul,Afghanistan GVAR(Humidity) = [70, 72, 64, 61, 49, 34, 36, 38, 39, 52, 51, 63]; - + // Source: https://weatherspark.com/averages/32753/Kunduz-Afghanistan GVAR(WindSpeedMax) = [[3.5, 0.8], [4.0, 0.6], [4.3, 2.0], [4.6, 1.1], [5.1, 1.2], [5.7, 1.0], [4.9, 0.8], [4.5, 0.3], [4.3, 0.3], [3.8, 0.5], [3.0, 1.3], [3.1, 0.8]]; GVAR(WindSpeedMean) = [1.5, 1.8, 2.1, 2.4, 2.5, 2.8, 2.7, 2.5, 2.3, 2.1, 1.7, 1.6]; GVAR(WindSpeedMin) = [[0.2, 0.1], [0.3, 0.3], [0.4, 0.1], [0.8, 0.2], [0.8, 0.1], [1.0, 0.3], [0.9, 0.5], [0.8, 0.2], [0.8, 0.1], [0.7, 0.1], [0.5, 0.1], [0.2, 0.2]]; - GVAR(WindDirectionProbabilities) = [[0.04, 0.02, 0.05, 0.11, 0.12, 0.06, 0.09, 0.06], // January - [0.04, 0.02, 0.05, 0.11, 0.12, 0.06, 0.08, 0.07], // February - [0.05, 0.04, 0.06, 0.14, 0.12, 0.06, 0.10, 0.08], // March - [0.09, 0.05, 0.08, 0.13, 0.07, 0.05, 0.07, 0.07], // April - [0.14, 0.07, 0.13, 0.13, 0.06, 0.05, 0.05, 0.08], // May - [0.16, 0.06, 0.12, 0.12, 0.05, 0.04, 0.05, 0.10], // June - [0.17, 0.06, 0.08, 0.12, 0.06, 0.04, 0.05, 0.12], // July - [0.15, 0.05, 0.06, 0.16, 0.08, 0.05, 0.07, 0.13], // August - [0.15, 0.04, 0.08, 0.20, 0.13, 0.05, 0.10, 0.14], // September - [0.08, 0.02, 0.08, 0.22, 0.15, 0.06, 0.13, 0.13], // October - [0.06, 0.02, 0.05, 0.20, 0.17, 0.06, 0.12, 0.10], // November - [0.04, 0.02, 0.05, 0.14, 0.19, 0.07, 0.10, 0.07]];// December + GVAR(WindDirectionProbabilities) = [ + [0.04, 0.02, 0.05, 0.11, 0.12, 0.06, 0.09, 0.06], // January + [0.04, 0.02, 0.05, 0.11, 0.12, 0.06, 0.08, 0.07], // February + [0.05, 0.04, 0.06, 0.14, 0.12, 0.06, 0.10, 0.08], // March + [0.09, 0.05, 0.08, 0.13, 0.07, 0.05, 0.07, 0.07], // April + [0.14, 0.07, 0.13, 0.13, 0.06, 0.05, 0.05, 0.08], // May + [0.16, 0.06, 0.12, 0.12, 0.05, 0.04, 0.05, 0.10], // June + [0.17, 0.06, 0.08, 0.12, 0.06, 0.04, 0.05, 0.12], // July + [0.15, 0.05, 0.06, 0.16, 0.08, 0.05, 0.07, 0.13], // August + [0.15, 0.04, 0.08, 0.20, 0.13, 0.05, 0.10, 0.14], // September + [0.08, 0.02, 0.08, 0.22, 0.15, 0.06, 0.13, 0.13], // October + [0.06, 0.02, 0.05, 0.20, 0.17, 0.06, 0.12, 0.10], // November + [0.04, 0.02, 0.05, 0.14, 0.19, 0.07, 0.10, 0.07] // December + ]; }; // Assume default values diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf index 4c88f59f95..ddd314c0c6 100644 --- a/addons/weather/functions/fnc_initWind.sqf +++ b/addons/weather/functions/fnc_initWind.sqf @@ -19,7 +19,7 @@ private _month = date select 1; private _windDirectionProbabilities = GVAR(WindDirectionProbabilities) select (_month - 1); ACE_wind = [0, 0, 0]; - + GVAR(wind_direction_reference) = random 360; private _sum = 0; for "_i" from 0 to 7 do { diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf index 3ea28d6a44..66a351096c 100644 --- a/addons/weather/functions/fnc_updateHumidity.sqf +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -27,7 +27,7 @@ if ((rain > 0) && {overcast > 0.7}) then { private _PS2 = 6.112 * exp((17.62 * GVAR(currentTemperature)) / (243.12 + GVAR(currentTemperature))); GVAR(currentHumidity) = GVAR(currentHumidity) * _PS1 / _PS2; GVAR(currentHumidity) = GVAR(currentHumidity) + GVAR(humidityShift); - + TRACE_1("humidityShift",GVAR(humidityShift)); }; diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index 8fa18500e8..9146b266b3 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -22,6 +22,6 @@ if (!isNil "ACE_RAIN_PARAMS") then { private _periodPercent = (_periodPosition / _period) min 1; GVAR(ACE_Rain) = linearConversion [GVAR(rain_period_start_time), (GVAR(rain_period_start_time) + _period), ACE_time, _oldRain, _newRain]; - + TRACE_3("Update Rain",rain,ACE_RAIN_PARAMS,GVAR(ACE_Rain)); }; diff --git a/addons/yardage450/functions/fnc_acquireTarget.sqf b/addons/yardage450/functions/fnc_acquireTarget.sqf index 1d89bf5971..a7e56e815d 100644 --- a/addons/yardage450/functions/fnc_acquireTarget.sqf +++ b/addons/yardage450/functions/fnc_acquireTarget.sqf @@ -32,15 +32,15 @@ GVAR(distanceIndex) = -1; GVAR(lasing) = false; [_this select 1] call CBA_fnc_removePerFrameHandler; }; - + _result = [eyePos ACE_player, ACE_player weaponDirection (currentWeapon ACE_player)] call EFUNC(laser,shootRay); _distance = _result select 1; - + _distance = _distance - 1 + (random 2); - + GVAR(distanceIndex) = (GVAR(distanceIndex) + 1) % METERING_POINT_NUMBER; GVAR(distances) set [GVAR(distanceIndex), _distance]; - + if (count GVAR(distances) == METERING_POINT_NUMBER) then { _min = MAX_DISTANCE; _max = MIN_DISTANCE; @@ -48,7 +48,7 @@ GVAR(distanceIndex) = -1; _min = _x min _min; _max = _max max _x; } forEach GVAR(distances); - + if (abs(_max - _min) < 5) then { _range = (_min + _max) / 2; if (_range >= MIN_DISTANCE && _range <= MAX_DISTANCE) then { diff --git a/addons/yardage450/functions/fnc_turnOn.sqf b/addons/yardage450/functions/fnc_turnOn.sqf index 5f123b8cb2..1cb20e71b6 100644 --- a/addons/yardage450/functions/fnc_turnOn.sqf +++ b/addons/yardage450/functions/fnc_turnOn.sqf @@ -35,10 +35,10 @@ GVAR(active) = true; 74210 cutText ["", "PLAIN"]; [_this select 1] call CBA_fnc_removePerFrameHandler; }; - + if (currentWeapon ACE_player == "ACE_Yardage450" && cameraView == "GUNNER") then { 74210 cutRsc ["ACE_RscYardage450", "PLAIN", 1, false]; - + __ctrlLaser ctrlShow GVAR(lasing); if (GVAR(targetAcquired)) then { __ctrlTarget ctrlSetText "Target Acquired"; @@ -52,5 +52,5 @@ GVAR(active) = true; } else { 74210 cutText ["", "PLAIN"]; }; - + }, 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/yardage450/initKeybinds.sqf b/addons/yardage450/initKeybinds.sqf index 578f55ee40..9ad3005d28 100644 --- a/addons/yardage450/initKeybinds.sqf +++ b/addons/yardage450/initKeybinds.sqf @@ -6,7 +6,7 @@ // Conditions: specific if !(GVAR(active)) exitWith {false}; if (currentWeapon ACE_player != "ACE_Yardage450" || cameraView != "GUNNER") exitWith {false}; - + // Statement if !(GVAR(powerButtonPressed)) then { GVAR(powerButtonPressed) = true; @@ -19,7 +19,7 @@ if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific if (currentWeapon ACE_player != "ACE_Yardage450" || cameraView != "GUNNER") exitWith {false}; - + // Statement GVAR(powerButtonPressed) = false; call FUNC(turnOn); diff --git a/addons/zeus/CfgVehicles.hpp b/addons/zeus/CfgVehicles.hpp index 0013355370..c7ea7b6ec8 100644 --- a/addons/zeus/CfgVehicles.hpp +++ b/addons/zeus/CfgVehicles.hpp @@ -167,7 +167,7 @@ class CfgVehicles { sync[] = {}; }; }; - + // class GVAR(moduleSetSuppression): GVAR(moduleBase) { // curatorCanAttach = 1; // displayName = CSTRING(ModuleSetSupp_DisplayName); From e125911c3b88259d6b307dc46a09ec79b2441184 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Tue, 3 May 2016 20:52:43 +0200 Subject: [PATCH 43/89] Added blockEngine status effect --- addons/common/CfgEventHandlers.hpp | 6 ++++++ addons/common/XEH_PREP.hpp | 1 + addons/common/XEH_postInit.sqf | 6 ++++++ addons/common/functions/fnc_handleEngine.sqf | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 addons/common/functions/fnc_handleEngine.sqf diff --git a/addons/common/CfgEventHandlers.hpp b/addons/common/CfgEventHandlers.hpp index 6e8528cf03..5d55e40f2d 100644 --- a/addons/common/CfgEventHandlers.hpp +++ b/addons/common/CfgEventHandlers.hpp @@ -76,3 +76,9 @@ class Extended_FiredBIS_EventHandlers { ADDON = QUOTE(_this call FUNC(firedEH)); }; }; + +class Extended_Engine_EventHandlers { + class All { + ADDON = QUOTE(_this call FUNC(handleEngine)); + }; +}; diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index 0b125af1aa..3dea56a98d 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -87,6 +87,7 @@ PREP(getWindDirection); PREP(getZoom); PREP(goKneeling); PREP(hadamardProduct); +PREP(handleEngine); PREP(handleModifierKey); PREP(handleModifierKeyUp); PREP(handleScrollWheel); diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 22257e3cb5..a6b952062e 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -64,6 +64,7 @@ ["blockSprint", false, []] call FUNC(statusEffect_addType); ["setCaptive", true, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered), QEGVAR(medical,unconscious)]] call FUNC(statusEffect_addType); ["blockDamage", false, ["fixCollision"]] call FUNC(statusEffect_addType); +["blockEngine", false, ["ACE_Refuel"]] call FUNC(statusEffect_addType); ["forceWalk", { params ["_object", "_set"]; @@ -90,6 +91,11 @@ _object allowDamage (_set == 0); }; }] call FUNC(addEventHandler); +["blockEngine", { + params ["_vehicle", "_set"]; + _vehicle setVariable [QGVAR(blockEngine), _set > 0, true]; + _vehicle engineOn false; +}] call FUNC(addEventHandler); //Add a fix for BIS's zeus remoteControl module not reseting variables on DC when RC a unit //This variable is used for isPlayer checks diff --git a/addons/common/functions/fnc_handleEngine.sqf b/addons/common/functions/fnc_handleEngine.sqf new file mode 100644 index 0000000000..829ad5bb49 --- /dev/null +++ b/addons/common/functions/fnc_handleEngine.sqf @@ -0,0 +1,19 @@ +/* + * Author: BaerMitUmlaut + * Blocks turning on the vehicles engine if set by the status effect handler. + * + * Arguments: + * 0: Vehicle + * 1: Engine state + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" +params ["_vehicle", "_engineOn"]; + +if (local _vehicle && {_engineOn} && {_vehicle getVariable [QGVAR(blockEngine), false]}) then { + _vehicle engineOn false; +}; From 304f1a22b444f32c198b99984ae257b25245a1f2 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Tue, 3 May 2016 21:08:22 +0200 Subject: [PATCH 44/89] Use blockeEngine status effect in refuel --- addons/refuel/functions/fnc_reset.sqf | 4 +--- addons/refuel/functions/fnc_returnNozzle.sqf | 3 +-- addons/refuel/functions/fnc_takeNozzle.sqf | 3 +-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/addons/refuel/functions/fnc_reset.sqf b/addons/refuel/functions/fnc_reset.sqf index 6e3bdbe774..767e4b6c88 100644 --- a/addons/refuel/functions/fnc_reset.sqf +++ b/addons/refuel/functions/fnc_reset.sqf @@ -17,9 +17,7 @@ params [["_target", objNull, [objNull]]]; -["setVanillaHitPointDamage", _target, [_target, ["HitEngine", _target getVariable [QGVAR(engineHit), 0]] ] ] call EFUNC(common,objectEvent); - -_target setVariable [QGVAR(engineHit), nil, true]; +[_target, "blockEngine", "ACE_Refuel", false] call EFUNC(common,statusEffect_set); _target setVariable [QGVAR(isConnected), false, true]; private _nozzle = _target getVariable [QGVAR(ownedNozzle), nil]; diff --git a/addons/refuel/functions/fnc_returnNozzle.sqf b/addons/refuel/functions/fnc_returnNozzle.sqf index bd4da5569b..1bd364eafb 100644 --- a/addons/refuel/functions/fnc_returnNozzle.sqf +++ b/addons/refuel/functions/fnc_returnNozzle.sqf @@ -48,8 +48,7 @@ if (isNull _nozzle || {_source != _target}) exitWith {false}; }; deleteVehicle _nozzle; - ["setVanillaHitPointDamage", _target, [_target, ["HitEngine", _target getVariable [QGVAR(engineHit), 0]] ] ] call EFUNC(common,objectEvent); - _target setVariable [QGVAR(engineHit), nil, true]; + [_target, "blockEngine", "ACE_Refuel", false] call EFUNC(common,statusEffect_set); }, "", localize LSTRING(ReturnAction), diff --git a/addons/refuel/functions/fnc_takeNozzle.sqf b/addons/refuel/functions/fnc_takeNozzle.sqf index 3d557f9a2e..75601002a3 100644 --- a/addons/refuel/functions/fnc_takeNozzle.sqf +++ b/addons/refuel/functions/fnc_takeNozzle.sqf @@ -26,8 +26,7 @@ REFUEL_HOLSTER_WEAPON private _endPosOffset = [0, 0, 0]; if (isNull _nozzle) then { // func is called on fuel truck - _target setVariable [QGVAR(engineHit), _target getHitPointDamage "HitEngine", true]; - ["setVanillaHitPointDamage", _target, [_target, ["HitEngine", 1]] ] call EFUNC(common,objectEvent); + [_target, "blockEngine", "ACE_Refuel", true] call EFUNC(common,statusEffect_set); _target setVariable [QGVAR(isConnected), true, true]; _endPosOffset = getArray (configFile >> "CfgVehicles" >> typeOf _target >> QGVAR(hooks)); From b6324e61e9c231cefac974094a3c0082eb1a407f Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Tue, 3 May 2016 21:24:10 +0200 Subject: [PATCH 45/89] Improved params formatting --- addons/atragmx/functions/fnc_calculate_solution.sqf | 8 +++++++- addons/rangecard/functions/fnc_calculateSolution.sqf | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index 839cba8b69..e71658f490 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -42,7 +42,13 @@ * Public: No */ #include "script_component.hpp" -params ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire"]; +params [ + "_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", + "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", + "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", + "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", + "_directionOfFire" +]; _windSpeed params ["_windSpeed1", "_windSpeed2"]; private ["_bulletPos", "_bulletVelocity", "_bulletAccel", "_bulletSpeed", "_gravity", "_deltaT"]; diff --git a/addons/rangecard/functions/fnc_calculateSolution.sqf b/addons/rangecard/functions/fnc_calculateSolution.sqf index e1659016bb..b921b71ff8 100644 --- a/addons/rangecard/functions/fnc_calculateSolution.sqf +++ b/addons/rangecard/functions/fnc_calculateSolution.sqf @@ -45,7 +45,13 @@ * Public: No */ #include "script_component.hpp" -params ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire", "_rangeCardSlot", "_useABConfig"]; +params [ + "_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", + "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed", + "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", + "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", + "_directionOfFire", "_rangeCardSlot", "_useABConfig" +]; _windSpeed params ["_windSpeed1", "_windSpeed2"]; if (_storeRangeCardData) then { From 012ce9fb16940b043bf7f50aa323bc1cc037eb00 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Tue, 3 May 2016 21:38:36 +0200 Subject: [PATCH 46/89] Removed old occurances of AGM and CSE --- addons/missionmodules/config.cpp | 2 +- addons/nametags/functions/fnc_getVehicleData.sqf | 2 +- addons/optionsmenu/gui/define.hpp | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/missionmodules/config.cpp b/addons/missionmodules/config.cpp index 0867b486c6..c373b84615 100644 --- a/addons/missionmodules/config.cpp +++ b/addons/missionmodules/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {"cse_moduleAmbianceSound"}; + units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; diff --git a/addons/nametags/functions/fnc_getVehicleData.sqf b/addons/nametags/functions/fnc_getVehicleData.sqf index b0e0b1ff34..656cb8dc81 100644 --- a/addons/nametags/functions/fnc_getVehicleData.sqf +++ b/addons/nametags/functions/fnc_getVehicleData.sqf @@ -1,6 +1,6 @@ /* * Author: aeroson - * Gathers and caches data needed by AGM_CrewInfo_fnc_doShow. + * Gathers and caches data needed by ace_nametags_fnc_doShow. * What really does make difference for the engine is simulation of CfgAmmo. * Priority of roles is: driver/pilot, gunner, copilot, commander, FFV, cargo. * diff --git a/addons/optionsmenu/gui/define.hpp b/addons/optionsmenu/gui/define.hpp index ef9ef0d02b..c2b1faf9cf 100644 --- a/addons/optionsmenu/gui/define.hpp +++ b/addons/optionsmenu/gui/define.hpp @@ -92,6 +92,5 @@ class RscText; // Listbox styles #define LB_TEXTURES 0x10 #define LB_MULTI 0x20 -#define FontCSE "RobotoCondensed" #endif From 98a74aca6ef2badc22121f604adb0b7b3d6ea229 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 3 May 2016 22:49:05 -0500 Subject: [PATCH 47/89] UI - Don't overwrite other showHud indexes --- addons/ui/functions/fnc_setElements.sqf | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/ui/functions/fnc_setElements.sqf b/addons/ui/functions/fnc_setElements.sqf index b94b0f9a22..64b716ee29 100644 --- a/addons/ui/functions/fnc_setElements.sqf +++ b/addons/ui/functions/fnc_setElements.sqf @@ -23,15 +23,13 @@ if (!_force && {!GVAR(allowSelectiveUI)}) exitWith { [LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured); }; -private _shownHUD = shownHUD; // [hud, info, radar, compass, direction, menu, group, cursors] - ["ui", [ - _shownHUD select 0, + true, GVAR(soldierVehicleWeaponInfo), GVAR(vehicleRadar), GVAR(vehicleCompass), - _shownHUD select 4, + true, GVAR(commandMenu), GVAR(groupBar), - _shownHUD select 7 + true ]] call EFUNC(common,showHud); From 398b76f30bc0e8a6dffeaff0050038b77cee0ac6 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 3 May 2016 23:13:43 -0500 Subject: [PATCH 48/89] Get reload time from QGVAR(buddyReloadTime) --- addons/reloadlaunchers/functions/fnc_load.sqf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/reloadlaunchers/functions/fnc_load.sqf b/addons/reloadlaunchers/functions/fnc_load.sqf index 9f0b36ce8d..db18e7edaa 100644 --- a/addons/reloadlaunchers/functions/fnc_load.sqf +++ b/addons/reloadlaunchers/functions/fnc_load.sqf @@ -18,8 +18,11 @@ params ["_unit", "_target", "_weapon", "_magazine"]; TRACE_4("params",_unit,_target,_weapon,_magazine); -// private _reloadTime = getNumber (configFile >> "CfgWeapons" >> _weapon >> "magazineReloadTime"); //Not a good config value, use a constant for now: -private _reloadTime = 2.5; +private _reloadTime = if (isNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(buddyReloadTime))) then { + getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(buddyReloadTime)) +} else { + 2.5 +}; // do animation [_unit] call EFUNC(common,goKneeling); From cf92ba9c46203fb734c9949b6d4f3617009620f6 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 4 May 2016 14:59:04 -0500 Subject: [PATCH 49/89] Overheating - Add Master Enabled Setting (barrelPR) --- addons/overheating/ACE_Settings.hpp | 6 ++ addons/overheating/CfgEventHandlers.hpp | 8 -- addons/overheating/CfgVehicles.hpp | 12 +-- addons/overheating/XEH_postInit.sqf | 101 ++++++++++-------- .../functions/fnc_swapBarrelCallback.sqf | 2 +- ...c_updateSpareBarrelsTemperaturesThread.sqf | 2 +- addons/overheating/stringtable.xml | 10 +- 7 files changed, 77 insertions(+), 64 deletions(-) diff --git a/addons/overheating/ACE_Settings.hpp b/addons/overheating/ACE_Settings.hpp index 6cff3268ff..abf08c9874 100644 --- a/addons/overheating/ACE_Settings.hpp +++ b/addons/overheating/ACE_Settings.hpp @@ -38,4 +38,10 @@ class ACE_Settings { displayName = CSTRING(unJamFailChance_displayName); description = CSTRING(unJamFailChance_description); }; + class GVAR(enabled) { + typeName = "BOOL"; + value = 1; + displayName = CSTRING(enabled_displayName); + description = CSTRING(enabled_description); + }; }; diff --git a/addons/overheating/CfgEventHandlers.hpp b/addons/overheating/CfgEventHandlers.hpp index 492230513f..5da5fd0dc2 100644 --- a/addons/overheating/CfgEventHandlers.hpp +++ b/addons/overheating/CfgEventHandlers.hpp @@ -16,11 +16,3 @@ class Extended_PostInit_EventHandlers { init = QUOTE( call COMPILE_FILE(XEH_postInit) ); }; }; - -class Extended_Take_EventHandlers { - class CAManBase { - class GVAR(UnjamReload) { - clientTake = QUOTE( _this call FUNC(handleTakeEH) ); - }; - }; -}; diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index 0a86535231..23a2b613f5 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -6,7 +6,7 @@ class CfgVehicles { class ACE_Equipment { class GVAR(UnJam) { displayName = CSTRING(UnjamWeapon); - condition = QUOTE( [_player] call FUNC(canUnjam) ); + condition = QUOTE( GVAR(enabled) && {[_player] call FUNC(canUnjam)} ); exceptions[] = {"isNotInside", "isNotSitting"}; statement = QUOTE( [ARR_2(_player, currentMuzzle _player)] call FUNC(clearJam); ); showDisabled = 0; @@ -15,7 +15,7 @@ class CfgVehicles { }; class GVAR(SwapBarrel) { displayName = CSTRING(SwapBarrel); - condition = QUOTE( 'ACE_SpareBarrel' in magazines _player && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _player >> 'ACE_Overheating_allowSwapBarrel') == 1} ); + condition = QUOTE( GVAR(enabled) && {'ACE_SpareBarrel' in magazines _player} && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _player >> 'ACE_Overheating_allowSwapBarrel') == 1} ); statement = QUOTE( [ARR_3(_player, _player, currentWeapon _player)] call FUNC(swapBarrel); ); showDisabled = 0; priority = 3; @@ -23,7 +23,7 @@ class CfgVehicles { }; class GVAR(CheckTemperature) { displayName = CSTRING(CheckTemperatureShort); - condition = "switch (currentWeapon _player) do {case (''): {false}; case (primaryWeapon _player); case (handgunWeapon _player): {true}; default {false}}"; + condition = "ace_overheating_enabled && {switch (currentWeapon _player) do {case (''): {false}; case (primaryWeapon _player); case (handgunWeapon _player): {true}; default {false}}}"; exceptions[] = {"isNotInside", "isNotSitting"}; statement = QUOTE( [ARR_3(_player, _player, currentWeapon _player)] call FUNC(checkTemperature); ); showDisabled = 0; @@ -32,7 +32,7 @@ class CfgVehicles { }; class GVAR(CheckTemperatureSpareBarrels) { displayName = CSTRING(CheckTemperatureSpareBarrelsShort); - condition = QUOTE( 'ACE_SpareBarrel' in magazines _player); + condition = QUOTE( GVAR(enabled) && {'ACE_SpareBarrel' in magazines _player}); exceptions[] = {"isNotInside", "isNotSitting"}; statement = QUOTE( [_player] call FUNC(checkSpareBarrelsTemperatures); ); showDisabled = 0; @@ -46,13 +46,13 @@ class CfgVehicles { class ACE_Weapon { class GVAR(SwapBarrel) { displayName = CSTRING(SwapBarrel); - condition = QUOTE( 'ACE_SpareBarrel' in magazines _player && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _target >> 'ACE_Overheating_allowSwapBarrel') == 1} ); + condition = QUOTE( GVAR(enabled) && {'ACE_SpareBarrel' in magazines _player} && {getNumber (configFile >> 'CfgWeapons' >> currentWeapon _target >> 'ACE_Overheating_allowSwapBarrel') == 1} ); statement = QUOTE([ARR_3(_player, _target, currentWeapon _target)] call FUNC(swapBarrelAssistant);); icon = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); }; class GVAR(CheckTemperature) { displayName = CSTRING(CheckTemperatureShort); - condition = "switch (currentWeapon _target) do {case (''): {false}; case (primaryWeapon _target); case (handgunWeapon _target): {true}; default {false}}"; + condition = "ace_overheating_enabled && {switch (currentWeapon _target) do {case (''): {false}; case (primaryWeapon _target); case (handgunWeapon _target): {true}; default {false}}}"; exceptions[] = {"isNotInside", "isNotSitting"}; statement = QUOTE( [ARR_3(_player, _target, currentWeapon _target)] call FUNC(checkTemperature); ); icon = QUOTE(PATHTOF(UI\temp_ca.paa)); diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index 96d518ac9f..e4935b8831 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -1,62 +1,69 @@ // by esteldunedain #include "script_component.hpp" -if (isServer) then { - GVAR(pseudoRandomList) = []; - // Construct a list of pseudo random 2D vectors - for "_i" from 0 to 30 do { - GVAR(pseudoRandomList) pushBack [-1 + random 2, -1 + random 2]; - }; - publicVariable QGVAR(pseudoRandomList); +if (hasInterface) then { + // Add keybinds + ["ACE3 Weapons", QGVAR(unjamWeapon), localize LSTRING(UnjamWeapon), + { + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; + // Conditions: specific - // Keep track of the temperature of stored spare barrels - GVAR(storedSpareBarrels) = [] call CBA_fnc_hashCreate; + if !(GVAR(enabled) && {[ACE_player] call FUNC(canUnjam)}) exitWith {false}; - // Install event handlers for spare barrels - ["spareBarrelsSendTemperatureHint", FUNC(sendSpareBarrelsTemperaturesHint)] call EFUNC(common,addEventHandler); - ["spareBarrelsLoadCoolest", FUNC(loadCoolestSpareBarrel)] call EFUNC(common,addEventHandler); - - // Schedule cool down calculation of stored spare barrels - [] call FUNC(updateSpareBarrelsTemperaturesThread); + // Statement + [ACE_player, currentMuzzle ACE_player, false] call FUNC(clearJam); + true + }, + {false}, + [19, [true, false, false]], false] call CBA_fnc_addKeybind; //SHIFT + R Key }; - -if !(hasInterface) exitWith {}; - -GVAR(cacheWeaponData) = call CBA_fnc_createNamespace; -GVAR(cacheAmmoData) = call CBA_fnc_createNamespace; -GVAR(cacheSilencerData) = call CBA_fnc_createNamespace; - -// Add keybinds -["ACE3 Weapons", QGVAR(unjamWeapon), localize LSTRING(UnjamWeapon), -{ - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - - if !([ACE_player] call FUNC(canUnjam)) exitWith {false}; - - // Statement - [ACE_player, currentMuzzle ACE_player, false] call FUNC(clearJam); - true -}, -{false}, -[19, [true, false, false]], false] call CBA_fnc_addKeybind; //SHIFT + R Key - - -// Schedule cool down calculation of player weapons at (infrequent) regular intervals -[] call FUNC(updateTemperatureThread); - ["SettingsInitialized", { + TRACE_1("SettingsInitialized eh", GVAR(enabled)); + if (!GVAR(enabled)) exitWith {}; + + if (isServer) then { + GVAR(pseudoRandomList) = []; + // Construct a list of pseudo random 2D vectors + for "_i" from 0 to 30 do { + GVAR(pseudoRandomList) pushBack [-1 + random 2, -1 + random 2]; + }; + publicVariable QGVAR(pseudoRandomList); + + // Keep track of the temperature of stored spare barrels + GVAR(storedSpareBarrels) = [] call CBA_fnc_hashCreate; + + // Install event handlers for spare barrels + ["spareBarrelsSendTemperatureHint", FUNC(sendSpareBarrelsTemperaturesHint)] call EFUNC(common,addEventHandler); + ["spareBarrelsLoadCoolest", FUNC(loadCoolestSpareBarrel)] call EFUNC(common,addEventHandler); + + // Schedule cool down calculation of stored spare barrels + [] call FUNC(updateSpareBarrelsTemperaturesThread); + }; + + if !(hasInterface) exitWith {}; + + GVAR(cacheWeaponData) = call CBA_fnc_createNamespace; + GVAR(cacheAmmoData) = call CBA_fnc_createNamespace; + GVAR(cacheSilencerData) = call CBA_fnc_createNamespace; + + //Add Take EH (for reload) + ["CAManBase", "Take", {_this call FUNC(handleTakeEH);}] call CBA_fnc_addClassEventHandler; + // Register fire event handler ["firedPlayer", DFUNC(firedEH)] call EFUNC(common,addEventHandler); // Only add eh to non local players if dispersion is enabled if (GVAR(overheatingDispersion)) then { ["firedPlayerNonLocal", DFUNC(firedEH)] call EFUNC(common,addEventHandler); }; -}] call EFUNC(common,addEventHandler); -// Install event handler to display temp when a barrel was swapped -["showWeaponTemperature", DFUNC(displayTemperature)] call EFUNC(common,addEventHandler); -// Install event handler to initiate an assisted barrel swap -["initiateSwapBarrelAssisted", DFUNC(swapBarrel)] call EFUNC(common,addEventHandler); + // Schedule cool down calculation of player weapons at (infrequent) regular intervals + [] call FUNC(updateTemperatureThread); + + // Install event handler to display temp when a barrel was swapped + ["showWeaponTemperature", DFUNC(displayTemperature)] call EFUNC(common,addEventHandler); + // Install event handler to initiate an assisted barrel swap + ["initiateSwapBarrelAssisted", DFUNC(swapBarrel)] call EFUNC(common,addEventHandler); + +}] call EFUNC(common,addEventHandler); diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index 339b6627b1..403989deca 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -15,7 +15,7 @@ * * Public: No */ -#define DEBUG_MODE_FULL +// #define DEBUG_MODE_FULL #include "script_component.hpp" params ["_assistant", "_gunner", "_weapon"]; diff --git a/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf b/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf index 852cb1c580..d6b74f6769 100644 --- a/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf +++ b/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf @@ -13,7 +13,7 @@ * * Public: No */ -#define DEBUG_MODE_FULL +// #define DEBUG_MODE_FULL #include "script_component.hpp" private _pairs = []; diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 3eb67701de..e49ad433fc 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -282,7 +282,15 @@ Very Hot Spare Barrel/s - Extremele Hot Spare Barrel/s + Extremely Hot Spare Barrel/s + + + Overheating Enabled + Überhitzen Aktiviert + Activada Sobrecalentamiento + + + Master enable for the overheating/jamming module \ No newline at end of file From 28c65c4bed0a87c09eef0ce10cb9bb46df481fe3 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 5 May 2016 14:36:56 -0500 Subject: [PATCH 50/89] Fix explosive sync on dedi --- addons/explosives/XEH_postInit.sqf | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 57cbecba75..fe12a88b7f 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -27,18 +27,7 @@ if (isServer) then { TRACE_1("Knocked Out, Doing Deadman", _unit); [_unit] call FUNC(onIncapacitated); }] call EFUNC(common,addEventHandler); -}; -if (!hasInterface) exitWith {}; - -GVAR(PlacedCount) = 0; -GVAR(Setup) = objNull; -GVAR(pfeh_running) = false; -GVAR(CurrentSpeedDial) = 0; - -// In case we are a JIP client, ask the server for orientation of any previously -// placed mine. -if (isServer) then { ["clientRequestsOrientations", { params ["_logic"]; TRACE_1("clientRequestsOrientations received:",_logic); @@ -50,7 +39,18 @@ if (isServer) then { TRACE_1("serverSendsOrientations sent:",GVAR(explosivesOrientations)); ["serverSendsOrientations", _logic, [GVAR(explosivesOrientations)]] call EFUNC(common,targetEvent); }] call EFUNC(common,addEventHandler); -} else { +}; + +if (!hasInterface) exitWith {}; + +GVAR(PlacedCount) = 0; +GVAR(Setup) = objNull; +GVAR(pfeh_running) = false; +GVAR(CurrentSpeedDial) = 0; + +// In case we are a JIP client, ask the server for orientation of any previously +// placed mine. +if (didJIP) then { ["serverSendsOrientations", { params ["_explosivesOrientations"]; TRACE_1("serverSendsOrientations received:",_explosivesOrientations); @@ -59,14 +59,12 @@ if (isServer) then { TRACE_3("orientation set:",_explosive,_direction,_pitch); [_explosive, _direction, _pitch] call FUNC(setPosition); } forEach _explosivesOrientations; - private _group = group GVAR(localLogic); deleteVehicle GVAR(localLogic); GVAR(localLogic) = nil; - deleteGroup _group; }] call EFUNC(common,addEventHandler); // Create a logic to get the client ID - GVAR(localLogic) = (createGroup sideLogic) createUnit ["Logic", [0,0,0], [], 0, "NONE"]; + GVAR(localLogic) = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["Logic", [0,0,0], [], 0, "NONE"]; TRACE_1("clientRequestsOrientations sent:",GVAR(localLogic)); ["clientRequestsOrientations", [GVAR(localLogic)]] call EFUNC(common,serverEvent); }; From 9b46e77f662faf4212ec0579b704f901864ad0e5 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 6 May 2016 12:47:59 -0500 Subject: [PATCH 51/89] Add key to toggle wind info display --- addons/weather/XEH_postInit.sqf | 13 +++++++++++++ addons/weather/stringtable.xml | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index a19e000332..9c32634060 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -39,6 +39,19 @@ GVAR(WindInfo) = false; }, {false}, [37, [true, false, false]], false, 0] call CBA_fnc_addKeybind; // (SHIFT + K) +["ACE3 Common", QGVAR(WindInfoKey_hold), localize LSTRING(WindInfoKey_hold), +{ + // Conditions: canInteract + if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; + + // Statement + [] call FUNC(displayWindInfo); +}, +{ + GVAR(WindInfo) = false; + (["RscWindIntuitive"] call BIS_fnc_rscLayer) cutText ["", "PLAIN", 2]; +}, +[0, [false, false, false]], false, 0] call CBA_fnc_addKeybind; // (empty default key) simulWeatherSync; diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 0b0ed8fd17..571fa9c25a 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -13,6 +13,18 @@ Zobrazit údaje o větru Mostrar informação do vento + + Show Wind Info (Toggle) + Pokaż inf. o wietrze (przełącz) + Показать информацию о ветре (перекл.) + Afficher information sur le vent (bascule) + Mostrar información del viento (cambiar) + Mostra informazioni sul vento (camb.) + Zeige Windinformationen (umsch.) + Széladatok mutatása (pecek) + Zobrazit údaje o větru (přep.) + Mostrar informação do vento (alternar) + Weather Pogoda From b8abec0c61806ec9b90fe71aacde13dc8ce14bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ozan=20E=C4=9Fitmen?= Date: Sat, 7 May 2016 23:14:56 +0300 Subject: [PATCH 52/89] Fix Capitalization of ACE Settings classes. (#3627) --- addons/common/ACE_Settings.hpp | 2 +- addons/common/functions/fnc_progressBar.sqf | 2 +- addons/explosives/ACE_Settings.hpp | 6 +++--- addons/frag/ACE_Settings.hpp | 10 +++++----- addons/hearing/ACE_Settings.hpp | 8 ++++---- addons/interact_menu/ACE_Settings.hpp | 6 +++--- addons/interaction/ACE_Settings.hpp | 2 +- addons/magazinerepack/ACE_Settings.hpp | 6 +++--- addons/map/ACE_Settings.hpp | 2 +- addons/map_gestures/ACE_Settings.hpp | 12 ++++++------ addons/maptools/ACE_Settings.hpp | 2 +- addons/microdagr/ACE_Settings.hpp | 2 +- addons/overheating/ACE_Settings.hpp | 2 +- addons/reload/ACE_Settings.hpp | 2 +- addons/repair/ACE_Settings.hpp | 10 +++++----- addons/respawn/ACE_Settings.hpp | 6 +++--- addons/switchunits/ACE_Settings.hpp | 14 +++++++------- addons/vehiclelock/ACE_Settings.hpp | 6 +++--- addons/weaponselect/ACE_Settings.hpp | 2 +- 19 files changed, 51 insertions(+), 51 deletions(-) diff --git a/addons/common/ACE_Settings.hpp b/addons/common/ACE_Settings.hpp index d6226fd0ab..2d8a5d7a27 100644 --- a/addons/common/ACE_Settings.hpp +++ b/addons/common/ACE_Settings.hpp @@ -49,7 +49,7 @@ class ACE_Settings { description = CSTRING(SettingFeedbackIconsDesc); values[] = {ECSTRING(optionsmenu,Hide), ECSTRING(optionsmenu,TopRightDown), ECSTRING(optionsmenu,TopRightLeft), ECSTRING(optionsmenu,TopLeftDown), ECSTRING(optionsmenu,TopLeftRight)}; }; - class GVAR(SettingProgressBarLocation) { + class GVAR(settingProgressBarLocation) { value = 0; typeName = "SCALAR"; force = 0; diff --git a/addons/common/functions/fnc_progressBar.sqf b/addons/common/functions/fnc_progressBar.sqf index e842590f35..6129f14a65 100644 --- a/addons/common/functions/fnc_progressBar.sqf +++ b/addons/common/functions/fnc_progressBar.sqf @@ -34,7 +34,7 @@ createDialog QGVAR(ProgressBar_Dialog); //Adjust position based on user setting: private _ctrlPos = ctrlPosition (uiNamespace getVariable QGVAR(ctrlProgressBarTitle)); -_ctrlPos set [1, ((0 + 29 * GVAR(SettingProgressBarLocation)) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))]; +_ctrlPos set [1, ((0 + 29 * GVAR(settingProgressBarLocation)) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))]; (uiNamespace getVariable QGVAR(ctrlProgressBG)) ctrlSetPosition _ctrlPos; (uiNamespace getVariable QGVAR(ctrlProgressBG)) ctrlCommit 0; diff --git a/addons/explosives/ACE_Settings.hpp b/addons/explosives/ACE_Settings.hpp index ceb6b62d25..e103b6e018 100644 --- a/addons/explosives/ACE_Settings.hpp +++ b/addons/explosives/ACE_Settings.hpp @@ -1,17 +1,17 @@ class ACE_Settings { - class GVAR(RequireSpecialist) { + class GVAR(requireSpecialist) { displayName = CSTRING(RequireSpecialist_DisplayName); description = CSTRING(RequireSpecialist_Description); value = 0; typeName = "BOOL"; }; - class GVAR(PunishNonSpecialists) { + class GVAR(punishNonSpecialists) { displayName = CSTRING(PunishNonSpecialists_DisplayName); description = CSTRING(PunishNonSpecialists_Description); value = 1; typeName = "BOOL"; }; - class GVAR(ExplodeOnDefuse) { + class GVAR(explodeOnDefuse) { displayName = CSTRING(ExplodeOnDefuse_DisplayName); description = CSTRING(ExplodeOnDefuse_Description); value = 1; diff --git a/addons/frag/ACE_Settings.hpp b/addons/frag/ACE_Settings.hpp index 3e1c83839b..4dfa172bb3 100644 --- a/addons/frag/ACE_Settings.hpp +++ b/addons/frag/ACE_Settings.hpp @@ -1,19 +1,19 @@ class ACE_Settings { - class GVAR(Enabled) { + class GVAR(enabled) { category = CSTRING(Module_DisplayName); displayName = CSTRING(EnableFrag); description = CSTRING(EnableFrag_Desc); typeName = "BOOL"; value = 1; }; - class GVAR(SpallEnabled) { + class GVAR(spallEnabled) { category = CSTRING(Module_DisplayName); displayName = CSTRING(EnableSpall); description = CSTRING(EnableSpall_Desc); typeName = "BOOL"; value = 0; }; - class GVAR(ReflectionsEnabled) { + class GVAR(reflectionsEnabled) { category = CSTRING(Module_DisplayName); displayName = CSTRING(EnableReflections); description = CSTRING(EnableReflections_Desc); @@ -27,7 +27,7 @@ class ACE_Settings { typeName = "SCALAR"; value = 500; }; - class GVAR(MaxTrackPerFrame) { + class GVAR(maxTrackPerFrame) { category = CSTRING(Module_DisplayName); displayName = CSTRING(MaxTrackPerFrame); description = CSTRING(MaxTrackPerFrame_Desc); @@ -35,7 +35,7 @@ class ACE_Settings { value = 50; }; - class GVAR(EnableDebugTrace) { + class GVAR(enableDebugTrace) { category = CSTRING(Module_DisplayName); displayName = CSTRING(EnableDebugTrace); description = CSTRING(EnableDebugTrace_Desc); diff --git a/addons/hearing/ACE_Settings.hpp b/addons/hearing/ACE_Settings.hpp index dcae85fa25..2fb2a46211 100644 --- a/addons/hearing/ACE_Settings.hpp +++ b/addons/hearing/ACE_Settings.hpp @@ -1,22 +1,22 @@ class ACE_Settings { - class GVAR(EnableCombatDeafness) { + class GVAR(enableCombatDeafness) { category = CSTRING(Module_DisplayName); value = 1; typeName = "BOOL"; displayName = CSTRING(EnableCombatDeafness_DisplayName); description = CSTRING(EnableCombatDeafness_Description); }; - class GVAR(EarplugsVolume) { + class GVAR(earplugsVolume) { category = CSTRING(Module_DisplayName); value = 0.5; typeName = "SCALAR"; }; - class GVAR(UnconsciousnessVolume) { + class GVAR(unconsciousnessVolume) { category = CSTRING(Module_DisplayName); value = 0.4; typeName = "SCALAR"; }; - class GVAR(DisableEarRinging) { + class GVAR(disableEarRinging) { category = CSTRING(Module_DisplayName); value = 0; typeName = "BOOL"; diff --git a/addons/interact_menu/ACE_Settings.hpp b/addons/interact_menu/ACE_Settings.hpp index 075408499b..a36d3dd98d 100644 --- a/addons/interact_menu/ACE_Settings.hpp +++ b/addons/interact_menu/ACE_Settings.hpp @@ -1,5 +1,5 @@ class ACE_Settings { - class GVAR(AlwaysUseCursorSelfInteraction) { + class GVAR(alwaysUseCursorSelfInteraction) { value = 0; typeName = "BOOL"; isClientSettable = 1; @@ -14,14 +14,14 @@ class ACE_Settings { displayName = CSTRING(cursorKeepCentered); description = CSTRING(cursorKeepCenteredDescription); }; - class GVAR(AlwaysUseCursorInteraction) { + class GVAR(alwaysUseCursorInteraction) { value = 0; typeName = "BOOL"; isClientSettable = 1; category = CSTRING(Category_InteractionMenu); displayName = CSTRING(AlwaysUseCursorInteraction); }; - class GVAR(UseListMenu) { + class GVAR(useListMenu) { value = 0; typeName = "BOOL"; isClientSettable = 1; diff --git a/addons/interaction/ACE_Settings.hpp b/addons/interaction/ACE_Settings.hpp index 1cb8b747ef..e95947ec75 100644 --- a/addons/interaction/ACE_Settings.hpp +++ b/addons/interaction/ACE_Settings.hpp @@ -1,6 +1,6 @@ class ACE_Settings { - class GVAR(EnableTeamManagement) { + class GVAR(enableTeamManagement) { displayName = CSTRING(EnableTeamManagement_DisplayName); description = CSTRING(EnableTeamManagement_Description); value = 1; diff --git a/addons/magazinerepack/ACE_Settings.hpp b/addons/magazinerepack/ACE_Settings.hpp index 0b7b2d4628..940af87d15 100644 --- a/addons/magazinerepack/ACE_Settings.hpp +++ b/addons/magazinerepack/ACE_Settings.hpp @@ -1,16 +1,16 @@ class ACE_Settings { //Time to move a round from one magazine to another - class GVAR(TimePerAmmo) { + class GVAR(timePerAmmo) { value = 1.5; typeName = "SCALAR"; }; //Time to swap between magazines when repacking - class GVAR(TimePerMagazine) { + class GVAR(timePerMagazine) { value = 2.0; typeName = "SCALAR"; }; //Time to relink 2 belts together - class GVAR(TimePerBeltLink) { + class GVAR(timePerBeltLink) { value = 8.0; typeName = "SCALAR"; }; diff --git a/addons/map/ACE_Settings.hpp b/addons/map/ACE_Settings.hpp index 6ff2e1e867..b04c7b39b3 100644 --- a/addons/map/ACE_Settings.hpp +++ b/addons/map/ACE_Settings.hpp @@ -62,7 +62,7 @@ class ACE_Settings { displayName = CSTRING(MapShowCursorCoordinates_DisplayName); description = CSTRING(MapShowCursorCoordinates_Description); }; - class GVAR(DefaultChannel) { + class GVAR(defaultChannel) { category = CSTRING(Module_DisplayName); value = -1; typeName = "SCALAR"; diff --git a/addons/map_gestures/ACE_Settings.hpp b/addons/map_gestures/ACE_Settings.hpp index 0038027e3b..3730c08c58 100644 --- a/addons/map_gestures/ACE_Settings.hpp +++ b/addons/map_gestures/ACE_Settings.hpp @@ -44,16 +44,16 @@ class ACE_Settings { typeName = "COLOR"; value[] = {1, 0.88, 0, 0.7}; }; - class GVAR(GroupColorConfigurations) { - displayName = CSTRING(GroupColorConfigurations_displayName); - description = CSTRING(GroupColorConfigurations_description); + class GVAR(groupColorConfigurations) { + displayName = CSTRING(groupColorConfigurations_displayName); + description = CSTRING(groupColorConfigurations_description); category = CSTRING(mapGestures_category); typeName = "ARRAY"; value[] = {}; }; - class GVAR(GroupColorConfigurationMapping) { - displayName = CSTRING(GroupColorConfigurationMapping_displayName); - description = CSTRING(GroupColorConfigurationMapping_description); + class GVAR(groupColorConfigurationMapping) { + displayName = CSTRING(groupColorConfigurationMapping_displayName); + description = CSTRING(groupColorConfigurationMapping_description); category = CSTRING(mapGestures_category); typeName = "ARRAY"; value[] = {{}, {}}; diff --git a/addons/maptools/ACE_Settings.hpp b/addons/maptools/ACE_Settings.hpp index 9c53a84a7c..0a88948a7f 100644 --- a/addons/maptools/ACE_Settings.hpp +++ b/addons/maptools/ACE_Settings.hpp @@ -1,5 +1,5 @@ class ACE_Settings { - class GVAR(EveryoneCanDrawOnBriefing) { + class GVAR(everyoneCanDrawOnBriefing) { value = 1; typeName = "BOOL"; }; diff --git a/addons/microdagr/ACE_Settings.hpp b/addons/microdagr/ACE_Settings.hpp index 637584178c..f1e7595b74 100644 --- a/addons/microdagr/ACE_Settings.hpp +++ b/addons/microdagr/ACE_Settings.hpp @@ -1,5 +1,5 @@ class ACE_Settings { - class GVAR(MapDataAvailable) { + class GVAR(mapDataAvailable) { displayName = CSTRING(MapDataAvailable_DisplayName); description = CSTRING(MapDataAvailable_Description); value = 2; diff --git a/addons/overheating/ACE_Settings.hpp b/addons/overheating/ACE_Settings.hpp index abf08c9874..fc3237da0f 100644 --- a/addons/overheating/ACE_Settings.hpp +++ b/addons/overheating/ACE_Settings.hpp @@ -1,5 +1,5 @@ class ACE_Settings { - class GVAR(DisplayTextOnJam) { + class GVAR(displayTextOnJam) { typeName = "BOOL"; isClientSettable = 1; value = 1; diff --git a/addons/reload/ACE_Settings.hpp b/addons/reload/ACE_Settings.hpp index 7b60527449..72d26b46cf 100644 --- a/addons/reload/ACE_Settings.hpp +++ b/addons/reload/ACE_Settings.hpp @@ -1,5 +1,5 @@ class ACE_Settings { - class GVAR(DisplayText) { + class GVAR(displayText) { typeName = "BOOL"; isClientSettable = 1; value = 1; diff --git a/addons/repair/ACE_Settings.hpp b/addons/repair/ACE_Settings.hpp index 9ee40529e7..46228e2e44 100644 --- a/addons/repair/ACE_Settings.hpp +++ b/addons/repair/ACE_Settings.hpp @@ -1,5 +1,5 @@ class ACE_Settings { - class GVAR(DisplayTextOnRepair) { + class GVAR(displayTextOnRepair) { displayName = CSTRING(SettingDisplayTextName); description = CSTRING(SettingDisplayTextDesc); typeName = "BOOL"; @@ -7,7 +7,7 @@ class ACE_Settings { value = 1; category = ECSTRING(OptionsMenu,CategoryLogistics); }; - class GVAR(engineerSetting_Repair) { + class GVAR(engineerSetting_repair) { displayName = CSTRING(enginerSetting_Repair_name); description = CSTRING(enginerSetting_Repair_description); typeName = "SCALAR"; @@ -15,7 +15,7 @@ class ACE_Settings { values[] = {CSTRING(engineerSetting_anyone), CSTRING(engineerSetting_EngineerOnly), CSTRING(engineerSetting_RepairSpecialistOnly)}; category = ECSTRING(OptionsMenu,CategoryLogistics); }; - class GVAR(engineerSetting_Wheel) { + class GVAR(engineerSetting_wheel) { displayName = CSTRING(enginerSetting_Wheel_name); description = CSTRING(enginerSetting_Wheel_description); typeName = "SCALAR"; @@ -30,14 +30,14 @@ class ACE_Settings { value = 0.6; category = ECSTRING(OptionsMenu,CategoryLogistics); }; - class GVAR(repairDamageThreshold_Engineer) { + class GVAR(repairDamageThreshold_engineer) { displayName = CSTRING(repairDamageThreshold_Engineer_name); description = CSTRING(repairDamageThreshold_Engineer_description); typeName = "SCALAR"; value = 0.4; category = ECSTRING(OptionsMenu,CategoryLogistics); }; - class GVAR(consumeItem_ToolKit) { + class GVAR(consumeItem_toolKit) { displayName = CSTRING(consumeItem_ToolKit_name); description = CSTRING(consumeItem_ToolKit_description); typeName = "SCALAR"; diff --git a/addons/respawn/ACE_Settings.hpp b/addons/respawn/ACE_Settings.hpp index 86083d6d07..7f0c4f9d96 100644 --- a/addons/respawn/ACE_Settings.hpp +++ b/addons/respawn/ACE_Settings.hpp @@ -1,18 +1,18 @@ class ACE_Settings { - class GVAR(SavePreDeathGear) { + class GVAR(savePreDeathGear) { displayName = CSTRING(SavePreDeathGear_DisplayName); description = CSTRING(SavePreDeathGear_Description); value = 0; typeName = "BOOL"; }; - class GVAR(RemoveDeadBodiesDisconnected) { + class GVAR(removeDeadBodiesDisconnected) { displayName = CSTRING(RemoveDeadBodiesDisconnected_DisplayName); description = CSTRING(RemoveDeadBodiesDisconnected_Description); value = 1; typeName = "BOOL"; }; - class GVAR(BodyRemoveTimer) { + class GVAR(bodyRemoveTimer) { value = 0; typeName = "SCALAR"; }; diff --git a/addons/switchunits/ACE_Settings.hpp b/addons/switchunits/ACE_Settings.hpp index fe15e63e87..e3fc653cb2 100644 --- a/addons/switchunits/ACE_Settings.hpp +++ b/addons/switchunits/ACE_Settings.hpp @@ -1,39 +1,39 @@ class ACE_Settings { - class GVAR(EnableSwitchUnits) { + class GVAR(enableSwitchUnits) { value = 0; typeName = "BOOL"; }; - class GVAR(SwitchToWest) { + class GVAR(switchToWest) { displayName = CSTRING(SwitchToWest_DisplayName); description = CSTRING(SwitchToWest_Description); value = 0; typeName = "BOOL"; }; - class GVAR(SwitchToEast) { + class GVAR(switchToEast) { displayName = CSTRING(SwitchToEast_DisplayName); description = CSTRING(SwitchToEast_Description); value = 0; typeName = "BOOL"; }; - class GVAR(SwitchToIndependent) { + class GVAR(switchToIndependent) { displayName = CSTRING(SwitchToIndependent_DisplayName); description = CSTRING(SwitchToIndependent_Description); value = 0; typeName = "BOOL"; }; - class GVAR(SwitchToCivilian) { + class GVAR(switchToCivilian) { displayName = CSTRING(SwitchToCivilian_DisplayName); description = CSTRING(SwitchToCivilian_Description); value = 0; typeName = "BOOL"; }; - class GVAR(EnableSafeZone) { + class GVAR(enableSafeZone) { displayName = CSTRING(EnableSafeZone_DisplayName); description = CSTRING(EnableSafeZone_Description); value = 1; typeName = "BOOL"; }; - class GVAR(SafeZoneRadius) { + class GVAR(safeZoneRadius) { displayName = CSTRING(SafeZoneRadius_DisplayName); description = CSTRING(SafeZoneRadius_Description); value = 100; diff --git a/addons/vehiclelock/ACE_Settings.hpp b/addons/vehiclelock/ACE_Settings.hpp index fabc8b94ad..f8a431410f 100644 --- a/addons/vehiclelock/ACE_Settings.hpp +++ b/addons/vehiclelock/ACE_Settings.hpp @@ -1,17 +1,17 @@ class ACE_Settings { - class GVAR(DefaultLockpickStrength) { + class GVAR(defaultLockpickStrength) { displayName = CSTRING(DefaultLockpickStrength_DisplayName); description = CSTRING(DefaultLockpickStrength_Description); value = 10; typeName = "SCALAR"; }; - class GVAR(LockVehicleInventory) { + class GVAR(lockVehicleInventory) { displayName = CSTRING(LockVehicleInventory_DisplayName); description = CSTRING(LockVehicleInventory_Description); value = 0; typeName = "BOOL"; }; - class GVAR(VehicleStartingLockState) { + class GVAR(vehicleStartingLockState) { displayName = CSTRING(VehicleStartingLockState_DisplayName); description = CSTRING(VehicleStartingLockState_Description); value = -1; diff --git a/addons/weaponselect/ACE_Settings.hpp b/addons/weaponselect/ACE_Settings.hpp index 2214451247..5b58659f6e 100644 --- a/addons/weaponselect/ACE_Settings.hpp +++ b/addons/weaponselect/ACE_Settings.hpp @@ -1,6 +1,6 @@ class ACE_Settings { - class GVAR(DisplayText) { + class GVAR(displayText) { typeName = "BOOL"; isClientSettable = 1; value = 1; From 4a8e727ba5ac8e2e77d7258418019c3e94810084 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 7 May 2016 22:17:21 +0200 Subject: [PATCH 53/89] end spectator by global mission end event from server (#3659) * end spectator by global mission end event from server * add ; --- addons/spectator/XEH_postInit.sqf | 12 +++++++++++- addons/spectator/functions/fnc_setSpectator.sqf | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/addons/spectator/XEH_postInit.sqf b/addons/spectator/XEH_postInit.sqf index 4b1f653223..43c812d1a2 100644 --- a/addons/spectator/XEH_postInit.sqf +++ b/addons/spectator/XEH_postInit.sqf @@ -16,4 +16,14 @@ if (isServer) then { }; // Should prevent unending spectator on mission end -addMissionEventHandler ["Ended",{ [QGVAR(EndMission)] call FUNC(interrupt) }]; +if (isServer) then { + addMissionEventHandler ["Ended", { + [QGVAR(endMission), []] call EFUNC(common,globalEvent); + }]; +}; + +[QGVAR(endMission), { + if (GVAR(isSet)) then { + [false] call FUNC(setSpectator); + }; +}] call EFUNC(common,addEventHandler); diff --git a/addons/spectator/functions/fnc_setSpectator.sqf b/addons/spectator/functions/fnc_setSpectator.sqf index ce9428cea4..1f010962b5 100644 --- a/addons/spectator/functions/fnc_setSpectator.sqf +++ b/addons/spectator/functions/fnc_setSpectator.sqf @@ -92,7 +92,7 @@ if (_set) then { if (_this) then { _display displayAddEventHandler ["KeyDown", { if (_this select 1 == 1) then { - [false] call ace_spectator_fnc_setSpectator; + [false] call FUNC(setSpectator); true }; }]; From fd8167b7e7471b34d9e577575cf4a792b1d134f6 Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Sat, 7 May 2016 22:20:50 +0200 Subject: [PATCH 54/89] AB - correct mildot reticle LRPS/AMS/KHS (#3664) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * correct mildot reticle LRPS/AMS/KHS correct mildot reticle LRPS/AMS/KHS * replace 1 tab with 1 space replace 1 tab with 1 space * fix tab * ace_scope : correct mildot reticle for LRPS and SOS 2D/PiP SFP scopes ace_scope : correct mildot reticle for LRPS and SOS 2D/PiP SFP scopes, same opticszoommax/min for each scopes : 1µ (1meter for 1000meter) / 4µ (4meter for 1000meter), LRPS : variable magnification / SOS : 2 magnifications --- addons/optics/CfgWeapons.hpp | 12 ++++++--- addons/scopes/CfgWeapons.hpp | 52 +++++++++++++++++++++++------------- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/addons/optics/CfgWeapons.hpp b/addons/optics/CfgWeapons.hpp index 1be66d3aa2..2089a1dc80 100644 --- a/addons/optics/CfgWeapons.hpp +++ b/addons/optics/CfgWeapons.hpp @@ -228,6 +228,12 @@ class CfgWeapons { class OpticsModes: OpticsModes { class Snip: Snip { modelOptics[] = {QUOTE(PATHTOF(models\ace_optics_reticle90.p3d)),QUOTE(PATHTOF(models\ace_optics_reticle90.p3d))}; + useModelOptics = 1; + opticsZoomInit = 0.0116; + opticsZoomMax = 0.0464; + opticsZoomMin = 0.0116; + discreteFOV[] = {0.0464, 0.0116}; + opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1","ACE_OpticsRadBlur1"}; opticsDisablePeripherialVision = 0; }; class Iron: Iron {}; @@ -275,9 +281,9 @@ class CfgWeapons { class Snip: Snip { modelOptics[] = {QUOTE(PATHTOF(models\ace_optics_reticle90.p3d)),QUOTE(PATHTOF(models\ace_optics_reticle90.p3d))}; useModelOptics = 1; - opticsZoomInit = 0.01234; - opticsZoomMax = 0.04673; - opticsZoomMin = 0.01234; + opticsZoomInit = 0.0116; + opticsZoomMax = 0.0464; + opticsZoomMin = 0.0116; discreteFOV[] = {}; opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1","ACE_OpticsRadBlur1"}; opticsDisablePeripherialVision = 0; diff --git a/addons/scopes/CfgWeapons.hpp b/addons/scopes/CfgWeapons.hpp index eb1d8400a2..cd87167f22 100644 --- a/addons/scopes/CfgWeapons.hpp +++ b/addons/scopes/CfgWeapons.hpp @@ -3,14 +3,18 @@ class CfgWeapons { class InventoryOpticsItem_Base_F; class optic_LRPS : ItemCore { - ACE_ScopeAdjust_Vertical[] = { -4, 30 }; - ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Vertical[] = {-4, 30}; + ACE_ScopeAdjust_Horizontal[] = {-6, 6}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { - discreteDistance[] = { 100 }; + opticsZoomMin = 0.011; + opticsZoomMax = 0.045; + opticsZoomInit = 0.045; + discretefov[] = {0.045, 0.011}; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; @@ -18,14 +22,14 @@ class CfgWeapons { }; class optic_SOS : ItemCore { - ACE_ScopeAdjust_Vertical[] = { -4, 30 }; - ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Vertical[] = {-4, 30}; + ACE_ScopeAdjust_Horizontal[] = {-6, 6}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; @@ -33,14 +37,14 @@ class CfgWeapons { }; class optic_DMS : ItemCore { - ACE_ScopeAdjust_Vertical[] = { -4, 20 }; - ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Vertical[] = {-4, 20}; + ACE_ScopeAdjust_Horizontal[] = {-6, 6}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; @@ -48,14 +52,18 @@ class CfgWeapons { }; class optic_AMS_base : ItemCore { - ACE_ScopeAdjust_Vertical[] = { -4, 30 }; - ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Vertical[] = {-4, 30}; + ACE_ScopeAdjust_Horizontal[] = {-6, 6}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class AMS { - discreteDistance[] = { 100 }; + opticsZoomMin = 0.0285; + opticsZoomMax = 0.085; + opticsZoomInit = 0.085; + discretefov[] = {0.085, 0.0285}; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; @@ -63,14 +71,18 @@ class CfgWeapons { }; class optic_KHS_base : ItemCore { - ACE_ScopeAdjust_Vertical[] = { -4, 30 }; - ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Vertical[] = {-4, 30}; + ACE_ScopeAdjust_Horizontal[] = {-6, 6}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class KHS { - discreteDistance[] = { 100 }; + opticsZoomMin = 0.026; + opticsZoomMax = 0.06; + opticsZoomInit = 0.06; + discretefov[] = {0.06, 0.026}; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; @@ -78,14 +90,18 @@ class CfgWeapons { }; class optic_KHS_old : ItemCore { - ACE_ScopeAdjust_Vertical[] = { -4, 30 }; - ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Vertical[] = {-4, 30}; + ACE_ScopeAdjust_Horizontal[] = {-6, 6}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class KHS { - discreteDistance[] = { 100 }; + opticsZoomMin = 0.026; + opticsZoomMax = 0.06; + opticsZoomInit = 0.06; + discretefov[] = {0.06, 0.026}; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; From 8bd4afed6bbfdc7e3faa837967a733f2ee36b2e4 Mon Sep 17 00:00:00 2001 From: Rebel Date: Sat, 7 May 2016 23:23:38 +0300 Subject: [PATCH 55/89] Drag and carry icons. (#3676) --- addons/dragging/UI/icons/box_carry.paa | Bin 0 -> 5625 bytes addons/dragging/UI/icons/box_drag.paa | Bin 0 -> 5625 bytes addons/dragging/UI/icons/person_carry.paa | Bin 0 -> 5625 bytes addons/dragging/UI/icons/person_drag.paa | Bin 0 -> 5625 bytes addons/dragging/functions/fnc_setCarryable.sqf | 4 +++- addons/dragging/functions/fnc_setDraggable.sqf | 4 +++- 6 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 addons/dragging/UI/icons/box_carry.paa create mode 100644 addons/dragging/UI/icons/box_drag.paa create mode 100644 addons/dragging/UI/icons/person_carry.paa create mode 100644 addons/dragging/UI/icons/person_drag.paa diff --git a/addons/dragging/UI/icons/box_carry.paa b/addons/dragging/UI/icons/box_carry.paa new file mode 100644 index 0000000000000000000000000000000000000000..5e9c83057c8df68f73fdc54dfbecdc4292570eed GIT binary patch literal 5625 zcmdT|e@s<%6hHU%F26*;@Ku5c>QkIQ(4jH4luI@66|T4SE~8w{M5LKW|K$1yc@j=@ zjYk%>S_`)9pO)p1y46;|aw7^S+LmGvPp1ye6_1cTkoWlZIrrX&?x`sj4A1U+aK87v z^ZT6d`F>@QmzU#uJg*?fN<@Q$gZVmMn6s8~0bo2YCqI{Q2_MFv$<2LQ!T)Z2b|ny1 zPbI3g5q07-I#5U<0*7&iXmaeeJN8 zZBkU9w&y}n2rulHAw7FwXYi;PLb!>Xz$aCL{&28~->a%i8FK~yqkuRwp5;A8Jgwhq zrLPwp)9q1Zi5B}V)&T)D`0s-(wv&NZjK4ZMf-mo{=*{Mrpl`yf=p)+Nc2A(Li~Z+R zXvzf3mvnN}AfN5e!+skQdefF^>pKua)|V4}(}|X{;lFx@b!#O_x}E(movZMjstBIa z=@g<(rS1*a^UI($Tt9a9w+s9sWkN$gO{)>mm-AneRJEVT2YjFIA5!Pc>UUU3TV?nQ z5e7cF3H~$epZNBLJKti~Lqe5N4|I~yXd451{@NtUY0B-=(;L~(P2G7cKG3KyFdfmf zv)ZDL^gxN1>mTJGIl=Nh++I4)E4wdnd{q>DYPS|MJjeza{Y{S}D2$cc*MB(u0$*(~ zQS|BjxIa$qL~>N2WwL)%ryEP-3crx!!|9IuTREO{?C z&xNG}KQm5}RatZep&N`x|6>hllBxGC^Wl*O&J+=8?2z=zjG!1gT2;J6=SK-rf%ia3 zX#cdLfC~Fo1de0}jxb*Z02yNoD_cAPJS>mx54Y!Se}zxC03JC5P1at>N;+N9izOm! zJ<&s-i#Cy)`mC4zLsA0m6Qa?xWS)U5*4W?Pmlppa1m{-*Ccny_7K0u5MdKIY@~E)F z7m0`0CxZRq`i0}G``QAjqBm8D>D`Lk?Y3Wjp;`=hbpLQa45z;xey`atR+A+S57z_7 z%YHSKPYwQ?<O> z^(@)cb(q{luV96iA%3Hb|CV!H{zFY%FW|R+(WgKTl^XICm->J?4}JvuC&D~9 zWqX!Bud+Te=F_=Fz+Hp{|ax=iVt{xXM2z?s^y(Mu_61Eg7Kes(DI(1Jrr zOZ@VtxW%WHCgUW_X|LL3n)5ee#3xzCT|B56kcK~Z!p|hXrM#FDt+=~+lYUIF;T-YY z*O)Pfc-!y_3t4FM_dFx|QyF*Tb|iM|p5_zu~?3nO@n z5_cZYh$in8s1MCd?_BeD0uS$! zZX184;lpG}UumVYyUNb%Vv%>#ztd9MMWD$G2G^448vQ)8OxVrP(l-Be*2V?60AhL> z<7-AIPAmEa57IzET9~I>lipPgGp%@7K^s7LswqG*ZVq!yJ=|R53`EIJ=;jsmF&0bh zy9ZJ_4yNd4y8u$TR+NmeZD%*ZPtk4S@S_n$$%es_E$+v`x{{f(hMP!nS#}R@7KxFK|`jx9&7O9>IJ;GXjivZx;e?}eJ-GN-O?Ico+r-%{3}g_ zB)o^?Gun3C(U zD=sGa8@PiACM1&9E0R7EW?92n`zaXth=qj~bL=32IP?oPxHP0a@Ip&d8Ad-X@zRdmK+qcVPSAu7o}=+@f~gB7O8lHh>Sq|FqYzekNRK z4bG2jRhWGd_QssYVDRQ4AEksOD(gvEFC*8-SokC4N9y0-!#sJc7xXzN>5^+}KG+YAXp_IB9)KJl|25~YKS#|Pps zI$Q0Bi?PLBDrjTjjr=}3{xUoA!SoB8+95D4#c3EnfTD4M7ifgcX=`I#Rc(g-n8oe{ zev{ce5^orEe2w0=ZA;g-3ZCzHe4WK!%y%e(L`B*+f_}jGXLc~pjLNM|7(dV`zlYsQ zwnFlgN*CdG%zv?G@&b*YF1I61scB?-4K@x9o%z!u4xJ@de0N3{s$id*u4N zNBo&LaK3t{Fm@0kk`z5|V}mWb@O^K#AgD7@22}<_@*s4tVcXJn-DHy;v1XFgZL=W4+DlrHvWG+pd&ii z$A$0$5!!lS=R~3BJ7G=1F$>eMD5%Ji7AesVCkIZODAEMS2;5ejJHC#9z%h=1^$pfkQ0m|<2B0}c-*irxKTM4|ZM`gLP z|AuYlg&a6qqD0r61y{0X%g3^M-_LQNe{Z#CVRi39C&<%6Tm4g8FBb>$_JGc4_pw}i zO`r+&!LFD_>c@U;I0l~%@9?(H3iND4UoGpeg|GF#XlRlAFYN{8)xA@livF^bD5*ME z*+%S{)q6Cftxhg;P^HbAk4wdA;4|O{DNNGW|zsukA(uujn=tEaRL8 z$IU=%1wY-uaLwlfxOo_I;dmXi{OgsT)VvHE%0~(5Cn~=<^_j9;q9&6nV%p+t@ozT* z1kP_1#pE%jX%Zj=vtpQJ*6+4L z;>qmeo4NO#^PPL{X(~D2T-y^&2}{BTb0>K0=lf zZ?(%?<>LAjKeqWdiO`^yZb&`?4EcDz9`RgYWDGu>Rg7<vQQ4(N>Yp5#Q_*%v@c1DlHEIOBL;>DD9fs-t=CUMES z9%O`{^aK}qfh=#QDAUN=Di@>(V!vNerYa8O*>P>!Qr5qv>=61RfzTJR<$mywdz>g< z{6<4YXTuD}-w!gL-T&`TP6U$JdhBTD1He z&mPz=i0{+F8;DSlvFGRcS`I@T=UrBx?zCwyv;O~JJ1J>f^9hX}VH#0CZSy9vU$`?7 z+%`fYw3QkwzIFe1+A6nSsnI)7yALGi?5#5G0@^qB3uZNe^)m`XhJG9VF8lqfjPPOo z6zcQ)tOG)K3U&gQ*`KqH>9fQmDHQ~+iS}Po7t+I_!2;Clv)k>p!*{yrF!tt_EbUpu zXTc4sT@Gr~P>+m(v5=|eKfNw=yC5_eM*o1m@3S5tJ{+1n{ylW?Oi*v-ag=2X`lR^y z-6ncB6kD&4V~;WGw*~%g1e4!ZG12iOb+!nB3;o0VU-?6HKs#MN!2J~x-#>>KL#Js! zvo~kkmC9_kf5<-HecwO!?o*3asex7KzXOEx7=Ql6^A~owi#yHp1uTfRtF%c=4x}6L za6I=BGP5l*`K|s5|D9?!@l5JHaCRp@pAgwM<>!HY#JgXFYoh$?Xk|vY^5FB>9)_PZ zvGqT;-&o-fyWq$qu4k6<2q0?_=6^TxKQV7-!@ACTJ|E!tIOX%f zHe6U%V$5d(^}>!IoaappCmync*0{h?&MR^JCiEA_=$qTyx-4v9nEsZ0ox};@0tdJ_ z;m1rJykp|kamO+WxL~1^x$Te$nc1nX3x~8Cq=8j@8f$-V*=p(o)l8i5{de{jv;Mg4 z;IYu5q;*4$=?WY}45vWLWpzb#w|>4$WN8m;fd2v1w}zKVFbzh-GM;_r9DJG2-}+h& zq#I#%I3TRGal;me7q5hx#b`gaEHm}R>#x5Kjorm;+f$%y60WN=h!;<~z#kf0VS5+6 zR(Wa`)XC6(jwq(K7kq$mML}DxmW5i-Kr-O8ez4bQE|c)0p;?~U3m3L#WgF`i8yl`= zd_1rHwFO#pX1{6As(pUN9ys=GXUjBh`=58;D$6qBg=IDA{%d?ah}9yttl-8Puiw`G zSY}qkLu|Z7agKk(dGKVo{7KWFOtwMJJ!$ll*Z0Q8$2X>Ic0z2-KJa&R{PQffwZgum z8LT73jh!(HjWZKq9KR=YHM^PK&O!T%4C9gL{E$f!bmQ|4@^9%iT0;v<7+<)pkS6dN zDiwp@J@^3iR_{vRJlcNRiWq;)PdmN}6v%_jtyuNt{Y5PrY6Fp`fL z-@OQNG}>>%7^9sAEvR44na|QlmgUji-U-jJ&FsSV za{YAqqu3hsNz3;L@U|_#+U%d&Q>CBCS^*u@l6%uh`D@poS z+K$jQYGrCaHi)3L#hvMgj#?)Hnb(d)6S0PjLU1OXAs-kN6=-TrC=imco7>;Hci(1N zB%5VmhBNy<&U@#adp_>@c&m%5s!D5l)#^$QV{Bq#;$Dfbsl1zT0U*4pa%GTk4F}=( z1cTq>xPKJK7B6GJo6FdCgRvtxvIEXIV~~&~6g=$I4LEhngka3JZOy-h@SWZS&hlC4 z=|!Q(7A0^iOYzqnx$iel_37@T2nS<^&e&5&x+pdhNLhNWuIg@HUs-Q4BrX&7R>&v(Qma}3!93JUO$l+Hz_{Br{2YO=f253E6Y<`yYXfX>lFG2|; zegg&0|M_@}SY7{TrN5TZA9svUq)&f^&SY!Z$)ZhtyXzj8`k0npnx#G@BNYNqI&}*h z8_tnD8}VUJvSuhNSF=I5AUrhAJBWt6qGhX;9 ze#8&+Gsa`XkT?}cID`!L`~&$1mk_^gWuG5QUx%>>f#kOhJ!g0ML!ZTH0qBELDTb!6 zmp?dmp+3cbaS8@@#ru>#Gw2Ul+D~!`l!lBI4M$>!1Mz+IoX?;n&uVk(*3N2yh42^R z`I9f)cq+;1^0URQ49h>*X6{{$cyu?E5e*l;h4J z_Kr7zk4MN{NMJ1Q-9WtK*}Ek@=jKKIW~sk(IMzKZ<9j9g-Ig)Abkg760de}qtp%!H zFw>efGTtsuHhh-w!$tk|u2^`aU5Zc?H*C)?KlFdbd)E0s>`>gC=d$l&9#!?+LOmy+ zTmb&ANDM!sza0Amus0CiD)Sd|dEvpx%HBjha!Fiy9C=CN+U3~hs zd*^?*Z0?W5`gBZLd(&Q~DgjnEOPcP3YLh;$~3fG^0H! z-9?+^0KdX>--~SSZz_;w!c3W~eIO&6Z@h^;fG=sao?$HSZd|{ZV=9Jy7}{C+1m2_5 z%lFpQ*yr+p`x&POX<1C~HOwW~|Ld>omwXhJ{0#id#@@$Fe_rAoYtH@!iL#uHt-4{7`sAeio4TxFCINZ&&=f=089B*yOmPrbwjor{haUo8tW< z@tFaErELhN^MKT!*1uK2xuG1$SDXt^iCBM=U+PO^N%4ZQs6gd#->1tD9z|IWD1Sj6 zGt^sK_=!`yR?>N3Ul(eP)KhWlTU+lNcvkHXxYz7pdCedFYMU%my1v5BNlU{8{bLa^ z7O6_E&sgpqE7jP*(8r4$)Tr{B6C~Zjch|g^gKtS?fs=pMeNNbThs$4l{H2m!cg##F zYrYg6ahuGK8n%C%JEriIGVjtaI@?%(uKdT+Uz(=d^Zp}5ZP`YNBYIYGOG=waY5Oie ztwrF&;p&)*d+D!0jphH`sXj5Nx}l+K+Wa%E@qOX=elj~H%aUT$w0?thE3{r!_{w0z z3FpCLqKBHssxQLv4!$QqILCTr_d9iuIM-DWZX3qjubz4F;DPW+l<-Orct3V>CS!-7 zA<~5Oqd(gMH&zl3@Gf|B*SQ}CVuuO$dO0r~4tE@Qu}-ED?apDR zX0rQXNI{X)nD)(yz)rW@a6Z*-d=QS6L@vuEJ&mEkzlFOVY$Y~CS1WoI*%8$Igxf1L tw&a7Z=ub;(eoZ*Q!;V>vd2`$>F)a@s!Jom-=YRYB!6#&q01Ckb{|BEd0tWy9 literal 0 HcmV?d00001 diff --git a/addons/dragging/functions/fnc_setCarryable.sqf b/addons/dragging/functions/fnc_setCarryable.sqf index 9e15e42446..0253c6ed4b 100644 --- a/addons/dragging/functions/fnc_setCarryable.sqf +++ b/addons/dragging/functions/fnc_setCarryable.sqf @@ -43,7 +43,9 @@ if (_type in _initializedClasses) exitWith {}; _initializedClasses pushBack _type; GVAR(initializedClasses_carry) = _initializedClasses; -private _carryAction = [QGVAR(carry), localize LSTRING(Carry), "", {[_player, _target] call FUNC(startCarry)}, {[_player, _target] call FUNC(canCarry)}] call EFUNC(interact_menu,createAction); +private _icon = [QUOTE(PATHTOF(UI\icons\box_carry.paa)), QUOTE(PATHTOF(UI\icons\person_carry.paa))] select (_object isKindOf "Man"); + +private _carryAction = [QGVAR(carry), localize LSTRING(Carry), _icon, {[_player, _target] call FUNC(startCarry)}, {[_player, _target] call FUNC(canCarry)}] call EFUNC(interact_menu,createAction); private _dropAction = [QGVAR(drop_carry), localize LSTRING(Drop), "", {[_player, _target] call FUNC(dropObject_carry)}, {[_player, _target] call FUNC(canDrop_carry)}] call EFUNC(interact_menu,createAction); [_type, 0, ["ACE_MainActions"], _carryAction] call EFUNC(interact_menu,addActionToClass); diff --git a/addons/dragging/functions/fnc_setDraggable.sqf b/addons/dragging/functions/fnc_setDraggable.sqf index 0adcb624d8..4c4d11ecf6 100644 --- a/addons/dragging/functions/fnc_setDraggable.sqf +++ b/addons/dragging/functions/fnc_setDraggable.sqf @@ -44,7 +44,9 @@ if (_type in _initializedClasses) exitWith {}; _initializedClasses pushBack _type; GVAR(initializedClasses) = _initializedClasses; -private _dragAction = [QGVAR(drag), localize LSTRING(Drag), "", {[_player, _target] call FUNC(startDrag)}, {[_player, _target] call FUNC(canDrag)}] call EFUNC(interact_menu,createAction); +private _icon = [QUOTE(PATHTOF(UI\icons\box_drag.paa)), QUOTE(PATHTOF(UI\icons\person_drag.paa))] select (_object isKindOf "Man"); + +private _dragAction = [QGVAR(drag), localize LSTRING(Drag), _icon, {[_player, _target] call FUNC(startDrag)}, {[_player, _target] call FUNC(canDrag)}] call EFUNC(interact_menu,createAction); private _dropAction = [QGVAR(drop), localize LSTRING(Drop), "", {[_player, _target] call FUNC(dropObject)}, {[_player, _target] call FUNC(canDrop)}] call EFUNC(interact_menu,createAction); [_type, 0, ["ACE_MainActions"], _dragAction] call EFUNC(interact_menu,addActionToClass); From 174262904534eabef674e76cead1fa0eb1ee7c55 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 7 May 2016 15:26:02 -0500 Subject: [PATCH 56/89] Add NonSteerable Reserve Parachute (#3689) * Add NonSteerable Reserve Parachute Close #3364 * Use params --- addons/parachute/CfgVehicles.hpp | 7 ++++++- addons/parachute/functions/fnc_storeParachute.sqf | 13 +++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/addons/parachute/CfgVehicles.hpp b/addons/parachute/CfgVehicles.hpp index ff9196ca60..4127bad166 100644 --- a/addons/parachute/CfgVehicles.hpp +++ b/addons/parachute/CfgVehicles.hpp @@ -83,7 +83,8 @@ class CfgVehicles { //model = "\A3\Weapons_F\Ammoboxes\Bags\Backpack_Parachute"; // @todo // backpackSimulation = "ParachuteNonSteerable"; //ParachuteSteerable //Bis broke this in 1.40 ParachuteClass = "NonSteerable_Parachute_F"; - MACRO_HASRESERVE + ace_hasReserveParachute = 1; + ace_reserveParachute = "ACE_NonSteerableReserveParachute"; maximumLoad = 0; mass = 100; }; @@ -97,6 +98,10 @@ class CfgVehicles { ace_reserveParachute = ""; ace_hasReserveParachute = 0; }; + + class ACE_NonSteerableReserveParachute: ACE_ReserveParachute { + ParachuteClass = "NonSteerable_Parachute_F"; + }; class B_Soldier_05_f; class B_Pilot_F: B_Soldier_05_f {backpack = "ACE_NonSteerableParachute";}; class I_Soldier_04_F; class I_pilot_F: I_Soldier_04_F {backpack = "ACE_NonSteerableParachute";}; diff --git a/addons/parachute/functions/fnc_storeParachute.sqf b/addons/parachute/functions/fnc_storeParachute.sqf index 42ad18b304..55e887f3e6 100644 --- a/addons/parachute/functions/fnc_storeParachute.sqf +++ b/addons/parachute/functions/fnc_storeParachute.sqf @@ -15,16 +15,17 @@ * Public: No */ #include "script_component.hpp" -private ["_unit","_backpack"]; -_unit = _this select 0; -_backpack = (_this select 1) select 6; -if ((vehicle _unit) isKindOf "ParachuteBase" && backpack _unit == "" && !(_unit getVariable [QGVAR(chuteIsCut),false]) && (_unit getVariable [QGVAR(hasReserve),false])) then { + +params ["_unit", "_gear"]; +private _backpack = _gear select 6; + +if ((vehicle _unit) isKindOf "ParachuteBase" && {backpack _unit == ""} && {!(_unit getVariable [QGVAR(chuteIsCut),false])} && {_unit getVariable [QGVAR(hasReserve),false]}) then { _unit addBackpackGlobal (_unit getVariable[QGVAR(backpackClass),"ACE_NonSteerableParachute"]); } else { - if ([false,true] select (getNumber(configFile >> "CfgVehicles" >> _backpack >> "ace_hasReserveParachute"))) then { + if ((getNumber(configFile >> "CfgVehicles" >> _backpack >> "ace_hasReserveParachute")) == 1) then { _unit setVariable[QGVAR(backpackClass),getText(configFile >> "CfgVehicles" >> _backpack >> "ace_reserveParachute"),true]; }; - if (!(_unit getVariable [QGVAR(chuteIsCut),false]) && !(animationState _unit == 'para_pilot')) then { + if (!(_unit getVariable [QGVAR(chuteIsCut),false]) && {!(animationState _unit == 'para_pilot')}) then { _unit setVariable [QGVAR(hasReserve),[false,true] select (getNumber(configFile >> "CfgVehicles" >> _backpack >> "ace_hasReserveParachute")),true]; }; }; From 82f8eb758c68880257c3a2028328e8e2b434b3a7 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Sat, 7 May 2016 22:27:33 +0200 Subject: [PATCH 57/89] Removed remaining usage of player (#3710) --- addons/common/functions/fnc_setHearingCapability.sqf | 2 +- addons/rearm/functions/fnc_makeDummy.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/common/functions/fnc_setHearingCapability.sqf b/addons/common/functions/fnc_setHearingCapability.sqf index 7bd375a58b..2366081ec1 100644 --- a/addons/common/functions/fnc_setHearingCapability.sqf +++ b/addons/common/functions/fnc_setHearingCapability.sqf @@ -54,5 +54,5 @@ private _lowestVolume = 1; 0 fadeMusic _lowestVolume; // Set Radio mod variables. -player setVariable ["tf_globalVolume", _lowestVolume]; +ACE_player setVariable ["tf_globalVolume", _lowestVolume]; if (!isNil "acre_api_fnc_setGlobalVolume") then { [_lowestVolume^0.33] call acre_api_fnc_setGlobalVolume; }; diff --git a/addons/rearm/functions/fnc_makeDummy.sqf b/addons/rearm/functions/fnc_makeDummy.sqf index 390ff658e0..5c19f8f12d 100644 --- a/addons/rearm/functions/fnc_makeDummy.sqf +++ b/addons/rearm/functions/fnc_makeDummy.sqf @@ -20,4 +20,4 @@ params [["_obj", objNull, [objNull]], ["_dirAndUp", [[1,0,0],[0,0,1]], [[]]]]; _obj setVectorDirAndUp _dirAndUp; _obj allowDamage false; -player disableCollisionWith _obj; +ACE_player disableCollisionWith _obj; From 4eb2ecb0b617befd762c49ca1e4f32190a3d6025 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Sat, 7 May 2016 22:35:18 +0200 Subject: [PATCH 58/89] Fixed getting stuck on rope whilst fastroping (#3734) --- addons/fastroping/functions/fnc_fastRope.sqf | 2 +- .../fastroping/functions/fnc_fastRopeServerPFH.sqf | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/addons/fastroping/functions/fnc_fastRope.sqf b/addons/fastroping/functions/fnc_fastRope.sqf index bf2730efc7..adeb536362 100644 --- a/addons/fastroping/functions/fnc_fastRope.sqf +++ b/addons/fastroping/functions/fnc_fastRope.sqf @@ -35,6 +35,6 @@ _deployedRopes set [_usableRopeIndex, _usableRope]; _vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; //Start server PFH asap -[QGVAR(startFastRope), [_unit, _vehicle, _usableRope, _usableRopeIndex]] call EFUNC(common,serverEvent); +[QGVAR(startFastRope), [_unit, _vehicle, _usableRope, _usableRopeIndex, false]] call EFUNC(common,serverEvent); moveOut _unit; [FUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf b/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf index ed78d43592..2ebffe680e 100644 --- a/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" params ["_arguments", "_pfhHandle"]; -_arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex"]; +_arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex", "_hasBeenAttached"]; _rope params ["_attachmentPoint", "_ropeTop", "_ropeBottom", "_dummy", "_hook", "_occupied"]; private ["_vectorUp", "_vectorDir", "_origin"]; @@ -37,10 +37,15 @@ if (getMass _dummy != 80) exitWith { ropeUnwind [_ropeBottom, 6, 0.5]; }; -//Check if rope broke and unit is falling +//Check if the player has been attached to the rope yet +if (!_hasBeenAttached && {!(isNull attachedTo _unit)}) then { + _hasBeenAttached = true; + _arguments set [4, true]; +}; + +//Exit when the unit has been detached and is falling (rope broke, heli flew too fast, etc.) //Make sure this isn't executed before the unit is actually fastroping -//Note: Stretching ropes does not change ropeLength -if ((isNull attachedTo _unit) && {ropeLength _ropeTop > 0.5}) exitWith { +if (_hasBeenAttached && {isNull attachedTo _unit}) exitWith { [_pfhHandle] call CBA_fnc_removePerFrameHandler; }; From 9f6661f4db00ecd7586c3bfb118db5ec3274412b Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 7 May 2016 15:35:39 -0500 Subject: [PATCH 59/89] Make 40mm Grenades Frag (#3679) * Make 40mm Grenades Frag * Just use existing force cfg instead of adding new Add RHS compat entries --- addons/frag/CfgAmmo.hpp | 2 + addons/frag/XEH_PREP.hpp | 1 + addons/frag/functions/fnc_dev_debugAmmo.sqf | 62 +++++++++++++++++++++ optionals/compat_rhs_afrf3/CfgAmmo.hpp | 16 ++++++ 4 files changed, 81 insertions(+) create mode 100644 addons/frag/functions/fnc_dev_debugAmmo.sqf diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 916949bab2..cd6cc64cfd 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -85,6 +85,7 @@ class CfgAmmo { class G_40mm_HE: GrenadeBase { // Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M441 GVAR(enabled) = 1; + GVAR(force) = 1; GVAR(classes)[] = {"ACE_frag_tiny_HD"}; GVAR(metal) = 200; @@ -109,6 +110,7 @@ class CfgAmmo { }; class ACE_G_40mm_Practice: ACE_G_40mm_HE { GVAR(skip) = 1; + GVAR(force) = 0; }; class ACE_G40mm_HE_VOG25P: G_40mm_HE { GVAR(skip) = 0; diff --git a/addons/frag/XEH_PREP.hpp b/addons/frag/XEH_PREP.hpp index 926cbaab0c..2fed1630f2 100644 --- a/addons/frag/XEH_PREP.hpp +++ b/addons/frag/XEH_PREP.hpp @@ -1,3 +1,4 @@ +PREP(dev_debugAmmo); PREP(doSpall); PREP(fired); diff --git a/addons/frag/functions/fnc_dev_debugAmmo.sqf b/addons/frag/functions/fnc_dev_debugAmmo.sqf new file mode 100644 index 0000000000..1323639621 --- /dev/null +++ b/addons/frag/functions/fnc_dev_debugAmmo.sqf @@ -0,0 +1,62 @@ +#define DEBUG_MODE_FULL +#include "script_component.hpp" + +params [["_debugMissing", true, [false]], ["_debugForce", false, [false]], ["_debugNonFrag", false, [false]]]; + +diag_log text format ["~~~~~~~~~~~~~Start [%1]~~~~~~~~~~~~~", _this]; + +private _allMagsConfigs = configProperties [configFile >> "CfgMagazines", "isClass _x", true]; +private _processedCfgAmmos = []; + +{ + private _ammo = toLower getText (_x >> "ammo"); + if ((_ammo != "") && {!(_ammo in _processedCfgAmmos)}) then { + _processedCfgAmmos pushBack _ammo; + + //Ignore mines/bombs + if (_ammo isKindOf "TimeBombCore") exitWith {}; + + _ammoConfig = configFile >> "CfgAmmo" >> _ammo; + + //Read configs and test if it would actually cause a frag, using same logic as FUNC(pfhRound) + private _skip = getNumber (_ammoConfig >> QGVAR(skip)); + private _explosive = getNumber (_ammoConfig >> "explosive"); + private _indirectRange = getNumber (_ammoConfig >> "indirectHitRange"); + private _force = getNumber (_ammoConfig >> QGVAR(force)); + private _fragPower = getNumber(_ammoConfig >> "indirecthit")*(sqrt((getNumber (_ammoConfig >> "indirectHitRange")))); + + private _shouldAdd = (_skip == 0) && {(_force == 1) || {_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}}}; + + if (_shouldAdd) then { + if (_debugForce && {((getNumber(_ammoConfig >> "hit")) < 5) || {_fragPower < 10}}) then { + diag_log text format ["Ammo [%1] from Mag [%2] - Weak but will still frag!",_ammo,configName _x]; + diag_log text format [" - _force=%1,_fragPower=%2",_force,_fragPower]; + }; + + _warn = false; + + _fragTypes = getArray (_ammoConfig >> "ACE_frag_CLASSES"); + if(_fragTypes isEqualTo []) then {_warn = true;}; + _c = getNumber(_ammoConfig >> "ACE_frag_CHARGE"); + if(_c == 0) then {_warn = true;}; + _m = getNumber(_ammoConfig >> "ACE_frag_METAL"); + if(_m == 0) then {_warn = true;}; + _k = getNumber(_ammoConfig >> "ACE_frag_GURNEY_K"); + if(_k == 0) then {_warn = true;}; + _gC = getNumber(_ammoConfig >> "ACE_frag_GURNEY_C"); + if(_gC == 0) then { _warn = true;}; + + if(_debugMissing && _warn) then { + diag_log text format ["Ammo [%1] from Mag [%2] MISSING frag configs:",_ammo,configName _x]; + diag_log text format [" - _c=%1,_m=%2,_k=%3,_gC=%4,_fragTypes=%5",_c,_m,_k,_gC,_fragTypes]; + }; + } else { + if (_debugNonFrag && {isArray (_ammoConfig >> "ACE_frag_CLASSES")}) then { + diag_log text format ["Ammo [%1] from Mag [%2] has frag configs but will NOT frag:",_ammo,configName _x]; + diag_log text format ["- skip=%1,explosive=%2,indirectHitRange=%3,force=%4,fragPower=%5",_skip,_explosive,_indirectRange,_force,_fragPower]; + }; + }; + }; +} forEach _allMagsConfigs; + +diag_log text format ["~~~~~~~~~~~~~End [%1-%2]~~~~~~~~~~~~~", count _allMagsConfigs, count _processedCfgAmmos]; diff --git a/optionals/compat_rhs_afrf3/CfgAmmo.hpp b/optionals/compat_rhs_afrf3/CfgAmmo.hpp index ead78866c1..3a00fdea68 100644 --- a/optionals/compat_rhs_afrf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_afrf3/CfgAmmo.hpp @@ -202,4 +202,20 @@ class CfgAmmo { ace_frag_skip = 1; ace_frag_force = 0; }; + + class G_40mm_HE; + class rhs_g_vog25: G_40mm_HE {}; + class rhs_g_vg40tb: rhs_g_vog25 { //Thermobaric + ace_frag_force = 0; + }; + class rhs_g_vg40sz: rhs_g_vog25 { //Flashbang + ace_frag_force = 0; + }; + class rhs_GDM40: rhs_g_vog25 { //Smoke + ace_frag_force = 0; + }; + class rhs_g_vg40md_white: rhs_g_vog25 { //Smoke + ace_frag_force = 0; + }; + }; From d79cbe0844b5368c7de0cfb80a0502b5f863643a Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Sat, 7 May 2016 22:37:58 +0200 Subject: [PATCH 60/89] Getmgrsdata update2 (#3736) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * correct mildot reticle LRPS/AMS/KHS correct mildot reticle LRPS/AMS/KHS * replace 1 tab with 1 space replace 1 tab with 1 space * fix tab * ace_scope : correct mildot reticle for LRPS and SOS 2D/PiP SFP scopes ace_scope : correct mildot reticle for LRPS and SOS 2D/PiP SFP scopes, same opticszoommax/min for each scopes : 1µ (1meter for 1000meter) / 4µ (4meter for 1000meter), LRPS : variable magnification / SOS : 2 magnifications * fnc_getMGRSdata.sqf update2 fnc_getMGRSdata.sqf update2 * fnc_getMGRSdata.sqf update2 add new maps, in alphabetic order now --- addons/common/functions/fnc_getMGRSdata.sqf | 81 +++++++++++++++------ 1 file changed, 57 insertions(+), 24 deletions(-) diff --git a/addons/common/functions/fnc_getMGRSdata.sqf b/addons/common/functions/fnc_getMGRSdata.sqf index 8da838848a..04c063ac79 100644 --- a/addons/common/functions/fnc_getMGRSdata.sqf +++ b/addons/common/functions/fnc_getMGRSdata.sqf @@ -23,38 +23,71 @@ private _lat = getNumber (configFile >> "CfgWorlds" >> _map >> "latitude"); private _altitude = getNumber (configFile >> "CfgWorlds" >> _map >> "elevationOffset"); _map = toLower _map; -if (_map in ["chernarus", "chernarus_summer", "chernarus_winter", "bootcamp_acr", "woodland_acr", "utes"]) then { _lat = 50; _altitude = 0; }; -if (_map in ["altis", "stratis"]) then { _lat = 40; _altitude = 0; }; -if (_map in ["takistan", "zargabad", "mountains_acr"]) then { _lat = 35; _altitude = 2000; }; -if (_map in ["shapur_baf", "provingGrounds_pmc"]) then { _lat = 35; _altitude = 100; }; +if (_map in ["abbottabad", "abbottabad1"]) then { _lat = 34; _altitude = 1256; }; +if (_map in ["abramia"]) then { _lat = 60; _altitude = 0; }; +if (_map in ["af_kandahar_province"]) then { _lat = 42; _altitude = 0; }; +if (_map in ["altis"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["angel"]) then { _lat = 38; _altitude = 0; }; +if (_map in ["anim_helvantis_v2"]) then { _lat = 50; _altitude = 0; }; +if (_map in ["australia"]) then { _lat = -25; _altitude = 0; }; +if (_map in ["bootcamp_acr"]) then { _lat = 50; _altitude = 0; }; +if (_map in ["bornholm"]) then { _lat = 55; _altitude = 0; }; +if (_map in ["bozcaada"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["caribou"]) then { _lat = 68; _altitude = 0; }; +if (_map in ["chernarus", "chernarus_summer", "chernarus_winter"]) then { _lat = 50; _altitude = 0; }; +if (_map in ["clafghan"]) then { _lat = 34; _altitude = 640; }; +if (_map in ["dakrong"]) then { _lat = 17; _altitude = 0; }; +if (_map in ["desert_e"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["esseker"]) then { _lat = 43; _altitude = 2000; }; if (_map in ["fallujah"]) then { _lat = 33; _altitude = 0; }; if (_map in ["fata"]) then { _lat = 33; _altitude = 1347; }; -if (_map in ["abbottabad"]) then { _lat = 34; _altitude = 1256; }; -if (_map in ["sfp_wamako"]) then { _lat = 14; _altitude = 0; }; -if (_map in ["sfp_sturko"]) then { _lat = 56; _altitude = 0; }; -if (_map in ["bornholm"]) then { _lat = 55; _altitude = 0; }; -if (_map in ["bozcaada", "imrali", "imralispring"]) then { _lat = 40; _altitude = 0; }; -if (_map in ["caribou"]) then { _lat = 68; _altitude = 0; }; -if (_map in ["namalsk"]) then { _lat = 65; _altitude = 0; }; -if (_map in ["mcn_aliabad"]) then { _lat = 36; _altitude = 0; }; -if (_map in ["clafghan"]) then { _lat = 34; _altitude = 640; }; -if (_map in ["sangin", "hellskitchen"]) then { _lat = 32; _altitude = 0; }; -if (_map in ["sara", "sara_dbe1", "saralite", "intro", "desert_e", "porto"]) then { _lat = 40; _altitude = 0; }; -if (_map in ["reshmaan"]) then { _lat = 35; _altitude = 2000; }; -if (_map in ["thirsk"]) then { _lat = 65; _altitude = 0; }; -if (_map in ["lingor", "lingor3"]) then { _lat = -4; _altitude = 0; }; -if (_map in ["panthera3"]) then { _lat = 46; _altitude = 0; }; +if (_map in ["gorgona"]) then { _lat = 43; _altitude = 0; }; +if (_map in ["hellskitchen", "hellskitchens"]) then { _lat = 32; _altitude = 0; }; +if (_map in ["hindukush"]) then { _lat = 36; _altitude = 0; }; +if (_map in ["imrali", "imralispring"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["intro"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["isladuala3"]) then { _lat = -19; _altitude = 0; }; +if (_map in ["jacobi"]) then { _lat = -19; _altitude = 0; }; +if (_map in ["kholm"]) then { _lat = 36; _altitude = 0; }; if (_map in ["kunduz"]) then { _lat = 37; _altitude = 0; }; -if (_map in ["angel"]) then { _lat = 38; _altitude = 0; }; -if (_map in ["porquerolles"]) then { _lat = 43; _altitude = 0; }; -if (_map in ["napf"]) then { _lat = 47; _altitude = 0; }; +if (_map in ["lingor", "lingor3"]) then { _lat = -4; _altitude = 0; }; +if (_map in ["lost", "lostw"]) then { _lat = 60; _altitude = 0; }; +if (_map in ["mcn_aliabad"]) then { _lat = 36; _altitude = 0; }; +if (_map in ["malvinas"]) then { _lat = -52; _altitude = 0; }; +if (_map in ["namalsk"]) then { _lat = 65; _altitude = 0; }; if (_map in ["mef_alaska"]) then { _lat = 60; _altitude = 5; }; -if (_map in ["australia"]) then { _lat = -25; _altitude = 0; }; +if (_map in ["mountains_acr"]) then { _lat = 35; _altitude = 2000; }; +if (_map in ["napf", "napfwinter"]) then { _lat = 47; _altitude = 0; }; +if (_map in ["panthera3"]) then { _lat = 46; _altitude = 0; }; if (_map in ["pja301"]) then { _lat = 42; _altitude = 0; }; if (_map in ["pja305"]) then { _lat = 0; _altitude = 0; }; if (_map in ["pja306"]) then { _lat = 35; _altitude = 300; }; if (_map in ["pja307"]) then { _lat = 17; _altitude = 0; }; -if (_map in ["pja308", "pja310"]) then { _lat = 36; _altitude = 0; }; +if (_map in ["pja308"]) then { _lat = 36; _altitude = 0; }; +if (_map in ["pja310"]) then { _lat = 36; _altitude = 0; }; +if (_map in ["porquerolles"]) then { _lat = 43; _altitude = 0; }; +if (_map in ["porto"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["provingGrounds_pmc"]) then { _lat = 35; _altitude = 100; }; +if (_map in ["reshmaan"]) then { _lat = 35; _altitude = 2000; }; +if (_map in ["sara", "sara_dbe1"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["saralite"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["sb3"]) then { _lat = 53; _altitude = 0; }; +if (_map in ["shapur_baf"]) then { _lat = 35; _altitude = 100; }; +if (_map in ["sfp_sturko"]) then { _lat = 56; _altitude = 0; }; +if (_map in ["sfp_wamako"]) then { _lat = 14; _altitude = 0; }; +if (_map in ["stratis"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["sugarlake"]) then { _lat = 29; _altitude = 0; }; +if (_map in ["takistan"]) then { _lat = 35; _altitude = 2000; }; +if (_map in ["thirsk"]) then { _lat = 65; _altitude = 0; }; +if (_map in ["tilos"]) then { _lat = 36; _altitude = 0; }; +if (_map in ["utes"]) then { _lat = 50; _altitude = 0; }; +if (_map in ["vt5"]) then { _lat = 61; _altitude = 100; }; +if (_map in ["wake"]) then { _lat = 19; _altitude = 0; }; +if (_map in ["wintermap"]) then { _lat = 61; _altitude = 0; }; +if (_map in ["wintertown", "wintertowna3"]) then { _lat = 39; _altitude = 0; }; +if (_map in ["woodland_acr"]) then { _lat = 50; _altitude = 0; }; +if (_map in ["xcam_prototype"]) then { _lat = 35; _altitude = 0; }; +if (_map in ["zargabad"]) then { _lat = 35; _altitude = 2000; }; private _UTM = [_long,_lat] call BIS_fnc_posDegToUTM; private _easting = _UTM select 0; From 2a5ec421487f08faf9e47fdfa7c98ff609d168f1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 7 May 2016 16:04:27 -0500 Subject: [PATCH 61/89] Repair - Improve wheel detection for RHS (#3760) * Repair - Improve backup wheel detection Fix #3759 * Cleanup --- addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf b/addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf index 2611d10b38..2ed50c5d0e 100644 --- a/addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf +++ b/addons/repair/functions/fnc_getWheelHitPointsWithSelections.sqf @@ -70,6 +70,8 @@ _wheelHitPointSelections = []; _bestIndex = -1; { if (_x != "") then { + //Filter out things that definitly aren't wheeels (#3759) + if ((toLower (_hitPoints select _forEachIndex)) in ["hitengine", "hitfuel", "hitbody"]) exitWith {TRACE_1("filter",_x)}; _xPos = _vehicle selectionPosition _x; if (_xPos isEqualTo [0,0,0]) exitWith {}; _xDist = _wheelCenterPos distance _xPos; From 7d063d099509924c90e1705f08699ca5acbcf612 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 7 May 2016 23:26:44 +0200 Subject: [PATCH 62/89] Add downloads count shield --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ead78c57f..37b5f2a626 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,15 @@

- + ACE3 Version ACE3 Issues + + ACE3 Downloads + BIF Thread From a0bd521a4058f9717ee827f3948a969e77c2434c Mon Sep 17 00:00:00 2001 From: jonpas Date: Sat, 7 May 2016 23:48:31 +0200 Subject: [PATCH 63/89] Remove difficulties component --- addons/difficulties/$PBOPREFIX$ | 1 - addons/difficulties/CfgDifficulties.hpp | 33 ------------------------ addons/difficulties/README.md | 12 --------- addons/difficulties/config.cpp | 15 ----------- addons/difficulties/script_component.hpp | 17 ------------ 5 files changed, 78 deletions(-) delete mode 100644 addons/difficulties/$PBOPREFIX$ delete mode 100644 addons/difficulties/CfgDifficulties.hpp delete mode 100644 addons/difficulties/README.md delete mode 100644 addons/difficulties/config.cpp delete mode 100644 addons/difficulties/script_component.hpp diff --git a/addons/difficulties/$PBOPREFIX$ b/addons/difficulties/$PBOPREFIX$ deleted file mode 100644 index 6280fc4731..0000000000 --- a/addons/difficulties/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\difficulties \ No newline at end of file diff --git a/addons/difficulties/CfgDifficulties.hpp b/addons/difficulties/CfgDifficulties.hpp deleted file mode 100644 index a65d31f1a5..0000000000 --- a/addons/difficulties/CfgDifficulties.hpp +++ /dev/null @@ -1,33 +0,0 @@ - -class CfgDifficulties { - class Mercenary { - class Flags { - armor[] = {0,0}; - friendlyTag[] = {0,0}; - enemyTag[] = {0,0}; - mineTag[] = {0,0}; - hud[] = {0,1};//{1,1}; - hudPerm[] = {0,0}; - hudWp[] = {0,0}; - hudWpPerm[] = {0,0}; - autoSpot[] = {0,1}; - map[] = {0,0}; - weaponCursor[] = {0,1};//{1,1}; - autoGuideAT[] = {0,0}; - clockIndicator[] = {0,0}; - 3rdPersonView[] = {0,0}; - autoAim[] = {0,0}; - unlimitedSaves[] = {0,0}; - deathMessages[] = {0,1};//{1,1}; - netStats[] = {0,1};//{1,1}; - vonID[] = {0,1}; - cameraShake[] = {1,0}; - hudGroupInfo[] = {0,0}; - extendetInfoType[] = {0,0}; - roughLanding[] = {0,0}; - windEnabled[] = {1,0}; - autoTrimEnabled[] = {0,0}; - stressDamageEnabled[] = {1,0}; - }; - }; -}; diff --git a/addons/difficulties/README.md b/addons/difficulties/README.md deleted file mode 100644 index 4aefb4570a..0000000000 --- a/addons/difficulties/README.md +++ /dev/null @@ -1,12 +0,0 @@ -ace_difficulties -================ - -Changes the elite difficulty setting to more closely resemble Arma 2. - - -## Maintainers - -The people responsible for merging changes to this component or answering potential questions. - -- [KoffeinFlummi](https://github.com/KoffeinFlummi) -- [commy2](https://github.com/commy2) diff --git a/addons/difficulties/config.cpp b/addons/difficulties/config.cpp deleted file mode 100644 index 34784706a0..0000000000 --- a/addons/difficulties/config.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"commy2"}; - authorUrl = "https://github.com/commy2/"; - VERSION_CONFIG; - }; -}; - -#include "CfgDifficulties.hpp" diff --git a/addons/difficulties/script_component.hpp b/addons/difficulties/script_component.hpp deleted file mode 100644 index b6f387b02f..0000000000 --- a/addons/difficulties/script_component.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#define COMPONENT difficulties -#include "\z\ace\addons\main\script_mod.hpp" - -// #define DEBUG_MODE_FULL -// #define DISABLE_COMPILE_CACHE -// #define CBA_DEBUG_SYNCHRONOUS -// #define ENABLE_PERFORMANCE_COUNTERS - -#ifdef DEBUG_ENABLED_DIFFICULTIES - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_ENABLED_DIFFICULTIES - #define DEBUG_SETTINGS DEBUG_ENABLED_DIFFICULTIES -#endif - -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file From b08af3fea627cd4529f5187c31dd4e996b2a212f Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 8 May 2016 13:42:45 +0200 Subject: [PATCH 64/89] Add read auto add objects setting from module --- addons/zeus/functions/fnc_moduleZeusSettings.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/zeus/functions/fnc_moduleZeusSettings.sqf b/addons/zeus/functions/fnc_moduleZeusSettings.sqf index 0b9c0f8dd8..0f3d720599 100644 --- a/addons/zeus/functions/fnc_moduleZeusSettings.sqf +++ b/addons/zeus/functions/fnc_moduleZeusSettings.sqf @@ -24,3 +24,4 @@ if !(_activated) exitWith {}; [_logic, QGVAR(radioOrdnance), "radioOrdnance"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(revealMines), "revealMines"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(remoteWind), "remoteWind"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(autoAddObjects), "autoAddObjects"] call EFUNC(common,readSettingFromModule); From a526d33aba5d39f1133211bdb2252ad5630fd302 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 8 May 2016 13:44:51 +0200 Subject: [PATCH 65/89] Fix inconsistent name for module setting --- addons/zeus/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zeus/CfgVehicles.hpp b/addons/zeus/CfgVehicles.hpp index 332f13d982..fbf63930c4 100644 --- a/addons/zeus/CfgVehicles.hpp +++ b/addons/zeus/CfgVehicles.hpp @@ -71,7 +71,7 @@ class CfgVehicles { }; }; }; - class GVAR(autoAddObjects) { + class autoAddObjects { displayName = CSTRING(AddObjectsToCurator); description = CSTRING(AddObjectsToCurator_desc); typeName = "BOOL"; From 74fd4b4b5260a63ae53de030e0d3882987a7b244 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 8 May 2016 13:47:35 +0200 Subject: [PATCH 66/89] Add run at settings initialized auto add objects --- addons/zeus/functions/fnc_addObjectToCurator.sqf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/zeus/functions/fnc_addObjectToCurator.sqf b/addons/zeus/functions/fnc_addObjectToCurator.sqf index 085fff09d1..176b55dfdc 100644 --- a/addons/zeus/functions/fnc_addObjectToCurator.sqf +++ b/addons/zeus/functions/fnc_addObjectToCurator.sqf @@ -15,6 +15,11 @@ params ["_object"]; +if !(EGVAR(common,settingsInitFinished)) exitWith { + TRACE_1("pushing to runAtSettingsInitialized", _this); + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(addObjectToCurator), _this]; +}; + if (!(_object getVariable [QGVAR(addObject), GVAR(autoAddObjects)])) exitWith {}; [{ From 505fa0d7737007ed03b4ee24924fb3e8daaf33f4 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 10 May 2016 11:50:59 +0200 Subject: [PATCH 67/89] add missing magazines, fix #3685 --- addons/ballistics/CfgWeapons.hpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 3f6835bbba..b2c6728a37 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -285,6 +285,8 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "30Rnd_556x45_Stanag_red", + "30Rnd_556x45_Stanag_green", "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", @@ -305,6 +307,8 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "30Rnd_556x45_Stanag_red", + "30Rnd_556x45_Stanag_green", "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", @@ -320,6 +324,8 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "30Rnd_556x45_Stanag_red", + "30Rnd_556x45_Stanag_green", "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", @@ -335,6 +341,8 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "30Rnd_556x45_Stanag_red", + "30Rnd_556x45_Stanag_green", "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", @@ -356,6 +364,8 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "30Rnd_556x45_Stanag_red", + "30Rnd_556x45_Stanag_green", "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", @@ -371,6 +381,8 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "30Rnd_556x45_Stanag_red", + "30Rnd_556x45_Stanag_green", "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", @@ -386,6 +398,8 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "30Rnd_556x45_Stanag_red", + "30Rnd_556x45_Stanag_green", "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", From 29e7dbf757f3a37094f0276f0d329185acda230c Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Tue, 10 May 2016 12:39:56 +0200 Subject: [PATCH 68/89] fnc_getMGRSdata.sqf update3 --- addons/common/functions/fnc_getMGRSdata.sqf | 38 +++++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/addons/common/functions/fnc_getMGRSdata.sqf b/addons/common/functions/fnc_getMGRSdata.sqf index 04c063ac79..2087b0c4bf 100644 --- a/addons/common/functions/fnc_getMGRSdata.sqf +++ b/addons/common/functions/fnc_getMGRSdata.sqf @@ -23,7 +23,7 @@ private _lat = getNumber (configFile >> "CfgWorlds" >> _map >> "latitude"); private _altitude = getNumber (configFile >> "CfgWorlds" >> _map >> "elevationOffset"); _map = toLower _map; -if (_map in ["abbottabad", "abbottabad1"]) then { _lat = 34; _altitude = 1256; }; +if (_map in ["abbottabad"]) then { _lat = 34; _altitude = 1256; }; //Abbottabad elevation 1256m (Wikipedia) if (_map in ["abramia"]) then { _lat = 60; _altitude = 0; }; if (_map in ["af_kandahar_province"]) then { _lat = 42; _altitude = 0; }; if (_map in ["altis"]) then { _lat = 40; _altitude = 0; }; @@ -34,21 +34,27 @@ if (_map in ["bootcamp_acr"]) then { _lat = 50; _altitude = 0; }; if (_map in ["bornholm"]) then { _lat = 55; _altitude = 0; }; if (_map in ["bozcaada"]) then { _lat = 40; _altitude = 0; }; if (_map in ["caribou"]) then { _lat = 68; _altitude = 0; }; +if (_map in ["catalina"]) then { _lat = 33; _altitude = 0; }; if (_map in ["chernarus", "chernarus_summer", "chernarus_winter"]) then { _lat = 50; _altitude = 0; }; +if (_map in ["chernobylzone", "chernobylzonea2"]) then { _lat = 51; _altitude = 0; }; if (_map in ["clafghan"]) then { _lat = 34; _altitude = 640; }; -if (_map in ["dakrong"]) then { _lat = 17; _altitude = 0; }; -if (_map in ["desert_e"]) then { _lat = 40; _altitude = 0; }; +if (_map in ["dakrong"]) then { _lat = 17; _altitude = 0; }; //Unsung Mod +if (_map in ["desert_e"]) then { _lat = 40; _altitude = 800; }; +if (_map in ["dya"]) then { _lat = 34; _altitude = 110; }; //Diyala Iraq - default elevationOffset if (_map in ["esseker"]) then { _lat = 43; _altitude = 2000; }; +if (_map in ["evergreen"]) then { _lat = 41; _altitude = 0; }; //Burgazada, Turkey - default elevationOffset if (_map in ["fallujah"]) then { _lat = 33; _altitude = 0; }; if (_map in ["fata"]) then { _lat = 33; _altitude = 1347; }; if (_map in ["gorgona"]) then { _lat = 43; _altitude = 0; }; -if (_map in ["hellskitchen", "hellskitchens"]) then { _lat = 32; _altitude = 0; }; +if (_map in ["hellskitchen", "hellskitchens"]) then { _lat = 32; _altitude = 900; }; //Sangin summer, Sangin winter - Sangin elevation 888m (Wikipedia) if (_map in ["hindukush"]) then { _lat = 36; _altitude = 0; }; if (_map in ["imrali", "imralispring"]) then { _lat = 40; _altitude = 0; }; if (_map in ["intro"]) then { _lat = 40; _altitude = 0; }; if (_map in ["isladuala3"]) then { _lat = -19; _altitude = 0; }; if (_map in ["jacobi"]) then { _lat = -19; _altitude = 0; }; +if (_map in ["kapaulio"]) then { _lat = 0; _altitude = 0; }; if (_map in ["kholm"]) then { _lat = 36; _altitude = 0; }; +if (_map in ["koplic"]) then { _lat = 42; _altitude = 0; }; if (_map in ["kunduz"]) then { _lat = 37; _altitude = 0; }; if (_map in ["lingor", "lingor3"]) then { _lat = -4; _altitude = 0; }; if (_map in ["lost", "lostw"]) then { _lat = 60; _altitude = 0; }; @@ -59,19 +65,20 @@ if (_map in ["mef_alaska"]) then { _lat = 60; _altitude = 5; }; if (_map in ["mountains_acr"]) then { _lat = 35; _altitude = 2000; }; if (_map in ["napf", "napfwinter"]) then { _lat = 47; _altitude = 0; }; if (_map in ["panthera3"]) then { _lat = 46; _altitude = 0; }; -if (_map in ["pja301"]) then { _lat = 42; _altitude = 0; }; -if (_map in ["pja305"]) then { _lat = 0; _altitude = 0; }; -if (_map in ["pja306"]) then { _lat = 35; _altitude = 300; }; -if (_map in ["pja307"]) then { _lat = 17; _altitude = 0; }; -if (_map in ["pja308"]) then { _lat = 36; _altitude = 0; }; -if (_map in ["pja310"]) then { _lat = 36; _altitude = 0; }; +if (_map in ["pianosa_aut"]) then { _lat = 43; _altitude = 0; }; //Pianosa, Italy - default elevationOffset +if (_map in ["pja305"]) then { _lat = 0; _altitude = 0; }; //G.O.S N'Ziwasogo +if (_map in ["pja306"]) then { _lat = 35; _altitude = 0; }; //G.O.S Kalu Khan +if (_map in ["pja307"]) then { _lat = 17; _altitude = 0; }; //F.S.F Daryah +if (_map in ["pja308"]) then { _lat = 36; _altitude = 0; }; //G.O.S Gunkizli +if (_map in ["pja310"]) then { _lat = 36; _altitude = 0; }; //G.O.S Al Rayak +if (_map in ["pja312"]) then { _lat = 16; _altitude = 0; }; //G.O.S Song Bin Tanh if (_map in ["porquerolles"]) then { _lat = 43; _altitude = 0; }; if (_map in ["porto"]) then { _lat = 40; _altitude = 0; }; -if (_map in ["provingGrounds_pmc"]) then { _lat = 35; _altitude = 100; }; +if (_map in ["provinggrounds_pmc"]) then { _lat = 35; _altitude = 100; }; if (_map in ["reshmaan"]) then { _lat = 35; _altitude = 2000; }; if (_map in ["sara", "sara_dbe1"]) then { _lat = 40; _altitude = 0; }; if (_map in ["saralite"]) then { _lat = 40; _altitude = 0; }; -if (_map in ["sb3"]) then { _lat = 53; _altitude = 0; }; +if (_map in ["sb3"]) then { _lat = 53; _altitude = 25; }; //TrpUebPl Einfelde Nord (Munster North Training Area, Germany) - default elevationOffset if (_map in ["shapur_baf"]) then { _lat = 35; _altitude = 100; }; if (_map in ["sfp_sturko"]) then { _lat = 56; _altitude = 0; }; if (_map in ["sfp_wamako"]) then { _lat = 14; _altitude = 0; }; @@ -81,10 +88,11 @@ if (_map in ["takistan"]) then { _lat = 35; _altitude = 2000; }; if (_map in ["thirsk"]) then { _lat = 65; _altitude = 0; }; if (_map in ["tilos"]) then { _lat = 36; _altitude = 0; }; if (_map in ["utes"]) then { _lat = 50; _altitude = 0; }; -if (_map in ["vt5"]) then { _lat = 61; _altitude = 100; }; +if (_map in ["vt5"]) then { _lat = 61; _altitude = 100; }; //Vt5, Suomi Finland - default elevationOffset if (_map in ["wake"]) then { _lat = 19; _altitude = 0; }; -if (_map in ["wintermap"]) then { _lat = 61; _altitude = 0; }; -if (_map in ["wintertown", "wintertowna3"]) then { _lat = 39; _altitude = 0; }; +if (_map in ["waziristan"]) then { _lat = 33; _altitude = 0; }; +if (_map in ["wintermap"]) then { _lat = 61; _altitude = 0; }; //Nordkvingo - default elevationOffset +if (_map in ["wintertown", "wintertowna3"]) then { _lat = 39; _altitude = 600; }; //U.S. state Kansas mean elevation 610m (Wikipedia) if (_map in ["woodland_acr"]) then { _lat = 50; _altitude = 0; }; if (_map in ["xcam_prototype"]) then { _lat = 35; _altitude = 0; }; if (_map in ["zargabad"]) then { _lat = 35; _altitude = 2000; }; From 980da168263b595674a9b602b2e9a36078793791 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 10 May 2016 10:09:52 -0500 Subject: [PATCH 69/89] FastRope Sounds - Fix Config, Merge PFEH, Add CC Attribution --- AUTHORS.txt | 1 + LICENSE | 2 ++ addons/fastroping/config.cpp | 1 + addons/fastroping/functions/fnc_fastRope.sqf | 2 +- .../functions/fnc_fastRopeLocalPFH.sqf | 19 +++++++------------ 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 46a5e50457..42923c77e5 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -112,6 +112,7 @@ Sniperwolf572 System98 SzwedzikPL Tachi +Tessa Elieff Toaster Tonic Tourorist diff --git a/LICENSE b/LICENSE index 037f1df2f3..f748d222de 100644 --- a/LICENSE +++ b/LICENSE @@ -26,6 +26,8 @@ Some folders of this project may contain a separate LICENSE file. Should that be the case, everything in that folder and all subfolders is subject to that license instead. + - ARMA PUBLIC LICENSE (\addons\apl) + - CreativeCommons Attributions 3.0 (\addons\fastroping\data\sounds) ============================================================================ Full GNU General Public License Text diff --git a/addons/fastroping/config.cpp b/addons/fastroping/config.cpp index a74abeb3b8..7275741f40 100644 --- a/addons/fastroping/config.cpp +++ b/addons/fastroping/config.cpp @@ -14,5 +14,6 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgMoves.hpp" +#include "CfgSounds.hpp" #include "CfgVehicles.hpp" #include "CfgWaypoints.hpp" diff --git a/addons/fastroping/functions/fnc_fastRope.sqf b/addons/fastroping/functions/fnc_fastRope.sqf index adeb536362..17991c538e 100644 --- a/addons/fastroping/functions/fnc_fastRope.sqf +++ b/addons/fastroping/functions/fnc_fastRope.sqf @@ -37,4 +37,4 @@ _vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; //Start server PFH asap [QGVAR(startFastRope), [_unit, _vehicle, _usableRope, _usableRopeIndex, false]] call EFUNC(common,serverEvent); moveOut _unit; -[FUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex]] call CBA_fnc_addPerFrameHandler; +[FUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex, ACE_diagTime]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf index 8334e07929..03df460f55 100644 --- a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" params ["_arguments", "_pfhHandle"]; -_arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex"]; +_arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex", "_timeToPlayRopeSound"]; _rope params ["_attachmentPoint", "_ropeTop", "_ropeBottom", "_dummy", "_hook", "_occupied"]; private ["_vectorUp", "_vectorDir", "_origin"]; @@ -29,22 +29,12 @@ if (animationState _unit != "ACE_FastRoping") exitWith { _unit disableCollisionWith _dummy; _unit attachTo [_dummy, [0, 0, -1.45]]; [_unit, "ACE_FastRoping", 2] call EFUNC(common,doAnimation); - - [{ - params ["_args", "_idPFH"]; - _args params ["_unit"]; - - if (isNull (attachedTo _unit)) exitWith { - [_idPFH] call CBA_fnc_removePerFrameHandler; - }; - - playSound QGVAR(Rope); - }, 1, [_unit]] call CBA_fnc_addPerFrameHandler; }; //End of fast rope if (isNull attachedTo _unit) exitWith { + TRACE_1("exit pfeh",_unit); [_unit, "", 2] call EFUNC(common,doAnimation); _unit setVectorUp [0, 0, 1]; @@ -52,3 +42,8 @@ if (isNull attachedTo _unit) exitWith { [_pfhHandle] call CBA_fnc_removePerFrameHandler; }; + +if (ACE_diagTime > _timeToPlayRopeSound) then { + _arguments set [4, (_timeToPlayRopeSound + 1)]; + playSound QGVAR(Rope); +}; From 518a873efdbe7f197aa7d48d1499666d57cd547a Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 10 May 2016 10:14:15 -0500 Subject: [PATCH 70/89] Add module readme --- addons/fastroping/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 addons/fastroping/README.md diff --git a/addons/fastroping/README.md b/addons/fastroping/README.md new file mode 100644 index 0000000000..49fcf00960 --- /dev/null +++ b/addons/fastroping/README.md @@ -0,0 +1,11 @@ +ace_fastroping +========== + +Introducing the ability to fastrope out of heliocopters. + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [BaerMitUmlaut](https://github.com/BaerMitUmlaut) +- [KoffeinFlummi](https://github.com/KoffeinFlummi) From c619bcb5a3822741865a56ff5ead2dd58106efce Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Tue, 10 May 2016 19:39:01 +0200 Subject: [PATCH 71/89] Fix "jacobi" latitude and elevationOffset --- addons/common/functions/fnc_getMGRSdata.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/functions/fnc_getMGRSdata.sqf b/addons/common/functions/fnc_getMGRSdata.sqf index 2087b0c4bf..2747752ce1 100644 --- a/addons/common/functions/fnc_getMGRSdata.sqf +++ b/addons/common/functions/fnc_getMGRSdata.sqf @@ -51,7 +51,7 @@ if (_map in ["hindukush"]) then { _lat = 36; _altitude = 0; }; if (_map in ["imrali", "imralispring"]) then { _lat = 40; _altitude = 0; }; if (_map in ["intro"]) then { _lat = 40; _altitude = 0; }; if (_map in ["isladuala3"]) then { _lat = -19; _altitude = 0; }; -if (_map in ["jacobi"]) then { _lat = -19; _altitude = 0; }; +if (_map in ["jacobi"]) then { _lat = 34; _altitude = 2000; }; //default elevationOffset if (_map in ["kapaulio"]) then { _lat = 0; _altitude = 0; }; if (_map in ["kholm"]) then { _lat = 36; _altitude = 0; }; if (_map in ["koplic"]) then { _lat = 42; _altitude = 0; }; From 53c9a96c772da960cd055745d4c8007c1f05a23b Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 10 May 2016 22:14:01 +0200 Subject: [PATCH 72/89] fix getWeaponState, fix #3777 --- .../common/functions/fnc_getWeaponMuzzles.sqf | 2 +- .../common/functions/fnc_getWeaponState.sqf | 26 ++++++++----------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/addons/common/functions/fnc_getWeaponMuzzles.sqf b/addons/common/functions/fnc_getWeaponMuzzles.sqf index d75a01f2e3..e252d879f9 100644 --- a/addons/common/functions/fnc_getWeaponMuzzles.sqf +++ b/addons/common/functions/fnc_getWeaponMuzzles.sqf @@ -18,7 +18,7 @@ private _muzzles = getArray (configFile >> "CfgWeapons" >> _weapon >> "muzzles") { if (_x == "this") then { - _muzzles set [_forEachIndex, _weapon]; + _muzzles set [_forEachIndex, configName (configFile >> "CfgWeapons" >> _weapon)]; }; } forEach _muzzles; diff --git a/addons/common/functions/fnc_getWeaponState.sqf b/addons/common/functions/fnc_getWeaponState.sqf index e7b7bb80ec..73e5897236 100644 --- a/addons/common/functions/fnc_getWeaponState.sqf +++ b/addons/common/functions/fnc_getWeaponState.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: unit - * 1: weapon + * 1: weapon (optional, default: units current weapon) * * Return Value: * 0: Attachements @@ -16,21 +16,19 @@ */ #include "script_component.hpp" -params ["_unit", "_weapon"]; +params [["_unit", objNull, [objNull]], ["_weapon", nil, [""]]]; + +if (isNil "_weapon") then { + _weapon = currentWeapon _unit; +}; + +private _attachments = [_unit weaponAccessories _weapon] param [0, ["","","",""]]; private _muzzles = _weapon call FUNC(getWeaponMuzzles); -private _weaponInfo = [["","","",""], primaryWeaponItems _unit, secondaryWeaponItems _unit, handgunItems _unit] select ((["", primaryWeapon _unit, secondaryWeapon _unit, handgunWeapon _unit] find _weapon) max 0); - // get loaded magazines and ammo -private _magazines = []; -private _ammo = []; - -{ - _magazines pushBack ""; - _ammo pushBack 0; - false -} count _muzzles; +private _magazines = _muzzles apply {""}; +private _ammo = _muzzles apply {0}; { if (_x select 2) then { @@ -44,6 +42,4 @@ private _ammo = []; false } count magazinesAmmoFull _unit; -_weaponInfo append [_muzzles, _magazines, _ammo]; - -_weaponInfo +[_attachments, _muzzles, _magazines, _ammo]; From f738b17db7dd02b7775537c42ddf1061ce4ab81d Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 10 May 2016 22:32:40 +0200 Subject: [PATCH 73/89] show virtual load in inventory menu --- .../functions/fnc_addLoadToUnitContainer.sqf | 1 + addons/movement/functions/fnc_getWeight.sqf | 13 ++++++++++++- addons/movement/functions/fnc_handleVirtualMass.sqf | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/addons/movement/functions/fnc_addLoadToUnitContainer.sqf b/addons/movement/functions/fnc_addLoadToUnitContainer.sqf index 3928d1c822..a79b2ab917 100644 --- a/addons/movement/functions/fnc_addLoadToUnitContainer.sqf +++ b/addons/movement/functions/fnc_addLoadToUnitContainer.sqf @@ -17,6 +17,7 @@ params [["_unit", objNull, [objNull]], ["_container", objNull, [objNull]], ["_virtualLoadToAdd", 0, [0]]]; if !(_container in [ + _unit, uniformContainer _unit, vestContainer _unit, backpackContainer _unit diff --git a/addons/movement/functions/fnc_getWeight.sqf b/addons/movement/functions/fnc_getWeight.sqf index 11dd8c4ee6..b64abc3623 100644 --- a/addons/movement/functions/fnc_getWeight.sqf +++ b/addons/movement/functions/fnc_getWeight.sqf @@ -17,7 +17,18 @@ params ["_unit"]; -private _weight = loadAbs _unit * 0.1; +private _virtualLoad = 0; + +{ + _virtualLoad = _virtualLoad + (_x getVariable [QGVAR(vLoad), 0]); +} forEach [ + _unit, + uniformContainer _unit, + vestContainer _unit, + backpackContainer _unit +]; + +private _weight = (loadAbs _unit + _virtualLoad) * 0.1; if (GVAR(useImperial)) then { _weight = format ["%1lb", (round (_weight * 100)) / 100]; diff --git a/addons/movement/functions/fnc_handleVirtualMass.sqf b/addons/movement/functions/fnc_handleVirtualMass.sqf index 5d71c58df4..13a7b77f9a 100644 --- a/addons/movement/functions/fnc_handleVirtualMass.sqf +++ b/addons/movement/functions/fnc_handleVirtualMass.sqf @@ -20,6 +20,7 @@ private _virtualLoad = 0; { _virtualLoad = _virtualLoad + (_x getVariable [QGVAR(vLoad), 0]); } forEach [ + _unit, uniformContainer _unit, vestContainer _unit, backpackContainer _unit From 38bb4f6c2921f9984f72a9ac05ff8c4ae14fe47b Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Tue, 10 May 2016 23:40:03 +0200 Subject: [PATCH 74/89] Adjusted weight of bodybag --- addons/medical/CfgWeapons.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/CfgWeapons.hpp b/addons/medical/CfgWeapons.hpp index 4bd5452794..235e3c154b 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -236,7 +236,7 @@ class CfgWeapons { descriptionShort = CSTRING(Bodybag_Desc_Short); descriptionUse = CSTRING(Bodybag_Desc_Use); class ItemInfo: InventoryItem_Base_F { - mass = 20; + mass = 7.4; }; }; }; From 078c1d585f003df0f07e536edc705340399c72c1 Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Wed, 11 May 2016 00:01:35 +0200 Subject: [PATCH 75/89] =?UTF-8?q?Add=20Kerama=20Islands=20by=20"Les=20V?= =?UTF-8?q?=C3=A9t=C3=A9rans"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add Kerama Islands by "Les Vétérans" with the correct latitude (default config latitude : 1°) --- addons/common/functions/fnc_getMGRSdata.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/common/functions/fnc_getMGRSdata.sqf b/addons/common/functions/fnc_getMGRSdata.sqf index 2747752ce1..44fc204638 100644 --- a/addons/common/functions/fnc_getMGRSdata.sqf +++ b/addons/common/functions/fnc_getMGRSdata.sqf @@ -53,6 +53,7 @@ if (_map in ["intro"]) then { _lat = 40; _altitude = 0; }; if (_map in ["isladuala3"]) then { _lat = -19; _altitude = 0; }; if (_map in ["jacobi"]) then { _lat = 34; _altitude = 2000; }; //default elevationOffset if (_map in ["kapaulio"]) then { _lat = 0; _altitude = 0; }; +if (_map in ["kerama"]) then { _lat = 26; _altitude = 0; }; //Kerama Islands, Japan - default elevationOffset if (_map in ["kholm"]) then { _lat = 36; _altitude = 0; }; if (_map in ["koplic"]) then { _lat = 42; _altitude = 0; }; if (_map in ["kunduz"]) then { _lat = 37; _altitude = 0; }; From 9364ae60dfd05d53a08d8d46df2c846a8bcd3d4b Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Wed, 11 May 2016 13:30:17 +0100 Subject: [PATCH 76/89] Fix spectator unit tree refreshing - Account for decrement in node index when culling the tree of sides/groups/units - Fix non-zero-based index `to` value when navigating the units in the tree --- .../functions/fnc_handleInterface.sqf | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/addons/spectator/functions/fnc_handleInterface.sqf b/addons/spectator/functions/fnc_handleInterface.sqf index a8a607d537..ea20d0fcdd 100644 --- a/addons/spectator/functions/fnc_handleInterface.sqf +++ b/addons/spectator/functions/fnc_handleInterface.sqf @@ -331,31 +331,40 @@ switch (toLower _mode) do { }; case "onunitsupdate": { _args params ["_tree"]; - private ["_cachedUnits","_cachedGrps","_cachedSides","_s","_g","_grp","_u","_unit","_side"]; + private ["_cachedUnits","_cachedGrps","_cachedSides","_sT","_gT","_uT","_s","_g","_u","_grp","_unit","_side"]; // Cache existing group and side nodes and cull removed data _cachedUnits = []; _cachedGrps = []; _cachedSides = []; - for "_s" from 0 to ((_tree tvCount []) - 1) do { - for "_g" from 0 to ((_tree tvCount [_s]) - 1) do { + // Track deleted nodes to account for decrease in index + _sT = _tree tvCount []; + for [{_s = 0;}, {_s < _sT}, {_s = _s + 1}] do { + _gT = _tree tvCount [_s]; + + for [{_g = 0;}, {_g < _gT}, {_g = _g + 1}] do { _grp = groupFromNetID (_tree tvData [_s,_g]); if (_grp in GVAR(groupList)) then { _cachedGrps pushBack _grp; _cachedGrps pushBack _g; - for "_u" from 0 to ((_tree tvCount [_s,_g])) do { + _uT = _tree tvCount [_s,_g]; + for [{_u = 0;}, {_u < _uT}, {_u = _u + 1}] do { _unit = objectFromNetId (_tree tvData [_s,_g,_u]); if (_unit in GVAR(unitList)) then { _cachedUnits pushBack _unit; } else { _tree tvDelete [_s,_g,_u]; + _u = _u - 1; + _uT = _uT - 1; }; }; } else { _tree tvDelete [_s,_g]; + _g = _g - 1; + _gT = _gT - 1; }; }; @@ -364,6 +373,8 @@ switch (toLower _mode) do { _cachedSides pushBack _s; } else { _tree tvDelete [_s]; + _s = _s - 1; + _sT = _sT - 1; }; }; From 1b1329b3507a8be5e52b7326985def6d624ebd50 Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Wed, 11 May 2016 16:01:07 +0100 Subject: [PATCH 77/89] Increase spectator unit tree refresh rate Reduce the time between automated refreshing of the unit tree. Also makes an initial call to the tree populating code upon first opening to remove the initial delay. --- addons/spectator/functions/fnc_handleInterface.sqf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/spectator/functions/fnc_handleInterface.sqf b/addons/spectator/functions/fnc_handleInterface.sqf index ea20d0fcdd..381f64505c 100644 --- a/addons/spectator/functions/fnc_handleInterface.sqf +++ b/addons/spectator/functions/fnc_handleInterface.sqf @@ -27,8 +27,11 @@ switch (toLower _mode) do { // Always show interface and hide map upon opening [_display,nil,nil,!GVAR(showInterface),GVAR(showMap)] call FUNC(toggleInterface); + // Initalize the unit tree + ["onUnitsUpdate",[(_display displayCtrl IDC_UNIT) controlsGroupCtrl IDC_UNIT_TREE]] call FUNC(handleInterface); + // Keep unit list and tree up to date - [FUNC(handleUnits), 21, _display] call CBA_fnc_addPerFrameHandler; + [FUNC(handleUnits), 9, _display] call CBA_fnc_addPerFrameHandler; // Handle 3D unit icons GVAR(iconHandler) = addMissionEventHandler ["Draw3D",FUNC(handleIcons)]; From f9c643b941321c8f928a37f53633f927ebb44c9c Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Wed, 11 May 2016 21:05:59 +0200 Subject: [PATCH 78/89] Modified fastroping thud sound --- .../data/sounds/fastroping_thud.ogg | Bin 20522 -> 7314 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/addons/fastroping/data/sounds/fastroping_thud.ogg b/addons/fastroping/data/sounds/fastroping_thud.ogg index 136a638ea9033a059138df2443eca54539344e4b..40fd823fcf0f17df67e7840ea0c8b227f9bbd555 100644 GIT binary patch delta 5824 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 delta 19135 zcmZ^~1yof**D!qP4v`K43F+<*>ArM#cO!L>ZjkPflI|7|1*A*3ba#tL3w#%S-tT?B zf35$n#V|8_&+fg?oR}p3iUJrw#oAgO1Pl7l?+))@XZ&qXEX*qyFK0J1TleQFn4r#o zkoDL9klSGXuKYI%ZJ$@dK>z1kmX*I)dHR2U#&G{AkwFo3Y+YW zG9*zPnI=qw1DP^a72HP%9S%~2YDmzNg(iY!OF*C?5E1}w&7r;ArR){x>x4%JOt2&8qTtFU+wyz871J%c0OT;mX@qhfIS10_@A1_0;X^ zy|BTkB~AG9w#?1A=62PPNOt5*cQD6ZaVS_1t)w`O|4m6qA{dFXBncctQ-aU9SL`tf zs2xxgYk;Gwi*e1Nw35KFG$n-kG4(Bk_828iTK@pi)dTqE)z94b{&N4v1S%Gk*0{JF zbcKQ(v(>m9l+=v4Y&n#a9DR$by!}4_l$0a$05MeFzW^wy8t70EnLZ3E7Esaz(W_){ z*0TR!?y=mhg!Y*KmwOEJ9KQJ&R7L&R<`zQt>Sl(|7bC{7}!?}&yo5ugFq%1i-QUNQEgWdiGFvv+q%) zB!TTypXZ***j4|X3sseuueOBF<%Z%wNw>tZ?~#V$$jg;C&;P@N_6P;{C_=&Va`ep* zGw50zuv~e`yxB1YR1P`%5{OxBNecMiTvdI_Gv4!DeQ62+wu6!}tEz`UXUn0BW9uPV zdiKmMf9Len?W>#d&7pI8_Rt(f!i1)(^rW10s?@yA*D$1lzj2ETwH3MN?^9Zd-o8|o2x`CNBw2|B31B#@!VP#1(@Lvu4l zLyw^ZiVQWNmOMRuNs69bH3;+*9tl(cOQI#iM^B8#^jAq3P|$M~K&A}AmUu2Z6374w zw0J#B%2tSuOWc41l0^W4(4XC2T#Wl1VAxQP|BH+iz31Vx+y4cMo~?qltHDSFRtc0WY`0Tf((pdhmOI)Sfp zQ#vMvl#DPzLLd+#CDiV*?9UEiA0UMChnigRxrya3djd7Hken!Al;VyfK}VCSMO>1T zj3WUxAhcA`lxXPLF_(_=)6=IuE8_)Chv$&4tWQn^|BcExvQQ1ZXsAZ^#}p|udQg20 zphX0V0u5$8N&4r&t>&K714lEr=-F3u@BK50dyQ}z#H_M;z`%W6ycr*W;_PL)V<3Vu zg!n*WH1mAl3A_X%#{P3mP>4Lkk*M67>IBjPnct|A#vbG~(z> zp1J>L1y~;CFWz$~Lh*2*c>j9PA(th=x3YCcVUz$B%3@M*wd=G6X-#$0bg#LdT;4egA zF9-Bx9}VftJ_-pJ4L;Jpl7J6Qjc*y|%Hp(SsVQK)j9^u$M#V|;^6cEP&>VsmNNBm6 z;n=4u(SR1nW{6%~W=Im4fd-m?mCO)K38||tq4fTu0IO)A!8jL?m;qZ-qQFSqbR>z&7wq@YQh*AIgaHu-Q_$g)gFqR7FCz$@ z914{@(b)n+F(SzR5;6|b;Rf>kipuc9U`b}JU^2a43?mT!bAnMo6OIC^_!vLOu$(>j z9yZZ7b^oe@6|z~P851R^G`}r(sVZf0&Mc52|2@SFY;IR#E-&s--hwNDNZ(9s&yX7e zbt5t?2>tD#B84gl0g(f=4x$uC1<^6Fd7u-(z_f?P!iIch-^lS;1cBfwIV7oHCPSt~7DqO71tCzcuZNQ4`Fwlno>eRD(P@`w`xP7ODRP za5?b>vCiNoxb%p@6YySqL@)Tuhk~|5d^*OvZ-Jb43Nh`HFnCxvt%Y7CXIr#dLqVCM zSRnxJ5xUyz)!)_W0Gg21v$P=4{y3xza$iiEv9P4vKBSNK<#m}w4+ptp6%NBpMYVb@ z>gS~$La^>09y@$NDaF;Cq*x&cwEACys8%CfvJj}1{6`QQ_qeemL47!*fr4JP_e>d^aNIkb_B^zK~CHrJ_wi$I93Hr%) zTz5ohtazM5f7wIXMhz1Qg7S6e`ey(j9WMj@ul}H$t(6)VgOZ{#U3Z~w8k*k+zvxLE zU@M9VlgV5lSw&^=|E=wt?=W!4|JJ>gl!__Pd$1Ass%Ojd)I4F}L8~>&_Ayo6p1%Zx z6ISOTZ#MlypAK++cRyp(XLELGQ|5oX_(JXyZs}4s#1*k>1rGZ) zsGIta2(19=7ZSVZH$IiFFy3GD5Tji)i2icc9KpAYVe#G_@=>7!yv*FkS-WeJE9PYtO^b#Bh z{AuiY7&vfblI7ijWOz=q5tG?}l#UNyRm3HNK~d1FSnY%bHJzv8u?xug6MdeG^VIS= zi!!&m><3)vt^xYQWN17C#tp zAxU<67+)z*HU1%@ly`HlB{1gQJCvZsrb`Wcnnb`X`ytmR%eNi=ijI&C?%7?-)=q~( z>-J(wu7V#g4Kr3sb27nD%3^^)y^_q#K&4rW|8K_mMvHY1z(&8{n3*r-3^5Z z`yc&RuyO%GD-8mx-6fCAe11Ip(_DOLLCLq5!cstfh{^7O7-+4qWzZ3VfoCf$ zy!n>{t>K--c6CO>qt9Ao99Wny4neA|W*wipu1vlT;9F1TRk%klyS)sY z_i7xrPO>8PDp~_^Q>@7TQRWChF48lfU=`b5xO+=BLCC3-sKBsz1WO}J2MVP5(_Q_0 z21~Zv^o?Eg$eHe%Hz&YYZ1P-{*85o>E}q=FFZ_OYy#BVGR41@TM!w|lPMEzT^lj2G z&tZc>VEL$tnian+#4ZB8=!BXz!N=vg(L^*LuVF7EsD*oCwOn#XLf=gRRM#-!ug1oK zkccIh__A&?eAl#xq5((BbU{28^omC4yI^YWx95~sIb`(%)ZBB2`cl4iy+XHIlBI`- z-b^>qWGJ6sO8)||X!I;%hJD(!{YT<{OS!31W$ZYm#MP7%YBe(>idDTFw-gJ%oLe~* zXJf~LrPf)m^3sFz4ZpW*+l{+@D|+pzNI<#YMyAvBY9f)9ZQ<>Sz>e)|iTKKgo3io! z9_Dl&%es6ffUHFJaBz$gQbPxN7mU+Kw|lZ@u;s;ywqc;c4?8{`0uPE+4OW+b4TJkg z-6tEds=Dz~LuNcROx9C4it{M(_x8=(LiJP*4iJd0LA&0F{-Uy}m6<2!!Ha8AZ#2+8 zB|WdrrD>N3^cF*So+h83teow4bw>9R{g?_+Oqf} zVPpDY-0&#T(`9khQ+T%q<%p}Pb+{V4b=v9!u7!!GJm=uRY>nQG;PIpT7+92d>xB|8op6^yv>0HrKG!cjX2L8_aZ*r8S;`#W$fdwd2z-5@qDxQf+{N4h?0 z%3aiX5xm{<2+KrA(bjXrQ(WIJ-NG{2k}9jAJaRVQk{_QM6K(DD>j}22?ZjQY=Bkj^ z33OJgd&!N&Sbti>L)Yr9hVPR}-gi%vOZ_FQL+CI*{5b9%|MXGyC=F!Y#&!9|B2U9O)-2dO+PY(K9D_qFTk>Fg?{Es zkWv3-a?!!h;@Cljuz^*H0HDt91$K+L(}xC>Vj6n_C866n*v|`1cOD6sxFdI5w{{h- zwl}Tb*<~`F1Dt;88GAz=HnaSo13>oOjf@-F^7Vw$#F>}U@TPi^XhIAX(L#eb)iz|K z!J-bjZR(?$Mbwx1!l>)3yy_`d8jo`0o00qEtQ7@ppC zW!7X@AN>4PKg-w(sFh5$Ew*;vYTY11FwVOb8(${F*Jk5$zc|boNz<;Tv2=hhL zNTUrkLuD@Dn|XBxyo)w!71jMN@Jhf{cyZ#WwO*AmfU$adxh4f;MQrFk>_>xR>l<89 zVjLY^OU1XVw6Qs|cskCckbEcHI!PXph}!PSwzLhPnD@e8%zxdi3JlZ!uouAL;N1bIK9lalf+q zt_RL8>cUIgc_)#HQqUdwd1Q@(qKh5k~8^VjzGxpIdE3&`Q{ zDYB!Ks#yv|_<%Q=(?EqXfnzDc{bT;5bN;$OeO=v>9i{(A7VwfBIpB#q$sM5d2ANN6 zlE4%JoyQga_$Xga>e#~v2^)F8yi@L-X6Y_LcerZIp0oL-YUni!nXk*w%^+B64o#fj z)lXER`g>Sj@W^l$J$Wx=Ue^<>c=N5OLe6Ns9)`zMDghoizq_yx2o@shO(uKBl5x|L zlrZl>SL_GOiP$*RRYwv5%z|fv`zek@T?g`#hez^Em~XyvHPSwNUr>AIGsLiX+!gG83iTe?YN;jZQA)HZGM{&Hc?dus+1YBtv? z(60w<6$8DG_Sw$OD?9g{wgz2u4zp-SYD*(6=`CHQ$}@0yvV8H`0}{dYx=%HVR}kAQ zOMjIos_J@W+{gCJFD#Ux4xiZafoMd&Ma7@z#} z2c~jh5$uN_YHM?*90lu@Vb*KN5r*PWz(A*w2C^wzAV)5h)vj%^{QZcdb{*)rNdbp~YQtRBM$O$vOY-FG# z*?e0x%aRi7c(`a=7ho2kR1j4-?o$Dsj@5 z1Yi}r$&7uo_P2l69Gvzt1jpigaxpJ|KEm#DuTZtJkH8%&R^t+TeVr*m?VX% zsv&W#$D_YpZmu+VRZbn-e|0;ENhRC)@>UkD6e)@Vs|?ZLo?CCLb1i{%W?+K3Wp;@G z#SY0m0x5L6Gjv(qDym!1#lZ=J_WkrId9|V^}c=IpH z8Oc_VR3yNG=hDq5qjox!fnLO{IL?*cBRVK#@i0B7va7|1TGUoim7x?#(|5# zpUcF~hTB>zzvo!ty|mW@)>V#01hrI+<_B{a`;xd71&)|#y{af&xE}scE$!URoROE_ zY)KNFK>80{t?U}9+AJEzRvNX}{4^3gY_a%*5ngHh$}HY;ADs~`(PMmi#Tkc{>esF5 z>}Wn-nMVy zABB+ZB^>qRbW7nR7^l%hidOXI#ZjpnSYn5c`HFv>Y3kR~w)PH{#tQq7`rP`i*QQT? zNdhehy2q@X^U5da9Lu^X#1fG+`@ElYnJ0*H?9!JMSSHuj%EAMTeG5vc7d!YjfK=_hf#K$pmzPSTG%`PYSe4K zCg-v?EObwyMSA~;cg$_)e4R9KJ_GZio2AdljN8m0YJZFCK*%c>bF%zJ$#=6{}+xm$Pqnclzvi?G$7jlS`XEPvoK64C`zO06qZOMc;Pi)V@kZ|Lc#RMiV!UpX zf!xvA1wE=}Kw6b8VD{M(5u< zlNa)G$096D^64Mn=IMk;{YclCF7BF;BZ3!~T^1vNDRul-npp**%tFB*<|@mO`DC5t zj`~AlO#Jq6Q49qrl^*VOnOE;#%!8CH%qs~9mifXA3$Q7| z@_Zo5oFkjtnfM$nDC0VcyQQsLp$d~nys|=MAodHs6C**!l-wnhh}(yoQBtyTgG z`kG}q_xjOBGHLDCs2AJLV%55wE@g`S?T<{yUtv;a7px4}URT%^J0D?iX5Ysw%Puwm z!g*?C9}o%kqS187gXk-#=PxKv?HevTwUrrI_$Qq$*dHJ^*A;zSmTo(p_7T~96Jw)w z%1h(wg-Vy`k(0lTd6)r~? zmYcT=#EI}F(vlz97cGb}if20ni49wUBqPpP3AtM(7T2UK0VAM^UL(FBpj)jXnr6JG4_cuKqd zT85ItRc(>@G&ivIbmd64E8mJpII~a`;3bde?8nEG;4Bz|_vZqY3Id4mhA7Kw zosS!y3@;hu5ho-TB4~M&znP#xd}vQFPeL{1UL=8+j@ofnsDB% zy|Alu@K@xwBoV{`nfz?8)PE_9w0;&ufH`Q-^GC=SEO>7wKg&u(M=)TJWG6Wck4?+K zZ<>nnPN!6QZmXV4Tk}E6S3nKu^HP8hPGm^7DrA-h@%Rca6X$@O>-2qCx2!g7%XEML z4mf7L+M9aR(bsw7xHYsU!>0Yq3Jz%{*;I;EMNAt92Glk;-V?cm9A?@zND|vkpLzb% z^XJ(pE#K$GD3mjDI`qYboBF44&WzeGE3r3;Z7T{|GRHBCZdX?er z%aKmabU-k0B`{30VIN1Cd@IqdE1eqd*=<}~S367S!&AEYqP^b$JDf-fpxCszE;RNB zf=ZWAvN7*qobB=2rxnID)=U3f51BD6sK+E?#)5(o(@A8d(%X!B_ zEfBc`T`dA@M=i>msFF^gH*0}QMzx;R3IYQ?wZ{of1nx)YMUT$oD@~I{6ESjfjYX~_ zt3`qPG3|#Hx29|Wha7PMy$L;QnuwQFhD*1G_Q>@wjgSw~3p16z-S5y&k>PNTx`z4T zVVs~T@N{3fA8WNRL?HZd|NWky>n5DTY1BlyX5;h7(l=Ct_H0S7SSKSaW}E$nDClcH z8}kxYz%U|kDn?<<%+v0wRC<#@y`!S_N8BS-_-+5S!{|JqrT^33`)uLCw=^J6nYml~ zi>3&z!k)9^Q+;HGQb=;wTN;xXNaV`NF;%qh$;b+>%J{p!iF>iRHSVa}<+I!UC(ps! zr^{F>zDFOokr?shiN~uV@_f9GY{}senV5V5f{ChiWR@yY=I!Z=*iUF%&IYOwY$!VVWz% zhtF*Tk*|m6zuyN+vH#tkz_yXjjkjVv#1n_&R(`gUqca^&2NwRtv8q*e(-U8f11V}ZN zQOSD|j`CNK{-fQ(fZ31457JvV2lwSa9!9$Xzvh*E$s&i(3TbbY;sX~utlvvvH>GEgQDiRF&$7^2Ly9}f!lo@`x*x4Rb4l}g| zV(x4@chWa<#K_`kkB>S;Yt1(L^zyY?Tz&5A>k%EYW|Que#ov$jR3q%Qm0BU* zjxJy?V88bHa-sg)%JEkT#9v+ga1Bf3o0!&Ho&7T1EK=oc`FvUEBV5RuM7C)};_dhZ znwf{D;BYUcHM3k|FQz6lAJq-2v1S$9l*AvT*4NzvnQEaar*2dlmF|@LG&~Xx15K3+8G{8Dof>agwk)QjNwcq zxTCv-cS-_{MVWO)SGcGHnYH3P0N4YcstjL-BlMTP6C#xijt_qVd*Zd-OXR10HRbCc z8V>WZ*yBBKH3}`I(s&0f`}E1H4$lWxz{hmX-KXpy1K2ut2FuEK`-l?g0iF`K*Om*_ z3zMMVa*S&h^FLWrJ4PS@IzghjEHhV~jy<~4+3#j4VwOyt&Jp2yW6K?}$&BMyV5v2Q z?sfP5@Q;ctdyExJZj+oS9(+b_u}9tgvykQo>puvJNK%48-FM5S{3X3XFkZ>WoCBp= ziw5BO%;L4 z@HFIui{a3`@2bbQ7`>6)zP6G#xF~OcLh6}x0rsX3B03w@kxJH9rfh@sFpt0MMYnPL z(0f9ZGG#pk3J|L=^Hb5DP&BXvepltux-&|V2Och8@xO<~oM$#T(q{3g+*Q)gj;;WM z#O|s;62BFFc}cxx4rFgc-4XNwIZtU5%Z{F_!7+-6c9%~&3oXJoaad0ye z!xr-{zQgvtV0`;lh&t?g5VNCbHQe-+k*URj;MasBmHy?EU^#-uzD+kZ7T5fTR|-ZA z_a+vWqr(*yz$XJwGj}P3YGwMPq>qU_@%7T%X`a+i z70`Eob8{>b*j0c7zwd;@s(?0oIMdkJbv#xPkNuwKL|R*a{%n*XwpDA&3+C*^T)JVJ z-i$txs%tWh4GPpB%}vldZXM-k1liD z)K8@WLy5h91Xomem*4M*7B=^2HRuCgS1z(d&A4C6)sy6V&tEi8SjV+!NJ_A@v3X%&PZr*c(XBFN&` zen{^E3ri0gFHQaARKLmkXH;&KGXFTy^O>&p#B#vCszROszj$l}$FrAu!>-y^IuFjl zHm+$Yf24YTc=@2fbYnkGKuf43i4;5J?rJPV>*R4e3E$R_`OBvR`6LyOz}P6kC27zq zU5+1`S`h2JlAA$BwbHi>-Qu28CiOOleg#bgkXRE#OmA_cx+jOB4~+BEBSfYJ7U7Qj zj{<--!W!ch!>DWEEjs9q^}EYHuY{-d(lTsIc)XU&rdfKT4Pm0IIj1YCRdQWp{kS;f zQg^B4`=z#gpNS`=(-PnH&umRSJ>1XHo>G(PgvdG$`ut82hJ32{YfrYzl)M&H7%5Vk%Osh1(1EgXf~5=;3~zG~x#4ahUv zuF1!v%uI_O9`ptG_MgI>n#2vcz`$b>-?;XI#`&^+7>dMs|8f;YvLe8X- zJmzeBnMhJKDoKr|BR^VHeEy)GcFCIr%YQLhegTebiX4*I9iH9t*K^R2m4f@Q;I>!Y zF?u^>n9)qGusi9)?K_qX;fD=^1wHaD@8Q4B%z{37zrNWN;@evXLY5BLf*a(R6rlH$ z2U?TLyWg5W@;{OUN)>Tm%&gBTWRBg>W_d7}t@LD75`GQ?u0X1qysmv7_R{XjRaP;0 ztzSyFnmpLcgxfnS5#`_o(gT$n@H&Rouk@W^u1S}NPJ%` znvkjymm7H*E&Lz=*jR%Q5oA*1xL)d>O}kashACNmW#ueR42cc=g#P&LQ)!*oGMp$MD%vG6LNQb9lJF1+gQ+}R+AWg-`ii%# zKFEkJr|i`*Oo6N6JAPvSn!pj-or+O;7+k55epN{S$blFay(%-s|=!gT+1W!E)nr znS3Q+EF3E|*xeUFGlXTdxWl2d#%s59CzWt|rz$ zWk~PuY3{1|N}5C}Gu4_eEyV*{YX?_VKk}v(S8VT>JZ#i27S2w8O>7Mz&5jo4(6*HC zBDY!5^{)HBUK*USYyUr*42G@gZO6y;H3EdpyE;3_G zNDd_o`#((xg#CPT&$WICvLk$x4Q$_ou&oSrivvdK!1SDIzRJ96<447_H*rAc~V@WaER})XKF3lZH^A=WZRuNUT?!no6RxJ!(A-^3v zmb4v#P1M#y<`}^6_qjc<)B5azO=O=Gufvz+x}U6cGTi97Ki@EH`i|^}^VwvnjQMuf zSVbK(9rT-@w?61!#nlU>x787xnBi^$KX@z+wgG5KFk;wXti2&K`qRJ!J92m;%HAI6 z3xM+~c@DqP889Lit1>>WpoZ0)ExtJkZP15z)??WNRc=c0^|4kq`t9DGR}$qq7!Hm> zhFqTLJBueoPaXCI=^O}1M>oU%?MdHMQJBlXfoC~iKl?Xx|9;}Pg) z@l%a(tHZ^--pNcOV=rSjz_m0v;ivb&@{IiS%22@ZIACJ#Pu^I5`rgZlmozA;s_YT` zGvBQhFCN&>3o${jXcYs|ohUM`?BuM64AZ9C@}6{38gKHqrN$W=H$GMMSRXEm%#Oe0jx=*XkRn^N-9sfOhu_z_95{cRGmYOf=FG8Ga35INnyZ9D+etlLHNAC=kF{k-+8^n8qF$y=R32`R} z=Kaf-8|2sQT3D3&yFU&)9$aiPqaO{BFr$4~W)$A$#mbQAb+U=^u{YwQBiy;Fw_n`b z=yt?6Cb(i&KX5at5~aB+?AkSsPrmYh@IAC2aabJmm1;{YaCh=P>njIn;UEE`@RGc# z9dr>3Vc>3R)6@IRO&uy&kjR^y`xzX-$}B@w-A#0oB2GHXTz(oYfTtq)Z3QYSC^^4O zXVu_7!J<|MA8WJfF$W*l>>BY=ShZ|uNQiMmtt`eGNNtdH>beUwkLj5tt@@_0ST5)# zaL-_#_VfM50cQ`=ZRotfim0Ewo^26JH`nQX~OrE1Y zZ~S#Ys1VvwAVk%BkY?u+>mw0ld6=nI8fA!5miuSXD7nn#;$3DT zJGEVxQQ@K78SfW#E1_&Pn1o$x7{-<(awc&B=cAbJgc-Ojw^2$PLk6KU$4m-@T|;M# ziAQjO34Gq05Js7lrDr;8rtjdj@EO5pr+j-1CJU9)v9kBAP3)4@ zw1qd(7EJLJEeF-pI+T3tWgMd~82n>$xtO%`TmF0%E*(`H$160?Y7J`!jE`H6APQWm z0jCn1uL)o0#5isxDqTDK2I>wT6VovY_(yNdBZpH;);STBMCc^sG1 z)387<%&GaT#6f0b^2y9c-?>ip(_e`0-`s;)oYIZ!Zi<%3c0{)#qI%jPJ?2_8?1(9- zP`4kF{(x#Pz1>DdsstGH??Ge*!8}p16&xTBci+3<4&B8G<-P4kD|XL;G=iY5<3E9h zepjNkgbUwq7GtU4=zu(2{4cE<<9sWI^`lDp37MmNS9&!Vk(QmCeg4QZ)c*FR4H)+m zM+L&H2Q`};dqMj)7Jrz|i$6z)1!V$EqQ+QTM{w1ePT#D0egXlc564Y-p=^lv&JG@FCaVH~sBSEVp?%avKRyx*A@ynpd!*eD|>!%av090PN* z%u@B!o<6{keI1fx&DerUXFsvEWMzee*durhy-K8E(tZ(hsc6=}mW2by*c6erEXCC@dw}D; z7>tsw*%X=TUUR-q{D5CwT$Hk|!w?d4UU*H6Q53lBEyd5CPj{r*Ll@a9;ip$YGe}4{ zac}y$Fnl4n0f5rS=Al`wD%RXz?es0V6UV;9Btue9>0SVVVZ?w?Cs!wV2F`GS;9e~^ zH)z=wuSP^!9V^dD=E-t`T{BNSS<60({JpDH;zrv`Zex5DaD?D)?G`aw98Li-cILio zzQF^ZZj)uR*{iI<_`)sn!okl9w_h*S5Q{ZO5i8DEmk=YVK}NKSw&+el7~Hgb^1I^V zwtPRD=Y)V|`No^D7P<1uBy^BhW`~l>Ss6)|hxfkVmagOHCr7h&6{fQVxN|}U@>#HS|fxRhX;O1XW$>SqUxUau`Xb>ar0|P63ZOwP|tr?5T z`qE?d8d}zljTJ3``w?z!xunW5CCXI{NH zcai`k9r}E%2!{P~Ly1DREp=0~%i<&C-$YDmS=kh(60mIT%z4hlsyRl>pu2!tWnsCr z%`G6P=P8QIGi^WI5nf^!llCJ;#qAm)IT&xJ%3?DtQhG)!TU4-~#}Y#4pnLRa_DxHU z{df7^uwa&fZSL!e%}5PZ?bx2=F)1hCoq`fTAMPg09UYy+QSvQT)8S*n69k!^A0@|e^beuJ$Z`oOs5-1UuI1!4lx?5lcg;0Y3A|f_b2}W zojmDD=a%LK8K!xyxu)(h z{m4|%Cm^0d@19DGB3Z1DY*gNir~2M=nAR$#<3-_NVRJk|%24&3NCd3_@x*ckEh5N> zhRJb!ANgZh*y2XVSMeqr@>~JUSK7U}py9RDfQ(Y@-(r_PH?F9R{}ilbvC=*skpKpK zc$g83VbZw%y@j+~BWd9*ko$IV)3!Q7Q3PhkxQM`7QpL5`uOnUZ>v3~SS6}m`Tt*dw z+0F5X+v2bB8B?osUx*loCW}aBOrGH*c?b0sor_sfy@}*X!ey(;Zn9ksMaLuZ_B{3* z$GB!CZMm_-^>TQtiKRHLMO`*KPYp~Y(M0Qt%aT~$VRBX2klU*c$e_}F=5yFJ-apve zl6~JzhS?V=T^am!f_U#kcv;`=T5X{u3XFA&JS;Lugr>@tj1GS2rCr3*cY42#xH;71 z2Dup;IT#SynM&2-SXAKq%dm?tw;~sYw>Q+&D;L`AbncA2;XAR;Cg?TuO56au0Ljic zcIBR9bSHq(s?vlMQO%^xxHG^NCY8Xd&<-bi|5X}KtU4^u**Vq0KqUHc)RdGU@TO=^ zcD%v-rGyPWgDx+VlCsCLWC+3tzxvw*vatdZHBQM>(8XHSw06_vlhW+l6RhSQ3ZJD# zW726tZZA<)A+CCPK?sfo|>AKCI5#5!Rdc`xC)3DzV6t>YLD+g@FX^q0%rvUkrt zTHF~u<#MIHag<{c((~+UZdehJeuwK+88yUlWgB+xg>i^1$CYTs%>4zZp0D@Ed10M~ zu(aw#;%v5Lw6_{2toccq;kPb3BvZ3RfQ#9z5Bx`L27+|bxj#*#Rq(C-IFCLK%inZ3 zQSxQ@H?eV3Rz;+z2GOIscOD--zvZZsgSIgvDiN7#lbuK=c~0P?2-|bN9U9S*F=Ghf9Nr9673eZoK4bnog@5Fu)90p~%b`Bi(b8F3| zwH72(Lu(Ys!g-xCd)io-bUYC37x#UuGMQQQcODA?LOyzR?n2Qggb!riJ%Sth6Kqo- zTnWDId}^}#vrOboA13mq%5LL)b4L`<;SRZWM3_)?p^HmfqTK8r2r*gVal|^!Hllqu z|HJ%LmUoM4`CULM8rjpw7x`q7WiJAQ9BCZht6i@fY2rk5eed zyTWy_6}CFvGfsp*@~$*Ql#L|GQMGFQzEo*A`n4ZtmoBtypadNCr*FI)PaqS z5|gtk(E9rU2K+5x^6$*U^XZW1Z|H9_%ta}7wik!GYcf-d%5p<2^%T`)73I`bRYj%5 zIk|W_*qQJGX@pqbSUX_R21-a(w_W#gP43AQ(NW~Kbwc;8iN6}TTkG?uCetU_x7N8! z9IW5L#Q>85SEKeTdkEL(Abqi0`7DIf@ISI^&7L(d6Ev!n$kg)oD03 z5yhdAg^3(avpUaGV@X{^5f$QK;NS8qjKMTg+`v>DkJp_Q~*FAnsUO(;Dq^*2l|psFtP)lguNBIBL$ z*SyKxU!OP-K)-j6uJj{ne{t00N|ugp6p=i%fhzejdGUG}uZRe`7aT_A)A6jhGzxER zEv;YbY37C=F7l1tGBFh?DnndzKA6|h56vk9o*O0czOyq3s2dyhT!s&AZcGVNfe^z# z4&_9>ZGBxkBcNabFn_|Nl+HsZk#Vi2246fh84VPIqbi}FmCJS?rZNSpPXrKA$<0-d5&5{8~nVFXuD}BohvZyvR z;nm&Z`pr#R1J8;{3F&A$x9vFQ-9fgrz{P{GpTM=RL{%+;Sy8!2ghx&*A> zL1Pou;o}b9CfuFy)D?zpm4JR_x!ohSzP%cst1K2R!{9E3Dd%t8Lj35?s1xLzB)0;1( z1+3Z1J`A6<8md&;iaX9_aY1M}2}KC`x|t1wzU;X{_6B%zj3<86`AMR-t!4y=xNx8f z@3Vv(uq7`2$^KU8rM;2MATw0V+qd?oP)(lq>CmZEx3AN^5*clk+Fu!o^#ru4s&3#S zYJHT#s17YQ>Oxq+y~g{t7EU4ZOwIL|83~vI+gtR3pFghOlcR7w%^R#=@tOG@(URJ= zRy54~$Q}*Pj3-%eQn{NxJzDw!**vAj_hjje%9bAcDY&wSdx;?Wdx~Jv$$2jOw;Odz z&I;e&W%$}M`ZuB(j+b}M&BU`xeGor}>CHFGU79OyJh>TXK;*I#!Q$2rigwI0-zpLD zsV5zo1Hso&d25ic9-#7aI<3Si_=aFfNp+Y!pITZUW49?)N&WuFi-A^TLvhdNGNuYI zy)t8J6OCGCbw=l`r7vCFR14qPCTO*^@O4x-XNYP%-JfE~e~D#ud*gLOt5dON)bqD) zVuxwzB!GE$;cEyfLZ?Y3;%j%W49Yp%T#&W36LwZ$WYlTJc+*Md*$gGM*37oT0n@zKWntGNp6=(qt_tYfbR#yNs`d zw9mqt=k1euY+Pl>T6GFto+R*mMm%iqLBbv7 zh-YJ0g0ZRzV@tC)1g{KU#Sjh%wg_daW}TycPJH@M!PzCy?|v(oJamPFjLLp}1@`vW zxJ))YQ}61eVHp2R#Oukm2w*D;EId;R{FV$2YL&)ayAFC4@~7Qh!PM|mcwre;Rgz*g zHQh=jtvAc6C0VEv!$FIzy%JoAAgvq=oS-u|a6Prh9jzs@u8N=lyi5->o zgu#lSm^G$L(-ZqL>vE~J5inwZ-?an6`Sr;GjtP_Dc4m<$$<6Re(w4Q6s|B&_2+9SLmfw(YKBn!KIkeP{d0Vhh; z0v_9m$+Q-gPHBP#=jg;PxM2VGx2v! zn5j6?!rNwR3e0j*)e*e;N@)!(A}?*VVe^!T7F<&!pS#inMF@Ms%5Up925uob#6c)> ztjXw}Ei;{z&g#S^*bD%4>kH+tA4tapwX9J60t3~x^Xg;bn*UbW@vC;2s~QN)cXjCP zBqBVCPiHltaoK+M1E&?YK)X3XuL1O#l{ns> zUw-6HVi7KgETGTb#)&)55lVYUWCv4EztuQ$Yd>W_w(*kM#4t{xc>!qy!FJoB;T-TZ z{i09^^SHBAQ~6zZNC03`3t>=#vj=^cj84H}*NE7W@{qD@F}J!d`^LUjTy(LACDt-( z9+YIQi$%HMD}^*&+5)jqAlg_?;ZYo!=C+r&6}NpBVp_SW5VR=(o<}P>?D)pnlh~>a zq91EdQBC)(T}bh1eU%ZM)qJB`HrIxrh_^BrlE1Iz_wkctomRqz|Aw9c$(eX1$DI<0 zHqzE(_kaUL|K7iEYt-|Sd9o+F&Q85{DTmQrd9PYy@Z{j>)O3l5Wf4*VUvLsHYR~8g zfe%IliB-o;_<#`>5J&8WeoLR1E$4FmXbE~dP+7A6@%?&HchoS&(5~h4=Ht*3aU6Ki^FpPg?5MB%yxJ(+99M2dvUW=DA2I z1#QP#Dy35*9X)1@BT0f}B#+rOjUZ`p#2;_y9F>2l#D#gpt`NxBb*M6FYQd9>R3KNp zk1O7uh(R{L2r`-+#45Sf& t`Z-4d2UzaeQg5Gsb4a0KgfGKzXOWxW6LSxd$HgP`vn}V=eKn}${THi5nCk!l From 5147f366a5b76664f2de8ef9b7f488c2535f7d14 Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 12 May 2016 17:11:35 +0200 Subject: [PATCH 79/89] Execute take nozzle actions only on progress bar success (#3783) * Execute take nozzle actions only on progress bar success - fix #3739, Prettify params * Fix animation on holster --- addons/refuel/functions/fnc_takeNozzle.sqf | 37 ++++++++++++++++------ addons/refuel/script_component.hpp | 1 + 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/addons/refuel/functions/fnc_takeNozzle.sqf b/addons/refuel/functions/fnc_takeNozzle.sqf index 75601002a3..87a212cd44 100644 --- a/addons/refuel/functions/fnc_takeNozzle.sqf +++ b/addons/refuel/functions/fnc_takeNozzle.sqf @@ -18,17 +18,16 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; - -[_unit, "forceWalk", "ACE_refuel", true] call EFUNC(common,statusEffect_set); +params [ + ["_unit", objNull, [objNull]], + ["_target", objNull, [objNull]], + ["_nozzle", objNull, [objNull]] +]; REFUEL_HOLSTER_WEAPON private _endPosOffset = [0, 0, 0]; if (isNull _nozzle) then { // func is called on fuel truck - [_target, "blockEngine", "ACE_Refuel", true] call EFUNC(common,statusEffect_set); - - _target setVariable [QGVAR(isConnected), true, true]; _endPosOffset = getArray (configFile >> "CfgVehicles" >> typeOf _target >> QGVAR(hooks)); if (count _endPosOffset == 2) then { if (_unit distance (_target modelToWorld (_endPosOffset select 0)) < _unit distance (_target modelToWorld (_endPosOffset select 1))) then { @@ -44,7 +43,11 @@ if (isNull _nozzle) then { // func is called on fuel truck [_unit, _target, _endPosOffset], { params ["_args"]; - _args params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]], ["_endPosOffset", [0,0,0], [[]], 3]]; + _args params [ + ["_unit", objNull, [objNull]], + ["_target", objNull, [objNull]], + ["_endPosOffset", [0, 0, 0], [[]], 3] + ]; private _newNozzle = "ACE_refuel_fuelNozzle" createVehicle position _unit; _newNozzle attachTo [_unit, [-0.02,0.05,-0.12], "righthandmiddle1"]; @@ -57,8 +60,12 @@ if (isNull _nozzle) then { // func is called on fuel truck }; _newNozzle setVariable [QGVAR(attachPos), _endPosOffset, true]; _newNozzle setVariable [QGVAR(source), _target, true]; + + [_target, "blockEngine", "ACE_Refuel", true] call EFUNC(common,statusEffect_set); + _target setVariable [QGVAR(isConnected), true, true]; _target setVariable [QGVAR(ownedNozzle), _newNozzle, true]; + [_unit, "forceWalk", "ACE_refuel", true] call EFUNC(common,statusEffect_set); _unit setVariable [QGVAR(isRefueling), true]; private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; if (_actionID != -1) then { @@ -87,7 +94,11 @@ if (isNull _nozzle) then { // func is called on fuel truck [_unit, _nozzle], { params ["_args"]; - _args params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; + _args params [ + ["_unit", objNull, [objNull]], + ["_nozzle", objNull, [objNull]] + ]; + if (_nozzle getVariable [QGVAR(jerryCan), false]) then { _nozzle attachTo [_unit, [0,1,0], "pelvis"]; } else { @@ -95,6 +106,7 @@ if (isNull _nozzle) then { // func is called on fuel truck }; _unit setVariable [QGVAR(nozzle), _nozzle, true]; + [_unit, "forceWalk", "ACE_refuel", true] call EFUNC(common,statusEffect_set); _unit setVariable [QGVAR(isRefueling), true]; private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; if (_actionID != -1) then { @@ -124,8 +136,13 @@ if (isNull _nozzle) then { // func is called on fuel truck if !(_nozzle getVariable [QGVAR(jerryCan), false]) then { [{ params ["_args", "_pfID"]; - _args params [["_unit", player, [objNull]], ["_source", objNull, [objNull]], ["_endPosOffset", [0, 0, 0], [[]], 3]]; - _args params ["", "", "", ["_nozzle", _unit getVariable [QGVAR(nozzle), objNull], [objNull]]]; + _args params [ + ["_unit", player, [objNull]], + ["_source", objNull, [objNull]], + ["_endPosOffset", [0, 0, 0], [[]], 3], + ["_nozzle", _unit getVariable [QGVAR(nozzle), objNull], [objNull]] + ]; + if (isNull _source || {_unit distance (_source modelToWorld _endPosOffset) > (REFUEL_HOSE_LENGTH - 2)} || {!alive _source}) exitWith { if !(isNull _nozzle) then { [_unit, _nozzle] call FUNC(dropNozzle); diff --git a/addons/refuel/script_component.hpp b/addons/refuel/script_component.hpp index 02a9660bdd..f05018d3e8 100644 --- a/addons/refuel/script_component.hpp +++ b/addons/refuel/script_component.hpp @@ -22,6 +22,7 @@ #define REFUEL_HOLSTER_WEAPON \ _unit setVariable [QGVAR(selectedWeaponOnRefuel), currentWeapon _unit]; \ + _unit call EFUNC(common,fixLoweredRifleAnimation); \ _unit action ["SwitchWeapon", _unit, _unit, 99]; #define REFUEL_UNHOLSTER_WEAPON \ From c591c7af64e60525ce0561c0c96fcaa7c7e2bf52 Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 12 May 2016 21:30:32 +0200 Subject: [PATCH 80/89] Add interaction support to Motorcycle class --- addons/interaction/CfgVehicles.hpp | 26 ++++++++++++++++++++++++++ addons/repair/CfgEventHandlers.hpp | 6 ++++++ addons/repair/CfgVehicles.hpp | 4 ++++ 3 files changed, 36 insertions(+) diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 6b6e0e69b0..b1c1cf852f 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -355,6 +355,32 @@ class CfgVehicles { }; }; + class Motorcycle: LandVehicle { + class ACE_Actions { + class ACE_MainActions { + displayName = CSTRING(MainAction); + selection = ""; + distance = 10; + condition = "true"; + class ACE_Passengers { + displayName = CSTRING(Passengers); + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); + }; + }; + }; + + class ACE_SelfActions { + class ACE_Passengers { + displayName = CSTRING(Passengers); + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); + }; + }; + }; + class Air; class Helicopter: Air { class ACE_Actions { diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp index 06647d8dd5..f10cccba3a 100644 --- a/addons/repair/CfgEventHandlers.hpp +++ b/addons/repair/CfgEventHandlers.hpp @@ -31,6 +31,12 @@ class Extended_InitPost_EventHandlers { serverInit = QUOTE(_this call DFUNC(addSpareParts)); }; }; + class Motorcycle { + class ADDON { + init = QUOTE(_this call DFUNC(addRepairActions)); + serverInit = QUOTE(_this call DFUNC(addSpareParts)); + }; + }; class Helicopter { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); diff --git a/addons/repair/CfgVehicles.hpp b/addons/repair/CfgVehicles.hpp index 0a1d6f55dc..da5f42e9a8 100644 --- a/addons/repair/CfgVehicles.hpp +++ b/addons/repair/CfgVehicles.hpp @@ -290,6 +290,10 @@ class CfgVehicles { MACRO_REPAIRVEHICLE }; + class Motorcycle: LandVehicle { + MACRO_REPAIRVEHICLE + }; + class Air; class Helicopter: Air { MACRO_REPAIRVEHICLE From f6e4bd7a6b42a43f37d6984820691415cdc5cff5 Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 12 May 2016 21:37:54 +0200 Subject: [PATCH 81/89] Remove redundant spare part adding --- addons/repair/CfgEventHandlers.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp index f10cccba3a..2d8f54b725 100644 --- a/addons/repair/CfgEventHandlers.hpp +++ b/addons/repair/CfgEventHandlers.hpp @@ -28,13 +28,11 @@ class Extended_InitPost_EventHandlers { class Tank { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - serverInit = QUOTE(_this call DFUNC(addSpareParts)); }; }; class Motorcycle { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - serverInit = QUOTE(_this call DFUNC(addSpareParts)); }; }; class Helicopter { From 58cc686aac9b21d802e9b5d20985329a31d7c715 Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 12 May 2016 21:49:45 +0200 Subject: [PATCH 82/89] Remove initial spare part adding for classes not Car or Tank, Improve addSpareParts --- addons/repair/CfgEventHandlers.hpp | 7 ++----- addons/repair/functions/fnc_addSpareParts.sqf | 12 ++---------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp index 06647d8dd5..a2f9587524 100644 --- a/addons/repair/CfgEventHandlers.hpp +++ b/addons/repair/CfgEventHandlers.hpp @@ -22,32 +22,29 @@ class Extended_InitPost_EventHandlers { class Car { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - serverInit = QUOTE(_this call DFUNC(addSpareParts)); + serverInit = QUOTE([ARR_3(_this select 0,1,'ACE_Wheel')] call DFUNC(addSpareParts)); }; }; class Tank { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - serverInit = QUOTE(_this call DFUNC(addSpareParts)); + serverInit = QUOTE([ARR_3(_this select 0,1,'ACE_Wheel')] call DFUNC(addSpareParts)); }; }; class Helicopter { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - serverInit = QUOTE(_this call DFUNC(addSpareParts)); exclude[] = {QEGVAR(fastroping,helper), "ACE_friesBase"}; }; }; class Plane { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - serverInit = QUOTE(_this call DFUNC(addSpareParts)); }; }; class Ship_F { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - serverInit = QUOTE(_this call DFUNC(addSpareParts)); }; }; }; diff --git a/addons/repair/functions/fnc_addSpareParts.sqf b/addons/repair/functions/fnc_addSpareParts.sqf index 74ea0d4c10..3d7247fcaa 100644 --- a/addons/repair/functions/fnc_addSpareParts.sqf +++ b/addons/repair/functions/fnc_addSpareParts.sqf @@ -21,8 +21,8 @@ params ["_vehicle", ["_amount", 1], ["_part", ""], ["_force", false]]; TRACE_2("params",_vehicle,_amount); -// Exit if ace_cargo is not loaded -if !(["ace_cargo"] call EFUNC(common,isModLoaded)) exitWith {}; +// Exit if ace_cargo is not loaded or no part supplied +if (!(["ace_cargo"] call EFUNC(common,isModLoaded)) || {_part == ""}) exitWith {}; // Collect until SettingsInitialized if (!EGVAR(common,settingsInitFinished)) exitWith { @@ -32,13 +32,5 @@ if (!EGVAR(common,settingsInitFinished)) exitWith { // Exit if not forced and add spare parts is disabled (after settings initted to make sure it really is) if (!_force && !GVAR(addSpareParts)) exitWith {}; -// Select appropriate part -if (_part == "") then { - if (_vehicle isKindOf "Car") then { _part = "ACE_Wheel" }; - if (_vehicle isKindOf "Tank") then { _part = "ACE_Track" }; -}; -// Exit if no appropriate part -if (_part == "") exitWith {}; - // Load ["AddCargoByClass", [_part, _vehicle, _amount]] call EFUNC(common,localEvent); From 2d2d5bc828366b5168a477c2557e2a9f26792c0e Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 12 May 2016 21:52:06 +0200 Subject: [PATCH 83/89] Readd mistakenly removed spare part adding --- addons/repair/CfgEventHandlers.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp index 2d8f54b725..f38dc21d23 100644 --- a/addons/repair/CfgEventHandlers.hpp +++ b/addons/repair/CfgEventHandlers.hpp @@ -28,6 +28,7 @@ class Extended_InitPost_EventHandlers { class Tank { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); + serverInit = QUOTE(_this call DFUNC(addSpareParts)); }; }; class Motorcycle { From e984fcf7154bf147c5ec98c40779a84a04055e6e Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 12 May 2016 21:56:12 +0200 Subject: [PATCH 84/89] Fix part name for Tank class --- addons/repair/CfgEventHandlers.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp index a2f9587524..6ec3a2cefd 100644 --- a/addons/repair/CfgEventHandlers.hpp +++ b/addons/repair/CfgEventHandlers.hpp @@ -28,7 +28,7 @@ class Extended_InitPost_EventHandlers { class Tank { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - serverInit = QUOTE([ARR_3(_this select 0,1,'ACE_Wheel')] call DFUNC(addSpareParts)); + serverInit = QUOTE([ARR_3(_this select 0,1,'ACE_Track')] call DFUNC(addSpareParts)); }; }; class Helicopter { From a950b2c2fe79d40263027d50a14c21270165d754 Mon Sep 17 00:00:00 2001 From: jonpas Date: Fri, 13 May 2016 16:33:15 +0200 Subject: [PATCH 85/89] Add canPush config entry to enable pushing on boats with mass higher than 2600 --- addons/interaction/CfgVehicles.hpp | 2 +- addons/interaction/XEH_PREP.hpp | 1 + addons/interaction/functions/fnc_canPush.sqf | 22 ++++++++++++++++++++ addons/interaction/functions/fnc_push.sqf | 3 +-- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 addons/interaction/functions/fnc_canPush.sqf diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 6b6e0e69b0..5a81d0b6fc 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -420,7 +420,7 @@ class CfgVehicles { class ACE_Push { displayName = CSTRING(Push); distance = 6; - condition = QUOTE(getMass _target <= 2600 && {alive _target} && {vectorMagnitude velocity _target < 3}); + condition = QUOTE(_target call FUNC(canPush)); statement = QUOTE(_this call FUNC(push)); showDisabled = 0; priority = -1; diff --git a/addons/interaction/XEH_PREP.hpp b/addons/interaction/XEH_PREP.hpp index 71facedc3f..be6158cdd5 100644 --- a/addons/interaction/XEH_PREP.hpp +++ b/addons/interaction/XEH_PREP.hpp @@ -32,6 +32,7 @@ PREP(handleScrollWheel); PREP(openDoor); // interaction with boats +PREP(canPush); PREP(push); PREP(switchLamp); diff --git a/addons/interaction/functions/fnc_canPush.sqf b/addons/interaction/functions/fnc_canPush.sqf new file mode 100644 index 0000000000..478c89ca45 --- /dev/null +++ b/addons/interaction/functions/fnc_canPush.sqf @@ -0,0 +1,22 @@ +/* + * Author: Jonpas + * Checks if the boat can be pushed. + * + * Arguments: + * 0: Target + * + * Return Value: + * Can Push + * + * Example: + * [target] call ace_interaction_fnc_canPush + * + * Public: No + */ +#include "script_component.hpp" + +params ["_target"]; + +alive _target && +{getMass _target <= 2600 || getNumber (configFile >> "CfgVehicles" >> typeOf _target >> QGVAR(canPush)) == 1} && +{vectorMagnitude velocity _target < 3} diff --git a/addons/interaction/functions/fnc_push.sqf b/addons/interaction/functions/fnc_push.sqf index 9a6c86a18e..bdeaf29012 100644 --- a/addons/interaction/functions/fnc_push.sqf +++ b/addons/interaction/functions/fnc_push.sqf @@ -18,8 +18,7 @@ params ["_boat", "_unit"]; -private "_newVelocity"; -_newVelocity = vectorDir _unit; +private _newVelocity = vectorDir _unit; _newVelocity set [2, 0.25]; _newVelocity = _newVelocity vectorMultiply 2; From d48bd3ca8359ba65f165b7978ed16b0e7d238fb3 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 13 May 2016 19:54:14 -0500 Subject: [PATCH 86/89] Remove old testmission addon --- addons/testmissions/$PBOPREFIX$ | 1 - .../ACETestingMap1.Stratis/description.ext | 17 - .../ACETestingMap1.Stratis/init.sqf | 1 - .../ACETestingMap1.Stratis/mission.sqm | 1248 ----------------- addons/testmissions/README.md | 11 - addons/testmissions/config.cpp | 20 - addons/testmissions/script_component.hpp | 17 - 7 files changed, 1315 deletions(-) delete mode 100644 addons/testmissions/$PBOPREFIX$ delete mode 100644 addons/testmissions/MPMissions/ACETestingMap1.Stratis/description.ext delete mode 100644 addons/testmissions/MPMissions/ACETestingMap1.Stratis/init.sqf delete mode 100644 addons/testmissions/MPMissions/ACETestingMap1.Stratis/mission.sqm delete mode 100644 addons/testmissions/README.md delete mode 100644 addons/testmissions/config.cpp delete mode 100644 addons/testmissions/script_component.hpp diff --git a/addons/testmissions/$PBOPREFIX$ b/addons/testmissions/$PBOPREFIX$ deleted file mode 100644 index c899a56127..0000000000 --- a/addons/testmissions/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\testmissions \ No newline at end of file diff --git a/addons/testmissions/MPMissions/ACETestingMap1.Stratis/description.ext b/addons/testmissions/MPMissions/ACETestingMap1.Stratis/description.ext deleted file mode 100644 index d61b2cf200..0000000000 --- a/addons/testmissions/MPMissions/ACETestingMap1.Stratis/description.ext +++ /dev/null @@ -1,17 +0,0 @@ -enableDebugConsole = 2; //note security risk - -// respawn = "GROUP"; -respawn = "BASE"; -// respawn = "BIRD"; -respawnDelay = 2; - -class Header { - gameType = Coop; - minPlayers = 1; - maxPlayers = 491; -}; - -onLoadName = "ACE3 Testing"; -// onLoadMission = ""; -// author = ""; -// loadScreen = ""; \ No newline at end of file diff --git a/addons/testmissions/MPMissions/ACETestingMap1.Stratis/init.sqf b/addons/testmissions/MPMissions/ACETestingMap1.Stratis/init.sqf deleted file mode 100644 index f2c95b8ca2..0000000000 --- a/addons/testmissions/MPMissions/ACETestingMap1.Stratis/init.sqf +++ /dev/null @@ -1 +0,0 @@ -enableSaving [false, false]; diff --git a/addons/testmissions/MPMissions/ACETestingMap1.Stratis/mission.sqm b/addons/testmissions/MPMissions/ACETestingMap1.Stratis/mission.sqm deleted file mode 100644 index 08bba0bcb1..0000000000 --- a/addons/testmissions/MPMissions/ACETestingMap1.Stratis/mission.sqm +++ /dev/null @@ -1,1248 +0,0 @@ -version=12; -class Mission -{ - addOns[]= - { - "A3_Characters_F_BLUFOR", - "a3_characters_f", - "a3_map_stratis", - "A3_armor_f_beta_APC_Tracked_02", - "A3_Characters_F_INDEP", - "ace_vehiclelock", - "A3_Soft_F_MRAP_01", - "A3_Soft_F_Car", - "ace_map", - "A3_Static_F_Gamma_AA", - "A3_Static_F_Mortar_01", - "A3_Static_F_Gamma", - "a3_static_f", - "ace_captives", - "A3_Armor_F_Slammer", - "A3_Air_F_Beta_Heli_Attack_01", - "ace_medical", - "ace_common", - "A3_Weapons_F_Ammoboxes", - "A3_Armor_F_EPB_APC_tracked_03", - "A3_Air_F_Heli_Light_01", - "A3_Air_F_Beta_Heli_Transport_01", - "A3_Armor_F_T100K", - "A3_Boat_F_Boat_Armed_01", - "A3_Boat_F_Civilian_Boat", - "A3_Boat_F_Boat_Transport_01", - "A3_Characters_F_Gamma", - "A3_Air_F_Gamma_UAV_02", - "A3_Static_F_Gamma_AT" - }; - addOnsAuto[]= - { - "A3_Characters_F_BLUFOR", - "a3_characters_f", - "A3_Characters_F_INDEP", - "ace_vehiclelock", - "ace_captives", - "A3_Air_F_Gamma_UAV_02", - "A3_Characters_F_Gamma", - "A3_Soft_F_MRAP_01", - "A3_Soft_F_Car", - "A3_Static_F_Gamma_AA", - "A3_Static_F_Mortar_01", - "A3_Static_F_Gamma", - "a3_static_f", - "A3_Armor_F_Slammer", - "ace_medical", - "ace_common", - "A3_Weapons_F_Ammoboxes", - "A3_Armor_F_EPB_APC_tracked_03", - "A3_Air_F_Beta_Heli_Attack_01", - "A3_Air_F_Heli_Light_01", - "A3_Air_F_Beta_Heli_Transport_01", - "A3_Armor_F_T100K", - "A3_Boat_F_Boat_Armed_01", - "A3_Boat_F_Civilian_Boat", - "A3_Boat_F_Boat_Transport_01", - "A3_Static_F_Gamma_AT", - "a3_map_stratis" - }; - randomSeed=709402; - class Intel - { - startWeather=0; - startWind=0; - startWaves=0.099999994; - forecastWeather=0; - forecastWind=0; - forecastWaves=0.099999994; - forecastLightnings=0.099999994; - year=2035; - month=7; - day=6; - hour=12; - minute=0; - startFogDecay=0.013; - forecastFogDecay=0.013; - }; - class Groups - { - items=19; - class Item0 - { - side="WEST"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1716.1971,5.5,5752.0244}; - azimut=-50.831005; - id=0; - side="WEST"; - vehicle="B_Soldier_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - init="this addItem ""ACE_key_civ"""; - description="Keys For CD"; - syncId=0; - synchronizations[]={3}; - }; - }; - }; - class Item1 - { - side="GUER"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1709.5989,5.5,5740.709}; - azimut=-67.220284; - id=1; - side="GUER"; - vehicle="I_soldier_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - init="this addItem ""ACE_key_east"""; - description="Keys for AB"; - syncId=1; - synchronizations[]={2}; - }; - }; - }; - class Item2 - { - side="LOGIC"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1712.0765,5.5,5743.5811}; - id=2; - side="LOGIC"; - vehicle="ACE_VehicleLock_ModuleSyncedAssign"; - leader=1; - lock="UNLOCKED"; - skill=0.60000002; - syncId=2; - synchronizations[]={1,6}; - }; - }; - }; - class Item3 - { - side="LOGIC"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1714.5892,5.5,5748.7002}; - id=3; - side="LOGIC"; - vehicle="ACE_VehicleLock_ModuleSyncedAssign"; - leader=1; - lock="UNLOCKED"; - skill=0.60000002; - syncId=3; - synchronizations[]={7,0}; - }; - }; - }; - class Item4 - { - side="LOGIC"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1715.7699,5.5,5745.752}; - class args - { - items=3; - class Item0 - { - value="1"; - parentCls="ACE_VehicleLock_ModuleSetup"; - typeName="LockVehicleInventory"; - }; - class Item1 - { - value="0"; - parentCls="ACE_VehicleLock_ModuleSetup"; - typeName="SetLockState"; - }; - class Item2 - { - value="15"; - parentCls="ACE_VehicleLock_ModuleSetup"; - typeName="DefaultLockpickStrength"; - }; - }; - id=4; - side="LOGIC"; - vehicle="ACE_VehicleLock_ModuleSetup"; - leader=1; - lock="UNLOCKED"; - skill=0.60000002; - }; - }; - }; - class Item5 - { - side="WEST"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1703.6329,5.5,5730.1909}; - azimut=119.576; - id=5; - side="WEST"; - vehicle="B_Soldier_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="Q"; - init="nul = this spawn {sleep 3; [_this] call ace_medical_fnc_setUnconscious};"; - description="Q Unconscious at start"; - }; - }; - }; - class Item6 - { - side="WEST"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1702.6882,5.5,5728.8687}; - azimut=103.13899; - id=6; - side="WEST"; - vehicle="B_Soldier_F"; - player="PLAY CDG"; - leader=1; - skill=0.60000002; - text="a1"; - description="Surrender At Start"; - syncId=4; - synchronizations[]={5}; - }; - }; - }; - class Item7 - { - side="LOGIC"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1701.0719,5.5,5727.5586}; - azimut=15.1769; - id=7; - side="LOGIC"; - vehicle="ace_captives_ModuleSurrender"; - leader=1; - lock="UNLOCKED"; - skill=0.60000002; - syncId=5; - synchronizations[]={4}; - }; - }; - }; - class Item8 - { - side="WEST"; - class Vehicles - { - items=4; - class Item0 - { - position[]={1703.7711,5.5,5715.2427}; - azimut=11.294894; - id=8; - side="WEST"; - vehicle="B_Soldier_TL_F"; - player="PLAY CDG"; - leader=1; - rank="CORPORAL"; - skill=0.60000002; - text="GrpNATO_A1_0"; - description="NATO Alpha 1 Fireteam Leader"; - }; - class Item1 - { - position[]={1706.2533,5.5,5712.9951}; - azimut=11.294894; - id=9; - side="WEST"; - vehicle="B_Soldier_LAT_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A1_1"; - description="NATO Alpha 1 Rifleman (AT)"; - }; - class Item2 - { - position[]={1709.2836,5.5,5712.2866}; - azimut=11.294894; - id=10; - side="WEST"; - vehicle="B_Soldier_AAR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A1_2"; - description="NATO Alpha 1 Assistant Automatic Rifleman"; - }; - class Item3 - { - position[]={1712.4042,5.5,5711.6323}; - azimut=11.294894; - id=11; - side="WEST"; - vehicle="B_Soldier_AR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A1_3"; - description="NATO Alpha 1 Automatic Rifleman"; - }; - }; - }; - class Item9 - { - side="WEST"; - class Vehicles - { - items=4; - class Item0 - { - position[]={1700.8379,5.5,5704.4658}; - azimut=11.294894; - id=12; - side="WEST"; - vehicle="B_Soldier_TL_F"; - player="PLAY CDG"; - leader=1; - rank="CORPORAL"; - skill=0.60000002; - text="GrpNATO_A2_0"; - description="NATO Alpha 2 Fireteam Leader"; - }; - class Item1 - { - position[]={1703.1456,5.5,5702.0576}; - azimut=11.294894; - id=13; - side="WEST"; - vehicle="B_Soldier_LAT_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A2_1"; - description="NATO Alpha 2 Rifleman (AT)"; - }; - class Item2 - { - position[]={1706.1492,5.5,5701.3618}; - azimut=11.294894; - id=14; - side="WEST"; - vehicle="B_Soldier_AAR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A2_2"; - description="NATO Alpha 2 Assistant Automatic Rifleman"; - }; - class Item3 - { - position[]={1709.3947,5.5,5700.7007}; - azimut=11.294894; - id=15; - side="WEST"; - vehicle="B_Soldier_AR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A2_3"; - description="NATO Alpha 2 Automatic Rifleman"; - }; - }; - }; - class Item10 - { - side="WEST"; - class Vehicles - { - items=4; - class Item0 - { - position[]={1696.9097,5.5,5693.7847}; - azimut=11.294894; - id=16; - side="WEST"; - vehicle="B_Soldier_TL_F"; - player="PLAY CDG"; - leader=1; - rank="CORPORAL"; - skill=0.60000002; - text="GrpNATO_A3_0"; - description="NATO Alpha 3 Fireteam Leader"; - }; - class Item1 - { - position[]={1699.3469,5.5,5691.3257}; - azimut=11.294894; - id=17; - side="WEST"; - vehicle="B_Soldier_LAT_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A3_1"; - description="NATO Alpha 3 Rifleman (AT)"; - }; - class Item2 - { - position[]={1702.4423,5.5,5690.4912}; - azimut=11.294894; - id=18; - side="WEST"; - vehicle="B_Soldier_AAR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A3_2"; - description="NATO Alpha 3 Assistant Automatic Rifleman"; - }; - class Item3 - { - position[]={1705.6521,5.5,5689.7666}; - azimut=11.294894; - id=19; - side="WEST"; - vehicle="B_Soldier_AR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_A3_3"; - description="NATO Alpha 3 Automatic Rifleman"; - }; - }; - }; - class Item11 - { - side="WEST"; - class Vehicles - { - items=4; - class Item0 - { - position[]={1685.6747,5.5,5720.1187}; - azimut=11.294894; - id=20; - side="WEST"; - vehicle="B_Soldier_TL_F"; - player="PLAY CDG"; - leader=1; - rank="CORPORAL"; - skill=0.60000002; - text="GrpNATO_B1_0"; - description="NATO Bravo 1 Fireteam Leader"; - }; - class Item1 - { - position[]={1688.1687,5.5,5717.9639}; - azimut=11.294894; - id=21; - side="WEST"; - vehicle="B_Soldier_LAT_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B1_1"; - description="NATO Bravo 1 Rifleman (AT)"; - }; - class Item2 - { - position[]={1691.0776,5.5,5717.2754}; - azimut=11.294894; - id=22; - side="WEST"; - vehicle="B_Soldier_AAR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B1_2"; - description="NATO Bravo 1 Assistant Automatic Rifleman"; - }; - class Item3 - { - position[]={1694.293,5.5,5716.6172}; - azimut=11.294894; - id=23; - side="WEST"; - vehicle="B_Soldier_AR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B1_3"; - description="NATO Bravo 1 Automatic Rifleman"; - }; - }; - }; - class Item12 - { - side="WEST"; - class Vehicles - { - items=4; - class Item0 - { - position[]={1682.364,5.5,5709.4131}; - azimut=11.294894; - id=24; - side="WEST"; - vehicle="B_Soldier_TL_F"; - player="PLAY CDG"; - leader=1; - rank="CORPORAL"; - skill=0.60000002; - text="GrpNATO_B2_0"; - description="NATO Bravo 2 Fireteam Leader"; - }; - class Item1 - { - position[]={1685.1151,5.5,5707.0654}; - azimut=11.294894; - id=25; - side="WEST"; - vehicle="B_Soldier_LAT_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B2_1"; - description="NATO Bravo 2 Rifleman (AT)"; - }; - class Item2 - { - position[]={1688.1718,5.5,5706.313}; - azimut=11.294894; - id=26; - side="WEST"; - vehicle="B_Soldier_AAR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B2_2"; - description="NATO Bravo 2 Assistant Automatic Rifleman"; - }; - class Item3 - { - position[]={1691.5254,5.5,5705.6113}; - azimut=11.294894; - id=27; - side="WEST"; - vehicle="B_Soldier_AR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B2_3"; - description="NATO Bravo 2 Automatic Rifleman"; - }; - }; - }; - class Item13 - { - side="WEST"; - class Vehicles - { - items=4; - class Item0 - { - position[]={1678.4825,5.5,5697.4468}; - azimut=11.294894; - id=28; - side="WEST"; - vehicle="B_Soldier_TL_F"; - player="PLAY CDG"; - leader=1; - rank="CORPORAL"; - skill=0.60000002; - text="GrpNATO_B3_0"; - description="NATO Bravo 3 Fireteam Leader"; - }; - class Item1 - { - position[]={1681.5645,5.5,5696.561}; - azimut=11.294894; - id=29; - side="WEST"; - vehicle="B_Soldier_LAT_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B3_1"; - description="NATO Bravo 3 Rifleman (AT)"; - }; - class Item2 - { - position[]={1684.6531,5.5,5695.8491}; - azimut=11.294894; - id=30; - side="WEST"; - vehicle="B_Soldier_AAR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B3_2"; - description="NATO Bravo 3 Assistant Automatic Rifleman"; - }; - class Item3 - { - position[]={1687.8109,5.5,5695.1021}; - azimut=11.294894; - id=31; - side="WEST"; - vehicle="B_Soldier_AR_F"; - player="PLAY CDG"; - skill=0.60000002; - text="GrpNATO_B3_3"; - description="NATO Bravo 3 Automatic Rifleman"; - }; - }; - }; - class Item14 - { - side="WEST"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1540.8328,-27.831757,6018.0283}; - azimut=4.41886; - special="FLY"; - id=32; - side="WEST"; - vehicle="B_UAV_02_CAS_F"; - isUAV=1; - leader=1; - skill=0.60000002; - }; - }; - }; - class Item15 - { - side="WEST"; - class Vehicles - { - items=1; - class Item0 - { - position[]={2861.0947,0,6407.8574}; - azimut=4.41886; - special="FLY"; - id=33; - side="WEST"; - vehicle="B_UAV_02_CAS_F"; - isUAV=1; - leader=1; - skill=0.60000002; - }; - }; - }; - class Item16 - { - side="WEST"; - class Vehicles - { - items=1; - class Item0 - { - position[]={1944.1785,0,6868.8906}; - azimut=4.41886; - special="FLY"; - id=34; - side="WEST"; - vehicle="B_UAV_02_CAS_F"; - isUAV=1; - leader=1; - skill=0.60000002; - }; - }; - }; - class Item17 - { - side="WEST"; - class Vehicles - { - items=4; - class Item0 - { - position[]={1713.3085,5.5,5725.0205}; - azimut=98.173798; - id=35; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - leader=1; - rank="LIEUTENANT"; - skill=0.60000002; - text="Medic2"; - description="Medic 2"; - }; - class Item1 - { - position[]={1712.2098,5.5,5727.1675}; - azimut=98.173798; - id=36; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="Medic1"; - description="Medic 1"; - }; - class Item2 - { - position[]={1711.6387,5.5,5725.041}; - azimut=98.173798; - id=37; - side="WEST"; - vehicle="B_medic_F"; - player="PLAY CDG"; - skill=0.60000002; - text="Medic3"; - description="Medic 3"; - }; - class Item3 - { - position[]={1710.0735,5.5,5726.4287}; - id=38; - side="WEST"; - vehicle="B_soldier_UAV_F"; - player="PLAY CDG"; - skill=0.60000002; - text="uavGuy"; - }; - }; - }; - class Item18 - { - side="WEST"; - class Vehicles - { - items=2; - class Item0 - { - position[]={1722.298,5.5,5733.4629}; - azimut=4.41886; - special="FLY"; - id=39; - side="WEST"; - vehicle="B_Soldier_F"; - player="PLAYER COMMANDER"; - leader=1; - skill=0.60000002; - text="R1"; - description="sp tester"; - }; - class Item1 - { - position[]={1722.7957,5.5,5732.481}; - azimut=4.41886; - special="FLY"; - id=40; - side="WEST"; - vehicle="B_Soldier_F"; - player="PLAY CDG"; - skill=0.60000002; - text="R2"; - description="sp tester2"; - }; - }; - }; - }; - class Vehicles - { - items=38; - class Item0 - { - position[]={1706.5913,5.5,5748.0903}; - azimut=-68.59301; - id=41; - side="EMPTY"; - vehicle="B_MRAP_01_F"; - leader=1; - skill=0.60000002; - text="car1"; - syncId=6; - synchronizations[]={2}; - }; - class Item1 - { - position[]={1707.5599,5.5,5753.0518}; - azimut=-65.45974; - id=42; - side="EMPTY"; - vehicle="B_MRAP_01_F"; - leader=1; - lock="LOCKED"; - skill=0.60000002; - text="car3"; - syncId=7; - synchronizations[]={3}; - }; - class Item2 - { - position[]={1708.7251,5.5,5757.8809}; - azimut=-65.45974; - id=43; - side="EMPTY"; - vehicle="C_Hatchback_01_F"; - leader=1; - lock="UNLOCKED"; - skill=0.60000002; - text="car4"; - }; - class Item3 - { - position[]={1704.4299,5.5,5742.8721}; - azimut=-68.59301; - id=44; - side="EMPTY"; - vehicle="C_Hatchback_01_F"; - leader=1; - lock="UNLOCKED"; - skill=0.60000002; - text="car0"; - init="this setVariable [""ACE_VehicleLock_lockSide"", east];"; - }; - class Item4 - { - position[]={1738.8502,5.5,5728.8525}; - azimut=101.05981; - id=45; - side="EMPTY"; - vehicle="B_static_AA_F"; - skill=0.60000002; - text="q1"; - }; - class Item5 - { - position[]={1738.4388,5.5,5726.1929}; - azimut=101.05981; - id=46; - side="EMPTY"; - vehicle="B_Mortar_01_F"; - skill=0.60000002; - text="q2"; - }; - class Item6 - { - position[]={1737.8582,5.5,5723.3979}; - azimut=101.05981; - id=47; - side="EMPTY"; - vehicle="B_HMG_01_high_F"; - skill=0.60000002; - text="q3"; - }; - class Item7 - { - position[]={1738.9786,5.5,5734.6968}; - azimut=104.535; - id=48; - side="EMPTY"; - vehicle="B_MBT_01_cannon_F"; - lock="UNLOCKED"; - skill=0.60000002; - }; - class Item8 - { - position[]={1734.713,5.5,5720.061}; - azimut=10.202663; - id=49; - side="EMPTY"; - vehicle="ACE_medicalSupplyCrate"; - leader=1; - skill=0.60000002; - }; - class Item9 - { - position[]={1737.2236,5.5,5719.5591}; - azimut=10.202663; - id=50; - side="EMPTY"; - vehicle="ACE_medicalSupplyCrate"; - leader=1; - skill=0.60000002; - }; - class Item10 - { - position[]={1733.2904,5.5,5717.6465}; - azimut=13.57355; - id=51; - side="EMPTY"; - vehicle="ACE_Box_Misc"; - leader=1; - skill=0.60000002; - }; - class Item11 - { - position[]={1736.1099,5.5,5717.1831}; - azimut=13.57355; - id=52; - side="EMPTY"; - vehicle="ACE_Box_Misc"; - leader=1; - skill=0.60000002; - }; - class Item12 - { - position[]={1732.4794,5.5,5715.4067}; - azimut=9.5156059; - id=53; - side="EMPTY"; - vehicle="Box_NATO_AmmoOrd_F"; - leader=1; - skill=0.60000002; - }; - class Item13 - { - position[]={1735.2601,5.5,5714.7891}; - azimut=9.5156059; - id=54; - side="EMPTY"; - vehicle="Box_NATO_AmmoOrd_F"; - leader=1; - skill=0.60000002; - }; - class Item14 - { - position[]={1743.4641,5.5,5753.5161}; - azimut=104.535; - id=55; - side="EMPTY"; - vehicle="B_MRAP_01_hmg_F"; - lock="UNLOCKED"; - skill=0.60000002; - }; - class Item15 - { - position[]={1741.916,5.5,5747.4302}; - azimut=104.535; - id=56; - side="EMPTY"; - vehicle="I_APC_tracked_03_cannon_F"; - lock="UNLOCKED"; - skill=0.60000002; - }; - class Item16 - { - position[]={1722.1113,5.5,5768.3818}; - azimut=193.13876; - id=57; - side="EMPTY"; - vehicle="B_Heli_Attack_01_F"; - skill=0.60000002; - }; - class Item17 - { - position[]={1733.6005,5.5,5765.2881}; - azimut=198.2417; - id=58; - side="EMPTY"; - vehicle="B_Heli_Light_01_armed_F"; - skill=0.60000002; - }; - class Item18 - { - position[]={1746.17,5.5,5764.1099}; - azimut=198.97742; - id=59; - side="EMPTY"; - vehicle="B_Heli_Transport_01_F"; - skill=0.60000002; - }; - class Item19 - { - position[]={1909.3875,10.094501,5668.21}; - azimut=4.41886; - id=60; - side="EMPTY"; - vehicle="O_MBT_02_cannon_F"; - skill=0.60000002; - }; - class Item20 - { - position[]={1724.0231,5.5,5722.8857}; - azimut=104.535; - id=61; - side="EMPTY"; - vehicle="Box_IND_Wps_F"; - skill=0.60000002; - }; - class Item21 - { - position[]={1724.6892,5.5,5724.7744}; - azimut=104.535; - id=62; - side="EMPTY"; - vehicle="Box_IND_Ammo_F"; - skill=0.60000002; - }; - class Item22 - { - position[]={1717.6512,5.5,5724.0181}; - azimut=104.535; - id=63; - side="EMPTY"; - vehicle="Box_IND_Wps_F"; - skill=0.60000002; - }; - class Item23 - { - position[]={1718.2023,5.5,5726.3066}; - azimut=104.535; - id=64; - side="EMPTY"; - vehicle="Box_IND_Ammo_F"; - skill=0.60000002; - }; - class Item24 - { - position[]={1733.6895,5.5,5706.4785}; - azimut=104.535; - id=65; - side="EMPTY"; - vehicle="Box_NATO_WpsLaunch_F"; - skill=0.60000002; - }; - class Item25 - { - position[]={1733.21,5.5,5704.1836}; - azimut=104.535; - id=66; - side="EMPTY"; - vehicle="Box_East_WpsLaunch_F"; - skill=0.60000002; - }; - class Item26 - { - position[]={1732.4906,5.5,5701.6831}; - azimut=104.535; - id=67; - side="EMPTY"; - vehicle="Box_IND_WpsLaunch_F"; - skill=0.60000002; - }; - class Item27 - { - position[]={1825.109,5.5,5676.3613}; - azimut=4.41886; - id=68; - side="EMPTY"; - vehicle="O_MBT_02_cannon_F"; - skill=0.60000002; - text="t1"; - }; - class Item28 - { - position[]={1894.5531,5.6621442,5745.1523}; - azimut=4.41886; - id=69; - side="EMPTY"; - vehicle="O_MBT_02_cannon_F"; - skill=0.60000002; - }; - class Item29 - { - position[]={1863.2545,5.5,5712.0615}; - azimut=4.41886; - id=70; - side="EMPTY"; - vehicle="O_MBT_02_cannon_F"; - skill=0.60000002; - }; - class Item30 - { - position[]={1740.923,5.5,5741.1685}; - azimut=104.535; - id=71; - side="EMPTY"; - vehicle="B_MBT_01_cannon_F"; - lock="UNLOCKED"; - skill=0.60000002; - }; - class Item31 - { - position[]={1721.363,5.5,5724.4956}; - azimut=104.535; - id=72; - side="EMPTY"; - vehicle="Box_NATO_Grenades_F"; - lock="UNLOCKED"; - skill=0.60000002; - }; - class Item32 - { - position[]={1722.3844,5.5,5727.0381}; - azimut=104.535; - id=73; - side="EMPTY"; - vehicle="Box_NATO_WpsSpecial_F"; - lock="UNLOCKED"; - skill=0.60000002; - }; - class Item33 - { - position[]={1644.8666,0,5751.0166}; - azimut=-19.956911; - id=74; - side="EMPTY"; - vehicle="B_Boat_Armed_01_minigun_F"; - skill=0.60000002; - }; - class Item34 - { - position[]={1639.6296,0,5741.1772}; - azimut=-19.956911; - id=75; - side="EMPTY"; - vehicle="B_Boat_Armed_01_minigun_F"; - skill=0.60000002; - }; - class Item35 - { - position[]={1636.3765,0,5727.1333}; - azimut=-19.9569; - id=76; - side="EMPTY"; - vehicle="C_Boat_Civil_01_F"; - skill=0.60000002; - }; - class Item36 - { - position[]={1652.0231,-0.71640843,5760.2349}; - azimut=-19.9569; - id=77; - side="EMPTY"; - vehicle="B_Boat_Transport_01_F"; - skill=0.60000002; - }; - class Item37 - { - position[]={1739.5898,5.5,5730.6455}; - azimut=101.06; - id=78; - side="EMPTY"; - vehicle="B_static_AT_F"; - skill=0.60000002; - text="q0"; - }; - }; -}; -class Intro -{ - addOns[]= - { - "a3_map_stratis" - }; - addOnsAuto[]= - { - "a3_map_stratis" - }; - randomSeed=13628778; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=7; - day=6; - hour=12; - minute=0; - startFogDecay=0.013; - forecastFogDecay=0.013; - }; -}; -class OutroWin -{ - addOns[]= - { - "a3_map_stratis" - }; - addOnsAuto[]= - { - "a3_map_stratis" - }; - randomSeed=8997795; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=7; - day=6; - hour=12; - minute=0; - startFogDecay=0.013; - forecastFogDecay=0.013; - }; -}; -class OutroLoose -{ - addOns[]= - { - "a3_map_stratis" - }; - addOnsAuto[]= - { - "a3_map_stratis" - }; - randomSeed=1617621; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=7; - day=6; - hour=12; - minute=0; - startFogDecay=0.013; - forecastFogDecay=0.013; - }; -}; diff --git a/addons/testmissions/README.md b/addons/testmissions/README.md deleted file mode 100644 index e8737f0ab6..0000000000 --- a/addons/testmissions/README.md +++ /dev/null @@ -1,11 +0,0 @@ -ace_testmissions -=========== - -Provides test missions. - - -## Maintainers - -The people responsible for merging changes to this component or answering potential questions. - -- None diff --git a/addons/testmissions/config.cpp b/addons/testmissions/config.cpp deleted file mode 100644 index 3a73a661d5..0000000000 --- a/addons/testmissions/config.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - VERSION_CONFIG; - }; -}; - -class CfgMissions { - class MPMissions { - class ACETestingMap1 { - briefingName = "ACE Testing Map 1"; - directory = QUOTE(PATHTO_R(MPMissions\ACETestingMap1.Stratis)); - }; - }; -}; diff --git a/addons/testmissions/script_component.hpp b/addons/testmissions/script_component.hpp deleted file mode 100644 index 718356494d..0000000000 --- a/addons/testmissions/script_component.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#define COMPONENT testmissions -#include "\z\ace\addons\main\script_mod.hpp" - -// #define DEBUG_MODE_FULL -// #define DISABLE_COMPILE_CACHE -// #define CBA_DEBUG_SYNCHRONOUS -// #define ENABLE_PERFORMANCE_COUNTERS - -#ifdef DEBUG_ENABLED_TESTMISSIONS - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_ENABLED_TESTMISSIONS - #define DEBUG_SETTINGS DEBUG_ENABLED_TESTMISSIONS -#endif - -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file From eb8390741b744d75c0ad0273eda61fd75b364b0b Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 14 May 2016 09:23:29 +0200 Subject: [PATCH 87/89] Change round down mass of body bag Mass is an integer. --- addons/medical/CfgWeapons.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/CfgWeapons.hpp b/addons/medical/CfgWeapons.hpp index 235e3c154b..1c752c2aea 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -236,7 +236,7 @@ class CfgWeapons { descriptionShort = CSTRING(Bodybag_Desc_Short); descriptionUse = CSTRING(Bodybag_Desc_Use); class ItemInfo: InventoryItem_Base_F { - mass = 7.4; + mass = 7; }; }; }; From 04b61ff32ea6ef0a1c96c3ce975689ea6e31f102 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 14 May 2016 10:37:29 +0200 Subject: [PATCH 88/89] Fix missing semicolon --- addons/medical/functions/fnc_reviveStateLoop.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_reviveStateLoop.sqf b/addons/medical/functions/fnc_reviveStateLoop.sqf index 3e55f7b7ce..77a48c9340 100644 --- a/addons/medical/functions/fnc_reviveStateLoop.sqf +++ b/addons/medical/functions/fnc_reviveStateLoop.sqf @@ -13,7 +13,7 @@ #include "script_component.hpp" -params ["_unit"] +params ["_unit"]; // If locality changed finish the local loop // @todo: reinitiate the loop elsewhere From c5275813a450670372e082e6db2853fdf8b7fd98 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 14 May 2016 10:49:09 +0200 Subject: [PATCH 89/89] use 'getUnitLoadout' instead of 'FUNC(getAllGear)' and deprecate it --- addons/common/XEH_postInit.sqf | 4 +- .../common/functions/fnc_assignedItemFix.sqf | 38 +++----------- addons/common/functions/fnc_getAllGear.sqf | 2 + addons/common/functions/fnc_setAllGear.sqf | 2 + addons/goggles/XEH_postInit.sqf | 4 +- addons/medical/XEH_postInit.sqf | 4 +- addons/nightvision/XEH_postInitClient.sqf | 2 +- addons/parachute/XEH_postInit.sqf | 3 +- addons/respawn/functions/fnc_handleKilled.sqf | 10 ++-- .../respawn/functions/fnc_handleRespawn.sqf | 6 ++- addons/respawn/functions/fnc_restoreGear.sqf | 49 ++++++++++--------- addons/scopes/XEH_postInit.sqf | 5 +- 12 files changed, 55 insertions(+), 74 deletions(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index a6b952062e..2b5637a78f 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -333,7 +333,7 @@ enableCamShake true; GVAR(OldPlayerVehicle) = vehicle objNull; GVAR(OldPlayerTurret) = [objNull] call FUNC(getTurretIndex); GVAR(OldPlayerWeapon) = currentWeapon objNull; -GVAR(OldPlayerInventory) = [objNull] call FUNC(getAllGear); +GVAR(OldPlayerInventory) = []; GVAR(OldPlayerVisionMode) = currentVisionMode objNull; GVAR(OldCameraView) = ""; GVAR(OldVisibleMap) = false; @@ -381,7 +381,7 @@ GVAR(OldIsCamera) = false; }; // "playerInventoryChanged" event - _data = [ACE_player] call FUNC(getAllGear); + _data = getUnitLoadout ACE_player; if !(_data isEqualTo GVAR(OldPlayerInventory)) then { // Raise ACE event locally GVAR(OldPlayerInventory) = _data; diff --git a/addons/common/functions/fnc_assignedItemFix.sqf b/addons/common/functions/fnc_assignedItemFix.sqf index d93409ce7c..3f454f83ff 100644 --- a/addons/common/functions/fnc_assignedItemFix.sqf +++ b/addons/common/functions/fnc_assignedItemFix.sqf @@ -31,37 +31,15 @@ GVAR(AssignedItemsShownItems) = [ ["playerInventoryChanged", { params ["_unit", "_assignedItems"]; - _assignedItems = _assignedItems select 17; + _assignedItems = _assignedItems param [9, ["","","","","",""]]; // ["ItemMap","ItemGPS","ItemRadio","ItemCompass","ItemWatch","NVGoggles"] - GVAR(AssignedItemsShownItems) = [true, true, true, true, true]; - - { - if !(_x in GVAR(AssignedItems)) then { - GVAR(AssignedItems) pushBack _x; - GVAR(AssignedItemsInfo) pushBack toLower getText (configFile >> "CfgWeapons" >> _x >> "ACE_hideItemType"); - }; - - switch (GVAR(AssignedItemsInfo) select (GVAR(AssignedItems) find _x)) do { - case ("map"): { - GVAR(AssignedItemsShownItems) set [0, false]; - }; - case ("compass"): { - GVAR(AssignedItemsShownItems) set [1, false]; - }; - case ("watch"): { - GVAR(AssignedItemsShownItems) set [2, false]; - }; - case ("radio"): { - GVAR(AssignedItemsShownItems) set [3, false]; - }; - case ("gps"): { - GVAR(AssignedItemsShownItems) set [4, false]; - }; - }; - false - } count _assignedItems; - - //systemChat str GVAR(AssignedItemsShownItems); + GVAR(AssignedItemsShownItems) = [ + !((_assignedItems select 0) isEqualTo "") && {getText (configFile >> "CfgWeapons" >> _assignedItems select 0 >> "ACE_hideItemType") != "map"}, + !((_assignedItems select 3) isEqualTo "") && {getText (configFile >> "CfgWeapons" >> _assignedItems select 3 >> "ACE_hideItemType") != "compass"}, + !((_assignedItems select 4) isEqualTo "") && {getText (configFile >> "CfgWeapons" >> _assignedItems select 4 >> "ACE_hideItemType") != "watch"}, + !((_assignedItems select 2) isEqualTo "") && {getText (configFile >> "CfgWeapons" >> _assignedItems select 2 >> "ACE_hideItemType") != "radio"}, + !((_assignedItems select 1) isEqualTo "") && {getText (configFile >> "CfgWeapons" >> _assignedItems select 1 >> "ACE_hideItemType") != "gps"} + ]; GVAR(AssignedItemsShownItems) params ["_showMap", "_showCompass", "_showWatch", "_showRadio", "_showGPS"]; diff --git a/addons/common/functions/fnc_getAllGear.sqf b/addons/common/functions/fnc_getAllGear.sqf index 715966b176..716793f7bd 100644 --- a/addons/common/functions/fnc_getAllGear.sqf +++ b/addons/common/functions/fnc_getAllGear.sqf @@ -33,6 +33,8 @@ */ #include "script_component.hpp" +ACE_DEPRECATED("ace_common_fnc_getAllGear","3.7.0","getUnitLoadout"); + params ["_unit"]; if (isNull _unit) exitWith {[ diff --git a/addons/common/functions/fnc_setAllGear.sqf b/addons/common/functions/fnc_setAllGear.sqf index 152eb4fd60..6334991796 100644 --- a/addons/common/functions/fnc_setAllGear.sqf +++ b/addons/common/functions/fnc_setAllGear.sqf @@ -18,6 +18,8 @@ */ #include "script_component.hpp" +ACE_DEPRECATED("ace_common_fnc_setAllGear","3.7.0","setUnitLoadout"); + params ["_unit", "_allGear", ["_clearAttachments", false], ["_clearBackpack", false]]; if (!local _unit) exitWith { diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 832c961178..3a038ed923 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -42,10 +42,10 @@ GVAR(surfaceCache) = ""; GVAR(surfaceCacheIsDust) = false; // init GlassesChanged eventhandler -GVAR(OldGlasses) = "#NULLSTRING"; +GVAR(OldGlasses) = ""; ["playerInventoryChanged", { - (_this select 1) params ["", "_currentGlasses"]; + private _currentGlasses = (_this select 1) param [7, ""]; if (GVAR(OldGlasses) != _currentGlasses) then { ["GlassesChanged", [ACE_player, _currentGlasses]] call EFUNC(common,localEvent); diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 5d29d22cec..8d8911a6bf 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -298,9 +298,7 @@ GVAR(lastHeartBeatSound) = ACE_time; ["isNotUnconscious", {!((_this select 0) getVariable ["ACE_isUnconscious", false])}] call EFUNC(common,addCanInteractWithCondition); // Item Event Handler -["playerInventoryChanged", { - [ACE_player] call FUNC(itemCheck); -}] call EFUNC(common,addEventHandler); +["playerInventoryChanged", FUNC(itemCheck)] call EFUNC(common,addEventHandler); if (hasInterface) then { ["PlayerJip", { diff --git a/addons/nightvision/XEH_postInitClient.sqf b/addons/nightvision/XEH_postInitClient.sqf index 5a6714a374..96badd59af 100644 --- a/addons/nightvision/XEH_postInitClient.sqf +++ b/addons/nightvision/XEH_postInitClient.sqf @@ -29,7 +29,7 @@ GVAR(ppEffectMuzzleFlash) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; // Setup the event handlers -["playerInventoryChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); +["playerInventoryChanged", FUNC(updatePPEffects)] call EFUNC(common,addEventHandler); ["playerVisionModeChanged", { _this call FUNC(updatePPEffects); _this call FUNC(onVisionModeChanged); diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf index 598661a3da..ad4044e6e5 100644 --- a/addons/parachute/XEH_postInit.sqf +++ b/addons/parachute/XEH_postInit.sqf @@ -43,5 +43,4 @@ GVAR(PFH) = false; // don't show speed and height when in expert mode ["infoDisplayChanged", {_this call FUNC(handleInfoDisplayChanged)}] call EFUNC(common,addEventHandler); -//[ACE_Player,([ACE_player] call EFUNC(common,getAllGear))] call FUNC(storeParachute); -["playerInventoryChanged", FUNC(storeParachute) ] call EFUNC(common,addEventHandler); +["playerInventoryChanged", FUNC(storeParachute)] call EFUNC(common,addEventHandler); diff --git a/addons/respawn/functions/fnc_handleKilled.sqf b/addons/respawn/functions/fnc_handleKilled.sqf index cd1ad33491..2b9509f39d 100644 --- a/addons/respawn/functions/fnc_handleKilled.sqf +++ b/addons/respawn/functions/fnc_handleKilled.sqf @@ -19,13 +19,9 @@ params ["_unit"]; // Saves the gear when the player! (and only him) is killed -if (ACE_player == _unit) then { - GVAR(unitGear) = []; - - if (GVAR(SavePreDeathGear)) then { - GVAR(unitGear) = [_unit] call EFUNC(common,getAllGear); - GVAR(unitGear) append [currentWeapon _unit, currentMuzzle _unit, currentWeaponMode _unit]; - }; +if (ACE_player == _unit && {GVAR(SavePreDeathGear)}) then { + _unit setVariable [QGVAR(unitGear), getUnitLoadout _unit]; + _unit setVariable [QGVAR(activeWeaponAndMuzzle), [currentWeapon _unit, currentMuzzle _unit, currentWeaponMode _unit]]; }; if (missionNamespace getVariable [QGVAR(showFriendlyFireMessage), false]) then { diff --git a/addons/respawn/functions/fnc_handleRespawn.sqf b/addons/respawn/functions/fnc_handleRespawn.sqf index ab5ecedbda..3b1ae1c86f 100644 --- a/addons/respawn/functions/fnc_handleRespawn.sqf +++ b/addons/respawn/functions/fnc_handleRespawn.sqf @@ -20,7 +20,11 @@ params ["_unit"]; // Restores the gear when the player respawns if (GVAR(SavePreDeathGear)) then { - [_unit, GVAR(unitGear)] call FUNC(restoreGear); + [ + _unit, + _unit getVariable QGVAR(unitGear), + _unit getVariable QGVAR(activeWeaponAndMuzzle) + ] call FUNC(restoreGear); }; // fix for setVariable public being lost on respawn for machines that JIP after the command was broadcasted diff --git a/addons/respawn/functions/fnc_restoreGear.sqf b/addons/respawn/functions/fnc_restoreGear.sqf index af3acb7fb4..a035bdd52d 100644 --- a/addons/respawn/functions/fnc_restoreGear.sqf +++ b/addons/respawn/functions/fnc_restoreGear.sqf @@ -19,30 +19,35 @@ params ["_unit", "_allGear", "_activeWeaponAndMuzzle"]; // restore all gear -[_unit, _allGear, true, true] call EFUNC(common,setAllGear); +if (!isNil "_allGear") then { + _unit setUnitLoadout _allGear; +}; // restore the last active weapon, muzzle and weaponMode -_activeWeaponAndMuzzle params ["_activeWeapon", "_activeMuzzle", "_activeWeaponMode"]; +if (!isNil "_activeWeaponAndMuzzle") then { + // @todo, replace this with CBA_fnc_selectWeapon after next CBA update + _activeWeaponAndMuzzle params ["_activeWeapon", "_activeMuzzle", "_activeWeaponMode"]; -if ( - (_activeMuzzle != "") && - {_activeMuzzle != _activeWeapon} && - {_activeMuzzle in getArray (configFile >> "CfgWeapons" >> _activeWeapon >> "muzzles")} -) then { - _unit selectWeapon _activeMuzzle; -} else { - if (_activeWeapon != "") then { - _unit selectWeapon _activeWeapon; - }; -}; - -if (currentWeapon _unit != "") then { - private _index = 0; - - while { - _index < 100 && {currentWeaponMode _unit != _activeWeaponMode} - } do { - _unit action ["SwitchWeapon", _unit, _unit, _index]; - _index = _index + 1; + if ( + (_activeMuzzle != "") && + {_activeMuzzle != _activeWeapon} && + {_activeMuzzle in getArray (configFile >> "CfgWeapons" >> _activeWeapon >> "muzzles")} + ) then { + _unit selectWeapon _activeMuzzle; + } else { + if (_activeWeapon != "") then { + _unit selectWeapon _activeWeapon; + }; + }; + + if (currentWeapon _unit != "") then { + private _index = 0; + + while { + _index < 100 && {currentWeaponMode _unit != _activeWeaponMode} + } do { + _unit action ["SwitchWeapon", _unit, _unit, _index]; + _index = _index + 1; + }; }; }; diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index 8f2adeb0b7..625f963f33 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -10,10 +10,7 @@ if (!hasInterface) exitWith {}; // Check inventory when it changes -["playerInventoryChanged", { - [ACE_player] call FUNC(inventoryCheck); -}] call EFUNC(common,addEventhandler); - +["playerInventoryChanged", FUNC(inventoryCheck)] call EFUNC(common,addEventhandler); // Instantly hide knobs when scoping in ["cameraViewChanged", {