From 8fc2e96367d472f2eaa4fa4e8aac2ca3d5296688 Mon Sep 17 00:00:00 2001 From: Lex Rivera Date: Fri, 17 Apr 2015 14:49:43 +0300 Subject: [PATCH 01/66] [realisticnames] Adjust SPMG name, fix some russian --- addons/realisticnames/stringtable.xml | 38 +++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 2b02d7f5b7..fe514290a3 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1650,32 +1650,32 @@ TODO: Navid 9.3 мм (бронза) - TODO: SPMG .338 - TODO: SPMG .338 - SPMG .338 - TODO: SPMG .338 - TODO: SPMG .338 + LWMMG .338 + LWMMG .338 + LWMMG .338 + LWMMG .338 + LWMMG .338 - TODO: SPMG .338 (MTP) - TODO: SPMG .338 (MTP) - SPMG .338 (MTP) - TODO: SPMG .338 (MTP) - TODO: SPMG .338 (MTP) + LWMMG .338 (MTP) + LWMMG .338 (MTP) + LWMMG .338 (MTP) + LWMMG .338 (MTP) + LWMMG .338 (MTP) - TODO: SPMG .338 (Black) - TODO: SPMG .338 (Black) - SPMG .338 (Noir) - TODO: SPMG .338 (Negro) - TODO: SPMG .338 (черный) + LWMMG .338 (Black) + LWMMG .338 (Black) + LWMMG .338 (Noir) + LWMMG .338 (Negro) + LWMMG .338 (Черный) - TODO: SPMG .338 (Sand) - TODO: SPMG .338 (Sand) + LWMMG .338 (Sand) + LWMMG .338 (Sand) SPMG .338 (Beige) - TODO: SPMG .338 (Arena) - TODO: SPMG .338 (песочный) + LWMMG .338 (Arena) + LWMMG .338 (Песочный) From 2ca20f740e1013b30a1a4a49e0d86a0b107dd80a Mon Sep 17 00:00:00 2001 From: Lex Rivera Date: Fri, 17 Apr 2015 14:53:55 +0300 Subject: [PATCH 02/66] [realisticnames] adjust M14 --- addons/realisticnames/stringtable.xml | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index fe514290a3..34e6d34fda 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1608,25 +1608,25 @@ TODO: Cyrus 9.3 мм (бронза) - TODO: Mk14 7.62 mm - TODO: Mk14 7.62 mm - Mk 14 7.62 mm - TODO: Mk14 7.62 mm - TODO: Mk14 7.62 мм + M14 7.62 mm + M14 7.62 mm + M14 7.62 mm + M14 7.62 mm + M14 7.62 мм - TODO: Mk14 7.62 mm (Camo) - TODO: Mk14 7.62 mm (Camo) - Mk 14 7.62 mm (Camo) - TODO: Mk14 7.62 mm (Camuflaje) - TODO: Mk14 7.62 мм (камо) + M14 7.62 mm (Camo) + M14 7.62 mm (Camo) + M14 7.62 mm (Camo) + M14 7.62 mm (Camuflaje) + M14 7.62 мм (Камо) - TODO: Mk14 7.62 mm (Olive) - TODO: Mk14 7.62 mm (Olive) - Mk 14 7.62 mm (Olive) - TODO: Mk14 7.62 mm (Oliva) - TODO: Mk14 7.62 мм (олива) + M14 7.62 mm (Olive) + M14 7.62 mm (Olive) + M14 7.62 mm (Olive) + M14 7.62 mm (Oliva) + M14 7.62 мм (Олива) TODO: Navid 9.3 mm From 163ac7bd4aca6e9544b1034470f84487a14171a7 Mon Sep 17 00:00:00 2001 From: Lex Rivera Date: Fri, 17 Apr 2015 15:28:30 +0300 Subject: [PATCH 03/66] [realisticnames] Adjust MK-I. Enable actual names --- addons/realisticnames/CfgWeapons.hpp | 11 +++-- addons/realisticnames/stringtable.xml | 70 +++++++++++++-------------- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 56d9e3b7c8..3cbe03f465 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -208,7 +208,7 @@ class CfgWeapons { class srifle_DMR_02_sniper_F: srifle_DMR_02_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_02_sniper"; //MAR-10 .338 (Sand)"; }; - + */ class DMR_03_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_03"; //Mk-I EMR 7.62 mm"; }; @@ -236,7 +236,7 @@ class CfgWeapons { class srifle_DMR_03_spotter_F: srifle_DMR_03_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_03_spotter"; //NATO DMR (provisional) spotter"; }; - + /* class DMR_04_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_04"; //ASP-1 Kir 12.7 mm"; }; @@ -264,7 +264,7 @@ class CfgWeapons { class srifle_DMR_05_tan_f: srifle_DMR_05_blk_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_05_tan"; //Cyrus 9.3 mm (Tan)"; }; - + */ class DMR_06_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_06"; //Mk14 7.62 mm"; }; @@ -278,6 +278,7 @@ class CfgWeapons { }; // marksmen mgs + /* class MMG_01_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_MMG_01"; //Navid 9.3 mm"; }; @@ -289,7 +290,7 @@ class CfgWeapons { class MMG_01_tan_F: MMG_01_hex_F { displayName = "$STR_ACE_RealisticNames_MMG_01_tan"; //Navid 9.3 mm (Tan)"; }; - + */ class MMG_02_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_MMG_02"; //SPMG .338"; }; @@ -304,7 +305,7 @@ class CfgWeapons { class MMG_02_sand_F: MMG_02_camo_F { displayName = "$STR_ACE_RealisticNames_MMG_02_sand"; //SPMG .338 (Sand)"; - };*/ + }; // vehicle weapons diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 34e6d34fda..1fcf116d1e 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1510,53 +1510,53 @@ TODO: MAR-10 .338 (песочный) - TODO: Mk-I EMR 7.62 mm - TODO: Mk-I EMR 7.62 mm - Mk-l EMR 7.62 mm - TODO: Mk-I EMR 7.62 mm - TODO: Mk-I EMR 7.62 мм + SG 556 7.62 mm + SG 556 7.62 mm + SG 556 7.62 mm + SG 556 7.62 mm + SG 556 7.62 мм - TODO: Mk-I EMR 7.62 mm (Black) - TODO: Mk-I EMR 7.62 mm (Black) - Mk-l EMR 7.62 mm (Noir) - TODO: Mk-I EMR 7.62 mm (Negro) - TODO: Mk-I EMR 7.62 мм (черный) + SG 556 7.62 mm (Black) + SG 556 7.62 mm (Black) + SG 556 7.62 mm (Noir) + SG 556 7.62 mm (Negro) + SG 556 7.62 мм (черный) - TODO: Mk-I EMR 7.62 mm (Khaki) - TODO: Mk-I EMR 7.62 mm (Khaki) - Mk-l EMR 7.62 mm (Kaki) - TODO: Mk-I EMR 7.62 mm (Caqui) - TODO: Mk-I EMR 7.62 мм (хаки) + SG 556 7.62 mm (Khaki) + SG 556 7.62 mm (Khaki) + SG 556 7.62 mm (Kaki) + SG 556 7.62 mm (Caqui) + SG 556 7.62 мм (хаки) - TODO: Mk-I EMR 7.62 mm (Sand) - TODO: Mk-I EMR 7.62 mm (Sand) - Mk-l EMR 7.62 mm (Beige) - TODO: Mk-I EMR 7.62 mm (Arena) - TODO: Mk-I EMR 7.62 мм (песочный) + SG 556 7.62 mm (Sand) + SG 556 7.62 mm (Sand) + SG 556 7.62 mm (Beige) + SG 556 7.62 mm (Arena) + SG 556 7.62 мм (песочный) - TODO: Mk-I EMR 7.62 mm (Camo) - TODO: Mk-I EMR 7.62 mm (Camo) - Mk-l EMR 7.62 mm (Camo) - TODO: Mk-I EMR 7.62 mm (Camuflaje) - TODO: Mk-I EMR 7.62 мм (камо) + SG 556 7.62 mm (Camo) + SG 556 7.62 mm (Camo) + SG 556 7.62 mm (Camo) + SG 556 7.62 mm (Camuflaje) + SG 556 7.62 мм (камо) - TODO: Mk-I EMR 7.62 mm (Woodland) - TODO: Mk-I EMR 7.62 mm (Woodland) - Mk-l EMR 7.62 mm (Woodland) - TODO: Mk-I EMR 7.62 mm (Bosque) - TODO: Mk-I EMR 7.62 мм (лесной) + SG 556 7.62 mm (Woodland) + SG 556 7.62 mm (Woodland) + SG 556 7.62 mm (Woodland) + SG 556 7.62 mm (Bosque) + SG 556 7.62 мм (лесной) - TODO: NATO DMR (provisional) spotter - TODO: NATO DMR (provisional) spotter - NATO DMR (provisoire) Observateur - TODO: NATO DMR (provisional) observador - TODO: NATO DMR (provisional) корректировщик + SG 556 7.62 mm (provisional) spotter + SG 556 7.62 mm (provisional) spotter + SG 556 7.62 mm (provisoire) Observateur + SG 556 7.62 mm (provisional) observador + SG 556 7.62 мм (provisional) корректировщик TODO: ASP-1 Kir 12.7 mm From 9155056a501456030ca71d3cd7f642f33f53fcbd Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 20 Apr 2015 15:11:14 +0200 Subject: [PATCH 04/66] Proof of concept wind code (custom debug output enabled) --- addons/weather/functions/fnc_getWind.sqf | 66 +++++++++++++++------ addons/weather/functions/fnc_updateWind.sqf | 2 +- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 54ec6efad3..9163d7e854 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -10,25 +10,53 @@ * Wind */ #include "script_component.hpp" -private ["_dir","_dirInc","_dirRange","_period","_periodPercent","_periodPosition","_return","_spd","_spdInc","_spdRange"]; -_return = [0,0,0]; -if(!isNil "ACE_WIND_PARAMS") then { - _dir = ACE_WIND_PARAMS select 0; - _dirRange = (ACE_WIND_PARAMS select 1) - (ACE_WIND_PARAMS select 0); - _spd = ACE_WIND_PARAMS select 2; - _spdRange = (ACE_WIND_PARAMS select 3) - (ACE_WIND_PARAMS select 2); - _period = ACE_WIND_PARAMS select 4; +// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece +_AB_Wind_Speed_Max = [[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]]; +_AB_Wind_Speed_Mean = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; +_AB_Wind_Speed_Min = [[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]]; +_AB_Wind_Direction_Probabilities = [[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 + +_PI = 3.14159265; +_c1 = 0.2 + random 0.2; +_c2 = 0.3 + random 0.2; +_c3 = 0.5 + random 0.2; +_c4 = 0.7 + random 0.2; - _periodPosition = (time - GVAR(wind_period_start_time)) min _period; - _periodPercent = _periodPosition/_period; - _spdInc = _spdRange * _periodPercent; - _dirInc = _dirRange * _periodPercent; - _spd = (_spd + _spdInc); - _dir = _dir + _dirInc; - if (_dir > 360) then {_dir = _dir - 360}; - if (_dir < 0) then {_dir = _dir + 360}; - - _return = [_spd * sin _dir, _spd * cos _dir, 0]; +_month = date select 1; +_windDirectionProbabilities = _AB_Wind_Direction_Probabilities select (_month - 1); +while {isNil QGVAR(windDirection)} do { + _random = random 1; + for "_i" from 0 to 7 do { + if (_random < (_windDirectionProbabilities select _i)) exitWith { + GVAR(windDirection) = 45 * _i; + }; + }; + GVAR(windDirection) = GVAR(windDirection) + (random 22.5) - (random 22.5); }; -_return; \ No newline at end of file + +_min = _AB_Wind_Speed_Min select (_month - 1); +_min = (_min select 0) + (random (_min select 1)) - (random (_min select 1)); +_min = 0 max _min; +_max = _AB_Wind_Speed_Max select (_month - 1); +_max = (_max select 0) + (random (_max select 1)) - (random (_max select 1)); +_max = 0 max _max; + +_x = time * 180 / _PI; +_ratio = 0 max ((1 + _c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (1 + _c1 + _c2 + _c3 + _c4)); +_windSpeed = _min + (_max - _min) * _ratio; + +systemChat format["Speed: %1, Direction: %2", _windSpeed, GVAR(windDirection)]; + +[-1 * sin(GVAR(windDirection)) * _windSpeed, -1 * cos(GVAR(windDirection)) * _windSpeed, 0] diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index e5a52348a8..7c79da0069 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -18,4 +18,4 @@ setWind [ACE_wind select 0, ACE_wind select 1, true]; // Set waves: 0 when no wind, 1 when wind >= 16 m/s 1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); -//hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; +hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; From 8aa69663d6413358be02c2f29bbb3746c9112a4b Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 20 Apr 2015 16:01:13 +0200 Subject: [PATCH 05/66] More WIP --- addons/weather/functions/fnc_getWind.sqf | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 9163d7e854..6a077d86af 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -46,16 +46,18 @@ while {isNil QGVAR(windDirection)} do { GVAR(windDirection) = GVAR(windDirection) + (random 22.5) - (random 22.5); }; -_min = _AB_Wind_Speed_Min select (_month - 1); -_min = (_min select 0) + (random (_min select 1)) - (random (_min select 1)); -_min = 0 max _min; -_max = _AB_Wind_Speed_Max select (_month - 1); -_max = (_max select 0) + (random (_max select 1)) - (random (_max select 1)); -_max = 0 max _max; +if (isNil QGVAR(minWindSpeed) || isNil QGVAR(maxWindSpeed)) then { + GVAR(minWindSpeed) = _AB_Wind_Speed_Min select (_month - 1); + GVAR(minWindSpeed) = (GVAR(minWindSpeed) select 0) + (random (GVAR(minWindSpeed) select 1)) - (random (GVAR(minWindSpeed) select 1)); + GVAR(minWindSpeed) = 0 max GVAR(minWindSpeed); + GVAR(maxWindSpeed) = _AB_Wind_Speed_Max select (_month - 1); + GVAR(maxWindSpeed) = (GVAR(maxWindSpeed) select 0) + (random (GVAR(maxWindSpeed) select 1)) - (random (GVAR(maxWindSpeed) select 1)); + GVAR(maxWindSpeed) = 0 max GVAR(maxWindSpeed); +}; _x = time * 180 / _PI; _ratio = 0 max ((1 + _c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (1 + _c1 + _c2 + _c3 + _c4)); -_windSpeed = _min + (_max - _min) * _ratio; +_windSpeed = GVAR(minWindSpeed) + (GVAR(maxWindSpeed) - GVAR(minWindSpeed)) * _ratio; systemChat format["Speed: %1, Direction: %2", _windSpeed, GVAR(windDirection)]; From ac74e6c6110902a71ab60eba2cc20cedcb8bcd00 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 20 Apr 2015 16:33:36 +0200 Subject: [PATCH 06/66] More WIP --- addons/weather/functions/fnc_getWind.sqf | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 6a077d86af..5b0f1bfd79 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -36,14 +36,15 @@ _c4 = 0.7 + random 0.2; _month = date select 1; _windDirectionProbabilities = _AB_Wind_Direction_Probabilities select (_month - 1); -while {isNil QGVAR(windDirection)} do { +while {isNil QGVAR(windDirectionReference)} do { _random = random 1; for "_i" from 0 to 7 do { if (_random < (_windDirectionProbabilities select _i)) exitWith { - GVAR(windDirection) = 45 * _i; + GVAR(windDirectionReference) = 45 * _i; }; }; - GVAR(windDirection) = GVAR(windDirection) + (random 22.5) - (random 22.5); + GVAR(windDirectionReference) = GVAR(windDirectionReference) + (random 22.5) - (random 22.5); + GVAR(windDirectionVariance) = (random 10) - (random 10); }; if (isNil QGVAR(minWindSpeed) || isNil QGVAR(maxWindSpeed)) then { @@ -55,10 +56,19 @@ if (isNil QGVAR(minWindSpeed) || isNil QGVAR(maxWindSpeed)) then { GVAR(maxWindSpeed) = 0 max GVAR(maxWindSpeed); }; +if ((random 30) < 1) then { + GVAR(windDirectionVariance) = (random 10) - (random 10); +}; +_windDirection = GVAR(windDirectionReference) + GVAR(windDirectionVariance); + _x = time * 180 / _PI; _ratio = 0 max ((1 + _c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (1 + _c1 + _c2 + _c3 + _c4)); _windSpeed = GVAR(minWindSpeed) + (GVAR(maxWindSpeed) - GVAR(minWindSpeed)) * _ratio; -systemChat format["Speed: %1, Direction: %2", _windSpeed, GVAR(windDirection)]; +systemChat " "; +systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(GVAR(minWindSpeed) * 10) / 10, Round(_windSpeed * 10) / 10, Round(GVAR(maxWindSpeed) * 10) / 10]; +systemChat format["(Reference/Current/Variance):(%1/%2/%3)", Round(GVAR(windDirectionReference)), Round(_windDirection), Round(GVAR(windDirectionVariance))]; +systemChat " "; +systemChat " "; -[-1 * sin(GVAR(windDirection)) * _windSpeed, -1 * cos(GVAR(windDirection)) * _windSpeed, 0] +[-1 * sin(_windDirection) * _windSpeed, -1 * cos(_windDirection) * _windSpeed, 0] From af4fdda477cbf305fc06f7c76dfae33f7eb83a19 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:20:05 +0200 Subject: [PATCH 07/66] Continued work on the new wind system: * Moved the wind data into CfgWorlds.hpp * Modified the contents of ACE_WIND_PARAMS * new getWind function for the clients * new wind init based on the real world weather data --- addons/weather/CfgWorlds.hpp | 34 ++++++++- addons/weather/XEH_postInit.sqf | 20 +----- addons/weather/XEH_preInit.sqf | 1 + addons/weather/functions/fnc_getMapData.sqf | 22 ++++++ addons/weather/functions/fnc_getWind.sqf | 65 ++++------------- addons/weather/functions/fnc_initWind.sqf | 48 +++++++++++++ .../functions/fnc_serverController.sqf | 71 +++++++------------ 7 files changed, 146 insertions(+), 115 deletions(-) create mode 100644 addons/weather/functions/fnc_initWind.sqf diff --git a/addons/weather/CfgWorlds.hpp b/addons/weather/CfgWorlds.hpp index ed932654f7..1391468fd9 100644 --- a/addons/weather/CfgWorlds.hpp +++ b/addons/weather/CfgWorlds.hpp @@ -7,6 +7,22 @@ class CfgWorlds { ACE_TempNight[] = {4, 4, 6, 8, 13, 17, 20, 20, 16, 12, 8, 6}; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Limnos,Greece ACE_Humidity[] = {78, 77, 78, 74, 71, 60, 59, 61, 65, 72, 79, 80}; + // Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece + ACE_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}}; + ACE_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}; + ACE_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}}; + ACE_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 }; class Altis: CAWorld { @@ -15,5 +31,21 @@ class CfgWorlds { ACE_TempNight[] = {4, 4, 6, 8, 13, 17, 20, 20, 16, 12, 8, 6}; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Limnos,Greece ACE_Humidity[] = {78, 77, 78, 74, 71, 60, 59, 61, 65, 72, 79, 80}; + // Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece + ACE_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}}; + ACE_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}; + ACE_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}}; + ACE_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 }; -}; +}; \ No newline at end of file diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index e40a061aaf..59a83b2a85 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +call FUNC(getMapData); + // Rain variables GVAR(enableRain) = true; GVAR(rain_next_period) = -1; @@ -13,23 +15,7 @@ GVAR(rain_current_range) = -1+(random 2); GVAR(overcast_multiplier) = 1; // Wind Variables -ACE_wind = [0, 0, 0]; -GVAR(wind_initial_dir) = (random 360); -GVAR(wind_initial_speed) = (overcast*5)+(random (overcast*5)) max 1; -GVAR(wind_mean_speed) = GVAR(wind_initial_speed); -GVAR(wind_mean_dir) = GVAR(wind_initial_dir); -GVAR(wind_current_speed) = GVAR(wind_initial_speed); -GVAR(wind_current_dir) = GVAR(wind_initial_dir); -GVAR(wind_current_range_speed) = -1+(random 2); -GVAR(wind_current_range_dir) = -1+(random 2); -GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10)); -GVAR(wind_next_major_period) = -1; -GVAR(wind_period_count) = 0; -GVAR(wind_major_period_count) = 0; -GVAR(wind_total_time) = 0; -GVAR(wind_period_start_time) = time; - -call FUNC(getMapData); +call FUNC(initWind); "ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; }; "ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; }; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index ee05983a69..1d6b12ee60 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -8,6 +8,7 @@ PREP(calculateBarometricPressure); PREP(displayWindInfo); PREP(getMapData); PREP(getWind); +PREP(initWind); PREP(serverController); PREP(updateHumidity); PREP(updateRain); diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index cb0a961c21..2cfcb34a3f 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -40,6 +40,11 @@ if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay")) exitWith GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay"); GVAR(TempNight) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempNight"); GVAR(Humidity) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_Humidity"); + + GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMin"); + GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean"); + GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMax"); + GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindDirectionProbabilities"); }; // Check if the map is among the most popular @@ -113,3 +118,20 @@ GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; GVAR(currentTemperature) = 20; GVAR(currentHumidity) = 0.5; + +// 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(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 \ No newline at end of file diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 5b0f1bfd79..c0770b6191 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -11,64 +11,25 @@ */ #include "script_component.hpp" -// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece -_AB_Wind_Speed_Max = [[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]]; -_AB_Wind_Speed_Mean = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; -_AB_Wind_Speed_Min = [[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]]; -_AB_Wind_Direction_Probabilities = [[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 - -_PI = 3.14159265; -_c1 = 0.2 + random 0.2; -_c2 = 0.3 + random 0.2; -_c3 = 0.5 + random 0.2; -_c4 = 0.7 + random 0.2; +if (isNil "ACE_WIND_PARAMS") exitWith { [0, 0, 0] }; -_month = date select 1; -_windDirectionProbabilities = _AB_Wind_Direction_Probabilities select (_month - 1); -while {isNil QGVAR(windDirectionReference)} do { - _random = random 1; - for "_i" from 0 to 7 do { - if (_random < (_windDirectionProbabilities select _i)) exitWith { - GVAR(windDirectionReference) = 45 * _i; - }; - }; - GVAR(windDirectionReference) = GVAR(windDirectionReference) + (random 22.5) - (random 22.5); - GVAR(windDirectionVariance) = (random 10) - (random 10); -}; +private ["_period", "_periodPosition", "_x", "_ratio", "_windSpeed"]; -if (isNil QGVAR(minWindSpeed) || isNil QGVAR(maxWindSpeed)) then { - GVAR(minWindSpeed) = _AB_Wind_Speed_Min select (_month - 1); - GVAR(minWindSpeed) = (GVAR(minWindSpeed) select 0) + (random (GVAR(minWindSpeed) select 1)) - (random (GVAR(minWindSpeed) select 1)); - GVAR(minWindSpeed) = 0 max GVAR(minWindSpeed); - GVAR(maxWindSpeed) = _AB_Wind_Speed_Max select (_month - 1); - GVAR(maxWindSpeed) = (GVAR(maxWindSpeed) select 0) + (random (GVAR(maxWindSpeed) select 1)) - (random (GVAR(maxWindSpeed) select 1)); - GVAR(maxWindSpeed) = 0 max GVAR(maxWindSpeed); -}; +EXPLODE_8_PVT(ACE_WIND_PARAMS,_windDirection,_min_wind_speed,_max_wind_speed,_c1,_c2,_c3,_c4,_period); -if ((random 30) < 1) then { - GVAR(windDirectionVariance) = (random 10) - (random 10); -}; -_windDirection = GVAR(windDirectionReference) + GVAR(windDirectionVariance); +_periodPosition = (time - GVAR(wind_period_start_time)) min _period; +_x = _periodPosition * 57.29577958; // time * (180 / PI) +_ratio = 0.5 + (_c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (2 * (_c1 + _c2 + _c3 + _c4)); +_windSpeed = _min_wind_speed + (_max_wind_speed - _min_wind_speed) * _ratio; -_x = time * 180 / _PI; -_ratio = 0 max ((1 + _c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (1 + _c1 + _c2 + _c3 + _c4)); -_windSpeed = GVAR(minWindSpeed) + (GVAR(maxWindSpeed) - GVAR(minWindSpeed)) * _ratio; +//GVAR(wind_speed_debug_output) pushBack _windspeed; +//copyToClipboard Str(GVAR(wind_speed_debug_output)); systemChat " "; -systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(GVAR(minWindSpeed) * 10) / 10, Round(_windSpeed * 10) / 10, Round(GVAR(maxWindSpeed) * 10) / 10]; -systemChat format["(Reference/Current/Variance):(%1/%2/%3)", Round(GVAR(windDirectionReference)), Round(_windDirection), Round(GVAR(windDirectionVariance))]; -systemChat " "; +systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(_min_wind_speed * 10) / 10, Round(_windSpeed * 10) / 10, Round(_max_wind_speed * 10) / 10]; +systemChat format["Direction: %1", Round(_windDirection)]; +systemChat format["(Period/PeriodPosition) : (%1/%2)", Round(_period), Round(_periodPosition)]; +systemChat format["Ratio: %1", _ratio]; systemChat " "; [-1 * sin(_windDirection) * _windSpeed, -1 * cos(_windDirection) * _windSpeed, 0] diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf new file mode 100644 index 0000000000..f0db616c04 --- /dev/null +++ b/addons/weather/functions/fnc_initWind.sqf @@ -0,0 +1,48 @@ +/* + * Author: Ruthberg + * + * Inits the wind variables on mission start + * + * Argument: + * None + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_j", "_i", "_month", "_windDirectionProbabilities"]; +_month = date select 1; +_windDirectionProbabilities = GVAR(WindDirectionProbabilities) select (_month - 1); + +ACE_wind = [0, 0, 0]; + +GVAR(wind_direction_reference) = random 360; +for "_j" from 0 to 10 do { + _random = random 1; + for "_i" from 0 to 7 do { + if (_random < (_windDirectionProbabilities select _i)) exitWith { + GVAR(wind_direction_reference) = 45 * _i; + }; + }; + if (_i < 7) exitWith {}; +}; +GVAR(wind_mean_dir) = GVAR(wind_direction_reference); +GVAR(wind_direction_reference) = GVAR(wind_direction_reference) + (random 22.5) - (random 22.5); + +GVAR(min_wind_speed) = GVAR(WindSpeedMin) select (_month - 1); +GVAR(min_wind_speed) = (GVAR(min_wind_speed) select 0) + (random (GVAR(min_wind_speed) select 1)) - (random (GVAR(min_wind_speed) select 1)); +GVAR(min_wind_speed) = 0 max GVAR(min_wind_speed); +GVAR(max_wind_speed) = GVAR(WindSpeedMax) select (_month - 1); +GVAR(max_wind_speed) = (GVAR(max_wind_speed) select 0) + (random (GVAR(max_wind_speed) select 1)) - (random (GVAR(max_wind_speed) select 1)); +GVAR(max_wind_speed) = 0 max GVAR(max_wind_speed); + +GVAR(c1) = 0.1 + random 0.1; +GVAR(c2) = 0.2 + random 0.1; +GVAR(c3) = 0.5 + random 0.2; +GVAR(c4) = 0.7 + random 0.2; + +GVAR(wind_period_count) = 0; +GVAR(wind_next_period) = -1; + +GVAR(wind_speed_debug_output) = []; diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index d7dff0eb70..878f0bc241 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -1,7 +1,7 @@ /* - * Author: ACE2 Team, esteldunedain + * Author: ACE2 Team, esteldunedain, ruthberg * - * Calculate the wind and rain evolution on the server. Broadcast the current and next values to the clients + * Calculate the wind and rain evolution on the server. Broadcasts the current and next values to the clients * * Argument: * None @@ -10,7 +10,8 @@ * None */ #include "script_component.hpp" -private ["_gustCount","_gustDir","_gustSpeed","_gustTime","_gusts","_i","_lastRain","_maxInterval","_rainOverCast","_startDir","_startSpeed","_time","_timeTillGust","_transitionTime"]; + +private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windDirection", "_time", "_c1", "_c2", "_c3", "_c4"]; // Rain simulation if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { @@ -44,49 +45,29 @@ if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { // Wind simulation if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { - _startDir = GVAR(wind_current_dir); - _startSpeed = GVAR(wind_current_speed); - GVAR(wind_current_dir) = (GVAR(wind_current_dir)+(((GVAR(wind_current_dir)))*((overcast*(GVAR(overcast_multiplier)))/8)*GVAR(wind_current_range_dir))); - - GVAR(wind_current_speed) = (GVAR(wind_current_speed)+(((GVAR(wind_current_speed)))*(overcast*(GVAR(overcast_multiplier))/12)*GVAR(wind_current_range_speed))); - GVAR(wind_current_speed) = GVAR(wind_current_speed) max 0.01; - - if(GVAR(wind_current_dir) < 0) then { - GVAR(wind_current_dir) = GVAR(wind_current_dir)+360; - }; - GVAR(wind_current_dir) = GVAR(wind_current_dir) % 360; - - GVAR(wind_current_range_speed) = (-1)+(random 2); - - GVAR(wind_current_range_dir) = (-1)+(random 2); - - GVAR(wind_next_period) = ceil((2+random(5))/(GVAR(overcast_multiplier))); + + GVAR(wind_next_period) = ceil((2 + (random 5)) / GVAR(overcast_multiplier)); GVAR(wind_period_count) = 0; - - _gustCount = floor(random(GVAR(wind_next_period)*(overcast*((GVAR(overcast_multiplier)^3))))); - - _time = GVAR(wind_next_period)*60; - _gusts = []; - if(_gustCount > 0) then { - _maxInterval = _time/_gustCount; - for "_i" from 0 to _gustCount-1 do { - _gustTime = (random (3 min _maxInterval)); - _timeTillGust = (_maxInterval*_i)+(random (_maxInterval - _gustTime)); - _gustSpeed = (random 1); - _gustDir = (GVAR(wind_current_dir)+(GVAR(wind_current_dir)*(-1+(random 2))))*(overcast*(GVAR(overcast_multiplier))); - _gusts set[(count _gusts), [_timeTillGust, _gustTime, _gustSpeed, _gustDir]]; - }; - }; - - GVAR(wind_total_time) = GVAR(wind_total_time) + GVAR(wind_next_period); - - ACE_WIND_PARAMS = [_startDir, - GVAR(wind_current_dir), - _startSpeed, - GVAR(wind_current_speed), - _time, - _gusts]; - + + _windDirectionVariance = (90 - (random 180)) * overcast; + _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; + + _c1 = (0.1 + random 0.1) * overcast; + _c2 = (0.2 + random 0.1) * overcast; + _c3 = (0.5 + random 0.2); + _c4 = (0.7 + random 0.2); + + _time = GVAR(wind_next_period) * 60; + + ACE_WIND_PARAMS = [_windDirection, + GVAR(min_wind_speed), + GVAR(max_wind_speed), + _c1, + _c2, + _c3, + _c4, + _time]; + GVAR(wind_period_start_time) = time; publicVariable "ACE_WIND_PARAMS"; }; From 30d1b1b5e5c1804ae04bae21a6df9ddee9c98038 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:20:22 +0200 Subject: [PATCH 08/66] Fixed a typo in the updateTemperature function --- addons/weather/functions/fnc_updateTemperature.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index 5e342ad83d..3a25a7bc52 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -18,5 +18,5 @@ _month = date select 1; _hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440)); GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; -GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * humidity - 4 * overcast; +GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * GVAR(currentHumidity) - 4 * overcast; GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; From 428baefc2c9291853a32dd8614fa379cff859196 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:41:50 +0200 Subject: [PATCH 09/66] Added random temperatureShift, badWeatherShift, humidityShift --- addons/weather/XEH_postInit.sqf | 10 ++++++++++ addons/weather/functions/fnc_serverController.sqf | 2 +- addons/weather/functions/fnc_updateHumidity.sqf | 1 + addons/weather/functions/fnc_updateTemperature.sqf | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 59a83b2a85..6c287c3a8a 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -2,6 +2,11 @@ call FUNC(getMapData); +// Randomization +GVAR(temperatureShift) = 3 - random 6; +GVAR(badWeatherShift) = (random 1) ^ 2 * 10; +GVAR(humidityShift) = (5 - random 10) / 100; + // Rain variables GVAR(enableRain) = true; GVAR(rain_next_period) = -1; @@ -24,6 +29,11 @@ call FUNC(initWind); 30 setLightnings (ACE_MISC_PARAMS select 0); 30 setRainbow (ACE_MISC_PARAMS select 1); 30 setFog (ACE_MISC_PARAMS select 2); + GVAR(temperatureShift) = (ACE_MISC_PARAMS select 3); + GVAR(badWeatherShift) = (ACE_MISC_PARAMS select 4); + GVAR(humidityShift) = (ACE_MISC_PARAMS select 5); + call FUNC(updateTemperature); + call FUNC(updateHumidity); }; }; diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 878f0bc241..cc96ccdf41 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -73,7 +73,7 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { }; // Sync misc. parameters -ACE_MISC_PARAMS = [lightnings, rainbow, fogParams]; +ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; publicVariable "ACE_MISC_PARAMS"; GVAR(rain_period_count) = GVAR(rain_period_count) + 1; diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf index e3ba7a0224..07edec1854 100644 --- a/addons/weather/functions/fnc_updateHumidity.sqf +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -23,6 +23,7 @@ if (rain > 0 && overcast > 0.7) then { _pS1 = 6.112 * exp((17.62 * _avgTemperature) / (243.12 + _avgTemperature)); _PS2 = 6.112 * exp((17.62 * GVAR(currentTemperature)) / (243.12 + GVAR(currentTemperature))); GVAR(currentHumidity) = GVAR(currentHumidity) * _PS1 / _PS2; + GVAR(currentHumidity) = GVAR(currentHumidity) + GVAR(humidityShift); }; GVAR(currentHumidity) = 0 max GVAR(currentHumidity) min 1; diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index 3a25a7bc52..d66a9b28f4 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -18,5 +18,5 @@ _month = date select 1; _hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440)); GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; -GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * GVAR(currentHumidity) - 4 * overcast; +GVAR(currentTemperature) = GVAR(currentTemperature) + GVAR(temperatureShift) - GVAR(badWeatherShift) * overcast; GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; From 1db9f055e26dabffa250d1b1966b286d575d8616 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:54:47 +0200 Subject: [PATCH 10/66] Removed debug output --- addons/weather/functions/fnc_getWind.sqf | 4 ++-- addons/weather/functions/fnc_updateWind.sqf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index c0770b6191..7ce9d76722 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -24,12 +24,12 @@ _windSpeed = _min_wind_speed + (_max_wind_speed - _min_wind_speed) * _ratio; //GVAR(wind_speed_debug_output) pushBack _windspeed; //copyToClipboard Str(GVAR(wind_speed_debug_output)); - +/* systemChat " "; systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(_min_wind_speed * 10) / 10, Round(_windSpeed * 10) / 10, Round(_max_wind_speed * 10) / 10]; systemChat format["Direction: %1", Round(_windDirection)]; systemChat format["(Period/PeriodPosition) : (%1/%2)", Round(_period), Round(_periodPosition)]; systemChat format["Ratio: %1", _ratio]; systemChat " "; - +*/ [-1 * sin(_windDirection) * _windSpeed, -1 * cos(_windDirection) * _windSpeed, 0] diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index 7c79da0069..e5a52348a8 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -18,4 +18,4 @@ setWind [ACE_wind select 0, ACE_wind select 1, true]; // Set waves: 0 when no wind, 1 when wind >= 16 m/s 1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); -hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; +//hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; From d7f67970a41a160ba7df79f3ad7c86a4fa0041da Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:55:04 +0200 Subject: [PATCH 11/66] Fixed a bug in the wind direction init code --- addons/weather/functions/fnc_initWind.sqf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf index f0db616c04..555ec928f4 100644 --- a/addons/weather/functions/fnc_initWind.sqf +++ b/addons/weather/functions/fnc_initWind.sqf @@ -11,21 +11,23 @@ */ #include "script_component.hpp" -private ["_j", "_i", "_month", "_windDirectionProbabilities"]; +private ["_j", "_i", "_directionFound", "_month", "_windDirectionProbabilities"]; _month = date select 1; _windDirectionProbabilities = GVAR(WindDirectionProbabilities) select (_month - 1); ACE_wind = [0, 0, 0]; GVAR(wind_direction_reference) = random 360; +_directionFound = false; for "_j" from 0 to 10 do { _random = random 1; for "_i" from 0 to 7 do { if (_random < (_windDirectionProbabilities select _i)) exitWith { + _directionFound = true; GVAR(wind_direction_reference) = 45 * _i; }; }; - if (_i < 7) exitWith {}; + if (_directionFound) exitWith {}; }; GVAR(wind_mean_dir) = GVAR(wind_direction_reference); GVAR(wind_direction_reference) = GVAR(wind_direction_reference) + (random 22.5) - (random 22.5); From 0ab25a28667b0c0258807a3cde5e921603ccff3a Mon Sep 17 00:00:00 2001 From: Glowbal Date: Tue, 21 Apr 2015 21:41:00 +0200 Subject: [PATCH 12/66] fixed #659 --- addons/dragging/functions/fnc_canCarry.sqf | 2 +- addons/dragging/functions/fnc_canDrag.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/dragging/functions/fnc_canCarry.sqf b/addons/dragging/functions/fnc_canCarry.sqf index 4067b366d6..0fc5c074d6 100644 --- a/addons/dragging/functions/fnc_canCarry.sqf +++ b/addons/dragging/functions/fnc_canCarry.sqf @@ -22,4 +22,4 @@ if !([_unit, _target, []] call EFUNC(common,canInteractWith)) exitWith {false}; // a static weapon has to be empty for dragging if ((typeOf _target) isKindOf "StaticWeapon" && {count crew _target > 0}) exitWith {false}; -alive _target && {_target getVariable [QGVAR(canCarry), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLeftLeg") + (_target getHitPointDamage "HitRightLeg") > 0.4})} +alive _target && {_target getVariable [QGVAR(canCarry), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})} diff --git a/addons/dragging/functions/fnc_canDrag.sqf b/addons/dragging/functions/fnc_canDrag.sqf index dc2d64168b..92744553fd 100644 --- a/addons/dragging/functions/fnc_canDrag.sqf +++ b/addons/dragging/functions/fnc_canDrag.sqf @@ -22,4 +22,4 @@ if !([_unit, _target, []] call EFUNC(common,canInteractWith)) exitWith {false}; // a static weapon has to be empty for dragging if ((typeOf _target) isKindOf "StaticWeapon" && {count crew _target > 0}) exitWith {false}; -alive _target && {_target getVariable [QGVAR(canDrag), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLeftLeg") + (_target getHitPointDamage "HitRightLeg") > 0.4})}; \ No newline at end of file +alive _target && {_target getVariable [QGVAR(canDrag), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})}; \ No newline at end of file From 93bcf7e9a16ee82a2e5df76ddf3cc9896a8aea89 Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 16:49:30 -0700 Subject: [PATCH 13/66] Added versioning to build process and automated version/git integration. --- extensions/CMakeLists.txt | 28 +++++++++++ .../AdvancedBallistics.cpp | 4 +- extensions/advanced_ballistics/CMakeLists.txt | 2 +- extensions/breakLine/CMakeLists.txt | 2 +- extensions/breakLine/ace_breakLine.cpp | 4 +- extensions/common/ace_common.h | 2 +- extensions/common/ace_version.hpp.in | 4 ++ extensions/common/ace_version_win32.rc.in | 47 +++++++++++++++++++ extensions/fcs/CMakeLists.txt | 2 +- extensions/fcs/ace_fcs.cpp | 4 +- 10 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 extensions/common/ace_version.hpp.in create mode 100644 extensions/common/ace_version_win32.rc.in diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index 6028771554..038bb71d5c 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -25,6 +25,34 @@ file(GLOB ACE_COMMON_SOURCES common/*.h common/*.hpp common/*.c common/*.cpp) add_library(ace_common STATIC ${ACE_COMMON_SOURCES}) include_directories(AFTER "common") +string(TIMESTAMP ACE_BUILDSTAMP "%Y-%m-%dT%H:%M:%SZ") +set(ACE_VERSION_MAJOR 3) +set(ACE_VERSION_MINOR 0) +set(ACE_VERSION_REVISION 1) +EXECUTE_PROCESS(COMMAND git rev-parse --verify HEAD + OUTPUT_VARIABLE T_ACE_VERSION_BUILD + OUTPUT_STRIP_TRAILING_WHITESPACE +) +string(SUBSTRING ${T_ACE_VERSION_BUILD} 0 7 ACE_VERSION_BUILD ) + +message("Building for: " ${ACE_VERSION_MAJOR}.${ACE_VERSION_MINOR}.${ACE_VERSION_REVISION}-${ACE_VERSION_BUILD}) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version.hpp.in" + "${CMAKE_CURRENT_BINARY_DIR}/common/ace_version.hpp" + @ONLY) + +if(MSVC) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version_win32.rc.in" + "${CMAKE_CURRENT_BINARY_DIR}/common/ace_version_win32.rc" + @ONLY) + set(GLOBAL_RC ${CMAKE_CURRENT_BINARY_DIR}/common/ace_version_win32.rc) +endif() + +include_directories(AFTER ${CMAKE_CURRENT_BINARY_DIR}/common) +set(GLOBAL_SOURCES ${GLOBAL_RC}) + # Add extensions to build here add_subdirectory(fcs) add_subdirectory(breakLine) diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index 2851d6576b..4bc9a28933 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -19,8 +19,6 @@ #define STD_AIR_DENSITY_ICAO 1.22498 #define STD_AIR_DENSITY_ASM 1.20885 -static char version[] = "1.0"; - struct Bullet { double airFriction; double caliber; @@ -242,7 +240,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) { if (!strcmp(function, "version")) { - int n = sprintf_s(output, outputSize, "%s", version); + int n = sprintf_s(output, outputSize, "%s", ACE_FULL_VERSION_STR); return; } diff --git a/extensions/advanced_ballistics/CMakeLists.txt b/extensions/advanced_ballistics/CMakeLists.txt index f579339a04..19b9fc41d9 100644 --- a/extensions/advanced_ballistics/CMakeLists.txt +++ b/extensions/advanced_ballistics/CMakeLists.txt @@ -1,7 +1,7 @@ set(ACE_EXTENSION_NAME "ace_advanced_ballistics") file(GLOB SOURCES *.h *.hpp *.c *.cpp) -add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) +add_library( ${ACE_EXTENSION_NAME} SHARED ${GLOBAL_SOURCES} ${SOURCES}) add_dependencies(${ACE_EXTENSION_NAME} ace_common) SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") diff --git a/extensions/breakLine/CMakeLists.txt b/extensions/breakLine/CMakeLists.txt index 8981ec487e..d34ae1b58e 100644 --- a/extensions/breakLine/CMakeLists.txt +++ b/extensions/breakLine/CMakeLists.txt @@ -1,7 +1,7 @@ set(ACE_EXTENSION_NAME "ace_breakLine") file(GLOB SOURCES *.h *.hpp *.c *.cpp) -add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) +add_library( ${ACE_EXTENSION_NAME} SHARED ${GLOBAL_SOURCES} ${SOURCES}) add_dependencies(${ACE_EXTENSION_NAME} ace_common) SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") diff --git a/extensions/breakLine/ace_breakLine.cpp b/extensions/breakLine/ace_breakLine.cpp index fb5775b861..f84b95053d 100644 --- a/extensions/breakLine/ace_breakLine.cpp +++ b/extensions/breakLine/ace_breakLine.cpp @@ -19,8 +19,6 @@ #define MAXCHARACTERS 14 -static char VERSION[] = "1.0"; - extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); }; @@ -68,7 +66,7 @@ std::string addLineBreaks(const std::vector &words) { void __stdcall RVExtension(char *output, int outputSize, const char *function) { if (!strcmp(function, "version")) { - strncpy(output, VERSION, outputSize); + strncpy(output, ACE_FULL_VERSION_STR, outputSize); } else { strncpy(output, addLineBreaks(splitString(function)).c_str(), outputSize); output[outputSize - 1] = '\0'; diff --git a/extensions/common/ace_common.h b/extensions/common/ace_common.h index 4a8847b209..93f7b9af8a 100644 --- a/extensions/common/ace_common.h +++ b/extensions/common/ace_common.h @@ -1,4 +1,4 @@ #pragma once #include "targetver.h" - +#include "ace_version.hpp" diff --git a/extensions/common/ace_version.hpp.in b/extensions/common/ace_version.hpp.in new file mode 100644 index 0000000000..853648497d --- /dev/null +++ b/extensions/common/ace_version.hpp.in @@ -0,0 +1,4 @@ +#pragma once + +#define ACE_VERSION_STR "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@" +#define ACE_FULL_VERSION_STR "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@-@ACE_VERSION_BUILD@" \ No newline at end of file diff --git a/extensions/common/ace_version_win32.rc.in b/extensions/common/ace_version_win32.rc.in new file mode 100644 index 0000000000..112f404649 --- /dev/null +++ b/extensions/common/ace_version_win32.rc.in @@ -0,0 +1,47 @@ +#ifdef _WIN32 + + #include + + #ifndef DEBUG + #define VER_DEBUG 0 + #else + #define VER_DEBUG VS_FF_DEBUG + #endif + + VS_VERSION_INFO VERSIONINFO + FILEVERSION @ACE_VERSION_MAJOR@, @ACE_VERSION_MINOR@, @ACE_VERSION_REVISION@ + PRODUCTVERSION @ACE_VERSION_MAJOR@, @ACE_VERSION_MINOR@, @ACE_VERSION_REVISION@ + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS (VS_FF_PRIVATEBUILD|VS_FF_PRERELEASE|VER_DEBUG) + FILEOS VOS__WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE VFT2_UNKNOWN + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + BEGIN + VALUE "CompanyName", "ACE3 Team" + VALUE "FileDescription", "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@-@ACE_VERSION_BUILD@" + VALUE "FileVersion", "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@-@ACE_VERSION_BUILD@" + VALUE "ProductName", "ACE3" + VALUE "ProductVersion", "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@-@ACE_VERSION_BUILD@" + VALUE "Build Date", "@ACE_BUILDSTAMP@" + END + END + + BLOCK "VarFileInfo" + BEGIN + /* The following line should only be modified for localized versions. */ + /* It consists of any number of WORD,WORD pairs, with each pair */ + /* describing a language,codepage combination supported by the file. */ + /* */ + /* For example, a file might have values "0x409,1252" indicating that it */ + /* supports English language (0x409) in the Windows ANSI codepage (1252). */ + + VALUE "Translation", 0x409, 1252 + + END + END + +#endif \ No newline at end of file diff --git a/extensions/fcs/CMakeLists.txt b/extensions/fcs/CMakeLists.txt index 2b24542566..0a4ba1b064 100644 --- a/extensions/fcs/CMakeLists.txt +++ b/extensions/fcs/CMakeLists.txt @@ -1,7 +1,7 @@ set(ACE_EXTENSION_NAME "ace_fcs") file(GLOB SOURCES *.h *.hpp *.c *.cpp) -add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) +add_library( ${ACE_EXTENSION_NAME} SHARED ${GLOBAL_SOURCES} ${SOURCES}) add_dependencies(${ACE_EXTENSION_NAME} ace_common) SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") diff --git a/extensions/fcs/ace_fcs.cpp b/extensions/fcs/ace_fcs.cpp index 9ab4939058..4aada29aff 100644 --- a/extensions/fcs/ace_fcs.cpp +++ b/extensions/fcs/ace_fcs.cpp @@ -25,8 +25,6 @@ #define PRECISION 0.1 #define RADIANS(X) (X / (180 / M_PI)) -static char version[] = "1.0"; - extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); }; @@ -104,7 +102,7 @@ double getSolution(double initSpeed, double airFriction, double angleTarget, dou void __stdcall RVExtension(char *output, int outputSize, const char *function) { if (!strcmp(function, "version")) { - strncpy(output, version, outputSize); + strncpy(output, ACE_FULL_VERSION_STR, outputSize); } else { std::vector argStrings = splitString(function); double initSpeed = std::stod(argStrings[0]); From e96ba8835102966b2db0b705a9dd033cacf18dec Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 16:50:01 -0700 Subject: [PATCH 14/66] count type correction. --- extensions/breakLine/ace_breakLine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/breakLine/ace_breakLine.cpp b/extensions/breakLine/ace_breakLine.cpp index f84b95053d..89ea1cfd85 100644 --- a/extensions/breakLine/ace_breakLine.cpp +++ b/extensions/breakLine/ace_breakLine.cpp @@ -37,8 +37,8 @@ std::vector splitString(const std::string & input) { std::string addLineBreaks(const std::vector &words) { std::stringstream sstream; - int numChar = 0; - int i = 0; + size_t numChar = 0; + size_t i = 0; while (i < words.size()) { if (numChar == 0) { From 8aa79a579cb86e000fd1daf9172cc4af34b0ce09 Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 16:56:50 -0700 Subject: [PATCH 15/66] Extensions rebuilt with new versioning. --- ace_advanced_ballistics.dll | Bin 613888 -> 614400 bytes ace_breakLine.dll | Bin 712192 -> 712704 bytes ace_fcs.dll | Bin 787968 -> 788480 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/ace_advanced_ballistics.dll b/ace_advanced_ballistics.dll index 3349bb5b38df8a69b01736e1346a576c8ef4fcb4..8f1c62484fccd88ee868047cb0bed19e0397580d 100644 GIT binary patch delta 30660 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 F{|D?g&)5I} delta 29992 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 E18$66>;M1& diff --git a/ace_breakLine.dll b/ace_breakLine.dll index 428df80092994ec765c2ee73530a7c9e4c7a216f..a13e1a8da90ffdbde7e461068b703b9868878999 100644 GIT binary patch delta 62329 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

bCxccyoz_oVlykETzj&!pQiLwANJBPk=4 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 TuWroH*U6KzV~O%_LgN1mdk?$T diff --git a/ace_fcs.dll b/ace_fcs.dll index 9cef4549c76b8eb75bd9ad1e417e62ca58cb4bcc..71fbba7d924bed48d439068714078f3bfa864f62 100644 GIT binary patch delta 64776 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 From b384d62edda1f0791c914c482a8986eeb50289bf Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 17:02:50 -0700 Subject: [PATCH 16/66] Fixes typos in medical strings causing missing strings. --- addons/medical/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index f735de7ebf..53c587bec0 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,12 +1,12 @@  - + Litter Simulation Detail Detale zużytych medykamentów Detalle de simulación de basura - + Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting. Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta. Detalle simulación de basura establece el número de artículos de basura que se generan a nivel local en el cliente. Las cantidades excesivas en áreas locales podrían causar caída de rendimiento, así que esto es un ajuste de cliente únicamente. From b2c5e5e9f13221d410c3deb41fa4d1a3132bf49b Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 17:04:16 -0700 Subject: [PATCH 17/66] Remove AB verison check until versioning is complete. --- addons/advanced_ballistics/XEH_postInit.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/advanced_ballistics/XEH_postInit.sqf b/addons/advanced_ballistics/XEH_postInit.sqf index 41615696ac..8273859033 100644 --- a/addons/advanced_ballistics/XEH_postInit.sqf +++ b/addons/advanced_ballistics/XEH_postInit.sqf @@ -33,6 +33,7 @@ GVAR(AtmosphericDensitySimulationEnabled) = true; GVAR(currentGrid) = 0; GVAR(INIT_MESSAGE_ENABLED) = false; +/* @TODO: Remove this until verisoning is in sync with cmake/build versioning GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version"); GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION); if (!GVAR(extensionAvailable)) exitWith { @@ -42,5 +43,5 @@ if (!GVAR(extensionAvailable)) exitWith { diag_log text "[ACE] ERROR: ace_advanced_ballistics.dll is incompatible"; }; }; - +*/ [] call FUNC(initializeTerrainExtension); From 8ec86a337fd8b87fe0974c3b15b47bd9572111ed Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 21 Apr 2015 19:35:04 -0500 Subject: [PATCH 18/66] Show Loaded Ammo for static weapons --- addons/reload/CfgActions.hpp | 1 - addons/reload/CfgEventHandlers.hpp | 1 - addons/reload/CfgVehicles.hpp | 6 +- addons/reload/XEH_postInit.sqf | 5 +- addons/reload/functions/fnc_canCheckAmmo.sqf | 7 +- addons/reload/functions/fnc_checkAmmo.sqf | 2 - addons/reload/functions/fnc_displayAmmo.sqf | 111 ++++++++++--------- 7 files changed, 67 insertions(+), 66 deletions(-) diff --git a/addons/reload/CfgActions.hpp b/addons/reload/CfgActions.hpp index bdef8adf28..a76be64ba3 100644 --- a/addons/reload/CfgActions.hpp +++ b/addons/reload/CfgActions.hpp @@ -1,4 +1,3 @@ - class CfgActions { class LoadMagazine; class LoadEmptyMagazine : LoadMagazine { diff --git a/addons/reload/CfgEventHandlers.hpp b/addons/reload/CfgEventHandlers.hpp index c93f74e0bd..75c2280e24 100644 --- a/addons/reload/CfgEventHandlers.hpp +++ b/addons/reload/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preInit)); diff --git a/addons/reload/CfgVehicles.hpp b/addons/reload/CfgVehicles.hpp index 84333a1a09..b6bd212015 100644 --- a/addons/reload/CfgVehicles.hpp +++ b/addons/reload/CfgVehicles.hpp @@ -3,13 +3,13 @@ class CfgVehicles { class CAManBase: Man { class ACE_Actions { class ACE_Weapon { - class ACE_LinkBelt { + class GVAR(LinkBelt) { displayName = "$STR_ACE_Reload_LinkBelt"; distance = 2.0; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canLinkBelt)); statement = QUOTE([ARR_2(_player, _target)] call FUNC(startLinkingBelt)); }; - class ACE_CheckAmmo { + class GVAR(CheckAmmo) { displayName = "$STR_ACE_Reload_checkAmmo"; distance = 2.0; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canCheckAmmo)); @@ -23,7 +23,7 @@ class CfgVehicles { class StaticWeapon: LandVehicle { class ACE_Actions { class ACE_MainActions { - class ACE_CheckAmmo { + class GVAR(CheckAmmo) { displayName = "$STR_ACE_Reload_checkAmmo"; distance = 2.0; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canCheckAmmo)); diff --git a/addons/reload/XEH_postInit.sqf b/addons/reload/XEH_postInit.sqf index faefbe449d..422ea183d3 100644 --- a/addons/reload/XEH_postInit.sqf +++ b/addons/reload/XEH_postInit.sqf @@ -7,10 +7,9 @@ if !(hasInterface) exitWith {}; ["ACE3", QGVAR(checkAmmo), localize "STR_ACE_Reload_checkAmmo", { // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, (vehicle ACE_player), ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon) || - {(vehicle ACE_player) isKindOf 'StaticWeapon'}) exitWith {false}; + if !([ACE_player] call EFUNC(common,canUseWeapon) || {(vehicle ACE_player) isKindOf "StaticWeapon"}) exitWith {false}; // Statement [ACE_player] call FUNC(checkAmmo); diff --git a/addons/reload/functions/fnc_canCheckAmmo.sqf b/addons/reload/functions/fnc_canCheckAmmo.sqf index 4075e7a151..95ac2582a2 100644 --- a/addons/reload/functions/fnc_canCheckAmmo.sqf +++ b/addons/reload/functions/fnc_canCheckAmmo.sqf @@ -7,7 +7,12 @@ * 1: Target * * Return value: - * Can link belt + * Can link belt + * + * Example: + * [player, bob] call ace_reload_fnc_canCheckAmmo + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/reload/functions/fnc_checkAmmo.sqf b/addons/reload/functions/fnc_checkAmmo.sqf index a1001890cd..2499a9a893 100644 --- a/addons/reload/functions/fnc_checkAmmo.sqf +++ b/addons/reload/functions/fnc_checkAmmo.sqf @@ -33,8 +33,6 @@ if (count _this > 1) then { if (_unit == _target) then { _unit playActionNow "Gear"; -} else { - _unit playActionNow "PutDown"; }; [FUNC(displayAmmo), [_target], 1, 0.1] call EFUNC(common,waitAndExecute); diff --git a/addons/reload/functions/fnc_displayAmmo.sqf b/addons/reload/functions/fnc_displayAmmo.sqf index 06f3a39da3..ce08fbd062 100644 --- a/addons/reload/functions/fnc_displayAmmo.sqf +++ b/addons/reload/functions/fnc_displayAmmo.sqf @@ -14,7 +14,7 @@ EXPLODE_1_PVT(_this,_target); -private ["_weapon","_muzzle","_magazine","_showNumber","_ammo","_maxRounds","_count","_text","_color","_picture", "_a", "_string"]; +private ["_weapon","_muzzle","_magazine","_showNumber","_ammo","_maxRounds","_count","_text","_color","_picture","_ammoBarsStructuredText", "_a", "_loadedName", "_string"]; _weapon = currentWeapon _target; _muzzle = currentMuzzle _target; @@ -22,23 +22,23 @@ _magazine = currentMagazine _target; // currentWeapon returns "" for static weapons before they are shot once if (_target isKindOf "StaticWeapon") then { - if (_weapon == "") then { - if (count (weapons _target) == 1) then { - _weapon = (weapons _target) select 0; - _muzzle = _weapon; - }; - }; - - if (_magazine == "") then { - // Try to get magazine using magazinesAmmoFull - private ["_magazines"]; - _magazines = magazinesAmmoFull _target; - { - if (_x select 2) exitWith { - _magazine = _x select 0; + if (_weapon == "") then { + if (count (weapons _target) == 1) then { + _weapon = (weapons _target) select 0; + _muzzle = _weapon; }; - } forEach _magazines; - }; + }; + + if (_magazine == "") then { + // Try to get magazine using magazinesAmmoFull + private ["_magazines"]; + _magazines = magazinesAmmoFull _target; + { + if (_x select 2) exitWith { + _magazine = _x select 0; + }; + } forEach _magazines; + }; }; if (_magazine == "") exitWith {}; @@ -52,55 +52,56 @@ _count = 0; // not grenade launcher if (_muzzle == _weapon) then { - _maxRounds = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count") max 1; + _maxRounds = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count") max 1; - _ammo = _target ammo _weapon; - if (_maxRounds >= COUNT_BARS) then { - _count = round (COUNT_BARS * _ammo / _maxRounds); + _ammo = _target ammo _weapon; + if (_maxRounds >= COUNT_BARS) then { + _count = round (COUNT_BARS * _ammo / _maxRounds); - if (_ammo > 0) then {_count = _count max 1}; - if (_ammo < _maxRounds) then {_count = _count min (COUNT_BARS - 1)}; - } else { - _count = _ammo; - }; + if (_ammo > 0) then {_count = _count max 1}; + if (_ammo < _maxRounds) then {_count = _count min (COUNT_BARS - 1)}; + } else { + _count = _ammo; + }; -// grenade launcher + // grenade launcher } else { - _showNumber = true; + _showNumber = true; - _count = if (_magazine != "") then { - {_x == _magazine} count (magazines _target + [_magazine]) - } else { - {_x in getArray (configFile >> "CfgWeapons" >> _weapon >> _muzzle >> "Magazines")} count magazines _target - }; + _count = if (_magazine != "") then { + {_x == _magazine} count (magazines _target + [_magazine]) + } else { + {_x in getArray (configFile >> "CfgWeapons" >> _weapon >> _muzzle >> "Magazines")} count magazines _target + }; }; -_text = if (_showNumber) then { - parseText format ["%1x", _count] +_ammoBarsStructuredText = if (_showNumber) then { + parseText format ["%1x", _count] } else { - _color = [ - 2 * (1 - _ammo / _maxRounds) min 1, - 2 * _ammo / _maxRounds min 1, - 00 - ]; + _color = [((2 * (1 - _ammo / _maxRounds)) min 1), ((2 * _ammo / _maxRounds) min 1), 0]; - _string = ""; - for "_a" from 1 to _count do { - _string = _string + "|"; - }; - _text = [_string, _color] call EFUNC(common,stringToColoredText); + _string = ""; + for "_a" from 1 to _count do { + _string = _string + "|"; + }; + _text = [_string, _color] call EFUNC(common,stringToColoredText); - _string = ""; - for "_a" from (_count + 1) to (_maxRounds min COUNT_BARS) do { - _string = _string + "|"; - }; + _string = ""; + for "_a" from (_count + 1) to (_maxRounds min COUNT_BARS) do { + _string = _string + "|"; + }; - composeText [ - _text, - [_string, [0.5, 0.5, 0.5]] call EFUNC(common,stringToColoredText) - ] + composeText [_text, [_string, [0.5, 0.5, 0.5]] call EFUNC(common,stringToColoredText)]; }; -_picture = getText (configFile >> "CfgMagazines" >> _magazine >> "picture"); -[_text, _picture] call EFUNC(common,displayTextPicture); +if (_target isKindOf "StaticWeapon") then { + //Vehicle mags (usualy) don't have pictures, so just show the text above ammo count + _loadedName = getText (configFile >> "CfgMagazines" >> _magazine >> "displaynameshort"); + _loadedName = parseText format ["%1", _loadedName]; + _text = composeText [_loadedName, linebreak, _ammoBarsStructuredText]; + [_text] call EFUNC(common,displayTextStructured); +} else { + _picture = getText (configFile >> "CfgMagazines" >> _magazine >> "picture"); + [_ammoBarsStructuredText, _picture] call EFUNC(common,displayTextPicture); +}; From e479557f8ac9db07e50bbf70a634b696f65eee18 Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 10:48:45 +0200 Subject: [PATCH 19/66] Some magazine Stringtable fixes --- addons/ballistics/CfgMagazines.hpp | 6 +++--- addons/ballistics/stringtable.xml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index 9ce3ad3eb0..16f8b227fc 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -42,9 +42,9 @@ class CfgMagazines { class ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim: 30Rnd_65x39_caseless_green_mag_Tracer { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_65x39_Caseless_green_Tracer_Dim"; - displayName = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimName"; - displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort"; - descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription"; + displayName = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimDescription"; }; class 30Rnd_556x45_Stanag: CA_Magazine { diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index c75ab6339d..b2ec7db728 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -743,7 +743,7 @@ 6,5 мм ИК-трассирующие - 6.5mm 100Rnd Tracer IR-DIM Mag + 6.5mm 100Rnd Tracer IR-DIM Mag<br />Rounds: 100<br />Used in: MX LSW Magazynek 6,5mm 100rd Smugacz IR-DIM Chargeur 6.5mm 100Rnd Traçante IR-DIM Cargador de 100 balas trazadoras IR-DIM de 6.5mm @@ -764,7 +764,7 @@ 6,5 мм ИК-трассирующие - 6.5mm 200Rnd Tracer IR-DIM Belt + 6.5mm 200Rnd Tracer IR-DIM Belt<br />Rounds: 200<br />Used in: Stoner 99 LMG Magazynek 6,5mm 200rd Smugacz IR-DIM Bande 6.5mm 200Cps Traçante IR-DIM Cinta de 200 balas trazadoras IR-DIM de 6.5mm @@ -974,7 +974,7 @@ 6,5 мм Scenar - Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30 + Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30 Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30 Kaliber: 6,5x47 mm (HPBT Scenar)<br />Pociski: 30 From f8006eaac90c1d22e0545c8ee9291c77d974506e Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 11:31:11 +0200 Subject: [PATCH 20/66] Expanded the ammo database: *30-06 Springfield (.30 Cal M1 Ball 174 grain) *6.5 Creedmore (Berger .264 cal 140 grain Hybrid) *7mm Rem Mag (Berger .284 cal 180 grain Hybrid) *.243 Win (Berger .243 cal 105 grain Hybrid) --- addons/ballistics/CfgAmmo.hpp | 60 +++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 76a3970063..02f25a6c80 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -144,6 +144,21 @@ class CfgAmmo { ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; + class ACE_65_Creedmore_Ball: B_65x39_Caseless + { + airFriction=-0.00078; + typicalSpeed=860 ; + ACE_caliber=0.264; + ACE_bulletLength=1.426; + ACE_bulletMass=140; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.317}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 830, 850, 860, 865}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; class B_762x51_Ball : BulletBase { airFriction=-0.001035; typicalSpeed=833; @@ -211,6 +226,51 @@ class CfgAmmo { ACE_muzzleVelocities[]={305, 325, 335, 340}; ACE_barrelLengths[]={16, 20, 24, 26}; }; + class ACE_30_06_M1_Ball : B_762x51_Ball { + airFriction=-0.0009; + typicalSpeed=800; + hit=10; + ACE_caliber=0.308; + ACE_bulletLength=1.21; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.494}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 785, 800, 830, 840}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class ACE_7_Remington_Magnum_Ball : B_762x51_Ball { + airFriction=-0.0008; + typicalSpeed=820; + hit=8; + ACE_caliber=0.284; + ACE_bulletLength=1.529; + ACE_bulletMass=180; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.345}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={720, 780, 812, 822, 830}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class ACE_243_Winchester_Ball : B_762x51_Ball { + airFriction=-0.00095; + typicalSpeed=915; + hit=6; + ACE_caliber=0.243; + ACE_bulletLength=1.282; + ACE_bulletMass=180; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.278}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={830, 875, 900, 915, 920}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { airFriction=-0.000830; caliber=1.08; From 2ec95c2862ef768d498298649701b251853cd039 Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 11:32:16 +0200 Subject: [PATCH 21/66] Brackets --- addons/ballistics/CfgAmmo.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 02f25a6c80..3f2fdf0ded 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -129,8 +129,7 @@ class CfgAmmo { class ACE_65x39_Caseless_green_Tracer_Dim : B_65x39_Caseless_green { nvgOnly = 1; }; - class ACE_65x47_Ball_Scenar: B_65x39_Caseless - { + class ACE_65x47_Ball_Scenar: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=820 ; ACE_caliber=0.264; @@ -144,8 +143,7 @@ class CfgAmmo { ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; - class ACE_65_Creedmore_Ball: B_65x39_Caseless - { + class ACE_65_Creedmore_Ball: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=860 ; ACE_caliber=0.264; From 1d108f42a72e473ac2e3a1bb494d29302a43a96a Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 11:53:22 +0200 Subject: [PATCH 22/66] Added a magazine for the new 6.5 Creedmor cartridge *Fixed the 65x47mm short name --- addons/ballistics/CfgAmmo.hpp | 7 ++++++- addons/ballistics/CfgMagazines.hpp | 7 +++++++ addons/ballistics/CfgVehicles.hpp | 9 +++++++++ addons/ballistics/CfgWeapons.hpp | 3 ++- addons/ballistics/stringtable.xml | 23 ++++++++++++++++++----- 5 files changed, 42 insertions(+), 7 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 3f2fdf0ded..3ccc84a7bc 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -132,6 +132,7 @@ class CfgAmmo { class ACE_65x47_Ball_Scenar: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=820 ; + caliber=0.6; ACE_caliber=0.264; ACE_bulletLength=1.364; ACE_bulletMass=139; @@ -143,9 +144,10 @@ class CfgAmmo { ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; - class ACE_65_Creedmore_Ball: B_65x39_Caseless { + class ACE_65_Creedmor_Ball: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=860 ; + caliber=0.7; ACE_caliber=0.264; ACE_bulletLength=1.426; ACE_bulletMass=140; @@ -227,6 +229,7 @@ class CfgAmmo { class ACE_30_06_M1_Ball : B_762x51_Ball { airFriction=-0.0009; typicalSpeed=800; + caliber=1.3; hit=10; ACE_caliber=0.308; ACE_bulletLength=1.21; @@ -242,6 +245,7 @@ class CfgAmmo { class ACE_7_Remington_Magnum_Ball : B_762x51_Ball { airFriction=-0.0008; typicalSpeed=820; + caliber=1.4; hit=8; ACE_caliber=0.284; ACE_bulletLength=1.529; @@ -257,6 +261,7 @@ class CfgAmmo { class ACE_243_Winchester_Ball : B_762x51_Ball { airFriction=-0.00095; typicalSpeed=915; + caliber=0.8; hit=6; ACE_caliber=0.243; ACE_bulletLength=1.282; diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index 16f8b227fc..5e3f48c369 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -179,6 +179,13 @@ class CfgMagazines { displayNameShort = "$STR_ACE_30Rnd_65x47_Scenar_mag_NameShort"; descriptionShort = "$STR_ACE_30Rnd_65x47_Scenar_mag_Description"; }; + class ACE_30Rnd_65_Creedmor_mag: 30Rnd_65x39_caseless_mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_65_Creedmor_Ball"; + displayName = "$STR_ACE_30Rnd_65_Creedmor_mag_Name"; + displayNameShort = "$STR_ACE_30Rnd_65_Creedmor_mag_NameShort"; + descriptionShort = "$STR_ACE_30Rnd_65_Creedmor_mag_Description"; + }; class 10Rnd_338_Mag; class ACE_10Rnd_338_300gr_HPBT_Mag: 10Rnd_338_Mag { author = "$STR_ACE_Common_ACETeam"; diff --git a/addons/ballistics/CfgVehicles.hpp b/addons/ballistics/CfgVehicles.hpp index 7ad864a1e4..b40ee12a72 100644 --- a/addons/ballistics/CfgVehicles.hpp +++ b/addons/ballistics/CfgVehicles.hpp @@ -14,6 +14,7 @@ class CfgVehicles { class Box_NATO_Wps_F: NATO_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); }; }; @@ -33,6 +34,7 @@ class CfgVehicles { class Box_NATO_Ammo_F: NATO_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); @@ -64,6 +66,7 @@ class CfgVehicles { class B_supplyCrate_F: ReammoBox_F { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); @@ -76,6 +79,7 @@ class CfgVehicles { class Box_East_Wps_F: EAST_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; }; @@ -85,6 +89,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,1); MACRO_ADDMAGAZINE(ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; }; @@ -92,6 +97,7 @@ class CfgVehicles { class Box_East_Ammo_F: EAST_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; }; @@ -99,6 +105,7 @@ class CfgVehicles { class Box_East_Support_F: EAST_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; @@ -157,6 +164,7 @@ class CfgVehicles { class C_supplyCrate_F: ReammoBox_F { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); }; }; @@ -185,6 +193,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_100Rnd_65x39_caseless_mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_200Rnd_65x39_cased_Box_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 26b07303c0..e6ce5d4bfd 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -88,7 +88,8 @@ class CfgWeapons { "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag_Tracer", "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim", - "ACE_30Rnd_65x47_Scenar_mag" + "ACE_30Rnd_65x47_Scenar_mag", + "ACE_30Rnd_65_Creedmor_mag" }; initSpeed = -1.018; ACE_barrelTwist=9; diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index b2ec7db728..2f89e12d00 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -967,11 +967,11 @@ Магазин из 30-ти 6,5x47 мм (HPBT Scenar) - 6.5mm Scenar - 6.5mm Scenar - 6.5mm Scenar - 6,5mm Scenar - 6,5 мм Scenar + 6.5mm Lapua + 6.5mm Lapua + 6.5mm Lapua + 6,5mm Lapua + 6,5 мм Lapua Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM @@ -980,6 +980,19 @@ Kaliber: 6,5x47 mm (HPBT Scenar)<br />Pociski: 30 Калибр: 6,5x47 мм (HPBT Scenar)<br />Патронов: 30 + + 6.5mm Creedmor 30Rnd Mag + + + 6.5mm CM + 6.5mm CM + 6.5mm CM + 6,5mm CM + 6,5 мм CM + + + Caliber: 6.5mm Creedmor<br />Rounds: 30<br />Used in: MXM + .338 10Rnd Mag (300gr Sierra MatchKing HPBT) .338 10 Cps (300gr Sierra MatchKing HPBT) From ac5d593271b1b37604d2dc3150460d96fbb3017c Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 12:56:07 +0200 Subject: [PATCH 23/66] Switched to an improved version of the old getWind function --- addons/weather/functions/fnc_getMapData.sqf | 50 ++++++++++--------- addons/weather/functions/fnc_getWind.sqf | 30 +++++------ addons/weather/functions/fnc_initWind.sqf | 8 +-- .../functions/fnc_serverController.sqf | 45 +++++++++++------ 4 files changed, 74 insertions(+), 59 deletions(-) diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index 2cfcb34a3f..f2527d1157 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -35,16 +35,37 @@ if (worldName in ["Thirsk"]) then { GVAR(Latitude) = 65; GVAR(Altitude) = 0; }; if (worldName in ["lingor"]) then { GVAR(Latitude) = -4; GVAR(Altitude) = 0; }; if (worldName in ["Panthera3"]) then { GVAR(Latitude) = 46; GVAR(Altitude) = 0; }; +// 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(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 + +// Check if the wind data is defined in the map config +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"); + GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindDirectionProbabilities"); +}; + // Check if the weather data is defined in the map config if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay")) exitWith { GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay"); GVAR(TempNight) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempNight"); GVAR(Humidity) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_Humidity"); - - GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMin"); - GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean"); - GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMax"); - GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindDirectionProbabilities"); }; // Check if the map is among the most popular @@ -117,21 +138,4 @@ GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; GVAR(currentTemperature) = 20; -GVAR(currentHumidity) = 0.5; - -// 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(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 \ No newline at end of file +GVAR(currentHumidity) = 0.5; \ No newline at end of file diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 7ce9d76722..33750b77dd 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -13,23 +13,19 @@ if (isNil "ACE_WIND_PARAMS") exitWith { [0, 0, 0] }; -private ["_period", "_periodPosition", "_x", "_ratio", "_windSpeed"]; - -EXPLODE_8_PVT(ACE_WIND_PARAMS,_windDirection,_min_wind_speed,_max_wind_speed,_c1,_c2,_c3,_c4,_period); +EXPLODE_5_PVT(ACE_WIND_PARAMS,_dir,_dirChange,_spd,_spdChange,_period); +private ["_periodPercent", "_periodPosition"]; _periodPosition = (time - GVAR(wind_period_start_time)) min _period; -_x = _periodPosition * 57.29577958; // time * (180 / PI) -_ratio = 0.5 + (_c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (2 * (_c1 + _c2 + _c3 + _c4)); -_windSpeed = _min_wind_speed + (_max_wind_speed - _min_wind_speed) * _ratio; +_periodPercent = _periodPosition / _period; -//GVAR(wind_speed_debug_output) pushBack _windspeed; -//copyToClipboard Str(GVAR(wind_speed_debug_output)); -/* -systemChat " "; -systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(_min_wind_speed * 10) / 10, Round(_windSpeed * 10) / 10, Round(_max_wind_speed * 10) / 10]; -systemChat format["Direction: %1", Round(_windDirection)]; -systemChat format["(Period/PeriodPosition) : (%1/%2)", Round(_period), Round(_periodPosition)]; -systemChat format["Ratio: %1", _ratio]; -systemChat " "; -*/ -[-1 * sin(_windDirection) * _windSpeed, -1 * cos(_windDirection) * _windSpeed, 0] +_spd = _spd + _spdChange * _periodPercent; +_dir = _dir + _dirChange * _periodPercent; + +_dir = (360 + _dir) % 360; + +TRACE_2("Dir: Current/Change",Round(_dir),Round(_dirChange)); +TRACE_2("Spd: Current/Change",Round(_spd * 10) / 10,Round(_spdChange * 10) / 10); +TRACE_3("Period/Position/Percent",Round(_period),Round(_periodPosition),Round(_periodPercent * 100) / 100); + +[-_spd * sin(_dir), -_spd * cos(_dir), 0] diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf index 555ec928f4..2da1b9ea49 100644 --- a/addons/weather/functions/fnc_initWind.sqf +++ b/addons/weather/functions/fnc_initWind.sqf @@ -31,18 +31,18 @@ for "_j" from 0 to 10 do { }; GVAR(wind_mean_dir) = GVAR(wind_direction_reference); GVAR(wind_direction_reference) = GVAR(wind_direction_reference) + (random 22.5) - (random 22.5); +GVAR(wind_direction_reference) = (360 + GVAR(wind_direction_reference)) % 360; GVAR(min_wind_speed) = GVAR(WindSpeedMin) select (_month - 1); GVAR(min_wind_speed) = (GVAR(min_wind_speed) select 0) + (random (GVAR(min_wind_speed) select 1)) - (random (GVAR(min_wind_speed) select 1)); GVAR(min_wind_speed) = 0 max GVAR(min_wind_speed); +GVAR(mean_wind_speed) = GVAR(WindSpeedMean) select (_month - 1); GVAR(max_wind_speed) = GVAR(WindSpeedMax) select (_month - 1); GVAR(max_wind_speed) = (GVAR(max_wind_speed) select 0) + (random (GVAR(max_wind_speed) select 1)) - (random (GVAR(max_wind_speed) select 1)); GVAR(max_wind_speed) = 0 max GVAR(max_wind_speed); -GVAR(c1) = 0.1 + random 0.1; -GVAR(c2) = 0.2 + random 0.1; -GVAR(c3) = 0.5 + random 0.2; -GVAR(c4) = 0.7 + random 0.2; +GVAR(current_wind_direction) = GVAR(wind_direction_reference); +GVAR(current_wind_speed) = GVAR(min_wind_speed) + (GVAR(max_wind_speed) - GVAR(min_wind_speed)) * (random 1); GVAR(wind_period_count) = 0; GVAR(wind_next_period) = -1; diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index cc96ccdf41..6bc0f4a9bc 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,7 +11,7 @@ */ #include "script_component.hpp" -private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windDirection", "_time", "_c1", "_c2", "_c3", "_c4"]; +private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time"]; // Rain simulation if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { @@ -49,25 +49,38 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { GVAR(wind_next_period) = ceil((2 + (random 5)) / GVAR(overcast_multiplier)); GVAR(wind_period_count) = 0; - _windDirectionVariance = (90 - (random 180)) * overcast; + _windDirectionVariance = (90 - (random 180)) * (overcast ^ 2); _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; + _windDirectionChange = _windDirection - GVAR(current_wind_direction); + if (_windDirectionChange > 180) then { + _windDirectionChange = 360 - _windDirectionChange; + }; + if (_windDirectionChange < -180) then { + _windDirectionChange = -360 - _windDirectionChange; + }; - _c1 = (0.1 + random 0.1) * overcast; - _c2 = (0.2 + random 0.1) * overcast; - _c3 = (0.5 + random 0.2); - _c4 = (0.7 + random 0.2); + _windMaxDiff = GVAR(mean_wind_speed) - GVAR(max_wind_speed); + _windMinDiff = GVAR(min_wind_speed) - GVAR(mean_wind_speed); + + _ratioMax = (random 1) ^ 2; + _ratioMin = (random 1) ^ 2; + + _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; + _windSpeedChange = _windSpeed - GVAR(current_wind_speed); _time = GVAR(wind_next_period) * 60; - ACE_WIND_PARAMS = [_windDirection, - GVAR(min_wind_speed), - GVAR(max_wind_speed), - _c1, - _c2, - _c3, - _c4, + TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_time); + + ACE_WIND_PARAMS = [GVAR(current_wind_direction), + _windDirectionChange, + GVAR(current_wind_speed), + _windSpeedChange, _time]; - + + GVAR(current_wind_direction) = _windDirection; + GVAR(current_wind_speed) = _windSpeed; + GVAR(wind_period_start_time) = time; publicVariable "ACE_WIND_PARAMS"; }; @@ -77,4 +90,6 @@ ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR( publicVariable "ACE_MISC_PARAMS"; GVAR(rain_period_count) = GVAR(rain_period_count) + 1; -GVAR(wind_period_count) = GVAR(wind_period_count) + 1; \ No newline at end of file +GVAR(wind_period_count) = GVAR(wind_period_count) + 1; + +GVAR(overcast_multiplier) = 1 max (2* overcast) min 2; // 0 (@ overcast 0), 2 (@ overcast 1) \ No newline at end of file From d63de3a09e1cf72b5a48a5ad3d24d9a3951f49d0 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 22 Apr 2015 07:49:18 -0700 Subject: [PATCH 24/66] restart PFH on optic reload. Fixes #812 --- addons/javelin/functions/fnc_onOpticLoad.sqf | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf index a2b2692859..8e26806162 100644 --- a/addons/javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -33,7 +33,8 @@ uiNameSpace setVariable [QGVAR(arguments), _pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil]; -if(isNil "_pfh_handle") then { - _pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler; - uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle]; -}; \ No newline at end of file +if(!isNil "_pfh_handle") then { + [] call FUNC(onOpticUnload); // Unload optic if it was already loaded +}; +_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler; +uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle]; From 0c6786a138cf5c940edb803aea53d833640c7f3d Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 22 Apr 2015 08:07:58 -0700 Subject: [PATCH 25/66] use the vehicle of the player for variables, not the player. allows static optics. FIxes #808 --- addons/javelin/functions/fnc_onOpticDraw.sqf | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 74f7c49746..6da8353126 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -9,7 +9,9 @@ private["_apos", "_aposX", "_aposY", "_args", "_boundsInput", "_bpos", "_canFire private["_constraintLeft", "_constraintRight", "_constraintTop", "_currentTarget", "_fireDisabledEH"]; private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"]; private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"]; -private["_runTime", "_soundTime", "_targetArray", "_zamerny"]; +private["_runTime", "_soundTime", "_targetArray", "_zamerny", "_currentShooter"]; + +_currentShooter = (vehicle ACE_player); #define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 #define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 @@ -128,7 +130,7 @@ FUNC(disableFire) = { if(_firedEH < 0 && difficulty > 0) then { _firedEH = [ACE_player, "DefaultAction", {true}, { - _canFire = ACE_player getVariable["ace_missileguidance_target", nil]; + _canFire = _currentShooter getVariable["ace_missileguidance_target", nil]; if(!isNil "_canFire") exitWith { false }; true }] call EFUNC(common,addActionEventHandler); @@ -155,7 +157,7 @@ if (isNull _newTarget) then { __JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingConstraints ctrlShow false; - ACE_player setVariable ["ace_missileguidance_target",nil, false]; + _currentShooter setVariable ["ace_missileguidance_target",nil, false]; // Disallow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); @@ -212,7 +214,7 @@ if (isNull _newTarget) then { {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR]; - ACE_player setVariable["ace_missileguidance_target", _currentTarget, false]; + _currentShooter setVariable["ace_missileguidance_target", _currentTarget, false]; // Allow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); @@ -227,7 +229,7 @@ if (isNull _newTarget) then { __JavelinIGUITargetingConstrains ctrlShow true; __JavelinIGUITargetingLines ctrlShow false; - ACE_player setVariable["ace_missileguidance_target", nil, false]; + _currentShooter setVariable["ace_missileguidance_target", nil, false]; _boundsInput = if (_currentTarget isKindOf "CAManBase") then { [_newTarget,[-1,-1,-2],_currentTarget selectionPosition "body"]; @@ -270,7 +272,7 @@ if (isNull _newTarget) then { __JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingConstraints ctrlShow false; - ACE_player setVariable ["ace_missileguidance_target",nil, false]; + _currentShooter setVariable ["ace_missileguidance_target",nil, false]; // Disallow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); From caf2f12eb939c417c359f4ce15ceaacb4ee971ab Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 19:46:09 +0200 Subject: [PATCH 26/66] Improved the wind direction selection based on the probability array --- addons/weather/functions/fnc_initWind.sqf | 30 ++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf index 2da1b9ea49..10b22efa2a 100644 --- a/addons/weather/functions/fnc_initWind.sqf +++ b/addons/weather/functions/fnc_initWind.sqf @@ -11,24 +11,32 @@ */ #include "script_component.hpp" -private ["_j", "_i", "_directionFound", "_month", "_windDirectionProbabilities"]; +private ["_sum", "_rand", "_csum", "_index", "_month", "_windDirectionProbabilities"]; _month = date select 1; _windDirectionProbabilities = GVAR(WindDirectionProbabilities) select (_month - 1); ACE_wind = [0, 0, 0]; GVAR(wind_direction_reference) = random 360; -_directionFound = false; -for "_j" from 0 to 10 do { - _random = random 1; - for "_i" from 0 to 7 do { - if (_random < (_windDirectionProbabilities select _i)) exitWith { - _directionFound = true; - GVAR(wind_direction_reference) = 45 * _i; - }; - }; - if (_directionFound) exitWith {}; +_sum = 0; +for "_i" from 0 to 7 do { + _sum = _sum + (_windDirectionProbabilities select _i); }; +_rand = random _sum; +_csum = [0, 0, 0, 0, 0, 0, 0, 0]; +for "_i" from 0 to 7 do { + for "_j" from 0 to _i do { + _csum set [_i, (_csum select _i) + (_windDirectionProbabilities select _j)]; + }; +}; +_index = 0; +for "_i" from 0 to 7 do { + if (_rand > (_csum select _i)) then { + _index = _index + 1; + }; +}; +GVAR(wind_direction_reference) = 45 * _index; + GVAR(wind_mean_dir) = GVAR(wind_direction_reference); GVAR(wind_direction_reference) = GVAR(wind_direction_reference) + (random 22.5) - (random 22.5); GVAR(wind_direction_reference) = (360 + GVAR(wind_direction_reference)) % 360; From a9726d2b608865ccdea491a3c4b2521f9fdedb4a Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 19:46:27 +0200 Subject: [PATCH 27/66] Simplified the wind direction change calculation --- addons/weather/functions/fnc_getWind.sqf | 2 ++ addons/weather/functions/fnc_serverController.sqf | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 33750b77dd..5f050d74b3 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -28,4 +28,6 @@ TRACE_2("Dir: Current/Change",Round(_dir),Round(_dirChange)); TRACE_2("Spd: Current/Change",Round(_spd * 10) / 10,Round(_spdChange * 10) / 10); TRACE_3("Period/Position/Percent",Round(_period),Round(_periodPosition),Round(_periodPercent * 100) / 100); +// TODO: Add some deterministic noise + [-_spd * sin(_dir), -_spd * cos(_dir), 0] diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 6bc0f4a9bc..5e6928d5b1 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -53,10 +53,10 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; _windDirectionChange = _windDirection - GVAR(current_wind_direction); if (_windDirectionChange > 180) then { - _windDirectionChange = 360 - _windDirectionChange; + _windDirectionChange = _windDirectionChange - 360; }; if (_windDirectionChange < -180) then { - _windDirectionChange = -360 - _windDirectionChange; + _windDirectionChange = 360 + _windDirectionChange; }; _windMaxDiff = GVAR(mean_wind_speed) - GVAR(max_wind_speed); From 09ff217e9343bc124e637e7f97652a354c03739a Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 21:16:01 +0200 Subject: [PATCH 28/66] Improved the init process --- addons/weather/XEH_postInit.sqf | 21 ++----------------- addons/weather/XEH_postServerInit.sqf | 19 ++++++++++++++++- addons/weather/XEH_preInit.sqf | 3 +++ addons/weather/functions/fnc_getWind.sqf | 1 + .../functions/fnc_serverController.sqf | 2 +- .../weather/functions/fnc_updateHumidity.sqf | 2 ++ .../functions/fnc_updateTemperature.sqf | 2 ++ 7 files changed, 29 insertions(+), 21 deletions(-) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 6c287c3a8a..04879971b4 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,26 +1,9 @@ #include "script_component.hpp" -call FUNC(getMapData); - -// Randomization -GVAR(temperatureShift) = 3 - random 6; -GVAR(badWeatherShift) = (random 1) ^ 2 * 10; -GVAR(humidityShift) = (5 - random 10) / 100; - -// Rain variables GVAR(enableRain) = true; -GVAR(rain_next_period) = -1; -GVAR(rain_period_count) = 0; -GVAR(rain_initial_rain) = 0; -if(overcast >= 0.7) then { - GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3)); -}; -GVAR(current_rain) = GVAR(rain_initial_rain); -GVAR(rain_current_range) = -1+(random 2); -GVAR(overcast_multiplier) = 1; -// Wind Variables -call FUNC(initWind); +GVAR(wind_period_start_time) = time; +GVAR(rain_period_start_time) = time; "ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; }; "ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; }; diff --git a/addons/weather/XEH_postServerInit.sqf b/addons/weather/XEH_postServerInit.sqf index cfe35e6009..67d536b996 100644 --- a/addons/weather/XEH_postServerInit.sqf +++ b/addons/weather/XEH_postServerInit.sqf @@ -1,3 +1,20 @@ #include "script_component.hpp" -[FUNC(serverController), 60] call cba_fnc_addPerFrameHandler; +// Randomization +GVAR(temperatureShift) = 3 - random 6; +GVAR(badWeatherShift) = (random 1) ^ 2 * 10; +GVAR(humidityShift) = (5 - random 10) / 100; + +// Rain +GVAR(rain_next_period) = -1; +GVAR(rain_period_count) = 0; +GVAR(current_rain) = 0; +GVAR(rain_current_range) = -1+(random 2); + +// Wind +call FUNC(initWind); + +GVAR(overcast_multiplier) = 1; +GVAR(serverUpdateInterval) = 60; + +[FUNC(serverController), GVAR(serverUpdateInterval)] call cba_fnc_addPerFrameHandler; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 1d6b12ee60..70c9341d0f 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -15,4 +15,7 @@ PREP(updateRain); PREP(updateTemperature); PREP(updateWind); +// Make sure this data is read before client/server postInit +call FUNC(getMapData); + ADDON = true; diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 5f050d74b3..95d97d98b3 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -24,6 +24,7 @@ _dir = _dir + _dirChange * _periodPercent; _dir = (360 + _dir) % 360; +TRACE_1("PeriodStartTime",Round(GVAR(wind_period_start_time))); TRACE_2("Dir: Current/Change",Round(_dir),Round(_dirChange)); TRACE_2("Spd: Current/Change",Round(_spd * 10) / 10,Round(_spdChange * 10) / 10); TRACE_3("Period/Position/Percent",Round(_period),Round(_periodPosition),Round(_periodPercent * 100) / 100); diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 5e6928d5b1..33ac909868 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -68,7 +68,7 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; _windSpeedChange = _windSpeed - GVAR(current_wind_speed); - _time = GVAR(wind_next_period) * 60; + _time = GVAR(wind_next_period) * GVAR(serverUpdateInterval); TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_time); diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf index 07edec1854..dce031b3f3 100644 --- a/addons/weather/functions/fnc_updateHumidity.sqf +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -24,6 +24,8 @@ if (rain > 0 && overcast > 0.7) then { _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)); }; GVAR(currentHumidity) = 0 max GVAR(currentHumidity) min 1; diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index d66a9b28f4..870d00333c 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -20,3 +20,5 @@ _hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440) GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; GVAR(currentTemperature) = GVAR(currentTemperature) + GVAR(temperatureShift) - GVAR(badWeatherShift) * overcast; GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; + +TRACE_2("temperatureShift/badWeatherShift",GVAR(temperatureShift),GVAR(badWeatherShift)); From 860b4a446ad843160662f5f976b62bdd6d8bae92 Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 22:48:38 +0200 Subject: [PATCH 29/66] Updated the 6.5mm Creedmor airFriction: *Also added it to the ATRagMX gun list --- addons/atragmx/XEH_postInit.sqf | 1 + addons/atragmx/script_component.hpp | 2 +- addons/ballistics/CfgAmmo.hpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 7f047834e2..2f51bf16f9 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -34,6 +34,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"], ["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"], + ["6.5mm Creedmor" , 840, 100, 0.0637, -0.0006510, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"], ["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ], ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index 6e81f79493..c201925147 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.2 +#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.3 diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 3ccc84a7bc..8660e416c9 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -145,7 +145,7 @@ class CfgAmmo { ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; class ACE_65_Creedmor_Ball: B_65x39_Caseless { - airFriction=-0.00078; + airFriction=-0.000651; typicalSpeed=860 ; caliber=0.7; ACE_caliber=0.264; From c975213579306345c2e02fed327bbca87cc8c3b9 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 11:11:38 +0200 Subject: [PATCH 30/66] Update CfgAmmo.hpp Added missing data to 40mm grenades. --- addons/frag/CfgAmmo.hpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 8ad76e6ae8..94b4e5dbb6 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -76,8 +76,18 @@ class CfgAmmo { }; class ACE_G_40mm_HEDP: G_40mm_HE { + ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + ACE_FRAG_METAL = 200; + ACE_FRAG_CHARGE = 45; + ACE_FRAG_GURNEY_C = 2830; + ACE_FRAG_GURNEY_K = 3/5; }; class ACE_G_40mm_HE: ACE_G_40mm_HEDP { + ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + ACE_FRAG_METAL = 200; + ACE_FRAG_CHARGE = 32; + ACE_FRAG_GURNEY_C = 2700; + ACE_FRAG_GURNEY_K = 3/5; }; class ACE_G_40mm_Practice: ACE_G_40mm_HE { ACE_FRAG_SKIP = 1; From e9bb1eea4ca014236e77658a04e0c6c6d11fe896 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 11:27:43 +0200 Subject: [PATCH 31/66] Minor muzzle velocity correction for the 6.5mm Creedmor --- addons/ballistics/CfgAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 8660e416c9..f42d4fca90 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -156,7 +156,7 @@ class CfgAmmo { ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; - ACE_muzzleVelocities[]={750, 830, 850, 860, 865}; + ACE_muzzleVelocities[]={750, 820, 840, 852, 860}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; class B_762x51_Ball : BulletBase { From be595d9c9e317135abf3972ad74b7f2d3a99b560 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 11:54:24 +0200 Subject: [PATCH 32/66] Made the wind speed change less often during good weather --- addons/weather/functions/fnc_serverController.sqf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 33ac909868..c4550e3c13 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -65,8 +65,12 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { _ratioMax = (random 1) ^ 2; _ratioMin = (random 1) ^ 2; - _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; - _windSpeedChange = _windSpeed - GVAR(current_wind_speed); + _windSpeed = GVAR(current_wind_speed); + _windSpeedChange = 0; + if ((random 1) < (0.3 max overcast)) then { + _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; + _windSpeedChange = _windSpeed - GVAR(current_wind_speed); + }; _time = GVAR(wind_next_period) * GVAR(serverUpdateInterval); From dd72fced364df94c2d5aa0a27b279196d2f7c4b9 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 12:42:01 +0200 Subject: [PATCH 33/66] Added M955, M993, MK316 Mod 0, 127x99mm API ammo classes: *Recalculated the vanilla calibers based on (6.5mm ~ 1.0) --- addons/atragmx/XEH_postInit.sqf | 2 +- addons/ballistics/CfgAmmo.hpp | 115 +++++++++++++++++++++++++------- 2 files changed, 93 insertions(+), 24 deletions(-) diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 2f51bf16f9..e2e3cb254c 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -9,7 +9,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006400, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003740, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], - ["12.7x99mm" , 853, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], + ["12.7x99mm" , 900, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], ["12.7x54mm" , 300, 100, 0.3395, -0.0001400, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index f42d4fca90..609eeb6ede 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -36,7 +36,7 @@ class CfgAmmo { }; class ACE_556x45_Ball_Mk262 : B_556x45_Ball { airFriction=-0.001125; - caliber=0.6; + caliber=0.8; deflecting=18; hit=11; typicalSpeed=836; @@ -53,7 +53,7 @@ class CfgAmmo { }; class ACE_556x45_Ball_Mk318 : B_556x45_Ball { airFriction=-0.001120; - caliber=0.6; + caliber=0.8; deflecting=18; hit=9; typicalSpeed=886; @@ -68,13 +68,30 @@ class CfgAmmo { ACE_muzzleVelocities[]={780, 886, 950}; ACE_barrelLengths[]={10, 15.5, 20}; }; + class ACE_556x45_Ball_M995_AP : B_556x45_Ball { + airFriction=-0.001120; + caliber=1.6; + deflecting=18; + hit=6; + typicalSpeed=886; + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=52; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={950, 1030, 1040}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; class B_556x45_Ball_Tracer_Red; class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red { nvgOnly = 1; }; class ACE_545x39_Ball_7N6M : B_556x45_Ball { airFriction=-0.001162; - caliber=0.5; + caliber=0.6; deflecting=18; hit=7; typicalSpeed=880; @@ -92,7 +109,7 @@ class CfgAmmo { class B_556x45_Ball_Tracer_Yellow; class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow { airFriction=-0.001162; - caliber=0.5; + caliber=0.6; deflecting=18; hit=7; typicalSpeed=883; @@ -132,7 +149,7 @@ class CfgAmmo { class ACE_65x47_Ball_Scenar: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=820 ; - caliber=0.6; + caliber=0.9; ACE_caliber=0.264; ACE_bulletLength=1.364; ACE_bulletMass=139; @@ -147,7 +164,7 @@ class CfgAmmo { class ACE_65_Creedmor_Ball: B_65x39_Caseless { airFriction=-0.000651; typicalSpeed=860 ; - caliber=0.7; + caliber=1.1; ACE_caliber=0.264; ACE_bulletLength=1.426; ACE_bulletMass=140; @@ -180,7 +197,7 @@ class CfgAmmo { }; class ACE_762x51_Ball_M118LR : B_762x51_Ball { airFriction=-0.0008525; - caliber=1.05; + caliber=1.8; hit=16; typicalSpeed=790; ACE_caliber=0.308; @@ -194,11 +211,27 @@ class CfgAmmo { ACE_muzzleVelocities[]={750, 780, 790, 794}; ACE_barrelLengths[]={16, 20, 24, 26}; }; + class ACE_762x51_Ball_MK316_Mod_0 : B_762x51_Ball { + airFriction=-0.0008525; + caliber=1.8; + hit=16; + typicalSpeed=790; + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={775, 790, 805, 810}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball { airFriction=-0.00103; - caliber=0.85; + caliber=1.5; hit=14; - typicalSpeed=890; + typicalSpeed=900; ACE_caliber=0.308; ACE_bulletLength=1.24; ACE_bulletMass=130; @@ -210,9 +243,25 @@ class CfgAmmo { ACE_muzzleVelocities[]={838, 892, 910}; ACE_barrelLengths[]={13, 16, 20}; }; + class ACE_762x51_Ball_M993_AP : B_762x51_Ball { + airFriction=-0.00103; + caliber=2.2; + hit=11; + typicalSpeed=930; + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=127; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.377}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={875, 910, 930}; + ACE_barrelLengths[]={13, 16, 20}; + }; class ACE_762x51_Ball_Subsonic : B_762x51_Ball { airFriction=-0.000535; - caliber=0.5; + caliber=1; hit=6; typicalSpeed=790; ACE_caliber=0.308; @@ -229,7 +278,7 @@ class CfgAmmo { class ACE_30_06_M1_Ball : B_762x51_Ball { airFriction=-0.0009; typicalSpeed=800; - caliber=1.3; + caliber=2.0; hit=10; ACE_caliber=0.308; ACE_bulletLength=1.21; @@ -245,7 +294,7 @@ class CfgAmmo { class ACE_7_Remington_Magnum_Ball : B_762x51_Ball { airFriction=-0.0008; typicalSpeed=820; - caliber=1.4; + caliber=2.1; hit=8; ACE_caliber=0.284; ACE_bulletLength=1.529; @@ -261,7 +310,7 @@ class CfgAmmo { class ACE_243_Winchester_Ball : B_762x51_Ball { airFriction=-0.00095; typicalSpeed=915; - caliber=0.8; + caliber=2.3; hit=6; ACE_caliber=0.243; ACE_bulletLength=1.282; @@ -276,7 +325,7 @@ class CfgAmmo { }; class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { airFriction=-0.000830; - caliber=1.08; + caliber=1.8; hit=17; typicalSpeed=900; ACE_caliber=0.308; @@ -292,7 +341,7 @@ class CfgAmmo { }; class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball { airFriction=-0.000815; - caliber=1.12; + caliber=1.9; hit=18; typicalSpeed=867; ACE_caliber=0.308; @@ -308,7 +357,7 @@ class CfgAmmo { }; class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball { airFriction=-0.00076; - caliber=1.15; + caliber=2.0; hit=19; typicalSpeed=853; ACE_caliber=0.308; @@ -338,7 +387,7 @@ class CfgAmmo { }; class ACE_762x54_Ball_7N14 : B_762x51_Ball { airFriction=-0.001023; - caliber=0.95; + caliber=1.5; hit=15; typicalSpeed=820; ACE_caliber=0.312; @@ -355,7 +404,7 @@ class CfgAmmo { class B_762x54_Tracer_Green; class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green { airFriction=-0.001023; - caliber=0.9; + caliber=1.5; hit=15; typicalSpeed=800; ACE_caliber=0.312; @@ -371,7 +420,7 @@ class CfgAmmo { }; class ACE_762x35_Ball : B_762x51_Ball { airFriction=-0.000821; - caliber=0.9; + caliber=1.5; hit=11; typicalSpeed=790; ACE_caliber=0.308; @@ -388,6 +437,7 @@ class CfgAmmo { class ACE_762x39_Ball : B_762x51_Ball { airFriction=-0.0015168; hit=12; + caliber=1.5 typicalSpeed=716; ACE_caliber=0.308; ACE_bulletLength=1.14; @@ -403,6 +453,7 @@ class CfgAmmo { class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow { airFriction=-0.0015168; hit=12; + caliber=1.5; typicalSpeed=716; ACE_caliber=0.308; ACE_bulletLength=1.14; @@ -493,6 +544,7 @@ class CfgAmmo { class ACE_303_Ball : ACE_762x51_Ball_M118LR { airFriction=-0.00083; typicalSpeed=761; + caliber=2.0; ACE_caliber=0.311; ACE_bulletLength=1.227; ACE_bulletMass=174; @@ -580,7 +632,6 @@ class CfgAmmo { class ACE_338_Ball : B_338_Ball { timeToLive=10; airFriction=-0.000535; - caliber=1.55; typicalSpeed=826; ACE_caliber=0.338; ACE_bulletLength=1.70; @@ -596,7 +647,7 @@ class CfgAmmo { class ACE_338_Ball_API526 : B_338_Ball { timeToLive=10; airFriction=-0.000673; - caliber=2.4; + caliber=2.8; typicalSpeed=826; ACE_caliber=0.338; ACE_bulletLength=1.535; @@ -626,7 +677,7 @@ class CfgAmmo { class B_127x99_Ball : BulletBase { timeToLive=10; airFriction=-0.0006; - typicalSpeed=853; + typicalSpeed=900; ACE_caliber=0.510; ACE_bulletLength=2.310; ACE_bulletMass=647; @@ -635,13 +686,31 @@ class CfgAmmo { ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; - ACE_muzzleVelocities[]={853}; + ACE_muzzleVelocities[]={900}; + ACE_barrelLengths[]={29}; + }; + class B_127x99_API : BulletBase { + timeToLive=10; + airFriction=-0.0006; + typicalSpeed=900; + hit=25; + caliber=4.0; + ACE_caliber=0.510; + ACE_bulletLength=2.310; + ACE_bulletMass=648; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={900}; ACE_barrelLengths[]={29}; }; class ACE_127x99_Ball_AMAX : B_127x99_Ball { timeToLive=10; airFriction=-0.000374; typicalSpeed=860; + caliber=3.0; ACE_caliber=0.510; ACE_bulletLength=2.540; ACE_bulletMass=750; From b1521345c2f9c75282aa6099f96dfa0ef4bc7398 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 13:35:57 +0200 Subject: [PATCH 34/66] Added magazines for the new AP rounds: *Fixed some stringtable inconsistencies *Removed some obsolete stringtable entries --- addons/ballistics/CfgAmmo.hpp | 6 +- addons/ballistics/CfgMagazines.hpp | 54 ++++++- addons/ballistics/CfgVehicles.hpp | 24 ++- addons/ballistics/CfgWeapons.hpp | 14 ++ addons/ballistics/stringtable.xml | 228 ++++++++++++++++------------- 5 files changed, 220 insertions(+), 106 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 609eeb6ede..eb4d15cb75 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -76,7 +76,7 @@ class CfgAmmo { typicalSpeed=886; ACE_caliber=0.224; ACE_bulletLength=0.906; - ACE_bulletMass=52; + ACE_bulletMass=46; ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; ACE_ballisticCoefficients[]={0.151}; ACE_velocityBoundaries[]={}; @@ -211,7 +211,7 @@ class CfgAmmo { ACE_muzzleVelocities[]={750, 780, 790, 794}; ACE_barrelLengths[]={16, 20, 24, 26}; }; - class ACE_762x51_Ball_MK316_Mod_0 : B_762x51_Ball { + class ACE_762x51_Ball_Mk316_Mod_0 : B_762x51_Ball { airFriction=-0.0008525; caliber=1.8; hit=16; @@ -689,7 +689,7 @@ class CfgAmmo { ACE_muzzleVelocities[]={900}; ACE_barrelLengths[]={29}; }; - class B_127x99_API : BulletBase { + class ACE_127x99_API : BulletBase { timeToLive=10; airFriction=-0.0006; typicalSpeed=900; diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index 5e3f48c369..9ead13c962 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -49,6 +49,14 @@ class CfgMagazines { class 30Rnd_556x45_Stanag: CA_Magazine { }; + class ACE_30Rnd_556x45_Stanag_M995_AP_mag: 30Rnd_556x45_Stanag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_556x45_Ball_M995_AP"; + displayName = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name"; + displayNameShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort"; + descriptionShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description"; + initSpeed = 1046; + }; class ACE_30Rnd_556x45_Stanag_Mk262_mag: 30Rnd_556x45_Stanag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_556x45_Ball_Mk262"; @@ -123,6 +131,15 @@ class CfgMagazines { descriptionShort = "$STR_ACE_10Rnd_762x51_M118LR_Mag_Description"; initSpeed = 780; }; + class ACE_10Rnd_762x51_Mk316_Mod_0_Mag: 10Rnd_762x51_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_762x51_Ball_Mk316_Mod_0"; + count = 10; + displayName = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Name"; + displayNameShort = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_NameShort"; + descriptionShort = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Description"; + initSpeed = 790; + }; class ACE_10Rnd_762x51_Mk319_Mod_0_Mag: 10Rnd_762x51_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x51_Ball_Mk319_Mod_0"; @@ -132,6 +149,15 @@ class CfgMagazines { descriptionShort = "$STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description"; initSpeed = 900; }; + class ACE_10Rnd_762x51_M993_AP_Mag: 10Rnd_762x51_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_762x51_Ball_M993_AP"; + count = 10; + displayName = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_Name"; + displayNameShort = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_NameShort"; + descriptionShort = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_Description"; + initSpeed = 920; + }; class ACE_20Rnd_762x51_M118LR_Mag: 20Rnd_762x51_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x51_Ball_M118LR"; @@ -140,6 +166,15 @@ class CfgMagazines { descriptionShort = "$STR_ACE_20Rnd_762x51_M118LR_Mag_Description"; initSpeed = 780; }; + class ACE_20Rnd_762x51_Mk316_Mod_0_Mag: 20Rnd_762x51_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_762x51_Ball_Mk316_Mod_0"; + count = 20; + displayName = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Name"; + displayNameShort = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_NameShort"; + descriptionShort = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Description"; + initSpeed = 790; + }; class ACE_20Rnd_762x51_Mk319_Mod_0_Mag: 20Rnd_762x51_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x51_Ball_Mk319_Mod_0"; @@ -148,6 +183,15 @@ class CfgMagazines { descriptionShort = "$STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description"; initSpeed = 900; }; + class ACE_20Rnd_762x51_M993_AP_Mag: 20Rnd_762x51_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_762x51_Ball_M993_AP"; + count = 20; + displayName = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_Name"; + displayNameShort = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_NameShort"; + descriptionShort = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_Description"; + initSpeed = 920; + }; class ACE_20Rnd_762x67_Mk248_Mod_0_Mag: 20Rnd_762x51_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x67_Ball_Mk248_Mod_0"; @@ -211,7 +255,15 @@ class CfgMagazines { displayName = "$STR_ACE_5Rnd_127x99_Mag_Name"; displayNameShort = "$STR_ACE_5Rnd_127x99_Mag_NameShort"; descriptionShort = "$STR_ACE_5Rnd_127x99_Mag_Description"; - initSpeed = 853; + initSpeed = 900; + }; + class ACE_5Rnd_127x99_API_Mag: 5Rnd_127x108_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_127x99_API"; + displayName = "$STR_ACE_5Rnd_127x99_API_Mag_Name"; + displayNameShort = "$STR_ACE_5Rnd_127x99_API_Mag_NameShort"; + descriptionShort = "$STR_ACE_5Rnd_127x99_API_Mag_Description"; + initSpeed = 900; }; class ACE_5Rnd_127x99_AMAX_Mag: 5Rnd_127x108_Mag { author = "$STR_ACE_Common_ACETeam"; diff --git a/addons/ballistics/CfgVehicles.hpp b/addons/ballistics/CfgVehicles.hpp index b40ee12a72..89f5c26652 100644 --- a/addons/ballistics/CfgVehicles.hpp +++ b/addons/ballistics/CfgVehicles.hpp @@ -27,6 +27,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); + MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); }; }; @@ -37,12 +38,15 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); + MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); }; }; @@ -51,13 +55,18 @@ class CfgVehicles { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M993_AP_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); + MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); }; }; @@ -69,6 +78,8 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); @@ -106,7 +117,6 @@ class CfgVehicles { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6); MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); - MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; }; @@ -114,6 +124,7 @@ class CfgVehicles { class IND_Box_Base; class Box_IND_Wps_F: IND_Box_Base { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -127,6 +138,7 @@ class CfgVehicles { class Box_IND_Ammo_F: IND_Box_Base { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -135,6 +147,7 @@ class CfgVehicles { class FIA_Box_Base_F; class Box_FIA_Wps_F: FIA_Box_Base_F { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -142,6 +155,7 @@ class CfgVehicles { class Box_FIA_Ammo_F: FIA_Box_Base_F { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -149,6 +163,7 @@ class CfgVehicles { class I_supplyCrate_F: B_supplyCrate_F { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -156,6 +171,7 @@ class CfgVehicles { class IG_supplyCrate_F: ReammoBox_F { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -176,8 +192,12 @@ class CfgVehicles { author = "$STR_ACE_Common_ACETeam"; class TransportMagazines { MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M993_AP_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); @@ -185,6 +205,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,4); @@ -197,6 +218,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); + MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); }; }; diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index e6ce5d4bfd..7e647d2605 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -382,6 +382,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -401,6 +402,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -415,6 +417,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -429,6 +432,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -449,6 +453,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -463,6 +468,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -477,6 +483,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -503,8 +510,10 @@ class CfgWeapons { magazines[] = { "20Rnd_762x51_Mag", "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag", "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9724; @@ -528,6 +537,7 @@ class CfgWeapons { "5Rnd_127x108_Mag", "5Rnd_127x108_APDS_Mag", "ACE_5Rnd_127x99_Mag", + "ACE_5Rnd_127x99_API_Mag", "ACE_5Rnd_127x99_AMAX_Mag" }; initSpeed = -1.0; @@ -551,8 +561,10 @@ class CfgWeapons { magazines[] = { "20Rnd_762x51_Mag", "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag", "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9843; @@ -573,8 +585,10 @@ class CfgWeapons { magazines[] = { "20Rnd_762x51_Mag", "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag", "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9916; diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index 2f89e12d00..49b39c0af6 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -256,42 +256,6 @@ Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - - 5.56mm 30Rnd AP Mag - 5,56 mm Páncéltörő 30-as Tár - 5,56 mm 30-Schuss-Magazin AP - Cargador de 30 balas AP de 5,56mm - Ch. 5,56mm 30Cps AP - Magazynek 5,56mm 30rd AP - 5.56mm 30ks AP Zásobník - Carregador de 30 projéteis AP de 5,56mm - Caricatore 5.56mm 30Rnd AP - Магазин из 30-ти 5,56 мм бронебойных - - - 5.56mm AP - 5,56 mm Páncéltörő - 5,56mm AP - 5,56mm AP - 5,56mm AP - 5,56mm AP - 5.56mm AP - 5,56mm AP - 5.56mm AP - 5,56 мм бронебойные - - - Caliber: 5.56x45 mm AP<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Páncéltörő<br />Lövedékek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm AP<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm AP<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Ráže: 5.56x45 mm AP<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibro: 5.56x45 mm AP<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Калибр: 5,56x45 мм бронебойные<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - 7.62mm 20rnd Tracer Mag @@ -401,42 +365,6 @@ Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR - - 7.62mm 20Rnd AP Mag - 7,62 mm Páncéltörő 20-as Tár - 7,62 mm 20-Schuss-Magazin AP - Cargador de 20 balas AP de 7,62mm - Ch. 7,62mm 20Cps AP - Magazynek 7,62mm 20rd AP - 7.62mm 20ks AP Zásobník - Carregador de 20 projéteis AP de 7,62mm - Caricatore 7.62mm 20Rnd AP - Магазин из 20-ти 7,62 мм бронебойных - - - 7.62mm AP - 7,62 mm Páncéltörő - 7,62mm AP - 7,62mm AP - 7,62mm AP - 7,62mm AP - 7.62mm AP - 7,62mm AP - 7.62mm AP - 7,62 мм бронебойные - - - Caliber: 7.62x51 mm AP<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Páncéltörő<br />Lövedékek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm AP<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm AP<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm AP<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62x51 mm AP<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm AP<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm AP<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm AP<br />Munizioni: 20<br />In uso su: Mk18 ABR - Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR - .338 NM 130Rnd Tracer Belt @@ -564,31 +492,6 @@ Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus - - 9.3mm 10Rnd AP Mag - 9,3mm 10-Schuss-Magazin Hartkern - Magazynek 9,3mm 10rd AP - Chargeur 9.3mm 10Cps AP - Cargador de 10 balas AP de 9.3mm - Магазин из 10-ти 9,3 мм бронебойных - - - 9.3mm AP - 9,3mm AP - 9,3mm AP - 9.3mm AP - 9.3mm AP - 9.3mm AP - 9,3 мм бронебойные - - - Caliber: 9.3x64mm AP<br />Rounds: 10<br />Used in: Cyrus - Kaliber: 9,3x64mm Hartkern<br />Schuss: 10<br />Verwendet für: Cyrus - Kaliber: 9,3x64 mm AP<br />Pociski: 10<br />Używany w: Cyrus - Calibre: 9.3x64mm AP<br />Cartouches: 10<br />Utilisé dans: Cyrus - Calibre: 9.3x64mm AP<br />Balas: 10<br />Se usa en: Cyrus - Калибр: 9,3x64 мм бронебойные<br />Патронов: 10<br />Используются с: Cyrus - 9.3mm 150Rnd Tracer Belt @@ -781,7 +684,7 @@ 5.56mm Mk262 5,56mm Mk262 5.56mm Mk262 - 5.56mm (Mk262) + 5.56mm Mk262 5,56 мм Mk262 @@ -793,16 +696,16 @@ 5.56mm 30Rnd Mag (Mk318) - Magazynek 5,56mm 30rd Mk318 + Magazynek 5,56mm 30rd (Mk318) 5.56mm 30Cps (Mk318) Cargador de 30 balas de 5.56mm (Mk318) - Магазин из 30-ти 5.56 мм Mk318 + Магазин из 30-ти 5.56 мм (Mk318) 5.56mm Mk318 5,56mm Mk318 5.56mm Mk318 - 5.56mm (Mk318) + 5.56mm Mk318 5.56 мм Mk318 @@ -812,6 +715,27 @@ Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30 + + 5.56mm 30Rnd Mag (M995 AP) + Magazynek 5,56mm 30rd (M995 AP) + 5.56mm 30Cps (M995 AP) + Cargador de 30 balas de 5.56mm (M995 AP) + Магазин из 30-ти 5.56 мм (M995 AP) + + + 5.56mm AP + 5,56mm AP + 5.56mm AP + 5.56mm AP + 5.56 мм AP + + + Caliber: 5.56x45 mm NATO (M995 AP)<br />Rounds: 30 + Kaliber: 5,56x45 mm NATO (M995 AP)<br />Pociski: 30 + Calibre: 5.56x45 mm NATO (M995 AP)<br />Cartouches: 30 + Calibre: 5.56x45 mm NATO (M995 AP)<br />Balas: 30 + Калибр: 5,56x45 мм NATO (M995 AP)<br />Патронов: 30 + 7.62mm 10Rnd Mag (M118LR) Magazynek 7,62mm 10rd (M118LR) @@ -854,6 +778,48 @@ Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20 Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20 + + 7.62mm 10Rnd Mag (Mk316 Mod 0) + Magazynek 7,62mm 10rd (Mk316 Mod 0) + 7.62mm 10Cps (Mk316 Mod 0) + Cargador de 10 balas de 7.62mm (Mk316 Mod 0) + Магазин из 10-ти 7,62 мм (Mk316 Mod 0) + + + 7.62mm Mk316 + 7,62mm Mk316 + 7.62mm Mk316 + 7.62mm Mk316 + 7,62 мм Mk316 + + + Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 10 + Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 10 + Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 10 + Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 10 + Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10 + + + 7.62mm 20Rnd Mag (Mk316 Mod 0) + Magazynek 7,62mm 20rd (Mk316 Mod 0) + 7.62mm 20Cps (Mk316 Mod 0) + Cargador de 20 balas de 7.62mm (Mk316 Mod 0) + Магазин из 20-ти 7,62 мм (Mk316 Mod 0) + + + 7.62mm Mk316 + 7,62mm Mk316 + 7.62mm Mk316 + 7.62mm Mk316 + 7,62 мм Mk316 + + + Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 20 + Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 20 + Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 20 + Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 20 + Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 20 + 7.62mm 10Rnd Mag (Mk319 Mod 0) Magazynek 7,62mm 10rd (Mk319 Mod 0) @@ -896,6 +862,48 @@ Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20 + + 7.62mm 10Rnd Mag (M993 AP) + Magazynek 7,62mm 10rd (M993 AP) + 7.62mm 10Cps (M993 AP) + Cargador de 10 balas de 7.62mm (M993 AP) + Магазин из 10-ти 7,62 мм (M993 AP) + + + 7.62mm AP + 7,62mm AP + 7.62mm AP + 7.62mm AP + 7,62mm AP + + + Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 10 + Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 10 + Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 10 + Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 10 + Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 10 + + + 7.62mm 20Rnd Mag (M993 AP) + Magazynek 7,62mm 20rd (M993 AP) + 7.62mm 20Cps (M993 AP) + Cargador de 20 balas de 7.62mm (M993 AP) + Магазин из 20-ти 7,62 мм (M993 AP) + + + 7.62mm AP + 7,62mm AP + 7.62mm AP + 7.62mm AP + 7,62 мм AP + + + Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 20 + Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 20 + Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 20 + Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 20 + Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 20 + 7.62mm 20Rnd Mag (Mk248 Mod 0) Magazynek 7,62mm 20rd (Mk248 Mod 0) @@ -1056,6 +1064,24 @@ Kaliber: 12,7x99 mm<br />Pociski: 5 Калибр: 12,7x99 мм<br />Патронов: 5 + + 12.7x99mm API 5Rnd Mag + 12.7x99mm API 5Cps + Cargador de 5 balas de 12.7x99mm API + Magazynek 12,7x99mm API 5rd + + + 12.7mm API + 12.7mm API + 12.7mm API + 12,7mm API + + + Caliber: 12.7x99mm API<br />Rounds: 5 + Calibre: 12.7x99mm API<br />Cartouches: 5 + Calibre: 12.7x99mm API<br />Balas: 5 + Kaliber: 12,7x99 mm API<br />Pociski: 5 + 12.7x99mm 5Rnd Mag (AMAX) 12.7x99mm 5Rnd Mag (AMAX) From 00016097910ed6b4663016ec63c3671d1efe995c Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:44:55 +0200 Subject: [PATCH 35/66] Update CfgAmmo.hpp Added realistic tracer burn times for several ammo types: B_556x45_Ball (parent for several tracer rounds) ACE_545x39_Ball_7T3M B_762x51_Ball (parent for several tracer rounds) ACE_762x54_Ball_7T2 ACE_762x39_Ball_57N231P Also changed color on russian tracer rounds from yellow to green, which is what they are in the real world. --- addons/ballistics/CfgAmmo.hpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 8660e416c9..abefc6a924 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -23,6 +23,8 @@ class CfgAmmo { airFriction=-0.001265; hit=8; typicalSpeed=750; + tracerStartTime = 0.073; //M856 tracer burns out to 800m + tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -89,13 +91,15 @@ class CfgAmmo { ACE_muzzleVelocities[]={780, 880, 920}; ACE_barrelLengths[]={10, 16.3, 20}; }; - class B_556x45_Ball_Tracer_Yellow; - class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow { + class B_556x45_Ball_Tracer_Green; + class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green { airFriction=-0.001162; caliber=0.5; deflecting=18; hit=7; typicalSpeed=883; + tracerStartTime = 0.073; //7T3M tracer burns out to 850m + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -163,6 +167,8 @@ class CfgAmmo { airFriction=-0.001035; typicalSpeed=833; hit=9; + tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m + tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; @@ -358,6 +364,8 @@ class CfgAmmo { caliber=0.9; hit=15; typicalSpeed=800; + tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds + tracerEndTime = 3; ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=149; @@ -400,10 +408,12 @@ class CfgAmmo { ACE_muzzleVelocities[]={650, 716, 750}; ACE_barrelLengths[]={10, 16.3, 20}; }; - class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow { + class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green { airFriction=-0.0015168; hit=12; typicalSpeed=716; + tracerStartTime = 0.073; //57N231P tracer burns out to 800m + tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; From ae8a512e8fae2e60d231b9d278a92419eb4049c6 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:47:25 +0200 Subject: [PATCH 36/66] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index abefc6a924..1bc9208395 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -24,7 +24,7 @@ class CfgAmmo { hit=8; typicalSpeed=750; tracerStartTime = 0.073; //M856 tracer burns out to 800m - tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator + tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -98,8 +98,8 @@ class CfgAmmo { deflecting=18; hit=7; typicalSpeed=883; - tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //7T3M tracer burns out to 850m + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -364,8 +364,8 @@ class CfgAmmo { caliber=0.9; hit=15; typicalSpeed=800; - tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds - tracerEndTime = 3; + tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds + tracerEndTime = 3; ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=149; @@ -412,8 +412,8 @@ class CfgAmmo { airFriction=-0.0015168; hit=12; typicalSpeed=716; - tracerStartTime = 0.073; //57N231P tracer burns out to 800m - tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //57N231P tracer burns out to 800m + tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; From f0a1900ad400e7a23c92afaf8858d49da8abd995 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:53:42 +0200 Subject: [PATCH 37/66] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 1bc9208395..a627f145ca 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -23,8 +23,8 @@ class CfgAmmo { airFriction=-0.001265; hit=8; typicalSpeed=750; - tracerStartTime = 0.073; //M856 tracer burns out to 800m - tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //M856 tracer burns out to 800m + tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -99,7 +99,7 @@ class CfgAmmo { hit=7; typicalSpeed=883; tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -167,7 +167,7 @@ class CfgAmmo { airFriction=-0.001035; typicalSpeed=833; hit=9; - tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m + tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; @@ -365,7 +365,7 @@ class CfgAmmo { hit=15; typicalSpeed=800; tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds - tracerEndTime = 3; + tracerEndTime = 3; ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=149; @@ -413,7 +413,7 @@ class CfgAmmo { hit=12; typicalSpeed=716; tracerStartTime = 0.073; //57N231P tracer burns out to 800m - tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator + tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; From 5bfa97f490cf24588a13958819f50c69fcb7d166 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:55:26 +0200 Subject: [PATCH 38/66] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index a627f145ca..794f9fe6aa 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -98,8 +98,8 @@ class CfgAmmo { deflecting=18; hit=7; typicalSpeed=883; - tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //7T3M tracer burns out to 850m + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -168,7 +168,7 @@ class CfgAmmo { typicalSpeed=833; hit=9; tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m - tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator + tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; From 8d4fff63592a5c9d8720fa1353b8ae93bb177812 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:56:46 +0200 Subject: [PATCH 39/66] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 794f9fe6aa..ddae9f76c7 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -98,8 +98,8 @@ class CfgAmmo { deflecting=18; hit=7; typicalSpeed=883; - tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //7T3M tracer burns out to 850m + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -168,7 +168,7 @@ class CfgAmmo { typicalSpeed=833; hit=9; tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m - tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator + tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; From 91dfd9802ab577e71dec35f871b981058d205efb Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:58:42 +0200 Subject: [PATCH 40/66] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index ddae9f76c7..f04eea838d 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -23,8 +23,8 @@ class CfgAmmo { airFriction=-0.001265; hit=8; typicalSpeed=750; - tracerStartTime = 0.073; //M856 tracer burns out to 800m - tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //M856 tracer burns out to 800m + tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -167,8 +167,8 @@ class CfgAmmo { airFriction=-0.001035; typicalSpeed=833; hit=9; - tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m - tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m + tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; @@ -364,7 +364,7 @@ class CfgAmmo { caliber=0.9; hit=15; typicalSpeed=800; - tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds + tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds tracerEndTime = 3; ACE_caliber=0.312; ACE_bulletLength=1.14; @@ -412,8 +412,8 @@ class CfgAmmo { airFriction=-0.0015168; hit=12; typicalSpeed=716; - tracerStartTime = 0.073; //57N231P tracer burns out to 800m - tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //57N231P tracer burns out to 800m + tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; From b0eadf83c75f2f41de5856836bb4416be95d4e13 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 14:04:01 +0200 Subject: [PATCH 41/66] Fixed incorrect typicalSpeed --- addons/ballistics/CfgAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index eb4d15cb75..a31d4b0946 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -263,7 +263,7 @@ class CfgAmmo { airFriction=-0.000535; caliber=1; hit=6; - typicalSpeed=790; + typicalSpeed=320; ACE_caliber=0.308; ACE_bulletLength=1.340; ACE_bulletMass=200; From ddf62b6db4dc58baefa1167bc3654e0b627c77fd Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 16:08:02 +0200 Subject: [PATCH 42/66] Added missing privates --- addons/weather/functions/fnc_serverController.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index c4550e3c13..87350c2e77 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,7 +11,7 @@ */ #include "script_component.hpp" -private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time"]; +private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time", "_ratioMin", "_ratioMax"]; // Rain simulation if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { From f5e6da60a7567e42cd6e7ebe270d3786dd79c25f Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 19:59:57 +0200 Subject: [PATCH 43/66] Added optional rh_m4_comp with advanced ballistics configs --- optionals/rh_m4_comp/CfgAmmo.hpp | 206 ++++++++++++++++++++++ optionals/rh_m4_comp/CfgWeapons.hpp | 158 +++++++++++++++++ optionals/rh_m4_comp/config.cpp | 15 ++ optionals/rh_m4_comp/script_component.hpp | 5 + 4 files changed, 384 insertions(+) create mode 100644 optionals/rh_m4_comp/CfgAmmo.hpp create mode 100644 optionals/rh_m4_comp/CfgWeapons.hpp create mode 100644 optionals/rh_m4_comp/config.cpp create mode 100644 optionals/rh_m4_comp/script_component.hpp diff --git a/optionals/rh_m4_comp/CfgAmmo.hpp b/optionals/rh_m4_comp/CfgAmmo.hpp new file mode 100644 index 0000000000..c15e0e503a --- /dev/null +++ b/optionals/rh_m4_comp/CfgAmmo.hpp @@ -0,0 +1,206 @@ +class CfgAmmo { + + class Default; + class BulletCore; + class BulletBase; + class B_9x21_Ball; + class B_556x45_Ball; + class B_65x39_Caseless; + class B_762x51_Ball; + + class RH_9x19_B_M822: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_9x19_B_HP: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_9x19_B_HPSB: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.603; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.212}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={295, 310, 330}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_556x45_B_M855A1: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class RH_556x45_B_Mk318: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class RH_556x45_B_Mk262: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class RH_68x43_B_FMJ: B_65x39_Caseless + { + ACE_caliber=0.277; + ACE_bulletLength=0.959; + ACE_bulletMass=115; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.162}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={713, 785, 810, 850}; + ACE_barrelLengths[]={12, 16, 20, 24}; + }; + class RH_68x43_B_Match: B_65x39_Caseless + { + ACE_caliber=0.277; + ACE_bulletLength=1.250; + ACE_bulletMass=135; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.253}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 732, 750, 780}; + ACE_barrelLengths[]={12, 16, 20, 24}; + }; + class RH_762x35_B_FMJ: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.118; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.398}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={559, 609, 625}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class RH_762x35_B_Match: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.153; + ACE_bulletMass=125; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.349, 0.338, 0.330, 0.310}; + ACE_velocityBoundaries[]={792, 610, 488}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={572, 676, 700}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class RH_762x35_B_MSB: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.608}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={9, 16, 20}; + }; + class RH_762x51_B_M80A1: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class RH_762x51_B_Mk316LR: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={775, 790, 805, 810}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class RH_762x51_B_Mk319: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=130; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.377}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={838, 892, 910}; + ACE_barrelLengths[]={13, 16, 20}; + }; + class RH_762x51_B_LFMJSB: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.340; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.235}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={305, 325, 335, 340}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; +}; diff --git a/optionals/rh_m4_comp/CfgWeapons.hpp b/optionals/rh_m4_comp/CfgWeapons.hpp new file mode 100644 index 0000000000..132859f778 --- /dev/null +++ b/optionals/rh_m4_comp/CfgWeapons.hpp @@ -0,0 +1,158 @@ +class Mode_SemiAuto; +class Mode_Burst; +class Mode_FullAuto; +class SlotInfo; +class MuzzleSlot; +class CowsSlot; +class PointerSlot; +class UnderBarrelSlot; +class asdg_SlotInfo; +class asdg_FrontSideRail; +class asdg_OpticRail; +class asdg_OpticRail1913; +class asdg_OpticRail1913_short; +class asdg_MuzzleSlot_556; +class asdg_MuzzleSlot_762; +class asdg_MuzzleSlot_9MM; +class asdg_UnderSlot; + +class CfgWeapons +{ + class Rifle; + class UGL_F; + class Rifle_Base_F: Rifle + { + }; + class ItemCore; + class ItemInfo; + class InventoryItem_Base_F; + class InventoryMuzzleItem_Base_F; + class InventoryOpticsItem_Base_F; + class InventoryFlashLightItem_Base_F; + class Zasleh2; + class RH_ar10: Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20.8; + }; + class RH_m110: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=20; + }; + class RH_Mk11: RH_m110 + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class RH_SR25EC: RH_m110 + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20; + }; + class RH_m4: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_M4_ris: RH_m4 + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_M4A1_ris: RH_M4_ris + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_M4m: RH_M4A1_ris + { + ACE_barrelTwist=7; + ACE_barrelLength=10.5; + }; + class RH_M4sbr: RH_M4A1_ris + { + ACE_barrelTwist=7; + ACE_barrelLength=10.5; + }; + class RH_hb: Rifle_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=6; + }; + class RH_hb_b: RH_hb + { + ACE_barrelTwist=8; + ACE_barrelLength=6; + }; + class RH_sbr9: Rifle_Base_F + { + ACE_barrelTwist=9.7; + ACE_barrelLength=9; + }; + class RH_M4A6: RH_M4A1_ris + { + ACE_barrelTwist=10; + ACE_barrelLength=14.5; + }; + class RH_M16a1: RH_m4 + { + ACE_barrelTwist=14; + ACE_barrelLength=20; + }; + class RH_M16A2: RH_m4 + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A4 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A3: RH_M16A4 + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A4_m: RH_M16A4 + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A6: RH_M16A4 + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_Mk12mod1: RH_M16A4 + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class RH_SAMR: RH_Mk12mod1 + { + ACE_barrelTwist=7.7; + ACE_barrelLength=20; + }; + class RH_Hk416: RH_M4A1_ris + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_Hk416s: RH_M4sbr + { + ACE_barrelTwist=7; + ACE_barrelLength=10.4; + }; + class RH_Hk416c: RH_M4sbr + { + ACE_barrelTwist=7; + ACE_barrelLength=9; + }; + class RH_M27IAR: RH_Mk12mod1 + { + ACE_barrelTwist=7; + ACE_barrelLength=16.5; + }; +}; \ No newline at end of file diff --git a/optionals/rh_m4_comp/config.cpp b/optionals/rh_m4_comp/config.cpp new file mode 100644 index 0000000000..937097354f --- /dev/null +++ b/optionals/rh_m4_comp/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"asdg_jointrails","RH_m4_cfg"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/rh_m4_comp/script_component.hpp b/optionals/rh_m4_comp/script_component.hpp new file mode 100644 index 0000000000..4ab887e889 --- /dev/null +++ b/optionals/rh_m4_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT rh_m4_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 55732d42622776a285d43652c463e910a06ce260 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 23 Apr 2015 13:33:35 -0500 Subject: [PATCH 44/66] Text Shadow should have been black. --- addons/interact_menu/config.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index 433c2388c2..c79c9cd6d1 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -50,13 +50,13 @@ class ACE_Settings { displayName = "$STR_ACE_Interact_Menu_ColorTextMin"; }; class GVAR(colorShadowMax) { - value[] = {1, 1, 1, 1}; + value[] = {0, 0, 0, 1}; typeName = "COLOR"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_ColorShadowMax"; }; class GVAR(colorShadowMin) { - value[] = {1, 1, 1, 0.25}; + value[] = {0, 0, 0, 0.25}; typeName = "COLOR"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_ColorShadowMin"; From e8a48fa81c34e52d67a64760dfa6ad876ccc1027 Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Fri, 24 Apr 2015 01:54:36 +0200 Subject: [PATCH 45/66] PL translation fix Apparently mini-spike AT still wants to shoot down planes and choppers :) --- addons/realisticnames/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 1fcf116d1e..341b2a383f 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1135,7 +1135,7 @@ Mini-Spike (AT) Mini-Spike (PALR) Mini-Spike (PT) - Mini-Spike (AA) + Mini-Spike (AT) Mini-Spike (AT) Mini-Spike (Tankelhárító) Mini-Spike (AT) From c8563ce4846f8679fc4095b6300de6f4f0bb8fcd Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 24 Apr 2015 00:57:22 -0300 Subject: [PATCH 46/66] Add LOS check for actions points. Close #785 --- .../functions/fnc_renderBaseMenu.sqf | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf index 9a20962a8f..a5214ddcbe 100644 --- a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf @@ -41,9 +41,21 @@ if((count _this) > 2) then { }; }; -// For non-self actions, exit if the action is too far away +// For non-self actions, exit if the action is too far away or ocluded if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player && - {(ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot")) distance _pos >= _distance}) exitWith {false}; + { + private ["_headPos","_actualDistance"]; + _headPos = ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot"); + _actualDistance = _headPos distance _pos; + + if (_actualDistance > _distance) exitWith {true}; + + if (_distance > 1.0) exitWith { + // If distance to action is greater than 1.0 m, check LOS + _line = [_headPos call EFUNC(common,positionToASL), _pos call EFUNC(common,positionToASL), _object, ACE_player]; + lineIntersects _line + }; + }) exitWith {false}; // Exit if the action is behind you _sPos = if (count _pos != 2) then { From e3a06999c3daff8f0956400ab9842a3976b14d8b Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 24 Apr 2015 00:57:49 -0300 Subject: [PATCH 47/66] Reduce MainActions distance for CAManBase from 5m to 4m --- addons/interaction/CfgVehicles.hpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index bd36f42703..0408192919 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -27,7 +27,7 @@ class CfgVehicles { class ACE_Actions { class ACE_MainActions { displayName = "$STR_ACE_Interaction_MainAction"; - distance = 5; + distance = 4; condition = QUOTE(true); statement = ""; icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa"; @@ -35,7 +35,6 @@ class CfgVehicles { class ACE_TeamManagement { displayName = "$STR_ACE_Interaction_TeamManagement"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)}); statement = ""; showDisabled = 0; @@ -45,7 +44,6 @@ class CfgVehicles { class ACE_JoinTeamRed { displayName = "$STR_ACE_Interaction_JoinTeamRed"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam)); showDisabled = 1; @@ -55,7 +53,6 @@ class CfgVehicles { }; class ACE_JoinTeamGreen { displayName = "$STR_ACE_Interaction_JoinTeamGreen"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam)); showDisabled = 1; @@ -65,7 +62,6 @@ class CfgVehicles { }; class ACE_JoinTeamBlue { displayName = "$STR_ACE_Interaction_JoinTeamBlue"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; @@ -75,7 +71,6 @@ class CfgVehicles { }; class ACE_JoinTeamYellow { displayName = "$STR_ACE_Interaction_JoinTeamYellow"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; @@ -86,7 +81,6 @@ class CfgVehicles { class ACE_LeaveTeam { displayName = "$STR_ACE_Interaction_LeaveTeam"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'}); statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; @@ -98,7 +92,6 @@ class CfgVehicles { class ACE_JoinGroup { displayName = "$STR_ACE_Interaction_JoinGroup"; - distance = 5; condition = QUOTE(side group _player == side group _target && {group _player != group _target}); statement = QUOTE([_player] joinSilent group _target;); showDisabled = 0; @@ -109,7 +102,6 @@ class CfgVehicles { class ACE_GetDown { displayName = "$STR_ACE_Interaction_GetDown"; - distance = 5; condition = QUOTE([_target] call DFUNC(canInteractWithCivilian)); statement = QUOTE([_target] call DFUNC(getDown)); showDisabled = 0; @@ -117,7 +109,6 @@ class CfgVehicles { }; class ACE_SendAway { displayName = "$STR_ACE_Interaction_SendAway"; - distance = 5; condition = QUOTE([_target] call DFUNC(canInteractWithCivilian)); statement = QUOTE([_target] call DFUNC(sendAway)); showDisabled = 0; @@ -125,7 +116,6 @@ class CfgVehicles { }; class ACE_Pardon { displayName = "$STR_ACE_Interaction_Pardon"; - distance = 5; condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target}); statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc)); showDisabled = 0; From 01464399253ec24ab7eb2a66cc1927cd0763028f Mon Sep 17 00:00:00 2001 From: Glowbal Date: Fri, 24 Apr 2015 07:46:01 +0200 Subject: [PATCH 48/66] increasing the text box height #834 Temporary solution until we get something properly done. Ideally we would calculate the height of the box through the amount of characters. For that we would need a font with a consistent width across each character, or figure out the width for each character ourselves. --- addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf b/addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf index e677cccdce..c4ddb2d93d 100644 --- a/addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf +++ b/addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf @@ -53,4 +53,4 @@ _structuredOutputText = _structuredOutputText + format ["" + (localize "STR_ACE_MagazineRepack_RepackedMagazinesCount") + ""), _fullMags, _partialMags]; -[parseText _structuredOutputText] call EFUNC(common,displayTextStructured); +[parseText _structuredOutputText, 2] call EFUNC(common,displayTextStructured); From 5a90ef62071882a530f9ceaee80b35f7aaa2b9d1 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:03:48 +0200 Subject: [PATCH 49/66] Added global variables (syncRain, syncWind, syncMisc) which give some control over the weather module: *Removed duplicate debug output --- addons/weather/CfgEventhandlers.hpp | 1 - addons/weather/XEH_postInit.sqf | 14 +++++++++----- addons/weather/XEH_preClientInit.sqf | 17 ----------------- .../weather/functions/fnc_serverController.sqf | 16 +++++++++------- addons/weather/functions/fnc_updateRain.sqf | 4 ++-- addons/weather/functions/fnc_updateWind.sqf | 4 +++- 6 files changed, 23 insertions(+), 33 deletions(-) delete mode 100644 addons/weather/XEH_preClientInit.sqf diff --git a/addons/weather/CfgEventhandlers.hpp b/addons/weather/CfgEventhandlers.hpp index c3f1f2ba0b..842ad8e7bf 100644 --- a/addons/weather/CfgEventhandlers.hpp +++ b/addons/weather/CfgEventhandlers.hpp @@ -1,6 +1,5 @@ class Extended_PreInit_EventHandlers { class ADDON { - clientInit = QUOTE(call COMPILE_FILE(XEH_preClientInit)); init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 04879971b4..546938448c 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,6 +1,8 @@ #include "script_component.hpp" -GVAR(enableRain) = true; +GVAR(syncRain) = true; +GVAR(syncWind) = true; // Wind, Gusts, Waves +GVAR(syncMisc) = true; // Lightnings, Rainbow, Fog GVAR(wind_period_start_time) = time; GVAR(rain_period_start_time) = time; @@ -8,10 +10,12 @@ GVAR(rain_period_start_time) = time; "ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; }; "ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; }; "ACE_MISC_PARAMS" addPublicVariableEventHandler { - if !(isServer) then { - 30 setLightnings (ACE_MISC_PARAMS select 0); - 30 setRainbow (ACE_MISC_PARAMS select 1); - 30 setFog (ACE_MISC_PARAMS select 2); + if (!isServer) then { + if (GVAR(syncMisc)) then { + 30 setLightnings (ACE_MISC_PARAMS select 0); + 30 setRainbow (ACE_MISC_PARAMS select 1); + 30 setFog (ACE_MISC_PARAMS select 2); + }; GVAR(temperatureShift) = (ACE_MISC_PARAMS select 3); GVAR(badWeatherShift) = (ACE_MISC_PARAMS select 4); GVAR(humidityShift) = (ACE_MISC_PARAMS select 5); diff --git a/addons/weather/XEH_preClientInit.sqf b/addons/weather/XEH_preClientInit.sqf deleted file mode 100644 index b979521cdd..0000000000 --- a/addons/weather/XEH_preClientInit.sqf +++ /dev/null @@ -1,17 +0,0 @@ -#include "script_component.hpp" - - -FUNC(KEEPTIME) = { - if((count GVAR(WINDSPEED)) > 0) then { - private ["_wind", "_p", "_str"]; - _wind = ACE_wind; - - _p = _wind call CBA_fnc_vect2polar; - _str = format["Wind: %1 at %2m/s (%3MPH)\n%4", floor(_p select 1), floor(_p select 0), floor((_p select 0)*2.23693629), GVAR(WINDSPEED)]; - TRACE_2("Wind",_wind,_str); - }; -}; - -#ifdef DEBUG_MODE_FULL - [FUNC(KEEPTIME), 0.0, []] call CBA_fnc_addPerFrameHandler; -#endif diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 87350c2e77..8b1ef46234 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,12 +11,12 @@ */ #include "script_component.hpp" -private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time", "_ratioMin", "_ratioMax"]; +private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time", "_ratioMin", "_ratioMax"]; // Rain simulation -if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { +if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { - if(overcast >= 0.7) then { + if (overcast >= 0.7) then { _lastRain = GVAR(current_rain); _rainOverCast = ((overcast-0.7)/0.3); GVAR(rain_next_period) = ceil((1+random(10))/GVAR(overcast_multiplier)); @@ -44,7 +44,7 @@ if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { }; // Wind simulation -if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { +if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { GVAR(wind_next_period) = ceil((2 + (random 5)) / GVAR(overcast_multiplier)); GVAR(wind_period_count) = 0; @@ -89,9 +89,11 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { publicVariable "ACE_WIND_PARAMS"; }; -// Sync misc. parameters -ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; -publicVariable "ACE_MISC_PARAMS"; + +if (GVAR(syncMisc)) then { + ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; + publicVariable "ACE_MISC_PARAMS"; +}; GVAR(rain_period_count) = GVAR(rain_period_count) + 1; GVAR(wind_period_count) = GVAR(wind_period_count) + 1; diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index 01e32e1734..55babfeeef 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -11,9 +11,9 @@ */ #include "script_component.hpp" -private ["_oldStrength", "_rainStrength", "_transitionTime", "_periodPosition", "_periodPercent"]; +if (!GVAR(syncRain)) exitWith {}; -if (!GVAR(enableRain)) exitWith {}; +private ["_oldStrength", "_rainStrength", "_transitionTime", "_periodPosition", "_periodPercent"]; if (!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then { _oldStrength = ACE_RAIN_PARAMS select 0; diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index e5a52348a8..bf73d5760d 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -11,6 +11,8 @@ */ #include "script_component.hpp" +if (!GVAR(syncWind)) exitWith { ACE_wind = wind }; + ACE_wind = [] call FUNC(getWind); setWind [ACE_wind select 0, ACE_wind select 1, true]; 2 setGusts 0; @@ -18,4 +20,4 @@ setWind [ACE_wind select 0, ACE_wind select 1, true]; // Set waves: 0 when no wind, 1 when wind >= 16 m/s 1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); -//hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; +TRACE_3("Wind/ACE_wind/Deviation(m/s)",wind,ACE_wind,Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000); From 50546646fac2fe83b2a39d81c945a3659c7546cc Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:05:13 +0200 Subject: [PATCH 50/66] Added missing rain_period_count reset to 0 --- addons/weather/functions/fnc_serverController.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 8b1ef46234..4324f2e790 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -16,10 +16,12 @@ private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVarianc // Rain simulation if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { + GVAR(rain_next_period) = ceil((1 + (random 10)) / GVAR(overcast_multiplier)); + GVAR(rain_period_count) = 0; + if (overcast >= 0.7) then { _lastRain = GVAR(current_rain); _rainOverCast = ((overcast-0.7)/0.3); - GVAR(rain_next_period) = ceil((1+random(10))/GVAR(overcast_multiplier)); GVAR(current_rain) = (GVAR(current_rain)+(((GVAR(current_rain)))*((_rainOverCast*(GVAR(overcast_multiplier)))/8)*GVAR(rain_current_range))); GVAR(current_rain) = (GVAR(current_rain) max 0.01) min 1; From 062aeae6e6c6129f8f0be00704da6280b6d44fe2 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:25:31 +0200 Subject: [PATCH 51/66] Fixed several bugs in the rain simulation: *Added missing rain initialization based on overcast value *Added proper fade out when the overcast changes from >=0.7 to <0.7 *Removed duplicate code --- .../functions/fnc_serverController.sqf | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 4324f2e790..2d24af89ca 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,7 +11,7 @@ */ #include "script_component.hpp" -private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time", "_ratioMin", "_ratioMax"]; +private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_ratioMin", "_ratioMax"]; // Rain simulation if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { @@ -19,27 +19,30 @@ if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { GVAR(rain_next_period) = ceil((1 + (random 10)) / GVAR(overcast_multiplier)); GVAR(rain_period_count) = 0; + _lastRain = GVAR(current_rain); + if (overcast >= 0.7) then { - _lastRain = GVAR(current_rain); - _rainOverCast = ((overcast-0.7)/0.3); - - GVAR(current_rain) = (GVAR(current_rain)+(((GVAR(current_rain)))*((_rainOverCast*(GVAR(overcast_multiplier)))/8)*GVAR(rain_current_range))); - GVAR(current_rain) = (GVAR(current_rain) max 0.01) min 1; - - _transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20))+1; - GVAR(rain_current_range) = -1+(random 2); - - ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; - TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast); + _rainOverCast = (overcast - 0.7) / 0.3; + if (GVAR(current_rain) == 0) then { + // Initialize rain with a random strength depending on the current overcast value + GVAR(current_rain) = 0.25 + (random 0.25) + (random 0.5) * _rainOverCast; + }; + hintSilent format["%1, %2", ((_rainOverCast * GVAR(overcast_multiplier)) / 8), GVAR(rain_current_range)]; + GVAR(current_rain) = GVAR(current_rain) + GVAR(current_rain) * ((_rainOverCast * GVAR(overcast_multiplier)) / 8) * GVAR(rain_current_range); + GVAR(current_rain) = 0.01 max GVAR(current_rain) min 1; + + GVAR(rain_current_range) = -1 + (random 2); } else { - GVAR(current_rain) = 0; - _lastRain = GVAR(current_rain); _rainOverCast = 1; - _transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20))+1; - - ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; - TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast); + + GVAR(current_rain) = 0; }; + + _transitionTime = 1 + (_rainOverCast * 5) + (random (_rainOverCast * 20)); + + systemChat format["%1, %2, %3", _lastRain, GVAR(current_rain), _transitionTime]; + ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; + TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); GVAR(rain_period_start_time) = time; publicVariable "ACE_RAIN_PARAMS"; @@ -74,15 +77,15 @@ if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { _windSpeedChange = _windSpeed - GVAR(current_wind_speed); }; - _time = GVAR(wind_next_period) * GVAR(serverUpdateInterval); + _transitionTime = GVAR(wind_next_period) * GVAR(serverUpdateInterval); - TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_time); + TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_transitionTime); ACE_WIND_PARAMS = [GVAR(current_wind_direction), _windDirectionChange, GVAR(current_wind_speed), _windSpeedChange, - _time]; + _transitionTime]; GVAR(current_wind_direction) = _windDirection; GVAR(current_wind_speed) = _windSpeed; From b3f4bf306da607fa690cac7d534a6d001dd12d30 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:46:33 +0200 Subject: [PATCH 52/66] Moved the global weather controls into preInit --- addons/weather/XEH_postInit.sqf | 4 ---- addons/weather/XEH_preInit.sqf | 8 ++++++++ addons/weather/functions/fnc_serverController.sqf | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 546938448c..05cd29c093 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,9 +1,5 @@ #include "script_component.hpp" -GVAR(syncRain) = true; -GVAR(syncWind) = true; // Wind, Gusts, Waves -GVAR(syncMisc) = true; // Lightnings, Rainbow, Fog - GVAR(wind_period_start_time) = time; GVAR(rain_period_start_time) = time; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 70c9341d0f..401ae155c1 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -15,6 +15,14 @@ PREP(updateRain); PREP(updateTemperature); PREP(updateWind); +// Control server side weather propagation +GVAR(enableServerController) = true; + +// Control client side weather effects +GVAR(syncRain) = true; +GVAR(syncWind) = true; // Wind, Gusts, Waves +GVAR(syncMisc) = true; // Lightnings, Rainbow, Fog + // Make sure this data is read before client/server postInit call FUNC(getMapData); diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 2d24af89ca..50dcdd8228 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,6 +11,8 @@ */ #include "script_component.hpp" +if (!GVAR(enableServerController)) exitWith {}; + private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_ratioMin", "_ratioMax"]; // Rain simulation @@ -27,7 +29,7 @@ if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { // Initialize rain with a random strength depending on the current overcast value GVAR(current_rain) = 0.25 + (random 0.25) + (random 0.5) * _rainOverCast; }; - hintSilent format["%1, %2", ((_rainOverCast * GVAR(overcast_multiplier)) / 8), GVAR(rain_current_range)]; + GVAR(current_rain) = GVAR(current_rain) + GVAR(current_rain) * ((_rainOverCast * GVAR(overcast_multiplier)) / 8) * GVAR(rain_current_range); GVAR(current_rain) = 0.01 max GVAR(current_rain) min 1; From b3bf44fa1e5a6139cd1655837293a1b5094f975f Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:58:55 +0200 Subject: [PATCH 53/66] Code cleanup --- addons/weather/functions/fnc_getWind.sqf | 2 +- .../functions/fnc_serverController.sqf | 1 - addons/weather/functions/fnc_updateRain.sqf | 19 +++++++++---------- addons/weather/functions/fnc_updateWind.sqf | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 95d97d98b3..a23394e992 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -1,5 +1,5 @@ /* - * Author: ACE2 Team + * Author: ACE2 Team, Ruthberg * * Calculate current wind locally from the data broadcasted by the server * diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 50dcdd8228..a9ceca3815 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -42,7 +42,6 @@ if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { _transitionTime = 1 + (_rainOverCast * 5) + (random (_rainOverCast * 20)); - systemChat format["%1, %2, %3", _lastRain, GVAR(current_rain), _transitionTime]; ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index 55babfeeef..d240093443 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -1,5 +1,5 @@ /* - * Author: ACE2 Team + * Author: ACE2 Team, Ruthberg * * Updates rain based on ACE_RAIN_PARAMS * @@ -13,14 +13,13 @@ if (!GVAR(syncRain)) exitWith {}; -private ["_oldStrength", "_rainStrength", "_transitionTime", "_periodPosition", "_periodPercent"]; +if (!isNil "ACE_RAIN_PARAMS") then { + + EXPLODE_3_PVT(ACE_RAIN_PARAMS,_oldRain,_newRain,_period); + + private ["_periodPosition", "_periodPercent"]; + _periodPosition = (time - GVAR(rain_period_start_time)) min _period; + _periodPercent = (_periodPosition / _period) min 1; -if (!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then { - _oldStrength = ACE_RAIN_PARAMS select 0; - _rainStrength = ACE_RAIN_PARAMS select 1; - _transitionTime = ACE_RAIN_PARAMS select 2; - _periodPosition = (time - GVAR(rain_period_start_time)) min _transitionTime; - _periodPercent = (_periodPosition/_transitionTime) min 1; - - 0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength); + 0 setRain (_oldRain + (_newRain - _oldRain) * _periodPercent); }; diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index bf73d5760d..06bb57d093 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -1,5 +1,5 @@ /* - * Author: ACE2 Team + * Author: ACE2 Team, Ruthberg * * Updates wind, gusts and waves based on ACE_wind * From eb88f94cf7ccc9e6c68d15d5723b8580c8f74410 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 11:53:06 +0200 Subject: [PATCH 54/66] Removed unused privates --- addons/advanced_ballistics/functions/fnc_handleFired.sqf | 2 +- addons/kestrel4500/functions/fnc_collectData.sqf | 2 +- addons/kestrel4500/functions/fnc_displayKestrel.sqf | 5 ++--- addons/kestrel4500/functions/fnc_generateOutputData.sqf | 2 +- addons/weather/functions/fnc_displayWindInfo.sqf | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index 54a7f2d5b0..0180245f25 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -19,7 +19,7 @@ */ #include "script_component.hpp" -private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_bulletWeight", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"]; +private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"]; _unit = _this select 0; _weapon = _this select 1; _mode = _this select 3; diff --git a/addons/kestrel4500/functions/fnc_collectData.sqf b/addons/kestrel4500/functions/fnc_collectData.sqf index bbad8619bc..a812ad0f7c 100644 --- a/addons/kestrel4500/functions/fnc_collectData.sqf +++ b/addons/kestrel4500/functions/fnc_collectData.sqf @@ -14,7 +14,7 @@ */ #include "script_component.hpp" -private ["_playerDir", "_windSpeed", "_windDir", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"]; +private ["_playerDir", "_windSpeed", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"]; if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then { _temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2); diff --git a/addons/kestrel4500/functions/fnc_displayKestrel.sqf b/addons/kestrel4500/functions/fnc_displayKestrel.sqf index 2c1241bb6c..8eb2cea0ad 100644 --- a/addons/kestrel4500/functions/fnc_displayKestrel.sqf +++ b/addons/kestrel4500/functions/fnc_displayKestrel.sqf @@ -42,9 +42,7 @@ if (GVAR(Kestrel4500) && dialog) then { GVAR(Overlay) = true; -[{ - private ["_outputData", "_updateTimer"]; - +[{ // abort condition if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith { GVAR(Overlay) = false; @@ -55,6 +53,7 @@ GVAR(Overlay) = true; if (diag_tickTime > GVAR(updateTimer)) then { GVAR(updateTimer) = diag_tickTime + 1; + private ["_outputData"]; _outputData = [] call FUNC(generateOutputData); 3 cutRsc ["RscKestrel4500", "PLAIN", 1, false]; diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index 3f5e77b748..6b139fe72e 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -14,7 +14,7 @@ */ #include "script_component.hpp" -private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir", "_newWindSpeed", "_windSource", "_height"]; +private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir"]; [] call FUNC(collectData); diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf index 58d728bf67..7996503719 100644 --- a/addons/weather/functions/fnc_displayWindInfo.sqf +++ b/addons/weather/functions/fnc_displayWindInfo.sqf @@ -28,7 +28,7 @@ EGVAR(advanced_ballistics,Protractor) = false; GVAR(WindInfo) = true; [{ - private ["_windSpeed", "_windDir", "_playerDir", "_windIndex", "_windColor", "_newWindSpeed", "_windSource", "_height"]; + private ["_windSpeed", "_windDir", "_playerDir", "_windIndex", "_windColor"]; if !(GVAR(WindInfo) && !(underwater ACE_player) && vehicle ACE_player == ACE_player) exitWith { GVAR(WindInfo) = false; From 3747df3ec59fef1c7818f782e64b9cd625c87e5e Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 11:54:17 +0200 Subject: [PATCH 55/66] Added python script that finds never used privates --- tools/search_unused_privates.py | 128 ++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 tools/search_unused_privates.py diff --git a/tools/search_unused_privates.py b/tools/search_unused_privates.py new file mode 100644 index 0000000000..b9bdd880ce --- /dev/null +++ b/tools/search_unused_privates.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 + +import fnmatch +import os +import re +import ntpath +import sys +import argparse + +def get_private_declare(content): + priv_declared = [] + + srch = re.compile('private.*') + priv_srch_declared = srch.findall(content) + priv_srch_declared = sorted(set(priv_srch_declared)) + + priv_dec_str = ''.join(priv_srch_declared) + + srch = re.compile('(? 0: + print (filepath) + + private_output = 'private['; + first = True + for bad_priv in unused: + if first: + first = False + private_output = private_output + '"' + bad_priv + else: + private_output = private_output + '", "' + bad_priv + + private_output = private_output + '"];'; + print (private_output) + + for bad_priv in unused: + print ('\t' + bad_priv) + bad_count_file = bad_count_file + 1 + + + + return bad_count_file + +def main(): + + print("#########################") + print("# Search your Privates #") + print("#########################") + + sqf_list = [] + bad_count = 0 + + parser = argparse.ArgumentParser() + parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") + args = parser.parse_args() + + for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): + for filename in fnmatch.filter(filenames, '*.sqf'): + sqf_list.append(os.path.join(root, filename)) + + for filename in sqf_list: + bad_count = bad_count + check_privates(filename) + + + print ("Bad Count {0}".format(bad_count)) + +if __name__ == "__main__": + main() From 6361bda3e98137eedfb4dada4c025cc700bbc72d Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 13:01:11 +0200 Subject: [PATCH 56/66] Removed unused function --- .../functions/fnc_calculateAirDensity.sqf | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf diff --git a/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf b/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf deleted file mode 100644 index 298049e51d..0000000000 --- a/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Author: Ruthberg - * - * Calculates the air density - * - * Arguments: - * 0: temperature - degrees celcius - * 1: pressure - hPa - * 2: relativeHumidity - value between 0.0 and 1.0 - * - * Return Value: - * 0: density of air - kg * m^(-3) - * - * Return value: - * None - */ -#include "script_component.hpp" - -private ["_temperature", "_pressure", "_relativeHumidity"]; -_temperature = _this select 0; // in C -_pressure = _this select 1; // in hPa -_relativeHumidity = _this select 2; // as ratio 0-1 - -_pressure = _pressure * 100; - -if (_relativeHumidity > 0) then { - private ["_pSat", "_vaporPressure", "_partialPressure"]; - // Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm - _pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3)); - _vaporPressure = _relativeHumidity * _pSat; - _partialPressure = _pressure - _vaporPressure; - - (_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature)) -} else { - _pressure / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature)) -}; From 5e766835a65627645b84e4fe952631f9fcd00518 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 13:11:43 +0200 Subject: [PATCH 57/66] Improved regex matching --- tools/search_privates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/search_privates.py b/tools/search_privates.py index 6445a24dd7..37320214fc 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -53,7 +53,7 @@ def check_privates(filepath): # Regex search privates - srch = re.compile('(? Date: Fri, 24 Apr 2015 14:14:20 +0200 Subject: [PATCH 58/66] Added compatibility configs for hlcmods_core and hlcmods_m60e4 --- optionals/hlcmods_core_comp/CfgAmmo.hpp | 315 ++++++++++++++++++ optionals/hlcmods_core_comp/config.cpp | 14 + .../hlcmods_core_comp/script_component.hpp | 5 + optionals/hlcmods_m60e4_comp/CfgWeapons.hpp | 15 + optionals/hlcmods_m60e4_comp/config.cpp | 14 + .../hlcmods_m60e4_comp/script_component.hpp | 5 + 6 files changed, 368 insertions(+) create mode 100644 optionals/hlcmods_core_comp/CfgAmmo.hpp create mode 100644 optionals/hlcmods_core_comp/config.cpp create mode 100644 optionals/hlcmods_core_comp/script_component.hpp create mode 100644 optionals/hlcmods_m60e4_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_m60e4_comp/config.cpp create mode 100644 optionals/hlcmods_m60e4_comp/script_component.hpp diff --git a/optionals/hlcmods_core_comp/CfgAmmo.hpp b/optionals/hlcmods_core_comp/CfgAmmo.hpp new file mode 100644 index 0000000000..dd060b5cbb --- /dev/null +++ b/optionals/hlcmods_core_comp/CfgAmmo.hpp @@ -0,0 +1,315 @@ +class CfgAmmo +{ + class B_762x51_Ball; + class B_556x45_Ball; + class B_127x99_Ball; + class B_127x99_Ball_Tracer_Red; + class HLC_762x51_ball; + class HLC_556NATO_EPR: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class HLC_556NATO_SOST: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class HLC_556NATO_SPR: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class HLC_300Blackout_Ball: B_556x45_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.118; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.398}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={559, 609, 625}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class HLC_300Blackout_SMK: HLC_300Blackout_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.608}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={9, 16, 20}; + }; + class HLC_762x39_Ball: HLC_300Blackout_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class HLC_762x39_Tracer: HLC_762x39_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class HLC_762x51_MK316_20in: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_762x51_BTSub: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.340; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.235}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={305, 325, 335, 340}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_762x54_ball: HLC_762x51_ball + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_762x54_tracer: HLC_762x51_tracer + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_303Brit_B: B_556x45_Ball + { + ACE_caliber=0.311; + ACE_bulletLength=1.227; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.499, 0.493, 0.48}; + ACE_velocityBoundaries[]={671, 549}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={748, 761, 765}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class HLC_792x57_Ball: HLC_303Brit_B + { + ACE_caliber=0.318; + ACE_bulletLength=1.128; + ACE_bulletMass=196; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.315}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={785, 800, 815}; + ACE_barrelLengths[]={20, 23.62, 26}; + }; + class HLC_542x42_ball: HLC_303Brit_B + { + }; + class HLC_542x42_Tracer: HLC_303Brit_B + { + }; + class FH_545x39_Ball: B_556x45_Ball + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class FH_545x39_7u1: FH_545x39_Ball + { + ACE_bulletMass=80; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_muzzleVelocities[]={260, 303, 320}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class HLC_57x28mm_JHP: FH_545x39_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.495; + ACE_bulletMass=28; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.144}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={550, 625, 720}; + ACE_barrelLengths[]={4, 6, 10.35}; + }; + class HLC_9x19_Ball: B_556x45_Ball + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class HLC_9x19_M882_SMG: B_556x45_Ball + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class HLC_9x19_GoldDot: HLC_9x19_Ball + { + ACE_muzzleVelocities[]={350, 380, 420}; + }; + class HLC_9x19_Subsonic: HLC_9x19_Ball + { + ACE_muzzleVelocities[]={300, 320, 340}; + }; + class HLC_10mm_FMJ: HLC_9x19_Ball + { + ACE_caliber=0.5; + ACE_bulletLength=0.764; + ACE_bulletMass=165; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.189}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 400, 430}; + ACE_barrelLengths[]={4, 4.61, 9}; + }; + class HLC_45ACP_Ball: B_556x45_Ball + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class FH_44Mag: HLC_45ACP_Ball + { + ACE_caliber=0.429; + ACE_bulletLength=0.804; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.172}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 390, 420}; + ACE_barrelLengths[]={4, 7.5, 9}; + }; + class FH_50BMG_SLAP: B_127x99_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.25; + ACE_bulletMass=350; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={1.056}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={1204}; + ACE_barrelLengths[]={29}; + }; + class FH_50BMG_Raufoss: B_127x99_Ball + { + ACE_caliber=0.510; + ACE_bulletLength=2.380; + ACE_bulletMass=660; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={817}; + ACE_barrelLengths[]={29}; + }; +}; diff --git a/optionals/hlcmods_core_comp/config.cpp b/optionals/hlcmods_core_comp/config.cpp new file mode 100644 index 0000000000..ecd780908f --- /dev/null +++ b/optionals/hlcmods_core_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_core"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" diff --git a/optionals/hlcmods_core_comp/script_component.hpp b/optionals/hlcmods_core_comp/script_component.hpp new file mode 100644 index 0000000000..444799ed4a --- /dev/null +++ b/optionals/hlcmods_core_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_core_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/hlcmods_m60e4_comp/CfgWeapons.hpp b/optionals/hlcmods_m60e4_comp/CfgWeapons.hpp new file mode 100644 index 0000000000..9532c1968d --- /dev/null +++ b/optionals/hlcmods_m60e4_comp/CfgWeapons.hpp @@ -0,0 +1,15 @@ + +class CfgWeapons +{ + class hlc_M60e4_base; + class hlc_lmg_M60E4: hlc_M60e4_base + { + ACE_barrelTwist=12; + ACE_barrelLength=17; + }; + class hlc_lmg_m60: hlc_M60e4_base + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; +}; diff --git a/optionals/hlcmods_m60e4_comp/config.cpp b/optionals/hlcmods_m60e4_comp/config.cpp new file mode 100644 index 0000000000..1df3a97a20 --- /dev/null +++ b/optionals/hlcmods_m60e4_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_m60e4"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_m60e4_comp/script_component.hpp b/optionals/hlcmods_m60e4_comp/script_component.hpp new file mode 100644 index 0000000000..4a5a9c03b0 --- /dev/null +++ b/optionals/hlcmods_m60e4_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlc_m60e4_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 7e491c95a59c2cf2f17a2b77b553a9da08bffc6c Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 16:54:55 +0200 Subject: [PATCH 59/66] Added optional hlc_ar15 compatibility pbo --- optionals/hlc_ar15_comp/CfgWeapons.hpp | 65 ++++++++++++++++++++ optionals/hlc_ar15_comp/config.cpp | 14 +++++ optionals/hlc_ar15_comp/script_component.hpp | 5 ++ 3 files changed, 84 insertions(+) create mode 100644 optionals/hlc_ar15_comp/CfgWeapons.hpp create mode 100644 optionals/hlc_ar15_comp/config.cpp create mode 100644 optionals/hlc_ar15_comp/script_component.hpp diff --git a/optionals/hlc_ar15_comp/CfgWeapons.hpp b/optionals/hlc_ar15_comp/CfgWeapons.hpp new file mode 100644 index 0000000000..d57de932e6 --- /dev/null +++ b/optionals/hlc_ar15_comp/CfgWeapons.hpp @@ -0,0 +1,65 @@ +class CfgWeapons +{ + class Rifle; + class Rifle_Base_F; + class hlc_ar15_base: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=11.5; + }; + class hlc_rifle_RU556: hlc_ar15_base + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class hlc_rifle_RU5562: hlc_rifle_RU556 + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class hlc_rifle_CQBR: hlc_rifle_RU556 + { + ACE_barrelTwist=7; + ACE_barrelLength=10; + }; + class hlc_rifle_M4: hlc_rifle_RU556 + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_bcmjack: hlc_ar15_base + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_Colt727: hlc_ar15_base + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_Colt727_GL: hlc_rifle_Colt727 + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_Bushmaster300: hlc_rifle_Colt727 + { + ACE_barrelTwist=8; + ACE_barrelLength=14.5; + }; + class hlc_rifle_vendimus: hlc_rifle_Bushmaster300 + { + ACE_barrelTwist=8; + ACE_barrelLength=16; + }; + class hlc_rifle_SAMR: hlc_rifle_RU556 + { + ACE_barrelTwist=9; + ACE_barrelLength=16; + }; + class hlc_rifle_honeybase: hlc_rifle_RU556 + { + ACE_barrelTwist=8; + ACE_barrelLength=6; + }; +}; \ No newline at end of file diff --git a/optionals/hlc_ar15_comp/config.cpp b/optionals/hlc_ar15_comp/config.cpp new file mode 100644 index 0000000000..51e42dc040 --- /dev/null +++ b/optionals/hlc_ar15_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_ar15"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlc_ar15_comp/script_component.hpp b/optionals/hlc_ar15_comp/script_component.hpp new file mode 100644 index 0000000000..3fb38b0477 --- /dev/null +++ b/optionals/hlc_ar15_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_ar15_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From f707ce3577ae4cf5c8f4ff92009de5d7c646a70d Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 16:58:01 +0200 Subject: [PATCH 60/66] Added optional hlc_wp_mp5 compatibility pbo --- optionals/hlc_wp_mp5_comp/CfgWeapons.hpp | 60 +++++++++++++++++++ optionals/hlc_wp_mp5_comp/config.cpp | 14 +++++ .../hlc_wp_mp5_comp/script_component.hpp | 5 ++ 3 files changed, 79 insertions(+) create mode 100644 optionals/hlc_wp_mp5_comp/CfgWeapons.hpp create mode 100644 optionals/hlc_wp_mp5_comp/config.cpp create mode 100644 optionals/hlc_wp_mp5_comp/script_component.hpp diff --git a/optionals/hlc_wp_mp5_comp/CfgWeapons.hpp b/optionals/hlc_wp_mp5_comp/CfgWeapons.hpp new file mode 100644 index 0000000000..bb2762d1bc --- /dev/null +++ b/optionals/hlc_wp_mp5_comp/CfgWeapons.hpp @@ -0,0 +1,60 @@ + +class CfgWeapons +{ + class Rifle_Base_F; + class hlc_MP5_base: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp5k_PDW: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=4.5; + }; + class hlc_smg_mp5k: hlc_smg_mp5k_PDW + { + ACE_barrelTwist=10; + ACE_barrelLength=4.5; + }; + class hlc_smg_mp5a2: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_MP5N: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_9mmar: hlc_smg_MP5N + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp5a4: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp510: hlc_smg_MP5N + { + ACE_barrelTwist=15; + ACE_barrelLength=9; + }; + class hlc_smg_mp5sd5: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp5a3: hlc_smg_mp5a2 + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp5sd6: hlc_smg_mp5sd5 + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; +}; diff --git a/optionals/hlc_wp_mp5_comp/config.cpp b/optionals/hlc_wp_mp5_comp/config.cpp new file mode 100644 index 0000000000..1f4fe78db4 --- /dev/null +++ b/optionals/hlc_wp_mp5_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_mp5"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlc_wp_mp5_comp/script_component.hpp b/optionals/hlc_wp_mp5_comp/script_component.hpp new file mode 100644 index 0000000000..6b19e4912b --- /dev/null +++ b/optionals/hlc_wp_mp5_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_mp5_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 87252c3a3e429dc00588114aea1b09b74a675b54 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:05:09 +0200 Subject: [PATCH 61/66] Added optional hlcmods_ak compatibility pbo --- optionals/hlcmods_ak_comp/CfgWeapons.hpp | 54 +++++++++++++++++++ optionals/hlcmods_ak_comp/config.cpp | 14 +++++ .../hlcmods_ak_comp/script_component.hpp | 5 ++ 3 files changed, 73 insertions(+) create mode 100644 optionals/hlcmods_ak_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_ak_comp/config.cpp create mode 100644 optionals/hlcmods_ak_comp/script_component.hpp diff --git a/optionals/hlcmods_ak_comp/CfgWeapons.hpp b/optionals/hlcmods_ak_comp/CfgWeapons.hpp new file mode 100644 index 0000000000..ef9c7a6beb --- /dev/null +++ b/optionals/hlcmods_ak_comp/CfgWeapons.hpp @@ -0,0 +1,54 @@ +class CfgWeapons +{ + class hlc_ak_base; + class hlc_rifle_ak74: hlc_ak_base + { + ACE_barrelTwist=7.8699999; + ACE_barrelLength=16.299999; + }; + class hlc_rifle_aku12: hlc_rifle_ak12 + { + ACE_barrelTwist=6.3000002; + ACE_barrelLength=8.3000002; + }; + class hlc_rifle_RPK12: hlc_rifle_ak12 + { + ACE_barrelLength=23.200001; + }; + class hlc_rifle_aks74u: hlc_rifle_ak74 + { + ACE_barrelTwist=6.3000002; + ACE_barrelLength=8.3000002; + }; + class hlc_rifle_ak47: hlc_rifle_ak74 + { + ACE_barrelTwist=9.4499998; + ACE_barrelLength=16.299999; + }; + class hlc_rifle_akm: hlc_rifle_ak47 + { + ACE_barrelTwist=7.8699999; + ACE_barrelLength=16.299999; + }; + class hlc_rifle_rpk: hlc_rifle_ak47 + { + ACE_barrelTwist=9.4499998; + ACE_barrelLength=23.200001; + }; + class hlc_rifle_rpk74n: hlc_rifle_rpk + { + ACE_barrelTwist=9.4499998; + ACE_barrelLength=23.200001; + }; + class hlc_rifle_aek971: hlc_rifle_ak74 + { + ACE_barrelTwist=9.5; + ACE_barrelLength=17; + }; + class hlc_rifle_saiga12k: hlc_rifle_ak47 + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=16.9; + }; +}; \ No newline at end of file diff --git a/optionals/hlcmods_ak_comp/config.cpp b/optionals/hlcmods_ak_comp/config.cpp new file mode 100644 index 0000000000..7c8cdba2ba --- /dev/null +++ b/optionals/hlcmods_ak_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_aks"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_ak_comp/script_component.hpp b/optionals/hlcmods_ak_comp/script_component.hpp new file mode 100644 index 0000000000..a970229846 --- /dev/null +++ b/optionals/hlcmods_ak_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_aks_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From aeef674b082b08680e9e79180a5a89696e3521ad Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:08:08 +0200 Subject: [PATCH 62/66] Added optional hlcmods_fal compatibility pbo --- optionals/hlcmods_fal_comp/CfgWeapons.hpp | 50 +++++++++++++++++++ optionals/hlcmods_fal_comp/config.cpp | 14 ++++++ .../hlcmods_fal_comp/script_component.hpp | 5 ++ 3 files changed, 69 insertions(+) create mode 100644 optionals/hlcmods_fal_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_fal_comp/config.cpp create mode 100644 optionals/hlcmods_fal_comp/script_component.hpp diff --git a/optionals/hlcmods_fal_comp/CfgWeapons.hpp b/optionals/hlcmods_fal_comp/CfgWeapons.hpp new file mode 100644 index 0000000000..05a17d8eb4 --- /dev/null +++ b/optionals/hlcmods_fal_comp/CfgWeapons.hpp @@ -0,0 +1,50 @@ + +class CfgWeapons +{ + class hlc_fal_base; + class hlc_rifle_falosw: hlc_fal_base + { + ACE_barrelTwist=12; + ACE_barrelLength=13; + }; + class hlc_rifle_osw_GL: hlc_rifle_falosw + { + ACE_barrelTwist=12; + ACE_barrelLength=13; + }; + class hlc_rifle_SLR: hlc_fal_base + { + ACE_barrelTwist=12; + ACE_barrelLength=21.700001; + }; + class hlc_rifle_STG58F: hlc_fal_base + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class hlc_rifle_FAL5061: hlc_fal_base + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; + class hlc_rifle_L1A1SLR: hlc_rifle_SLR + { + ACE_barrelTwist=12; + ACE_barrelLength=21.700001; + }; + class hlc_rifle_c1A1: hlc_rifle_SLR + { + ACE_barrelTwist=12; + ACE_barrelLength=21.700001; + }; + class hlc_rifle_LAR: hlc_rifle_FAL5061 + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class hlc_rifle_SLRchopmod: hlc_rifle_FAL5061 + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; +}; \ No newline at end of file diff --git a/optionals/hlcmods_fal_comp/config.cpp b/optionals/hlcmods_fal_comp/config.cpp new file mode 100644 index 0000000000..5428e9871c --- /dev/null +++ b/optionals/hlcmods_fal_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_falpocalypse"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_fal_comp/script_component.hpp b/optionals/hlcmods_fal_comp/script_component.hpp new file mode 100644 index 0000000000..828722a5a4 --- /dev/null +++ b/optionals/hlcmods_fal_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_falpocalypse_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 5e23f7d84242173926963fae5f5fc6ebb05ef708 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:12:03 +0200 Subject: [PATCH 63/66] Added optional hlcmods_g3 compatibility pbo --- optionals/hlcmods_g3_comp/CfgWeapons.hpp | 45 +++++++++++++++++++ optionals/hlcmods_g3_comp/config.cpp | 14 ++++++ .../hlcmods_g3_comp/script_component.hpp | 5 +++ 3 files changed, 64 insertions(+) create mode 100644 optionals/hlcmods_g3_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_g3_comp/config.cpp create mode 100644 optionals/hlcmods_g3_comp/script_component.hpp diff --git a/optionals/hlcmods_g3_comp/CfgWeapons.hpp b/optionals/hlcmods_g3_comp/CfgWeapons.hpp new file mode 100644 index 0000000000..e45fe34048 --- /dev/null +++ b/optionals/hlcmods_g3_comp/CfgWeapons.hpp @@ -0,0 +1,45 @@ + +class CfgWeapons +{ + class hlc_g3_base; + class hlc_rifle_g3sg1: hlc_g3_base + { + ACE_barrelTwist=12; + ACE_barrelLength=17.700001; + }; + class hlc_rifle_psg1: hlc_rifle_g3sg1 + { + ACE_barrelTwist=12; + ACE_barrelLength=25.6; + }; + class hlc_rifle_g3a3: hlc_rifle_g3sg1 + { + ACE_barrelTwist=12; + ACE_barrelLength=17.700001; + }; + class hlc_rifle_g3a3ris: hlc_rifle_g3a3 + { + ACE_barrelTwist=12; + ACE_barrelLength=17.700001; + }; + class hlc_rifle_g3ka4: hlc_rifle_g3a3 + { + ACE_barrelTwist=12; + ACE_barrelLength=12.4; + }; + class HLC_Rifle_g3ka4_GL: hlc_rifle_g3ka4 + { + ACE_barrelTwist=12; + ACE_barrelLength=12.4; + }; + class hlc_rifle_hk51: hlc_rifle_g3sg1 + { + ACE_barrelTwist=12; + ACE_barrelLength=8.3100004; + }; + class hlc_rifle_hk53: hlc_rifle_g3sg1 + { + ACE_barrelTwist=7; + ACE_barrelLength=8.3100004; + }; +}; \ No newline at end of file diff --git a/optionals/hlcmods_g3_comp/config.cpp b/optionals/hlcmods_g3_comp/config.cpp new file mode 100644 index 0000000000..6b79486364 --- /dev/null +++ b/optionals/hlcmods_g3_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_g3"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_g3_comp/script_component.hpp b/optionals/hlcmods_g3_comp/script_component.hpp new file mode 100644 index 0000000000..642977f87b --- /dev/null +++ b/optionals/hlcmods_g3_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_g3_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 9078eed6bbad7c9623bd2207731610687e78f757 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:15:28 +0200 Subject: [PATCH 64/66] Added optional hlcmods_m14 compatibility pbo --- optionals/hlcmods_m14_comp/CfgWeapons.hpp | 15 +++++++++++++++ optionals/hlcmods_m14_comp/config.cpp | 14 ++++++++++++++ optionals/hlcmods_m14_comp/script_component.hpp | 5 +++++ 3 files changed, 34 insertions(+) create mode 100644 optionals/hlcmods_m14_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_m14_comp/config.cpp create mode 100644 optionals/hlcmods_m14_comp/script_component.hpp diff --git a/optionals/hlcmods_m14_comp/CfgWeapons.hpp b/optionals/hlcmods_m14_comp/CfgWeapons.hpp new file mode 100644 index 0000000000..a0aa6459fa --- /dev/null +++ b/optionals/hlcmods_m14_comp/CfgWeapons.hpp @@ -0,0 +1,15 @@ + +class CfgWeapons +{ + class Rifle_Base_F; + class hlc_M14_base: Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class hlc_rifle_m14sopmod: hlc_rifle_M14 + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; +}; diff --git a/optionals/hlcmods_m14_comp/config.cpp b/optionals/hlcmods_m14_comp/config.cpp new file mode 100644 index 0000000000..cdf11a7db1 --- /dev/null +++ b/optionals/hlcmods_m14_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_m14"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_m14_comp/script_component.hpp b/optionals/hlcmods_m14_comp/script_component.hpp new file mode 100644 index 0000000000..a29b751195 --- /dev/null +++ b/optionals/hlcmods_m14_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_m14_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From b405f17df2e9f4f159a9bf7128ba182249567b02 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:19:18 +0200 Subject: [PATCH 65/66] Added missing ; --- addons/ballistics/CfgAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 54be0cc570..c2d6f0147a 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -445,7 +445,7 @@ class CfgAmmo { class ACE_762x39_Ball : B_762x51_Ball { airFriction=-0.0015168; hit=12; - caliber=1.5 + caliber=1.5; typicalSpeed=716; ACE_caliber=0.308; ACE_bulletLength=1.14; From afccc3a44b232a8c31c9783ab9a11c012b187723 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:27:26 +0200 Subject: [PATCH 66/66] Added missing base classes --- optionals/hlcmods_ak_comp/CfgWeapons.hpp | 1 + optionals/hlcmods_m14_comp/CfgWeapons.hpp | 1 + 2 files changed, 2 insertions(+) diff --git a/optionals/hlcmods_ak_comp/CfgWeapons.hpp b/optionals/hlcmods_ak_comp/CfgWeapons.hpp index ef9c7a6beb..51a86e42cf 100644 --- a/optionals/hlcmods_ak_comp/CfgWeapons.hpp +++ b/optionals/hlcmods_ak_comp/CfgWeapons.hpp @@ -1,6 +1,7 @@ class CfgWeapons { class hlc_ak_base; + class hlc_rifle_ak12; class hlc_rifle_ak74: hlc_ak_base { ACE_barrelTwist=7.8699999; diff --git a/optionals/hlcmods_m14_comp/CfgWeapons.hpp b/optionals/hlcmods_m14_comp/CfgWeapons.hpp index a0aa6459fa..01a67ff063 100644 --- a/optionals/hlcmods_m14_comp/CfgWeapons.hpp +++ b/optionals/hlcmods_m14_comp/CfgWeapons.hpp @@ -2,6 +2,7 @@ class CfgWeapons { class Rifle_Base_F; + class hlc_rifle_M14; class hlc_M14_base: Rifle_Base_F { ACE_barrelTwist=12;